From 66949b5edd1a1ece9bd5a4d9906ecfe2b5880f96 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Mon, 19 Aug 2024 09:38:31 +0000 Subject: [PATCH] build based on ef1100d --- stable | 2 +- v0.8 | 2 +- v0.8.7/.documenter-siteinfo.json | 1 + v0.8.7/assets/documenter.js | 1059 ++ v0.8.7/assets/favicon.ico | Bin 0 -> 15406 bytes .../assets/solution_000040_scalar_resized.png | Bin 0 -> 94699 bytes v0.8.7/assets/themes/catppuccin-frappe.css | 1 + v0.8.7/assets/themes/catppuccin-latte.css | 1 + v0.8.7/assets/themes/catppuccin-macchiato.css | 1 + v0.8.7/assets/themes/catppuccin-mocha.css | 1 + v0.8.7/assets/themes/documenter-dark.css | 7 + v0.8.7/assets/themes/documenter-light.css | 9 + v0.8.7/assets/themeswap.js | 84 + v0.8.7/assets/trixi.drawio | 1 + v0.8.7/assets/warner.js | 52 + v0.8.7/authors/index.html | 2 + v0.8.7/callbacks/index.html | 15 + v0.8.7/changelog/index.html | 2 + v0.8.7/changelog_tmp/index.html | 2 + v0.8.7/code_of_conduct/index.html | 2 + v0.8.7/contributing/index.html | 38 + v0.8.7/conventions/index.html | 26 + v0.8.7/development/index.html | 42 + v0.8.7/github-git/index.html | 44 + v0.8.7/index.html | 114 + v0.8.7/license/index.html | 2 + v0.8.7/meshes/dgmulti_mesh/index.html | 8 + v0.8.7/meshes/p4est_mesh/index.html | 348 + v0.8.7/meshes/structured_mesh/index.html | 2 + v0.8.7/meshes/tree_mesh/index.html | 2 + .../meshes/unstructured_quad_mesh/index.html | 79 + v0.8.7/multi-physics_coupling/index.html | 2 + v0.8.7/objects.inv | Bin 0 -> 16296 bytes v0.8.7/overview/index.html | 2 + v0.8.7/parallelization/index.html | 47 + v0.8.7/performance/index.html | 57 + v0.8.7/reference-trixi/index.html | 644 ++ v0.8.7/reference-trixi2vtk/index.html | 6 + v0.8.7/reference-trixibase/index.html | 10 + v0.8.7/restart/index.html | 6 + v0.8.7/search_index.js | 3 + v0.8.7/siteinfo.js | 1 + v0.8.7/styleguide/index.html | 2 + v0.8.7/testing/index.html | 6 + v0.8.7/time_integration/index.html | 2 + v0.8.7/troubleshooting/index.html | 47 + v0.8.7/tutorials/DGMulti_1/21516b5b.svg | 4825 ++++++++ v0.8.7/tutorials/DGMulti_1/35171e3f.svg | 6330 +++++++++++ v0.8.7/tutorials/DGMulti_1/5e2f3dd8.svg | 8390 ++++++++++++++ v0.8.7/tutorials/DGMulti_1/d7389022.svg | 5166 +++++++++ v0.8.7/tutorials/DGMulti_1/e357aeee.svg | 6325 +++++++++++ v0.8.7/tutorials/DGMulti_1/e6f8cdbd.svg | 5570 +++++++++ v0.8.7/tutorials/DGMulti_1/index.html | 309 + v0.8.7/tutorials/DGMulti_2/index.html | 37 + v0.8.7/tutorials/DGSEM_FluxDiff/5b21be8b.svg | 4119 +++++++ v0.8.7/tutorials/DGSEM_FluxDiff/ef97aff0.svg | 2874 +++++ v0.8.7/tutorials/DGSEM_FluxDiff/index.html | 167 + .../adaptive_mesh_refinement/4a9757f6.svg | 1528 +++ .../adaptive_mesh_refinement/index.html | 92 + .../adding_new_parabolic_terms/abcc9dd1.svg | 764 ++ .../adding_new_parabolic_terms/index.html | 95 + .../adding_new_scalar_equations/049e0dba.svg | 43 + .../adding_new_scalar_equations/26c54e74.svg | 47 + .../adding_new_scalar_equations/5d24a474.svg | 43 + .../adding_new_scalar_equations/96bfeb93.svg | 44 + .../adding_new_scalar_equations/ebe018c6.svg | 43 + .../adding_new_scalar_equations/index.html | 206 + .../4614a9d2.svg | 80 + .../index.html | 244 + .../23c198cd.svg | 411 + .../index.html | 49 + .../custom_semidiscretization/06117d2f.svg | 50 + .../custom_semidiscretization/3bf457bc.svg | 46 + .../custom_semidiscretization/c18b5716.svg | 48 + .../custom_semidiscretization/cdf7fd84.svg | 50 + .../custom_semidiscretization/d621de02.svg | 50 + .../custom_semidiscretization/index.html | 598 + .../differentiable_programming/0f3598b0.svg | 46 + .../differentiable_programming/48c391c5.svg | 1077 ++ .../differentiable_programming/60945a02.svg | 817 ++ .../differentiable_programming/7497fd70.svg | 46 + .../differentiable_programming/76f8df51.svg | 809 ++ .../differentiable_programming/7bb14d34.svg | 1582 +++ .../differentiable_programming/9cb38e86.svg | 2100 ++++ .../differentiable_programming/ebb68b75.svg | 307 + .../differentiable_programming/index.html | 210 + .../first_steps/changing_trixi/index.html | 12 + .../create_first_setup/a20256d9.svg | 904 ++ .../create_first_setup/b0d1fb9f.svg | 1150 ++ .../first_steps/create_first_setup/index.html | 319 + .../first_steps/getting_started/9b57d81c.svg | 4131 +++++++ .../first_steps/getting_started/a23a0127.svg | 743 ++ .../first_steps/getting_started/index.html | 227 + v0.8.7/tutorials/hohqmesh_tutorial/index.html | 306 + v0.8.7/tutorials/introduction/index.html | 2 + .../non_periodic_boundaries/4d17db66.svg | 50 + .../non_periodic_boundaries/7bb992de.gif | Bin 0 -> 1129973 bytes .../non_periodic_boundaries/index.html | 90 + v0.8.7/tutorials/notebooks/DGMulti_1.ipynb | 478 + v0.8.7/tutorials/notebooks/DGMulti_2.ipynb | 157 + .../tutorials/notebooks/DGSEM_FluxDiff.ipynb | 525 + .../notebooks/adaptive_mesh_refinement.ipynb | 410 + .../adding_new_parabolic_terms.ipynb | 316 + .../adding_new_scalar_equations.ipynb | 451 + .../adding_nonconservative_equation.ipynb | 455 + .../behind_the_scenes_simulation_setup.ipynb | 628 ++ .../notebooks/custom_semidiscretization.ipynb | 673 ++ .../differentiable_programming.ipynb | 956 ++ .../first_steps/changing_trixi.ipynb | 230 + .../first_steps/create_first_setup.ipynb | 685 ++ .../first_steps/getting_started.ipynb | 466 + .../notebooks/hohqmesh_tutorial.ipynb | 1034 ++ .../notebooks/non_periodic_boundaries.ipynb | 348 + .../tutorials/notebooks/p4est_from_gmsh.ipynb | 559 + .../tutorials/notebooks/parabolic_terms.ipynb | 264 + .../scalar_linear_advection_1d.ipynb | 976 ++ .../tutorials/notebooks/shock_capturing.ipynb | 503 + .../notebooks/structured_mesh_mapping.ipynb | 451 + .../notebooks/subcell_shock_capturing.ipynb | 633 ++ .../tutorials/notebooks/time_stepping.ipynb | 195 + v0.8.7/tutorials/notebooks/upwind_fdsbp.ipynb | 219 + .../out/ice_cream_curved_sides.control | 65 + .../tutorials/out/ice_cream_curved_sides.mesh | 1778 +++ .../tutorials/out/ice_cream_curved_sides.tec | 474 + .../tutorials/out/ice_cream_curved_sides.txt | 222 + .../out/ice_cream_straight_sides.control | 57 + .../out/ice_cream_straight_sides.mesh | 1722 +++ .../out/ice_cream_straight_sides.tec | 550 + .../out/ice_cream_straight_sides.txt | 258 + v0.8.7/tutorials/out/mesh.h5 | Bin 0 -> 135136 bytes v0.8.7/tutorials/out/restart_000000050.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/restart_000000100.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/restart_000000150.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/restart_000000180.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000.pvd | 24 + v0.8.7/tutorials/out/solution_000000000.h5 | Bin 0 -> 659456 bytes v0.8.7/tutorials/out/solution_000000000.vtu | Bin 0 -> 12694 bytes .../out/solution_000000000_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000010.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000010.vtu | Bin 0 -> 18977 bytes .../out/solution_000000010_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000020.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000020.vtu | Bin 0 -> 19015 bytes .../out/solution_000000020_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000030.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000030.vtu | Bin 0 -> 19047 bytes .../out/solution_000000030_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000040.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000040.vtu | Bin 0 -> 19087 bytes .../out/solution_000000040_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000050.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000050.vtu | Bin 0 -> 19113 bytes .../out/solution_000000050_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000060.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000060.vtu | Bin 0 -> 19133 bytes .../out/solution_000000060_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000065.h5 | Bin 0 -> 205696 bytes v0.8.7/tutorials/out/solution_000000070.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000070.vtu | Bin 0 -> 19152 bytes .../out/solution_000000070_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000080.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000080.vtu | Bin 0 -> 19171 bytes .../out/solution_000000080_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000090.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000090.vtu | Bin 0 -> 19192 bytes .../out/solution_000000090_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000100.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000100.vtu | Bin 0 -> 19225 bytes .../out/solution_000000100_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000110.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000110.vtu | Bin 0 -> 19195 bytes .../out/solution_000000110_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000120.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000120.vtu | Bin 0 -> 19154 bytes .../out/solution_000000120_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000130.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000130.vtu | Bin 0 -> 19181 bytes .../out/solution_000000130_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000140.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000140.vtu | Bin 0 -> 19177 bytes .../out/solution_000000140_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000150.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000150.vtu | Bin 0 -> 19179 bytes .../out/solution_000000150_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000160.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000160.vtu | Bin 0 -> 19184 bytes .../out/solution_000000160_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000170.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000170.vtu | Bin 0 -> 19207 bytes .../out/solution_000000170_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000180.h5 | Bin 0 -> 11976 bytes v0.8.7/tutorials/out/solution_000000180.vtu | Bin 0 -> 19179 bytes .../out/solution_000000180_celldata.vtu | Bin 0 -> 6748 bytes v0.8.7/tutorials/out/solution_000000532.h5 | Bin 0 -> 659456 bytes .../out/solution_000000_celldata.pvd | 24 + v0.8.7/tutorials/p4est_from_gmsh/index.html | 366 + v0.8.7/tutorials/parabolic_terms/b046ec06.svg | 736 ++ v0.8.7/tutorials/parabolic_terms/index.html | 131 + .../scalar_linear_advection_1d/bb5a6c21.svg | 46 + .../scalar_linear_advection_1d/d2c2088a.svg | 48 + .../scalar_linear_advection_1d/e835d36d.svg | 46 + .../scalar_linear_advection_1d/eec42797.svg | 54 + .../scalar_linear_advection_1d/f1380281.svg | 48 + .../scalar_linear_advection_1d/f80a867a.svg | 46 + .../scalar_linear_advection_1d/index.html | 295 + v0.8.7/tutorials/shock_capturing/b92ef147.svg | 4448 ++++++++ v0.8.7/tutorials/shock_capturing/index.html | 114 + .../structured_mesh_mapping/19a5f301.svg | 9978 +++++++++++++++++ .../structured_mesh_mapping/445ea963.svg | 5600 +++++++++ .../structured_mesh_mapping/60a87ef7.svg | 3800 +++++++ .../structured_mesh_mapping/index.html | 199 + .../subcell_shock_capturing/01e026df.svg | 4754 ++++++++ .../subcell_shock_capturing/index.html | 321 + v0.8.7/tutorials/time_stepping/index.html | 27 + v0.8.7/tutorials/upwind_fdsbp/index.html | 65 + v0.8.7/visualization/index.html | 91 + versions.js | 2 +- 217 files changed, 114353 insertions(+), 3 deletions(-) create mode 100644 v0.8.7/.documenter-siteinfo.json create mode 100644 v0.8.7/assets/documenter.js create mode 100644 v0.8.7/assets/favicon.ico create mode 100644 v0.8.7/assets/solution_000040_scalar_resized.png create mode 100644 v0.8.7/assets/themes/catppuccin-frappe.css create mode 100644 v0.8.7/assets/themes/catppuccin-latte.css create mode 100644 v0.8.7/assets/themes/catppuccin-macchiato.css create mode 100644 v0.8.7/assets/themes/catppuccin-mocha.css create mode 100644 v0.8.7/assets/themes/documenter-dark.css create mode 100644 v0.8.7/assets/themes/documenter-light.css create mode 100644 v0.8.7/assets/themeswap.js create mode 100644 v0.8.7/assets/trixi.drawio create mode 100644 v0.8.7/assets/warner.js create mode 100644 v0.8.7/authors/index.html create mode 100644 v0.8.7/callbacks/index.html create mode 100644 v0.8.7/changelog/index.html create mode 100644 v0.8.7/changelog_tmp/index.html create mode 100644 v0.8.7/code_of_conduct/index.html create mode 100644 v0.8.7/contributing/index.html create mode 100644 v0.8.7/conventions/index.html create mode 100644 v0.8.7/development/index.html create mode 100644 v0.8.7/github-git/index.html create mode 100644 v0.8.7/index.html create mode 100644 v0.8.7/license/index.html create mode 100644 v0.8.7/meshes/dgmulti_mesh/index.html create mode 100644 v0.8.7/meshes/p4est_mesh/index.html create mode 100644 v0.8.7/meshes/structured_mesh/index.html create mode 100644 v0.8.7/meshes/tree_mesh/index.html create mode 100644 v0.8.7/meshes/unstructured_quad_mesh/index.html create mode 100644 v0.8.7/multi-physics_coupling/index.html create mode 100644 v0.8.7/objects.inv create mode 100644 v0.8.7/overview/index.html create mode 100644 v0.8.7/parallelization/index.html create mode 100644 v0.8.7/performance/index.html create mode 100644 v0.8.7/reference-trixi/index.html create mode 100644 v0.8.7/reference-trixi2vtk/index.html create mode 100644 v0.8.7/reference-trixibase/index.html create mode 100644 v0.8.7/restart/index.html create mode 100644 v0.8.7/search_index.js create mode 100644 v0.8.7/siteinfo.js create mode 100644 v0.8.7/styleguide/index.html create mode 100644 v0.8.7/testing/index.html create mode 100644 v0.8.7/time_integration/index.html create mode 100644 v0.8.7/troubleshooting/index.html create mode 100644 v0.8.7/tutorials/DGMulti_1/21516b5b.svg create mode 100644 v0.8.7/tutorials/DGMulti_1/35171e3f.svg create mode 100644 v0.8.7/tutorials/DGMulti_1/5e2f3dd8.svg create mode 100644 v0.8.7/tutorials/DGMulti_1/d7389022.svg create mode 100644 v0.8.7/tutorials/DGMulti_1/e357aeee.svg create mode 100644 v0.8.7/tutorials/DGMulti_1/e6f8cdbd.svg create mode 100644 v0.8.7/tutorials/DGMulti_1/index.html create mode 100644 v0.8.7/tutorials/DGMulti_2/index.html create mode 100644 v0.8.7/tutorials/DGSEM_FluxDiff/5b21be8b.svg create mode 100644 v0.8.7/tutorials/DGSEM_FluxDiff/ef97aff0.svg create mode 100644 v0.8.7/tutorials/DGSEM_FluxDiff/index.html create mode 100644 v0.8.7/tutorials/adaptive_mesh_refinement/4a9757f6.svg create mode 100644 v0.8.7/tutorials/adaptive_mesh_refinement/index.html create mode 100644 v0.8.7/tutorials/adding_new_parabolic_terms/abcc9dd1.svg create mode 100644 v0.8.7/tutorials/adding_new_parabolic_terms/index.html create mode 100644 v0.8.7/tutorials/adding_new_scalar_equations/049e0dba.svg create mode 100644 v0.8.7/tutorials/adding_new_scalar_equations/26c54e74.svg create mode 100644 v0.8.7/tutorials/adding_new_scalar_equations/5d24a474.svg create mode 100644 v0.8.7/tutorials/adding_new_scalar_equations/96bfeb93.svg create mode 100644 v0.8.7/tutorials/adding_new_scalar_equations/ebe018c6.svg create mode 100644 v0.8.7/tutorials/adding_new_scalar_equations/index.html create mode 100644 v0.8.7/tutorials/adding_nonconservative_equation/4614a9d2.svg create mode 100644 v0.8.7/tutorials/adding_nonconservative_equation/index.html create mode 100644 v0.8.7/tutorials/behind_the_scenes_simulation_setup/23c198cd.svg create mode 100644 v0.8.7/tutorials/behind_the_scenes_simulation_setup/index.html create mode 100644 v0.8.7/tutorials/custom_semidiscretization/06117d2f.svg create mode 100644 v0.8.7/tutorials/custom_semidiscretization/3bf457bc.svg create mode 100644 v0.8.7/tutorials/custom_semidiscretization/c18b5716.svg create mode 100644 v0.8.7/tutorials/custom_semidiscretization/cdf7fd84.svg create mode 100644 v0.8.7/tutorials/custom_semidiscretization/d621de02.svg create mode 100644 v0.8.7/tutorials/custom_semidiscretization/index.html create mode 100644 v0.8.7/tutorials/differentiable_programming/0f3598b0.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/48c391c5.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/60945a02.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/7497fd70.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/76f8df51.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/7bb14d34.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/9cb38e86.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/ebb68b75.svg create mode 100644 v0.8.7/tutorials/differentiable_programming/index.html create mode 100644 v0.8.7/tutorials/first_steps/changing_trixi/index.html create mode 100644 v0.8.7/tutorials/first_steps/create_first_setup/a20256d9.svg create mode 100644 v0.8.7/tutorials/first_steps/create_first_setup/b0d1fb9f.svg create mode 100644 v0.8.7/tutorials/first_steps/create_first_setup/index.html create mode 100644 v0.8.7/tutorials/first_steps/getting_started/9b57d81c.svg create mode 100644 v0.8.7/tutorials/first_steps/getting_started/a23a0127.svg create mode 100644 v0.8.7/tutorials/first_steps/getting_started/index.html create mode 100644 v0.8.7/tutorials/hohqmesh_tutorial/index.html create mode 100644 v0.8.7/tutorials/introduction/index.html create mode 100644 v0.8.7/tutorials/non_periodic_boundaries/4d17db66.svg create mode 100644 v0.8.7/tutorials/non_periodic_boundaries/7bb992de.gif create mode 100644 v0.8.7/tutorials/non_periodic_boundaries/index.html create mode 100644 v0.8.7/tutorials/notebooks/DGMulti_1.ipynb create mode 100644 v0.8.7/tutorials/notebooks/DGMulti_2.ipynb create mode 100644 v0.8.7/tutorials/notebooks/DGSEM_FluxDiff.ipynb create mode 100644 v0.8.7/tutorials/notebooks/adaptive_mesh_refinement.ipynb create mode 100644 v0.8.7/tutorials/notebooks/adding_new_parabolic_terms.ipynb create mode 100644 v0.8.7/tutorials/notebooks/adding_new_scalar_equations.ipynb create mode 100644 v0.8.7/tutorials/notebooks/adding_nonconservative_equation.ipynb create mode 100644 v0.8.7/tutorials/notebooks/behind_the_scenes_simulation_setup.ipynb create mode 100644 v0.8.7/tutorials/notebooks/custom_semidiscretization.ipynb create mode 100644 v0.8.7/tutorials/notebooks/differentiable_programming.ipynb create mode 100644 v0.8.7/tutorials/notebooks/first_steps/changing_trixi.ipynb create mode 100644 v0.8.7/tutorials/notebooks/first_steps/create_first_setup.ipynb create mode 100644 v0.8.7/tutorials/notebooks/first_steps/getting_started.ipynb create mode 100644 v0.8.7/tutorials/notebooks/hohqmesh_tutorial.ipynb create mode 100644 v0.8.7/tutorials/notebooks/non_periodic_boundaries.ipynb create mode 100644 v0.8.7/tutorials/notebooks/p4est_from_gmsh.ipynb create mode 100644 v0.8.7/tutorials/notebooks/parabolic_terms.ipynb create mode 100644 v0.8.7/tutorials/notebooks/scalar_linear_advection_1d.ipynb create mode 100644 v0.8.7/tutorials/notebooks/shock_capturing.ipynb create mode 100644 v0.8.7/tutorials/notebooks/structured_mesh_mapping.ipynb create mode 100644 v0.8.7/tutorials/notebooks/subcell_shock_capturing.ipynb create mode 100644 v0.8.7/tutorials/notebooks/time_stepping.ipynb create mode 100644 v0.8.7/tutorials/notebooks/upwind_fdsbp.ipynb create mode 100644 v0.8.7/tutorials/out/ice_cream_curved_sides.control create mode 100644 v0.8.7/tutorials/out/ice_cream_curved_sides.mesh create mode 100644 v0.8.7/tutorials/out/ice_cream_curved_sides.tec create mode 100644 v0.8.7/tutorials/out/ice_cream_curved_sides.txt create mode 100644 v0.8.7/tutorials/out/ice_cream_straight_sides.control create mode 100644 v0.8.7/tutorials/out/ice_cream_straight_sides.mesh create mode 100644 v0.8.7/tutorials/out/ice_cream_straight_sides.tec create mode 100644 v0.8.7/tutorials/out/ice_cream_straight_sides.txt create mode 100644 v0.8.7/tutorials/out/mesh.h5 create mode 100644 v0.8.7/tutorials/out/restart_000000050.h5 create mode 100644 v0.8.7/tutorials/out/restart_000000100.h5 create mode 100644 v0.8.7/tutorials/out/restart_000000150.h5 create mode 100644 v0.8.7/tutorials/out/restart_000000180.h5 create mode 100755 v0.8.7/tutorials/out/solution_000000.pvd create mode 100644 v0.8.7/tutorials/out/solution_000000000.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000000.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000000_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000010.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000010.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000010_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000020.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000020.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000020_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000030.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000030.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000030_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000040.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000040.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000040_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000050.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000050.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000050_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000060.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000060.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000060_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000065.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000070.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000070.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000070_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000080.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000080.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000080_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000090.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000090.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000090_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000100.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000100.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000100_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000110.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000110.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000110_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000120.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000120.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000120_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000130.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000130.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000130_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000140.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000140.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000140_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000150.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000150.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000150_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000160.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000160.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000160_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000170.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000170.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000170_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000180.h5 create mode 100644 v0.8.7/tutorials/out/solution_000000180.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000180_celldata.vtu create mode 100644 v0.8.7/tutorials/out/solution_000000532.h5 create mode 100755 v0.8.7/tutorials/out/solution_000000_celldata.pvd create mode 100644 v0.8.7/tutorials/p4est_from_gmsh/index.html create mode 100644 v0.8.7/tutorials/parabolic_terms/b046ec06.svg create mode 100644 v0.8.7/tutorials/parabolic_terms/index.html create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/bb5a6c21.svg create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/d2c2088a.svg create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/e835d36d.svg create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/eec42797.svg create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/f1380281.svg create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/f80a867a.svg create mode 100644 v0.8.7/tutorials/scalar_linear_advection_1d/index.html create mode 100644 v0.8.7/tutorials/shock_capturing/b92ef147.svg create mode 100644 v0.8.7/tutorials/shock_capturing/index.html create mode 100644 v0.8.7/tutorials/structured_mesh_mapping/19a5f301.svg create mode 100644 v0.8.7/tutorials/structured_mesh_mapping/445ea963.svg create mode 100644 v0.8.7/tutorials/structured_mesh_mapping/60a87ef7.svg create mode 100644 v0.8.7/tutorials/structured_mesh_mapping/index.html create mode 100644 v0.8.7/tutorials/subcell_shock_capturing/01e026df.svg create mode 100644 v0.8.7/tutorials/subcell_shock_capturing/index.html create mode 100644 v0.8.7/tutorials/time_stepping/index.html create mode 100644 v0.8.7/tutorials/upwind_fdsbp/index.html create mode 100644 v0.8.7/visualization/index.html diff --git a/stable b/stable index a13c8b393f..d2781879e9 120000 --- a/stable +++ b/stable @@ -1 +1 @@ -v0.8.6 \ No newline at end of file +v0.8.7 \ No newline at end of file diff --git a/v0.8 b/v0.8 index a13c8b393f..d2781879e9 120000 --- a/v0.8 +++ b/v0.8 @@ -1 +1 @@ -v0.8.6 \ No newline at end of file +v0.8.7 \ No newline at end of file diff --git a/v0.8.7/.documenter-siteinfo.json b/v0.8.7/.documenter-siteinfo.json new file mode 100644 index 0000000000..79249a185b --- /dev/null +++ b/v0.8.7/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-08-19T09:37:32","documenter_version":"1.5.0"}} \ No newline at end of file diff --git a/v0.8.7/assets/documenter.js b/v0.8.7/assets/documenter.js new file mode 100644 index 0000000000..b2bdd43eeb --- /dev/null +++ b/v0.8.7/assets/documenter.js @@ -0,0 +1,1059 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/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.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.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.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/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 + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "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-xmark"); + 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-xmark"); + }, 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($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // 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 + const stopWords = new Set([ + "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", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * RegX escape function from MDN + * Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
`; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + searchstring = escapeRegExp(querystring); + let textindex = new RegExp(`${searchstring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(searchstring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
+
${escape(result.title)}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + combineWith: "AND", + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; + + search_result_container = ` +
+ ${modal_filters} + ${search_divider} + ${result_count} +
+ ${search_results} +
+
+ `; + } else { + search_result_container = ` +
+ ${modal_filters} + ${search_divider} +
0 result(s)
+
+
No result found!
+ `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
+ Filters: + ${str} +
`; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +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($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
Type something to get started!
+ `; + + let search_modal_footer = ` + + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
Type something to get started!
+ `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +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($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // 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; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +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/v0.8.7/assets/favicon.ico b/v0.8.7/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be7e49a9c80a73367beb61669233f572ce97c2a2 GIT binary patch literal 15406 zcmeI(WzZeP5(eNC2yO`wT!IG=PT}rQxI==wy9Rf65AN7|!mN}qi4N&Wix;=ilhRU4EtT%P^G>hQAAkIjrkZN1^zFCb=HLGL;)^fp z&!2z(dG7z%V~^#&1%t_T&N=6#x8Hs{x9iuhUwZ!e=W{!K@e&mM{We#hK7G<^tF4yy z*kg}0)>vbuXPBSdctk3)Y`|syxeLwr`vpWA>U0r!@^4@*--RXe`9!S6b z`fDEViYu;2H{N(-Zu`LpALQxH_r@D<)cfCc*Ij9qRaQx(jW$}A*LPRnzJ1dgYpju; ze){S3!w)~y`7lVCf4{Xq`Q($+vBw^pKK=C5bk$W?rP*eiEzL8}Jn7<#FHZN}cVB)- zzhsMb()Z_|f6im$kDjc>7F%qQPCMI^ci<($`;qo#^qy4?nESj|b%aA%`52w%&T{ zbm*anrsIw~E=@Pxbh#aV@xH?jJLGZcU;8h={IY(%@WKn}j5E$iY~s{YPfbT0aYR~S zg%#3{JMNgErJRf%0VR<|{ zeCnyE(nAkDG=%;K4H}f!z*^D&O*h??dEIr_UDJUF9+>-)`JH#($+Eliiy$^jmv6oG zR=%^DgfTF~{U*x+=?S{a$(Hl`My6_UO(> z-RYOk{bti_!rGfR+BF1)p?C>rdKcG1#RZ?5(G54;ko}M^4(-JTMjmg)7x?+` z!w+Yj#@z0+&N^$l{PN2)ZvFJrPxT?$tnV<9-pKp-0e$Y=8%bO-MV$l`2dV5kL7v3`R1$hx%~3WXPK;wF$R5DQ^eooLUINExbn&?r!BYKGUKIu?3P<@$rvWTl;gO=Qt=)yatJ!X z58G(8{xPrnci(-N{UrJrL;fNE+jiS+^L+49j6|?z-y|eUnQbC%@c$^UZT^EgzFhPBz(OId;Hvc?I3U2YI4+ zh99;Q^LrMf%!fZRmnkqrJ2JBc@6J5)%-rmtgAU4h6nV`_7vvr=U_jOf{t!RZ@4*Kj z%=T@5xM@ytvJuIZzl)ubypq;)y5D7{Df@4ikg;Dp~O^PhVn* zC9?fT{A@SB^)|n8_|+ndERtiJb*5jsSasD^vu`c7*kXD78D^Lv`&1bN=m>T#x7>0$ zKgW+N{12~w(_2^Jo8>#ZIQ#6ga}12Qs#Z{I$O$gE;DT%mv&=F}UTZzm{WI_g{YbCEE&q@pJXnS7#sKr)#aXR<;Xvr4QS@=9+7=A8fqw#<~5G zM;@8w#Dm%`sMY-PIsQ#vWc~Kud+!|Yt(ADs=fofN@YGXJo#O#JhcCtszs5h^7|YrQ zwVI#oF?YT&<@jSQEe_7V(XWk(CMfl+x3of`|J^%Kee1nSo&YsCvUw!4(5Hz&& zn=8opDBg+d;;=Y@AHGoLH~N+Dt>&-xHD=6J9;4jOcbLXUS6XSMywAfHF1qNVYzO6j zp3M(S*mCuvyYf3Vw0yPv&ic#2ypxB+m-2Ug)Xnmx^80v(kwt#_KTY;YiY?k&|Ke)3 zPXf2;>%Vca75gaiI(r#v*-qzC2g3VS?Zt+hZ@#%|e*fBU^A_CEvF9(TwO% z?uUQ+Z?+dz?ynDwkNxHHx9W4J{2NPsx7%*JWqsPKkSEzoF-9vAPr`=8-gX4v;b+vj zt=f0OzqlcXaZWJou*24QnQ+1ha~x?mk9;8dbz-Z0L_X8b_Q_S{Umtme*lsR+_e(Ch zWS!^GW89O`!Vu-aU7|Wn(fQx2Bm)*>0eGG-!i8BivC6%am0o)*h{iE zp>|dm$gAaZWui~#Lim@@kyGvCV&`~ux8}}BU_QAT>7qQY=PLiz?|##Z+AVB`E!#(c zhog)#O5S%Iee}`ucXHaBQtO9bxDP0DQvJn)Aa$-asA7_Lb?im%!M^Fp8LItOZPfI^SM;}T&O3vG|M(sEu&em(ZVYy)-d9IN zZ0Ll4H6NZDUFvbQ8lBi5m#2$Y^3otawEOP6=eXe;d%=(Q@>=`6fdTpien$W5-CS~F zIkMcS9VWNpfAYyEuh)s}T+S^Q58a#FzIdG1j6eSP^)m?V>?7Eh?keo1d{xJ&%3yqJ zF7~(LA5V1GNcU^6y>{L!g(t|Eah2!8SMT1v^B8Op&ae@&*#3qb$$EL`(%!n1bx*1}Q|84U z8$XommT@iSpy%qDp))CGW^BfHSYPfN`|2@9t9v{Ct9{Ag95ZZ6UFFP99ua%C(Fbqr zIP!n-!+ERN*Q-~rY)A44d3c%lJDni-@4Gl*KS-=D$M>P--WE-=U6);OcF7fW8YV?WM*7$4)qU4;$dlO8fM5q)X7Bb&;FFl;+{`|<+Q;6my(@7*T;&I9x z_SofjE_iP}5*MPsyHpEAJjQ-}sxMG6y6*lHl^EtD&|4C1=-sWt_Ke_Ew!3ccQ zJ3F!Vk%Jfq(Y<;2D9quTY@B@h;h*iZ4cPCjg>T4R^_jFdOZIn8?2WuIO)VgQ=O1u` zymDLmL}mWH!yCK6pEDjjk)cZRs51Zh;>S6mGgY}MUE2dhY>qwI&z1{bfBp4&|5W~> zK2}dVi|$waO#t5zTkI_c86U4?k%Qw4dB@+`0sXqj%I-qO7$ff9(=B`QOb%y{>P+h% ze**xQ0vq9OoXPlmFZ|0(=*t*l*a;_`ko}wP=vd7Ywqh;h&sD-djN*s%Y^|H|9evHI z5BtThTwi_5e#yaKVYTxsdO$FnFFO-b3&0?J2ALBN{MxMll^ zvD)2@qaS=GFMXQ~s2+?-9Z2iPko zGMAbo;@dyr-#W2BYs;^li>vqHiajB*3XapI*u>Vv9`7Uf;J@C-)m7jc`SA%;@l5C9 z9c(q0wPshaAn2d)Z~e@R*pNEaIj^-=U(r7q+0lj@ZkREIJmZWrPMv=>9N!IMlVTaY zvJw7b40bf_w9{t1vNrKO`VB4r#?}X(u#Nrp+b`n``-iji2B&=&cl>Recm#9ARdFHC z`Q<=rXFQ1!@SsZU(^}EJ8jY@8=7y8bA;L$heH;BY2R-4>+|JqHvON#7iSzOt_SIF` z1Y3ujp2Z<~pZ%qoXP!CN$TQ6}Q?9|-VIwjo9<4#}X>PL6m9f011DGLh!+rHcTz;!_ z?CE*Of8nhfo!uD6m`GfJh1N)Y4>Q+WZ@rA8a77O4+zhse!RkLTjD54ADjC=KY7aO^ zo-&yS7Qzzi(Tw!tSA3K&T2FPi^$iOBiy_VxV2%A7XZx^{9nd=&=?|X5bor&dBylP9 z5M$D-Hhjrmam0i8J~Z}^FEI(GIqN2mcj{=ovn{pZfFe(W@%*@}up2oxY_V5rz4*R< z)`cGUrC954#;tWZ4tcij&gI!+l{)30+<2jXdSXL#18|5~g@=u?khw>WYxvQ|Ns_*kV zKH?j!=C|+z|KcA%U~l15_QAw6<3;RJ!|6*dHbh7GwN@@V60ZYS%Y0Rz;U`v+LGUhFf-WyC62LPoW?brKKMjPS-8n==j=#h2Pqr~I?GW+XOM z?Oz@ZQxV?`Ojkd`Dg2jn2716Vj8b31IepsEzrlatLwPP(&hHS}@rUHU{ytF*u@_M# zKFNQhef4|w_rJk^BmJ8{cqr?cP58~1)j04+JGRcxTdi}IcfUL3-<-|tzY+iCxy(@} z{PJmaH{T_P+yNHx1M!THyTj~O)G7a61-9_bD$yq$vgbxb=Cc0r&aPsAoZew3d=oF^ zNOCClFDI}1Rdo*hvqk&xtuFDG-&Na~*WXc9-^XwL1{S$b{N@+-1nuv{yYij>#W7d; UeY0mdNKupipZ>3bf2@K30B`TKH2?qr literal 0 HcmV?d00001 diff --git a/v0.8.7/assets/solution_000040_scalar_resized.png b/v0.8.7/assets/solution_000040_scalar_resized.png new file mode 100644 index 0000000000000000000000000000000000000000..e002208c46a98255909e1c7f2a46d6cc4d23c690 GIT binary patch literal 94699 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 X*Z*EY6QBbNtpFn@r7T$sJ-z)8BBdcc literal 0 HcmV?d00001 diff --git a/v0.8.7/assets/themes/catppuccin-frappe.css b/v0.8.7/assets/themes/catppuccin-frappe.css new file mode 100644 index 0000000000..54a5b77ea0 --- /dev/null +++ b/v0.8.7/assets/themes/catppuccin-frappe.css @@ -0,0 +1 @@ +html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .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:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus,html.theme--catppuccin-frappe .pagination-ellipsis:focus,html.theme--catppuccin-frappe .file-cta:focus,html.theme--catppuccin-frappe .file-name:focus,html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .is-focused.pagination-previous,html.theme--catppuccin-frappe .is-focused.pagination-next,html.theme--catppuccin-frappe .is-focused.pagination-link,html.theme--catppuccin-frappe .is-focused.pagination-ellipsis,html.theme--catppuccin-frappe .is-focused.file-cta,html.theme--catppuccin-frappe .is-focused.file-name,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-focused.button,html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active,html.theme--catppuccin-frappe .pagination-ellipsis:active,html.theme--catppuccin-frappe .file-cta:active,html.theme--catppuccin-frappe .file-name:active,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .is-active.pagination-previous,html.theme--catppuccin-frappe .is-active.pagination-next,html.theme--catppuccin-frappe .is-active.pagination-link,html.theme--catppuccin-frappe .is-active.pagination-ellipsis,html.theme--catppuccin-frappe .is-active.file-cta,html.theme--catppuccin-frappe .is-active.file-name,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .is-active.button{outline:none}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-ellipsis[disabled],html.theme--catppuccin-frappe .file-cta[disabled],html.theme--catppuccin-frappe .file-name[disabled],html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-frappe .file-name,html.theme--catppuccin-frappe fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe fieldset[disabled] .select select,html.theme--catppuccin-frappe .select fieldset[disabled] select,html.theme--catppuccin-frappe fieldset[disabled] .textarea,html.theme--catppuccin-frappe fieldset[disabled] .input,html.theme--catppuccin-frappe fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-frappe .tabs,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .breadcrumb,html.theme--catppuccin-frappe .file,html.theme--catppuccin-frappe .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-frappe .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--catppuccin-frappe .admonition:not(:last-child),html.theme--catppuccin-frappe .tabs:not(:last-child),html.theme--catppuccin-frappe .pagination:not(:last-child),html.theme--catppuccin-frappe .message:not(:last-child),html.theme--catppuccin-frappe .level:not(:last-child),html.theme--catppuccin-frappe .breadcrumb:not(:last-child),html.theme--catppuccin-frappe .block:not(:last-child),html.theme--catppuccin-frappe .title:not(:last-child),html.theme--catppuccin-frappe .subtitle:not(:last-child),html.theme--catppuccin-frappe .table-container:not(:last-child),html.theme--catppuccin-frappe .table:not(:last-child),html.theme--catppuccin-frappe .progress:not(:last-child),html.theme--catppuccin-frappe .notification:not(:last-child),html.theme--catppuccin-frappe .content:not(:last-child),html.theme--catppuccin-frappe .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .modal-close,html.theme--catppuccin-frappe .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before,html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .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--catppuccin-frappe .modal-close::before,html.theme--catppuccin-frappe .delete::before{height:2px;width:50%}html.theme--catppuccin-frappe .modal-close::after,html.theme--catppuccin-frappe .delete::after{height:50%;width:2px}html.theme--catppuccin-frappe .modal-close:hover,html.theme--catppuccin-frappe .delete:hover,html.theme--catppuccin-frappe .modal-close:focus,html.theme--catppuccin-frappe .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-frappe .modal-close:active,html.theme--catppuccin-frappe .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-frappe .is-small.modal-close,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-frappe .is-small.delete,html.theme--catppuccin-frappe #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--catppuccin-frappe .is-medium.modal-close,html.theme--catppuccin-frappe .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-frappe .is-large.modal-close,html.theme--catppuccin-frappe .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-frappe .control.is-loading::after,html.theme--catppuccin-frappe .select.is-loading::after,html.theme--catppuccin-frappe .loader,html.theme--catppuccin-frappe .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #838ba7;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-frappe .hero-video,html.theme--catppuccin-frappe .modal-background,html.theme--catppuccin-frappe .modal,html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-frappe .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | 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,video{height:auto;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:inherit}.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:#414559 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#2b2e3c !important}.has-background-dark{background-color:#414559 !important}.has-text-primary{color:#8caaee !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#6089e7 !important}.has-background-primary{background-color:#8caaee !important}.has-text-primary-light{color:#edf2fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c1d1f6 !important}.has-background-primary-light{background-color:#edf2fc !important}.has-text-primary-dark{color:#153a8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#1c4cbb !important}.has-background-primary-dark{background-color:#153a8e !important}.has-text-link{color:#8caaee !important}a.has-text-link:hover,a.has-text-link:focus{color:#6089e7 !important}.has-background-link{background-color:#8caaee !important}.has-text-link-light{color:#edf2fc !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c1d1f6 !important}.has-background-link-light{background-color:#edf2fc !important}.has-text-link-dark{color:#153a8e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1c4cbb !important}.has-background-link-dark{background-color:#153a8e !important}.has-text-info{color:#81c8be !important}a.has-text-info:hover,a.has-text-info:focus{color:#5db9ac !important}.has-background-info{background-color:#81c8be !important}.has-text-info-light{color:#f1f9f8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cde9e5 !important}.has-background-info-light{background-color:#f1f9f8 !important}.has-text-info-dark{color:#2d675f !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#3c8a7f !important}.has-background-info-dark{background-color:#2d675f !important}.has-text-success{color:#a6d189 !important}a.has-text-success:hover,a.has-text-success:focus{color:#8ac364 !important}.has-background-success{background-color:#a6d189 !important}.has-text-success-light{color:#f4f9f0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d8ebcc !important}.has-background-success-light{background-color:#f4f9f0 !important}.has-text-success-dark{color:#446a29 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#5b8f38 !important}.has-background-success-dark{background-color:#446a29 !important}.has-text-warning{color:#e5c890 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#dbb467 !important}.has-background-warning{background-color:#e5c890 !important}.has-text-warning-light{color:#fbf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f1e2c5 !important}.has-background-warning-light{background-color:#fbf7ee !important}.has-text-warning-dark{color:#78591c !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a17726 !important}.has-background-warning-dark{background-color:#78591c !important}.has-text-danger{color:#e78284 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#df575a !important}.has-background-danger{background-color:#e78284 !important}.has-text-danger-light{color:#fceeee !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f3c3c4 !important}.has-background-danger-light{background-color:#fceeee !important}.has-text-danger-dark{color:#9a1e20 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c52629 !important}.has-background-danger-dark{background-color:#9a1e20 !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:#414559 !important}.has-background-grey-darker{background-color:#414559 !important}.has-text-grey-dark{color:#51576d !important}.has-background-grey-dark{background-color:#51576d !important}.has-text-grey{color:#626880 !important}.has-background-grey{background-color:#626880 !important}.has-text-grey-light{color:#737994 !important}.has-background-grey-light{background-color:#737994 !important}.has-text-grey-lighter{color:#838ba7 !important}.has-background-grey-lighter{background-color:#838ba7 !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}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-frappe .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}.is-underlined{text-decoration:underline !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}}html.theme--catppuccin-frappe html{background-color:#303446;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--catppuccin-frappe article,html.theme--catppuccin-frappe aside,html.theme--catppuccin-frappe figure,html.theme--catppuccin-frappe footer,html.theme--catppuccin-frappe header,html.theme--catppuccin-frappe hgroup,html.theme--catppuccin-frappe section{display:block}html.theme--catppuccin-frappe body,html.theme--catppuccin-frappe button,html.theme--catppuccin-frappe input,html.theme--catppuccin-frappe optgroup,html.theme--catppuccin-frappe select,html.theme--catppuccin-frappe textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-frappe code,html.theme--catppuccin-frappe 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--catppuccin-frappe body{color:#c6d0f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-frappe a{color:#8caaee;cursor:pointer;text-decoration:none}html.theme--catppuccin-frappe a strong{color:currentColor}html.theme--catppuccin-frappe a:hover{color:#99d1db}html.theme--catppuccin-frappe code{background-color:#292c3c;color:#c6d0f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-frappe hr{background-color:#292c3c;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-frappe img{height:auto;max-width:100%}html.theme--catppuccin-frappe input[type="checkbox"],html.theme--catppuccin-frappe input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-frappe small{font-size:.875em}html.theme--catppuccin-frappe span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-frappe strong{color:#b0bef1;font-weight:700}html.theme--catppuccin-frappe fieldset{border:none}html.theme--catppuccin-frappe pre{-webkit-overflow-scrolling:touch;background-color:#292c3c;color:#c6d0f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-frappe table td,html.theme--catppuccin-frappe table th{vertical-align:top}html.theme--catppuccin-frappe table td:not([align]),html.theme--catppuccin-frappe table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe table th{color:#b0bef1}html.theme--catppuccin-frappe .box{background-color:#51576d;border-radius:8px;box-shadow:none;color:#c6d0f5;display:block;padding:1.25rem}html.theme--catppuccin-frappe a.box:hover,html.theme--catppuccin-frappe a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8caaee}html.theme--catppuccin-frappe a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8caaee}html.theme--catppuccin-frappe .button{background-color:#292c3c;border-color:#484d69;border-width:1px;color:#8caaee;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-frappe .button strong{color:inherit}html.theme--catppuccin-frappe .button .icon,html.theme--catppuccin-frappe .button .icon.is-small,html.theme--catppuccin-frappe .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-frappe .button .icon.is-medium,html.theme--catppuccin-frappe .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-frappe .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-frappe .button:hover,html.theme--catppuccin-frappe .button.is-hovered{border-color:#737994;color:#b0bef1}html.theme--catppuccin-frappe .button:focus,html.theme--catppuccin-frappe .button.is-focused{border-color:#737994;color:#769aeb}html.theme--catppuccin-frappe .button:focus:not(:active),html.theme--catppuccin-frappe .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button:active,html.theme--catppuccin-frappe .button.is-active{border-color:#51576d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;color:#c6d0f5;text-decoration:underline}html.theme--catppuccin-frappe .button.is-text:hover,html.theme--catppuccin-frappe .button.is-text.is-hovered,html.theme--catppuccin-frappe .button.is-text:focus,html.theme--catppuccin-frappe .button.is-text.is-focused{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text:active,html.theme--catppuccin-frappe .button.is-text.is-active{background-color:#1f212d;color:#b0bef1}html.theme--catppuccin-frappe .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-frappe .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8caaee;text-decoration:none}html.theme--catppuccin-frappe .button.is-ghost:hover,html.theme--catppuccin-frappe .button.is-ghost.is-hovered{color:#8caaee;text-decoration:underline}html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:hover,html.theme--catppuccin-frappe .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus,html.theme--catppuccin-frappe .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white:focus:not(:active),html.theme--catppuccin-frappe .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .button.is-white:active,html.theme--catppuccin-frappe .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-frappe .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:hover,html.theme--catppuccin-frappe .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus,html.theme--catppuccin-frappe .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black:focus:not(:active),html.theme--catppuccin-frappe .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .button.is-black:active,html.theme--catppuccin-frappe .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:hover,html.theme--catppuccin-frappe .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus,html.theme--catppuccin-frappe .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light:focus:not(:active),html.theme--catppuccin-frappe .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .button.is-light:active,html.theme--catppuccin-frappe .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-frappe .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-light.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)}html.theme--catppuccin-frappe .button.is-dark,html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:hover,html.theme--catppuccin-frappe .content kbd.button:hover,html.theme--catppuccin-frappe .button.is-dark.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-hovered{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus,html.theme--catppuccin-frappe .content kbd.button:focus,html.theme--catppuccin-frappe .button.is-dark.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark:focus:not(:active),html.theme--catppuccin-frappe .content kbd.button:focus:not(:active),html.theme--catppuccin-frappe .button.is-dark.is-focused:not(:active),html.theme--catppuccin-frappe .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .button.is-dark:active,html.theme--catppuccin-frappe .content kbd.button:active,html.theme--catppuccin-frappe .button.is-dark.is-active,html.theme--catppuccin-frappe .content kbd.button.is-active{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-dark[disabled],html.theme--catppuccin-frappe .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button{background-color:#414559;border-color:#414559;box-shadow:none}html.theme--catppuccin-frappe .button.is-dark.is-inverted,html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-dark.is-inverted[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-focused{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-dark.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-outlined{background-color:transparent;border-color:#414559;box-shadow:none;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#414559}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #414559 #414559 !important}html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:hover,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary:focus:not(:active),html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-frappe .button.is-primary.is-focused:not(:active),html.theme--catppuccin-frappe .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-primary:active,html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-active,html.theme--catppuccin-frappe .docstring>section>a.button.is-active.docs-sourcelink{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-primary[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-primary.is-inverted,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-primary.is-inverted[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-loading::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-outlined:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-outlined:focus,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-primary.is-outlined[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-frappe .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-primary.is-light,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:hover,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-frappe .button.is-primary.is-light.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-primary.is-light:active,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-frappe .button.is-primary.is-light.is-active,html.theme--catppuccin-frappe .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:hover,html.theme--catppuccin-frappe .button.is-link.is-hovered{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus,html.theme--catppuccin-frappe .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link:focus:not(:active),html.theme--catppuccin-frappe .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .button.is-link:active,html.theme--catppuccin-frappe .button.is-link.is-active{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link{background-color:#8caaee;border-color:#8caaee;box-shadow:none}html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-focused{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-outlined{background-color:transparent;border-color:#8caaee;box-shadow:none;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8caaee #8caaee !important}html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:hover,html.theme--catppuccin-frappe .button.is-link.is-light.is-hovered{background-color:#e2eafb;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-link.is-light:active,html.theme--catppuccin-frappe .button.is-link.is-light.is-active{background-color:#d7e1f9;border-color:transparent;color:#153a8e}html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:hover,html.theme--catppuccin-frappe .button.is-info.is-hovered{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus,html.theme--catppuccin-frappe .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info:focus:not(:active),html.theme--catppuccin-frappe .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .button.is-info:active,html.theme--catppuccin-frappe .button.is-info.is-active{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info{background-color:#81c8be;border-color:#81c8be;box-shadow:none}html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-focused{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.is-outlined{background-color:transparent;border-color:#81c8be;box-shadow:none;color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#81c8be}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #81c8be #81c8be !important}html.theme--catppuccin-frappe .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-info.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)}html.theme--catppuccin-frappe .button.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:hover,html.theme--catppuccin-frappe .button.is-info.is-light.is-hovered{background-color:#e8f5f3;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-info.is-light:active,html.theme--catppuccin-frappe .button.is-info.is-light.is-active{background-color:#dff1ef;border-color:transparent;color:#2d675f}html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:hover,html.theme--catppuccin-frappe .button.is-success.is-hovered{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus,html.theme--catppuccin-frappe .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success:focus:not(:active),html.theme--catppuccin-frappe .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .button.is-success:active,html.theme--catppuccin-frappe .button.is-success.is-active{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success{background-color:#a6d189;border-color:#a6d189;box-shadow:none}html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-focused{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.is-outlined{background-color:transparent;border-color:#a6d189;box-shadow:none;color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6d189}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6d189 #a6d189 !important}html.theme--catppuccin-frappe .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-success.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)}html.theme--catppuccin-frappe .button.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:hover,html.theme--catppuccin-frappe .button.is-success.is-light.is-hovered{background-color:#edf6e7;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-success.is-light:active,html.theme--catppuccin-frappe .button.is-success.is-light.is-active{background-color:#e6f2de;border-color:transparent;color:#446a29}html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:hover,html.theme--catppuccin-frappe .button.is-warning.is-hovered{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus,html.theme--catppuccin-frappe .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning:focus:not(:active),html.theme--catppuccin-frappe .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .button.is-warning:active,html.theme--catppuccin-frappe .button.is-warning.is-active{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning{background-color:#e5c890;border-color:#e5c890;box-shadow:none}html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-focused{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .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}html.theme--catppuccin-frappe .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-warning.is-outlined{background-color:transparent;border-color:#e5c890;box-shadow:none;color:#e5c890}html.theme--catppuccin-frappe .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)}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#e5c890}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e5c890 #e5c890 !important}html.theme--catppuccin-frappe .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .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)}html.theme--catppuccin-frappe .button.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:hover,html.theme--catppuccin-frappe .button.is-warning.is-light.is-hovered{background-color:#f9f2e4;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-warning.is-light:active,html.theme--catppuccin-frappe .button.is-warning.is-light.is-active{background-color:#f6edda;border-color:transparent;color:#78591c}html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:hover,html.theme--catppuccin-frappe .button.is-danger.is-hovered{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus,html.theme--catppuccin-frappe .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger:focus:not(:active),html.theme--catppuccin-frappe .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .button.is-danger:active,html.theme--catppuccin-frappe .button.is-danger.is-active{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger{background-color:#e78284;border-color:#e78284;box-shadow:none}html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-frappe .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-focused{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-frappe .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-outlined{background-color:transparent;border-color:#e78284;box-shadow:none;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#e78284}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e78284 #e78284 !important}html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-frappe .button.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:hover,html.theme--catppuccin-frappe .button.is-danger.is-light.is-hovered{background-color:#fae3e4;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-danger.is-light:active,html.theme--catppuccin-frappe .button.is-danger.is-light.is-active{background-color:#f8d8d9;border-color:transparent;color:#9a1e20}html.theme--catppuccin-frappe .button.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-frappe .button.is-small:not(.is-rounded),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .button.is-normal{font-size:1rem}html.theme--catppuccin-frappe .button.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .button.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .button[disabled],fieldset[disabled] html.theme--catppuccin-frappe .button{background-color:#737994;border-color:#626880;box-shadow:none;opacity:.5}html.theme--catppuccin-frappe .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-frappe .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-frappe .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-frappe .button.is-static{background-color:#292c3c;border-color:#626880;color:#838ba7;box-shadow:none;pointer-events:none}html.theme--catppuccin-frappe .button.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-frappe .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-frappe .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-frappe .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-frappe .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-frappe .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-frappe .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-frappe .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-frappe .buttons.has-addons .button:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-frappe .buttons.has-addons .button:focus,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused,html.theme--catppuccin-frappe .buttons.has-addons .button:active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-frappe .buttons.has-addons .button:focus:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-frappe .buttons.has-addons .button:active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-frappe .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-frappe .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .buttons.is-centered{justify-content:center}html.theme--catppuccin-frappe .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-frappe .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .button.is-responsive.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-frappe .button.is-responsive,html.theme--catppuccin-frappe .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-frappe .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-frappe .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-frappe .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-frappe .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-frappe .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-frappe .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-frappe .content li+li{margin-top:0.25em}html.theme--catppuccin-frappe .content p:not(:last-child),html.theme--catppuccin-frappe .content dl:not(:last-child),html.theme--catppuccin-frappe .content ol:not(:last-child),html.theme--catppuccin-frappe .content ul:not(:last-child),html.theme--catppuccin-frappe .content blockquote:not(:last-child),html.theme--catppuccin-frappe .content pre:not(:last-child),html.theme--catppuccin-frappe .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .content h1,html.theme--catppuccin-frappe .content h2,html.theme--catppuccin-frappe .content h3,html.theme--catppuccin-frappe .content h4,html.theme--catppuccin-frappe .content h5,html.theme--catppuccin-frappe .content h6{color:#c6d0f5;font-weight:600;line-height:1.125}html.theme--catppuccin-frappe .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-frappe .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-frappe .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-frappe .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-frappe .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-frappe .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-frappe .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-frappe .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-frappe .content blockquote{background-color:#292c3c;border-left:5px solid #626880;padding:1.25em 1.5em}html.theme--catppuccin-frappe .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-frappe .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-frappe .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-frappe .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-frappe .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-frappe .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-frappe .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-frappe .content ul ul ul{list-style-type:square}html.theme--catppuccin-frappe .content dd{margin-left:2em}html.theme--catppuccin-frappe .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-frappe .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-frappe .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-frappe .content figure img{display:inline-block}html.theme--catppuccin-frappe .content figure figcaption{font-style:italic}html.theme--catppuccin-frappe .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-frappe .content sup,html.theme--catppuccin-frappe .content sub{font-size:75%}html.theme--catppuccin-frappe .content table{width:100%}html.theme--catppuccin-frappe .content table td,html.theme--catppuccin-frappe .content table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .content table th{color:#b0bef1}html.theme--catppuccin-frappe .content table th:not([align]){text-align:inherit}html.theme--catppuccin-frappe .content table thead td,html.theme--catppuccin-frappe .content table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .content table tfoot td,html.theme--catppuccin-frappe .content table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .content table tbody tr:last-child td,html.theme--catppuccin-frappe .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .content .tabs li+li{margin-top:0}html.theme--catppuccin-frappe .content.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-frappe .content.is-normal{font-size:1rem}html.theme--catppuccin-frappe .content.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .content.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-frappe .icon.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-frappe .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-frappe .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-frappe .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-frappe .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-frappe .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-frappe div.icon-text{display:flex}html.theme--catppuccin-frappe .image,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-frappe .image img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-frappe .image img.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-frappe .image.is-fullwidth,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-frappe .image.is-square img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-frappe .image.is-square .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-frappe .image.is-1by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-frappe .image.is-1by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-frappe .image.is-5by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-frappe .image.is-5by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-frappe .image.is-4by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-frappe .image.is-4by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-frappe .image.is-3by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-frappe .image.is-5by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-frappe .image.is-5by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-frappe .image.is-16by9 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-frappe .image.is-16by9 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-frappe .image.is-2by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-frappe .image.is-2by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-frappe .image.is-3by1 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-frappe .image.is-3by1 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-frappe .image.is-4by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-frappe .image.is-4by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-frappe .image.is-3by4 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-frappe .image.is-3by4 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-frappe .image.is-2by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-frappe .image.is-2by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-frappe .image.is-3by5 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-frappe .image.is-3by5 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-frappe .image.is-9by16 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-frappe .image.is-9by16 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-frappe .image.is-1by2 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-frappe .image.is-1by2 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-frappe .image.is-1by3 img,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-frappe .image.is-1by3 .has-ratio,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-frappe .image.is-square,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-frappe .image.is-1by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-frappe .image.is-5by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-frappe .image.is-4by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-frappe .image.is-3by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-frappe .image.is-5by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-frappe .image.is-16by9,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-frappe .image.is-2by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-frappe .image.is-3by1,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-frappe .image.is-4by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-frappe .image.is-3by4,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-frappe .image.is-2by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-frappe .image.is-3by5,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-frappe .image.is-9by16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-frappe .image.is-1by2,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-frappe .image.is-1by3,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-frappe .image.is-16x16,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-frappe .image.is-24x24,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-frappe .image.is-32x32,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-frappe .image.is-48x48,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-frappe .image.is-64x64,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-frappe .image.is-96x96,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-frappe .image.is-128x128,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-frappe .notification{background-color:#292c3c;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-frappe .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .notification strong{color:currentColor}html.theme--catppuccin-frappe .notification code,html.theme--catppuccin-frappe .notification pre{background:#fff}html.theme--catppuccin-frappe .notification pre code{background:transparent}html.theme--catppuccin-frappe .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-frappe .notification .title,html.theme--catppuccin-frappe .notification .subtitle,html.theme--catppuccin-frappe .notification .content{color:currentColor}html.theme--catppuccin-frappe .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-dark,html.theme--catppuccin-frappe .content kbd.notification{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .notification.is-primary,html.theme--catppuccin-frappe .docstring>section>a.notification.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-primary.is-light,html.theme--catppuccin-frappe .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .notification.is-link.is-light{background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .notification.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-info.is-light{background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .notification.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-success.is-light{background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .notification.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .notification.is-warning.is-light{background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .notification.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .notification.is-danger.is-light{background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-frappe .progress::-webkit-progress-bar{background-color:#51576d}html.theme--catppuccin-frappe .progress::-webkit-progress-value{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-moz-progress-bar{background-color:#838ba7}html.theme--catppuccin-frappe .progress::-ms-fill{background-color:#838ba7;border:none}html.theme--catppuccin-frappe .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-frappe .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-frappe .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-frappe .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-frappe .content kbd.progress::-webkit-progress-value{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-frappe .content kbd.progress::-moz-progress-bar{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark::-ms-fill,html.theme--catppuccin-frappe .content kbd.progress::-ms-fill{background-color:#414559}html.theme--catppuccin-frappe .progress.is-dark:indeterminate,html.theme--catppuccin-frappe .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #414559 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary::-ms-fill,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-primary:indeterminate,html.theme--catppuccin-frappe .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-link::-webkit-progress-value{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-moz-progress-bar{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link::-ms-fill{background-color:#8caaee}html.theme--catppuccin-frappe .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8caaee 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-info::-webkit-progress-value{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-moz-progress-bar{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info::-ms-fill{background-color:#81c8be}html.theme--catppuccin-frappe .progress.is-info:indeterminate{background-image:linear-gradient(to right, #81c8be 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-success::-webkit-progress-value{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-moz-progress-bar{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success::-ms-fill{background-color:#a6d189}html.theme--catppuccin-frappe .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6d189 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-warning::-webkit-progress-value{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-moz-progress-bar{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning::-ms-fill{background-color:#e5c890}html.theme--catppuccin-frappe .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #e5c890 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress.is-danger::-webkit-progress-value{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-moz-progress-bar{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger::-ms-fill{background-color:#e78284}html.theme--catppuccin-frappe .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #e78284 30%, #51576d 30%)}html.theme--catppuccin-frappe .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#51576d;background-image:linear-gradient(to right, #c6d0f5 30%, #51576d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-frappe .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-frappe .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-frappe .progress.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-frappe .progress.is-medium{height:1.25rem}html.theme--catppuccin-frappe .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-frappe .table{background-color:#51576d;color:#c6d0f5}html.theme--catppuccin-frappe .table td,html.theme--catppuccin-frappe .table th{border:1px solid #626880;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-frappe .table td.is-white,html.theme--catppuccin-frappe .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .table td.is-black,html.theme--catppuccin-frappe .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .table td.is-light,html.theme--catppuccin-frappe .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-dark,html.theme--catppuccin-frappe .table th.is-dark{background-color:#414559;border-color:#414559;color:#fff}html.theme--catppuccin-frappe .table td.is-primary,html.theme--catppuccin-frappe .table th.is-primary{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-link,html.theme--catppuccin-frappe .table th.is-link{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-info,html.theme--catppuccin-frappe .table th.is-info{background-color:#81c8be;border-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-success,html.theme--catppuccin-frappe .table th.is-success{background-color:#a6d189;border-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-warning,html.theme--catppuccin-frappe .table th.is-warning{background-color:#e5c890;border-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .table td.is-danger,html.theme--catppuccin-frappe .table th.is-danger{background-color:#e78284;border-color:#e78284;color:#fff}html.theme--catppuccin-frappe .table td.is-narrow,html.theme--catppuccin-frappe .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-frappe .table td.is-selected,html.theme--catppuccin-frappe .table th.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table td.is-selected a,html.theme--catppuccin-frappe .table td.is-selected strong,html.theme--catppuccin-frappe .table th.is-selected a,html.theme--catppuccin-frappe .table th.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table td.is-vcentered,html.theme--catppuccin-frappe .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-frappe .table th{color:#b0bef1}html.theme--catppuccin-frappe .table th:not([align]){text-align:left}html.theme--catppuccin-frappe .table tr.is-selected{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .table tr.is-selected a,html.theme--catppuccin-frappe .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-frappe .table tr.is-selected td,html.theme--catppuccin-frappe .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-frappe .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table thead td,html.theme--catppuccin-frappe .table thead th{border-width:0 0 2px;color:#b0bef1}html.theme--catppuccin-frappe .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tfoot td,html.theme--catppuccin-frappe .table tfoot th{border-width:2px 0 0;color:#b0bef1}html.theme--catppuccin-frappe .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .table tbody tr:last-child td,html.theme--catppuccin-frappe .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-frappe .table.is-bordered td,html.theme--catppuccin-frappe .table.is-bordered th{border-width:1px}html.theme--catppuccin-frappe .table.is-bordered tr:last-child td,html.theme--catppuccin-frappe .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-frappe .table.is-fullwidth{width:100%}html.theme--catppuccin-frappe .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#414559}html.theme--catppuccin-frappe .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#454a5f}html.theme--catppuccin-frappe .table.is-narrow td,html.theme--catppuccin-frappe .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-frappe .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#414559}html.theme--catppuccin-frappe .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-frappe .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .tags .tag,html.theme--catppuccin-frappe .tags .content kbd,html.theme--catppuccin-frappe .content .tags kbd,html.theme--catppuccin-frappe .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-frappe .tags .tag:not(:last-child),html.theme--catppuccin-frappe .tags .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags kbd:not(:last-child),html.theme--catppuccin-frappe .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-frappe .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-frappe .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-frappe .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-frappe .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-frappe .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-frappe .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-frappe .tags.is-centered{justify-content:center}html.theme--catppuccin-frappe .tags.is-centered .tag,html.theme--catppuccin-frappe .tags.is-centered .content kbd,html.theme--catppuccin-frappe .content .tags.is-centered kbd,html.theme--catppuccin-frappe .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-frappe .tags.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .tags.is-right .tag:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-frappe .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-frappe .tags.is-right .tag:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-frappe .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag,html.theme--catppuccin-frappe .tags.has-addons .content kbd,html.theme--catppuccin-frappe .content .tags.has-addons kbd,html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-frappe .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-frappe .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-frappe .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-frappe .tag:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#292c3c;border-radius:.4em;color:#c6d0f5;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}html.theme--catppuccin-frappe .tag:not(body) .delete,html.theme--catppuccin-frappe .content kbd:not(body) .delete,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-frappe .tag.is-white:not(body),html.theme--catppuccin-frappe .content kbd.is-white:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .tag.is-black:not(body),html.theme--catppuccin-frappe .content kbd.is-black:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .tag.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-dark:not(body),html.theme--catppuccin-frappe .content kbd:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-frappe .content .docstring>section>kbd:not(body){background-color:#414559;color:#fff}html.theme--catppuccin-frappe .tag.is-primary:not(body),html.theme--catppuccin-frappe .content kbd.is-primary:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-primary.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .tag.is-link.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-link.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edf2fc;color:#153a8e}html.theme--catppuccin-frappe .tag.is-info:not(body),html.theme--catppuccin-frappe .content kbd.is-info:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-info.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-info.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f1f9f8;color:#2d675f}html.theme--catppuccin-frappe .tag.is-success:not(body),html.theme--catppuccin-frappe .content kbd.is-success:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-success.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-success.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f4f9f0;color:#446a29}html.theme--catppuccin-frappe .tag.is-warning:not(body),html.theme--catppuccin-frappe .content kbd.is-warning:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .tag.is-warning.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fbf7ee;color:#78591c}html.theme--catppuccin-frappe .tag.is-danger:not(body),html.theme--catppuccin-frappe .content kbd.is-danger:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .tag.is-danger.is-light:not(body),html.theme--catppuccin-frappe .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fceeee;color:#9a1e20}html.theme--catppuccin-frappe .tag.is-normal:not(body),html.theme--catppuccin-frappe .content kbd.is-normal:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-frappe .tag.is-medium:not(body),html.theme--catppuccin-frappe .content kbd.is-medium:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-frappe .tag.is-large:not(body),html.theme--catppuccin-frappe .content kbd.is-large:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-frappe .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-frappe .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-frappe .tag.is-delete:not(body),html.theme--catppuccin-frappe .content kbd.is-delete:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe .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--catppuccin-frappe .tag.is-delete:not(body)::before,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::before,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-frappe .tag.is-delete:not(body)::after,html.theme--catppuccin-frappe .content kbd.is-delete:not(body)::after,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-frappe .tag.is-delete:not(body):hover,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):hover,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-frappe .tag.is-delete:not(body):focus,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):focus,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1f212d}html.theme--catppuccin-frappe .tag.is-delete:not(body):active,html.theme--catppuccin-frappe .content kbd.is-delete:not(body):active,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#14161e}html.theme--catppuccin-frappe .tag.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-frappe .content kbd.is-rounded:not(body),html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-frappe a.tag:hover,html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-frappe .title,html.theme--catppuccin-frappe .subtitle{word-break:break-word}html.theme--catppuccin-frappe .title em,html.theme--catppuccin-frappe .title span,html.theme--catppuccin-frappe .subtitle em,html.theme--catppuccin-frappe .subtitle span{font-weight:inherit}html.theme--catppuccin-frappe .title sub,html.theme--catppuccin-frappe .subtitle sub{font-size:.75em}html.theme--catppuccin-frappe .title sup,html.theme--catppuccin-frappe .subtitle sup{font-size:.75em}html.theme--catppuccin-frappe .title .tag,html.theme--catppuccin-frappe .title .content kbd,html.theme--catppuccin-frappe .content .title kbd,html.theme--catppuccin-frappe .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-frappe .subtitle .tag,html.theme--catppuccin-frappe .subtitle .content kbd,html.theme--catppuccin-frappe .content .subtitle kbd,html.theme--catppuccin-frappe .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-frappe .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-frappe .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-frappe .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-frappe .title.is-1{font-size:3rem}html.theme--catppuccin-frappe .title.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .title.is-3{font-size:2rem}html.theme--catppuccin-frappe .title.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .title.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .title.is-6{font-size:1rem}html.theme--catppuccin-frappe .title.is-7{font-size:.75rem}html.theme--catppuccin-frappe .subtitle{color:#737994;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-frappe .subtitle strong{color:#737994;font-weight:600}html.theme--catppuccin-frappe .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-frappe .subtitle.is-1{font-size:3rem}html.theme--catppuccin-frappe .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-frappe .subtitle.is-3{font-size:2rem}html.theme--catppuccin-frappe .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-frappe .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-frappe .subtitle.is-6{font-size:1rem}html.theme--catppuccin-frappe .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-frappe .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-frappe .number{align-items:center;background-color:#292c3c;border-radius:9999px;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--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#303446;border-color:#626880;border-radius:.4em;color:#838ba7}html.theme--catppuccin-frappe .select select::-moz-placeholder,html.theme--catppuccin-frappe .textarea::-moz-placeholder,html.theme--catppuccin-frappe .input::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,html.theme--catppuccin-frappe .input::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-moz-placeholder,html.theme--catppuccin-frappe .textarea:-moz-placeholder,html.theme--catppuccin-frappe .input:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,html.theme--catppuccin-frappe .input:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-frappe .select select:hover,html.theme--catppuccin-frappe .textarea:hover,html.theme--catppuccin-frappe .input:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-frappe .select select.is-hovered,html.theme--catppuccin-frappe .is-hovered.textarea,html.theme--catppuccin-frappe .is-hovered.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#737994}html.theme--catppuccin-frappe .select select:focus,html.theme--catppuccin-frappe .textarea:focus,html.theme--catppuccin-frappe .input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-frappe .select select.is-focused,html.theme--catppuccin-frappe .is-focused.textarea,html.theme--catppuccin-frappe .is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .select select:active,html.theme--catppuccin-frappe .textarea:active,html.theme--catppuccin-frappe .input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-frappe .select select.is-active,html.theme--catppuccin-frappe .is-active.textarea,html.theme--catppuccin-frappe .is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8caaee;box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select select[disabled],html.theme--catppuccin-frappe .textarea[disabled],html.theme--catppuccin-frappe .input[disabled],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-frappe .select select,fieldset[disabled] html.theme--catppuccin-frappe .textarea,fieldset[disabled] html.theme--catppuccin-frappe .input,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{background-color:#737994;border-color:#292c3c;box-shadow:none;color:#f1f4fd}html.theme--catppuccin-frappe .select select[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]::-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-frappe .input[disabled]:-moz-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(241,244,253,0.3)}html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-frappe .textarea[readonly],html.theme--catppuccin-frappe .input[readonly],html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-frappe .is-white.textarea,html.theme--catppuccin-frappe .is-white.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-frappe .is-white.textarea:focus,html.theme--catppuccin-frappe .is-white.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-frappe .is-white.is-focused.textarea,html.theme--catppuccin-frappe .is-white.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-white.textarea:active,html.theme--catppuccin-frappe .is-white.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-frappe .is-white.is-active.textarea,html.theme--catppuccin-frappe .is-white.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .is-black.textarea,html.theme--catppuccin-frappe .is-black.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-frappe .is-black.textarea:focus,html.theme--catppuccin-frappe .is-black.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-frappe .is-black.is-focused.textarea,html.theme--catppuccin-frappe .is-black.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-black.textarea:active,html.theme--catppuccin-frappe .is-black.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-frappe .is-black.is-active.textarea,html.theme--catppuccin-frappe .is-black.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .is-light.textarea,html.theme--catppuccin-frappe .is-light.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-frappe .is-light.textarea:focus,html.theme--catppuccin-frappe .is-light.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-frappe .is-light.is-focused.textarea,html.theme--catppuccin-frappe .is-light.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-light.textarea:active,html.theme--catppuccin-frappe .is-light.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-frappe .is-light.is-active.textarea,html.theme--catppuccin-frappe .is-light.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .is-dark.textarea,html.theme--catppuccin-frappe .content kbd.textarea,html.theme--catppuccin-frappe .is-dark.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-frappe .content kbd.input{border-color:#414559}html.theme--catppuccin-frappe .is-dark.textarea:focus,html.theme--catppuccin-frappe .content kbd.textarea:focus,html.theme--catppuccin-frappe .is-dark.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-frappe .content kbd.input:focus,html.theme--catppuccin-frappe .is-dark.is-focused.textarea,html.theme--catppuccin-frappe .content kbd.is-focused.textarea,html.theme--catppuccin-frappe .is-dark.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .content kbd.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-dark.textarea:active,html.theme--catppuccin-frappe .content kbd.textarea:active,html.theme--catppuccin-frappe .is-dark.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-frappe .content kbd.input:active,html.theme--catppuccin-frappe .is-dark.is-active.textarea,html.theme--catppuccin-frappe .content kbd.is-active.textarea,html.theme--catppuccin-frappe .is-dark.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .content kbd.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .is-primary.textarea,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink{border-color:#8caaee}html.theme--catppuccin-frappe .is-primary.textarea:focus,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-frappe .is-primary.is-focused.textarea,html.theme--catppuccin-frappe .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.textarea:active,html.theme--catppuccin-frappe .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-frappe .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-frappe .is-primary.is-active.textarea,html.theme--catppuccin-frappe .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-frappe .is-primary.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-frappe .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-link.textarea,html.theme--catppuccin-frappe .is-link.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8caaee}html.theme--catppuccin-frappe .is-link.textarea:focus,html.theme--catppuccin-frappe .is-link.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-frappe .is-link.is-focused.textarea,html.theme--catppuccin-frappe .is-link.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-link.textarea:active,html.theme--catppuccin-frappe .is-link.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-frappe .is-link.is-active.textarea,html.theme--catppuccin-frappe .is-link.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .is-info.textarea,html.theme--catppuccin-frappe .is-info.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#81c8be}html.theme--catppuccin-frappe .is-info.textarea:focus,html.theme--catppuccin-frappe .is-info.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-frappe .is-info.is-focused.textarea,html.theme--catppuccin-frappe .is-info.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-info.textarea:active,html.theme--catppuccin-frappe .is-info.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-frappe .is-info.is-active.textarea,html.theme--catppuccin-frappe .is-info.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .is-success.textarea,html.theme--catppuccin-frappe .is-success.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6d189}html.theme--catppuccin-frappe .is-success.textarea:focus,html.theme--catppuccin-frappe .is-success.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-frappe .is-success.is-focused.textarea,html.theme--catppuccin-frappe .is-success.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-success.textarea:active,html.theme--catppuccin-frappe .is-success.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-frappe .is-success.is-active.textarea,html.theme--catppuccin-frappe .is-success.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .is-warning.textarea,html.theme--catppuccin-frappe .is-warning.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#e5c890}html.theme--catppuccin-frappe .is-warning.textarea:focus,html.theme--catppuccin-frappe .is-warning.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-frappe .is-warning.is-focused.textarea,html.theme--catppuccin-frappe .is-warning.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-warning.textarea:active,html.theme--catppuccin-frappe .is-warning.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-frappe .is-warning.is-active.textarea,html.theme--catppuccin-frappe .is-warning.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .is-danger.textarea,html.theme--catppuccin-frappe .is-danger.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#e78284}html.theme--catppuccin-frappe .is-danger.textarea:focus,html.theme--catppuccin-frappe .is-danger.input:focus,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-frappe .is-danger.is-focused.textarea,html.theme--catppuccin-frappe .is-danger.is-focused.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-frappe .is-danger.textarea:active,html.theme--catppuccin-frappe .is-danger.input:active,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-frappe .is-danger.is-active.textarea,html.theme--catppuccin-frappe .is-danger.is-active.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .is-small.textarea,html.theme--catppuccin-frappe .is-small.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .is-medium.textarea,html.theme--catppuccin-frappe .is-medium.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .is-large.textarea,html.theme--catppuccin-frappe .is-large.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .is-fullwidth.textarea,html.theme--catppuccin-frappe .is-fullwidth.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-frappe .is-inline.textarea,html.theme--catppuccin-frappe .is-inline.input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-frappe .input.is-rounded,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-frappe .input.is-static,html.theme--catppuccin-frappe #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--catppuccin-frappe .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-frappe .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-frappe .textarea[rows]{height:initial}html.theme--catppuccin-frappe .textarea.has-fixed-size{resize:none}html.theme--catppuccin-frappe .radio,html.theme--catppuccin-frappe .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-frappe .radio input,html.theme--catppuccin-frappe .checkbox input{cursor:pointer}html.theme--catppuccin-frappe .radio:hover,html.theme--catppuccin-frappe .checkbox:hover{color:#99d1db}html.theme--catppuccin-frappe .radio[disabled],html.theme--catppuccin-frappe .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-frappe .radio,fieldset[disabled] html.theme--catppuccin-frappe .checkbox,html.theme--catppuccin-frappe .radio input[disabled],html.theme--catppuccin-frappe .checkbox input[disabled]{color:#f1f4fd;cursor:not-allowed}html.theme--catppuccin-frappe .radio+.radio{margin-left:.5em}html.theme--catppuccin-frappe .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-frappe .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading)::after{border-color:#8caaee;right:1.125em;z-index:4}html.theme--catppuccin-frappe .select.is-rounded select,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-frappe .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-frappe .select select::-ms-expand{display:none}html.theme--catppuccin-frappe .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-frappe .select select:hover{border-color:#292c3c}html.theme--catppuccin-frappe .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-frappe .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-frappe .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-frappe .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#99d1db}html.theme--catppuccin-frappe .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select{border-color:#fff}html.theme--catppuccin-frappe .select.is-white select:hover,html.theme--catppuccin-frappe .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-frappe .select.is-white select:focus,html.theme--catppuccin-frappe .select.is-white select.is-focused,html.theme--catppuccin-frappe .select.is-white select:active,html.theme--catppuccin-frappe .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-frappe .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-frappe .select.is-black select:hover,html.theme--catppuccin-frappe .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-frappe .select.is-black select:focus,html.theme--catppuccin-frappe .select.is-black select.is-focused,html.theme--catppuccin-frappe .select.is-black select:active,html.theme--catppuccin-frappe .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-frappe .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-frappe .select.is-light select:hover,html.theme--catppuccin-frappe .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-frappe .select.is-light select:focus,html.theme--catppuccin-frappe .select.is-light select.is-focused,html.theme--catppuccin-frappe .select.is-light select:active,html.theme--catppuccin-frappe .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-frappe .select.is-dark:not(:hover)::after,html.theme--catppuccin-frappe .content kbd.select:not(:hover)::after{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select,html.theme--catppuccin-frappe .content kbd.select select{border-color:#414559}html.theme--catppuccin-frappe .select.is-dark select:hover,html.theme--catppuccin-frappe .content kbd.select select:hover,html.theme--catppuccin-frappe .select.is-dark select.is-hovered,html.theme--catppuccin-frappe .content kbd.select select.is-hovered{border-color:#363a4a}html.theme--catppuccin-frappe .select.is-dark select:focus,html.theme--catppuccin-frappe .content kbd.select select:focus,html.theme--catppuccin-frappe .select.is-dark select.is-focused,html.theme--catppuccin-frappe .content kbd.select select.is-focused,html.theme--catppuccin-frappe .select.is-dark select:active,html.theme--catppuccin-frappe .content kbd.select select:active,html.theme--catppuccin-frappe .select.is-dark select.is-active,html.theme--catppuccin-frappe .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(65,69,89,0.25)}html.theme--catppuccin-frappe .select.is-primary:not(:hover)::after,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-primary select:hover,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-frappe .select.is-primary select.is-hovered,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-primary select:focus,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-frappe .select.is-primary select.is-focused,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-frappe .select.is-primary select:active,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-frappe .select.is-primary select.is-active,html.theme--catppuccin-frappe .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-link:not(:hover)::after{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select{border-color:#8caaee}html.theme--catppuccin-frappe .select.is-link select:hover,html.theme--catppuccin-frappe .select.is-link select.is-hovered{border-color:#769aeb}html.theme--catppuccin-frappe .select.is-link select:focus,html.theme--catppuccin-frappe .select.is-link select.is-focused,html.theme--catppuccin-frappe .select.is-link select:active,html.theme--catppuccin-frappe .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(140,170,238,0.25)}html.theme--catppuccin-frappe .select.is-info:not(:hover)::after{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select{border-color:#81c8be}html.theme--catppuccin-frappe .select.is-info select:hover,html.theme--catppuccin-frappe .select.is-info select.is-hovered{border-color:#6fc0b5}html.theme--catppuccin-frappe .select.is-info select:focus,html.theme--catppuccin-frappe .select.is-info select.is-focused,html.theme--catppuccin-frappe .select.is-info select:active,html.theme--catppuccin-frappe .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(129,200,190,0.25)}html.theme--catppuccin-frappe .select.is-success:not(:hover)::after{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select{border-color:#a6d189}html.theme--catppuccin-frappe .select.is-success select:hover,html.theme--catppuccin-frappe .select.is-success select.is-hovered{border-color:#98ca77}html.theme--catppuccin-frappe .select.is-success select:focus,html.theme--catppuccin-frappe .select.is-success select.is-focused,html.theme--catppuccin-frappe .select.is-success select:active,html.theme--catppuccin-frappe .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,209,137,0.25)}html.theme--catppuccin-frappe .select.is-warning:not(:hover)::after{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select{border-color:#e5c890}html.theme--catppuccin-frappe .select.is-warning select:hover,html.theme--catppuccin-frappe .select.is-warning select.is-hovered{border-color:#e0be7b}html.theme--catppuccin-frappe .select.is-warning select:focus,html.theme--catppuccin-frappe .select.is-warning select.is-focused,html.theme--catppuccin-frappe .select.is-warning select:active,html.theme--catppuccin-frappe .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(229,200,144,0.25)}html.theme--catppuccin-frappe .select.is-danger:not(:hover)::after{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select{border-color:#e78284}html.theme--catppuccin-frappe .select.is-danger select:hover,html.theme--catppuccin-frappe .select.is-danger select.is-hovered{border-color:#e36d6f}html.theme--catppuccin-frappe .select.is-danger select:focus,html.theme--catppuccin-frappe .select.is-danger select.is-focused,html.theme--catppuccin-frappe .select.is-danger select:active,html.theme--catppuccin-frappe .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(231,130,132,0.25)}html.theme--catppuccin-frappe .select.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-frappe .select.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .select.is-disabled::after{border-color:#f1f4fd !important;opacity:0.5}html.theme--catppuccin-frappe .select.is-fullwidth{width:100%}html.theme--catppuccin-frappe .select.is-fullwidth select{width:100%}html.theme--catppuccin-frappe .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-frappe .select.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-frappe .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:hover .file-cta,html.theme--catppuccin-frappe .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-white:focus .file-cta,html.theme--catppuccin-frappe .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--catppuccin-frappe .file.is-white:active .file-cta,html.theme--catppuccin-frappe .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-frappe .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:hover .file-cta,html.theme--catppuccin-frappe .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-black:focus .file-cta,html.theme--catppuccin-frappe .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--catppuccin-frappe .file.is-black:active .file-cta,html.theme--catppuccin-frappe .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:hover .file-cta,html.theme--catppuccin-frappe .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:focus .file-cta,html.theme--catppuccin-frappe .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-light:active .file-cta,html.theme--catppuccin-frappe .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-dark .file-cta,html.theme--catppuccin-frappe .content kbd.file .file-cta{background-color:#414559;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:hover .file-cta,html.theme--catppuccin-frappe .content kbd.file:hover .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-hovered .file-cta{background-color:#3c3f52;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-dark:focus .file-cta,html.theme--catppuccin-frappe .content kbd.file:focus .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-focused .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(65,69,89,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-dark:active .file-cta,html.theme--catppuccin-frappe .content kbd.file:active .file-cta,html.theme--catppuccin-frappe .file.is-dark.is-active .file-cta,html.theme--catppuccin-frappe .content kbd.file.is-active .file-cta{background-color:#363a4a;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:hover .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-primary:focus .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-focused .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-primary:active .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-frappe .file.is-primary.is-active .file-cta,html.theme--catppuccin-frappe .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link .file-cta{background-color:#8caaee;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:hover .file-cta,html.theme--catppuccin-frappe .file.is-link.is-hovered .file-cta{background-color:#81a2ec;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-link:focus .file-cta,html.theme--catppuccin-frappe .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(140,170,238,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-link:active .file-cta,html.theme--catppuccin-frappe .file.is-link.is-active .file-cta{background-color:#769aeb;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-info .file-cta{background-color:#81c8be;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:hover .file-cta,html.theme--catppuccin-frappe .file.is-info.is-hovered .file-cta{background-color:#78c4b9;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:focus .file-cta,html.theme--catppuccin-frappe .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(129,200,190,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-info:active .file-cta,html.theme--catppuccin-frappe .file.is-info.is-active .file-cta{background-color:#6fc0b5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success .file-cta{background-color:#a6d189;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:hover .file-cta,html.theme--catppuccin-frappe .file.is-success.is-hovered .file-cta{background-color:#9fcd80;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:focus .file-cta,html.theme--catppuccin-frappe .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,209,137,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-success:active .file-cta,html.theme--catppuccin-frappe .file.is-success.is-active .file-cta{background-color:#98ca77;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning .file-cta{background-color:#e5c890;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:hover .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-hovered .file-cta{background-color:#e3c386;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:focus .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(229,200,144,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-warning:active .file-cta,html.theme--catppuccin-frappe .file.is-warning.is-active .file-cta{background-color:#e0be7b;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .file.is-danger .file-cta{background-color:#e78284;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:hover .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-hovered .file-cta{background-color:#e57779;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-danger:focus .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(231,130,132,0.25);color:#fff}html.theme--catppuccin-frappe .file.is-danger:active .file-cta,html.theme--catppuccin-frappe .file.is-danger.is-active .file-cta{background-color:#e36d6f;border-color:transparent;color:#fff}html.theme--catppuccin-frappe .file.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-frappe .file.is-normal{font-size:1rem}html.theme--catppuccin-frappe .file.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-frappe .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-frappe .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-frappe .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-frappe .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-frappe .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-frappe .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-frappe .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-frappe .file.is-centered{justify-content:center}html.theme--catppuccin-frappe .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-frappe .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-frappe .file.is-right{justify-content:flex-end}html.theme--catppuccin-frappe .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-frappe .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-frappe .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-frappe .file-label:hover .file-cta{background-color:#3c3f52;color:#b0bef1}html.theme--catppuccin-frappe .file-label:hover .file-name{border-color:#5c6279}html.theme--catppuccin-frappe .file-label:active .file-cta{background-color:#363a4a;color:#b0bef1}html.theme--catppuccin-frappe .file-label:active .file-name{border-color:#575c72}html.theme--catppuccin-frappe .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-frappe .file-cta,html.theme--catppuccin-frappe .file-name{border-color:#626880;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-frappe .file-cta{background-color:#414559;color:#c6d0f5}html.theme--catppuccin-frappe .file-name{border-color:#626880;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-frappe .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-frappe .file-icon .fa{font-size:14px}html.theme--catppuccin-frappe .label{color:#b0bef1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-frappe .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-frappe .label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-frappe .label.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .label.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-frappe .help.is-white{color:#fff}html.theme--catppuccin-frappe .help.is-black{color:#0a0a0a}html.theme--catppuccin-frappe .help.is-light{color:#f5f5f5}html.theme--catppuccin-frappe .help.is-dark,html.theme--catppuccin-frappe .content kbd.help{color:#414559}html.theme--catppuccin-frappe .help.is-primary,html.theme--catppuccin-frappe .docstring>section>a.help.docs-sourcelink{color:#8caaee}html.theme--catppuccin-frappe .help.is-link{color:#8caaee}html.theme--catppuccin-frappe .help.is-info{color:#81c8be}html.theme--catppuccin-frappe .help.is-success{color:#a6d189}html.theme--catppuccin-frappe .help.is-warning{color:#e5c890}html.theme--catppuccin-frappe .help.is-danger{color:#e78284}html.theme--catppuccin-frappe .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-frappe .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-frappe .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-frappe .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-frappe .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-frappe .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-frappe .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-frappe .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-frappe .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field.is-horizontal{display:flex}}html.theme--catppuccin-frappe .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-frappe .field-label.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-frappe .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-frappe .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-frappe .field-body .field{margin-bottom:0}html.theme--catppuccin-frappe .field-body>.field{flex-shrink:1}html.theme--catppuccin-frappe .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-frappe .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-frappe .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select:focus~.icon{color:#414559}html.theme--catppuccin-frappe .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-frappe .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-frappe .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon{color:#626880;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-frappe .control.has-icons-left .input,html.theme--catppuccin-frappe .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-frappe .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-frappe .control.has-icons-right .input,html.theme--catppuccin-frappe .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-frappe .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-frappe .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-frappe .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-frappe .control.is-loading.is-small:after,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-frappe .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-frappe .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-frappe .breadcrumb a{align-items:center;color:#8caaee;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-frappe .breadcrumb a:hover{color:#99d1db}html.theme--catppuccin-frappe .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-frappe .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-frappe .breadcrumb li.is-active a{color:#b0bef1;cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb li+li::before{color:#737994;content:"\0002f"}html.theme--catppuccin-frappe .breadcrumb ul,html.theme--catppuccin-frappe .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-frappe .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .breadcrumb.is-centered ol,html.theme--catppuccin-frappe .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .breadcrumb.is-right ol,html.theme--catppuccin-frappe .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .breadcrumb.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-frappe .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-frappe .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-frappe .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-frappe .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-frappe .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#c6d0f5;max-width:100%;position:relative}html.theme--catppuccin-frappe .card-footer:first-child,html.theme--catppuccin-frappe .card-content:first-child,html.theme--catppuccin-frappe .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-footer:last-child,html.theme--catppuccin-frappe .card-content:last-child,html.theme--catppuccin-frappe .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-frappe .card-header-title{align-items:center;color:#b0bef1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-frappe .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-frappe .card-image{display:block;position:relative}html.theme--catppuccin-frappe .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-frappe .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-frappe .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-frappe .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-frappe .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-frappe .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-frappe .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-frappe .dropdown.is-active .dropdown-menu,html.theme--catppuccin-frappe .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-frappe .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-frappe .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-frappe .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-frappe .dropdown-content{background-color:#292c3c;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-frappe .dropdown-item{color:#c6d0f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-frappe a.dropdown-item,html.theme--catppuccin-frappe button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-frappe a.dropdown-item:hover,html.theme--catppuccin-frappe button.dropdown-item:hover{background-color:#292c3c;color:#0a0a0a}html.theme--catppuccin-frappe a.dropdown-item.is-active,html.theme--catppuccin-frappe button.dropdown-item.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-frappe .level{align-items:center;justify-content:space-between}html.theme--catppuccin-frappe .level code{border-radius:.4em}html.theme--catppuccin-frappe .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-frappe .level.is-mobile{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left,html.theme--catppuccin-frappe .level.is-mobile .level-right{display:flex}html.theme--catppuccin-frappe .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-frappe .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level{display:flex}html.theme--catppuccin-frappe .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-frappe .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-frappe .level-item .title,html.theme--catppuccin-frappe .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-frappe .level-left,html.theme--catppuccin-frappe .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .level-left .level-item.is-flexible,html.theme--catppuccin-frappe .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left .level-item:not(:last-child),html.theme--catppuccin-frappe .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-frappe .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-left{display:flex}}html.theme--catppuccin-frappe .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .level-right{display:flex}}html.theme--catppuccin-frappe .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-frappe .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .media .media{border-top:1px solid rgba(98,104,128,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-frappe .media .media .content:not(:last-child),html.theme--catppuccin-frappe .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-frappe .media .media .media{padding-top:.5rem}html.theme--catppuccin-frappe .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-frappe .media+.media{border-top:1px solid rgba(98,104,128,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-frappe .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-frappe .media-left,html.theme--catppuccin-frappe .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .media-left{margin-right:1rem}html.theme--catppuccin-frappe .media-right{margin-left:1rem}html.theme--catppuccin-frappe .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .media-content{overflow-x:auto}}html.theme--catppuccin-frappe .menu{font-size:1rem}html.theme--catppuccin-frappe .menu.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-frappe .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .menu.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .menu-list{line-height:1.25}html.theme--catppuccin-frappe .menu-list a{border-radius:3px;color:#c6d0f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-frappe .menu-list a:hover{background-color:#292c3c;color:#b0bef1}html.theme--catppuccin-frappe .menu-list a.is-active{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .menu-list li ul{border-left:1px solid #626880;margin:.75em;padding-left:.75em}html.theme--catppuccin-frappe .menu-label{color:#f1f4fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-frappe .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-frappe .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-frappe .message{background-color:#292c3c;border-radius:.4em;font-size:1rem}html.theme--catppuccin-frappe .message strong{color:currentColor}html.theme--catppuccin-frappe .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-frappe .message.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-frappe .message.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .message.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .message.is-white{background-color:#fff}html.theme--catppuccin-frappe .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-frappe .message.is-black{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-frappe .message.is-light{background-color:#fafafa}html.theme--catppuccin-frappe .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-frappe .message.is-dark,html.theme--catppuccin-frappe .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-frappe .message.is-dark .message-header,html.theme--catppuccin-frappe .content kbd.message .message-header{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .message.is-dark .message-body,html.theme--catppuccin-frappe .content kbd.message .message-body{border-color:#414559}html.theme--catppuccin-frappe .message.is-primary,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-primary .message-header,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-primary .message-body,html.theme--catppuccin-frappe .docstring>section>a.message.docs-sourcelink .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-link{background-color:#edf2fc}html.theme--catppuccin-frappe .message.is-link .message-header{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .message.is-link .message-body{border-color:#8caaee;color:#153a8e}html.theme--catppuccin-frappe .message.is-info{background-color:#f1f9f8}html.theme--catppuccin-frappe .message.is-info .message-header{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-info .message-body{border-color:#81c8be;color:#2d675f}html.theme--catppuccin-frappe .message.is-success{background-color:#f4f9f0}html.theme--catppuccin-frappe .message.is-success .message-header{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-success .message-body{border-color:#a6d189;color:#446a29}html.theme--catppuccin-frappe .message.is-warning{background-color:#fbf7ee}html.theme--catppuccin-frappe .message.is-warning .message-header{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .message.is-warning .message-body{border-color:#e5c890;color:#78591c}html.theme--catppuccin-frappe .message.is-danger{background-color:#fceeee}html.theme--catppuccin-frappe .message.is-danger .message-header{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .message.is-danger .message-body{border-color:#e78284;color:#9a1e20}html.theme--catppuccin-frappe .message-header{align-items:center;background-color:#c6d0f5;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--catppuccin-frappe .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-frappe .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-frappe .message-body{border-color:#626880;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#c6d0f5;padding:1.25em 1.5em}html.theme--catppuccin-frappe .message-body code,html.theme--catppuccin-frappe .message-body pre{background-color:#fff}html.theme--catppuccin-frappe .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-frappe .modal.is-active{display:flex}html.theme--catppuccin-frappe .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-frappe .modal-content,html.theme--catppuccin-frappe .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-frappe .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-frappe .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-frappe .modal-card-head,html.theme--catppuccin-frappe .modal-card-foot{align-items:center;background-color:#292c3c;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-frappe .modal-card-head{border-bottom:1px solid #626880;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-frappe .modal-card-title{color:#c6d0f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-frappe .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #626880}html.theme--catppuccin-frappe .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-frappe .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#303446;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-frappe .navbar{background-color:#8caaee;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-frappe .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-frappe .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-frappe .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-frappe .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-dark,html.theme--catppuccin-frappe .content kbd.navbar{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-burger,html.theme--catppuccin-frappe .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#414559;color:#fff}}html.theme--catppuccin-frappe .navbar.is-primary,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-burger,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee;color:#fff}}html.theme--catppuccin-frappe .navbar.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#81c8be;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6d189;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#e5c890;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-frappe .navbar.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-frappe .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#e78284;color:#fff}}html.theme--catppuccin-frappe .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-frappe .navbar.has-shadow{box-shadow:0 2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-bottom,html.theme--catppuccin-frappe .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #292c3c}html.theme--catppuccin-frappe .navbar.is-fixed-top{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top,html.theme--catppuccin-frappe body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-frappe .navbar-brand,html.theme--catppuccin-frappe .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-frappe .navbar-brand a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-frappe .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-frappe .navbar-burger{color:#c6d0f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-frappe .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--catppuccin-frappe .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-frappe .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-frappe .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-frappe .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-frappe .navbar-menu{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{color:#c6d0f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-frappe .navbar-item .icon:only-child,html.theme--catppuccin-frappe .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-frappe a.navbar-item,html.theme--catppuccin-frappe .navbar-link{cursor:pointer}html.theme--catppuccin-frappe a.navbar-item:focus,html.theme--catppuccin-frappe a.navbar-item:focus-within,html.theme--catppuccin-frappe a.navbar-item:hover,html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link:focus,html.theme--catppuccin-frappe .navbar-link:focus-within,html.theme--catppuccin-frappe .navbar-link:hover,html.theme--catppuccin-frappe .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .navbar-item img{max-height:1.75rem}html.theme--catppuccin-frappe .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-frappe .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-frappe .navbar-item.is-tab:focus,html.theme--catppuccin-frappe .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee}html.theme--catppuccin-frappe .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8caaee;border-bottom-style:solid;border-bottom-width:3px;color:#8caaee;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-frappe .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-frappe .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-frappe .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-frappe .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-frappe .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--catppuccin-frappe .navbar>.container{display:block}html.theme--catppuccin-frappe .navbar-brand .navbar-item,html.theme--catppuccin-frappe .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-link::after{display:none}html.theme--catppuccin-frappe .navbar-menu{background-color:#8caaee;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-frappe .navbar-menu.is-active{display:block}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-frappe .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-frappe .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-frappe html.has-navbar-fixed-top-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .navbar,html.theme--catppuccin-frappe .navbar-menu,html.theme--catppuccin-frappe .navbar-start,html.theme--catppuccin-frappe .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-frappe .navbar{min-height:4rem}html.theme--catppuccin-frappe .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-frappe .navbar.is-spaced .navbar-start,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-frappe .navbar.is-spaced a.navbar-item,html.theme--catppuccin-frappe .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-frappe .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}html.theme--catppuccin-frappe .navbar-burger{display:none}html.theme--catppuccin-frappe .navbar-item,html.theme--catppuccin-frappe .navbar-link{align-items:center;display:flex}html.theme--catppuccin-frappe .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-frappe .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-frappe .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--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-frappe .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-frappe .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-frappe .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-frappe .navbar-dropdown{background-color:#8caaee;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--catppuccin-frappe .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#838ba7}html.theme--catppuccin-frappe .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8caaee}.navbar.is-spaced html.theme--catppuccin-frappe .navbar-dropdown,html.theme--catppuccin-frappe .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--catppuccin-frappe .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-frappe .navbar-divider{display:block}html.theme--catppuccin-frappe .navbar>.container .navbar-brand,html.theme--catppuccin-frappe .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-frappe .navbar>.container .navbar-menu,html.theme--catppuccin-frappe .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-frappe .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-frappe html.has-navbar-fixed-top-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-frappe html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-frappe body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-top,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-frappe html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-frappe body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-frappe a.navbar-item.is-active,html.theme--catppuccin-frappe .navbar-link.is-active{color:#8caaee}html.theme--catppuccin-frappe a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-frappe .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-frappe .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-frappe .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-frappe .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-frappe .pagination.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-frappe .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-previous,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-frappe .pagination.is-rounded .pagination-next,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-frappe .pagination.is-rounded .pagination-link,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-frappe .pagination,html.theme--catppuccin-frappe .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link{border-color:#626880;color:#8caaee;min-width:2.5em}html.theme--catppuccin-frappe .pagination-previous:hover,html.theme--catppuccin-frappe .pagination-next:hover,html.theme--catppuccin-frappe .pagination-link:hover{border-color:#737994;color:#99d1db}html.theme--catppuccin-frappe .pagination-previous:focus,html.theme--catppuccin-frappe .pagination-next:focus,html.theme--catppuccin-frappe .pagination-link:focus{border-color:#737994}html.theme--catppuccin-frappe .pagination-previous:active,html.theme--catppuccin-frappe .pagination-next:active,html.theme--catppuccin-frappe .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-frappe .pagination-previous[disabled],html.theme--catppuccin-frappe .pagination-previous.is-disabled,html.theme--catppuccin-frappe .pagination-next[disabled],html.theme--catppuccin-frappe .pagination-next.is-disabled,html.theme--catppuccin-frappe .pagination-link[disabled],html.theme--catppuccin-frappe .pagination-link.is-disabled{background-color:#626880;border-color:#626880;box-shadow:none;color:#f1f4fd;opacity:0.5}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-frappe .pagination-link.is-current{background-color:#8caaee;border-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .pagination-ellipsis{color:#737994;pointer-events:none}html.theme--catppuccin-frappe .pagination-list{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .pagination{flex-wrap:wrap}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination-previous{order:2}html.theme--catppuccin-frappe .pagination-next{order:3}html.theme--catppuccin-frappe .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-frappe .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-frappe .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-frappe .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-frappe .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-frappe .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-frappe .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-frappe .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-frappe .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-frappe .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-frappe .panel.is-dark .panel-heading,html.theme--catppuccin-frappe .content kbd.panel .panel-heading{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-frappe .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#414559}html.theme--catppuccin-frappe .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .content kbd.panel .panel-block.is-active .panel-icon{color:#414559}html.theme--catppuccin-frappe .panel.is-primary .panel-heading,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-frappe .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-heading{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8caaee}html.theme--catppuccin-frappe .panel.is-link .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel.is-info .panel-heading{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-info .panel-tabs a.is-active{border-bottom-color:#81c8be}html.theme--catppuccin-frappe .panel.is-info .panel-block.is-active .panel-icon{color:#81c8be}html.theme--catppuccin-frappe .panel.is-success .panel-heading{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6d189}html.theme--catppuccin-frappe .panel.is-success .panel-block.is-active .panel-icon{color:#a6d189}html.theme--catppuccin-frappe .panel.is-warning .panel-heading{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#e5c890}html.theme--catppuccin-frappe .panel.is-warning .panel-block.is-active .panel-icon{color:#e5c890}html.theme--catppuccin-frappe .panel.is-danger .panel-heading{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#e78284}html.theme--catppuccin-frappe .panel.is-danger .panel-block.is-active .panel-icon{color:#e78284}html.theme--catppuccin-frappe .panel-tabs:not(:last-child),html.theme--catppuccin-frappe .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-frappe .panel-heading{background-color:#51576d;border-radius:8px 8px 0 0;color:#b0bef1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-frappe .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-frappe .panel-tabs a{border-bottom:1px solid #626880;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-frappe .panel-tabs a.is-active{border-bottom-color:#51576d;color:#769aeb}html.theme--catppuccin-frappe .panel-list a{color:#c6d0f5}html.theme--catppuccin-frappe .panel-list a:hover{color:#8caaee}html.theme--catppuccin-frappe .panel-block{align-items:center;color:#b0bef1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-frappe .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-frappe .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-frappe .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-frappe .panel-block.is-active{border-left-color:#8caaee;color:#769aeb}html.theme--catppuccin-frappe .panel-block.is-active .panel-icon{color:#8caaee}html.theme--catppuccin-frappe .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-frappe a.panel-block,html.theme--catppuccin-frappe label.panel-block{cursor:pointer}html.theme--catppuccin-frappe a.panel-block:hover,html.theme--catppuccin-frappe label.panel-block:hover{background-color:#292c3c}html.theme--catppuccin-frappe .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f1f4fd;margin-right:.75em}html.theme--catppuccin-frappe .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-frappe .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}html.theme--catppuccin-frappe .tabs a{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;color:#c6d0f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-frappe .tabs a:hover{border-bottom-color:#b0bef1;color:#b0bef1}html.theme--catppuccin-frappe .tabs li{display:block}html.theme--catppuccin-frappe .tabs li.is-active a{border-bottom-color:#8caaee;color:#8caaee}html.theme--catppuccin-frappe .tabs ul{align-items:center;border-bottom-color:#626880;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-frappe .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-frappe .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-frappe .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-frappe .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-frappe .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-frappe .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-frappe .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-frappe .tabs.is-boxed a:hover{background-color:#292c3c;border-bottom-color:#626880}html.theme--catppuccin-frappe .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#626880;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-frappe .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-frappe .tabs.is-toggle a{border-color:#626880;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-frappe .tabs.is-toggle a:hover{background-color:#292c3c;border-color:#737994;z-index:2}html.theme--catppuccin-frappe .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-frappe .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-frappe .tabs.is-toggle li.is-active a{background-color:#8caaee;border-color:#8caaee;color:#fff;z-index:1}html.theme--catppuccin-frappe .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-frappe .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-frappe .tabs.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-frappe .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-frappe .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .column.is-narrow,html.theme--catppuccin-frappe .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full,html.theme--catppuccin-frappe .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters,html.theme--catppuccin-frappe .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds,html.theme--catppuccin-frappe .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half,html.theme--catppuccin-frappe .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third,html.theme--catppuccin-frappe .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter,html.theme--catppuccin-frappe .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth,html.theme--catppuccin-frappe .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths,html.theme--catppuccin-frappe .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths,html.theme--catppuccin-frappe .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths,html.theme--catppuccin-frappe .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters,html.theme--catppuccin-frappe .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds,html.theme--catppuccin-frappe .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half,html.theme--catppuccin-frappe .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third,html.theme--catppuccin-frappe .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter,html.theme--catppuccin-frappe .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth,html.theme--catppuccin-frappe .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths,html.theme--catppuccin-frappe .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths,html.theme--catppuccin-frappe .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths,html.theme--catppuccin-frappe .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-frappe .column.is-0,html.theme--catppuccin-frappe .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0,html.theme--catppuccin-frappe .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-frappe .column.is-1,html.theme--catppuccin-frappe .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1,html.theme--catppuccin-frappe .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2,html.theme--catppuccin-frappe .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2,html.theme--catppuccin-frappe .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3,html.theme--catppuccin-frappe .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3,html.theme--catppuccin-frappe .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-frappe .column.is-4,html.theme--catppuccin-frappe .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4,html.theme--catppuccin-frappe .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5,html.theme--catppuccin-frappe .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5,html.theme--catppuccin-frappe .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6,html.theme--catppuccin-frappe .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6,html.theme--catppuccin-frappe .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-frappe .column.is-7,html.theme--catppuccin-frappe .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7,html.theme--catppuccin-frappe .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8,html.theme--catppuccin-frappe .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8,html.theme--catppuccin-frappe .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9,html.theme--catppuccin-frappe .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9,html.theme--catppuccin-frappe .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-frappe .column.is-10,html.theme--catppuccin-frappe .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10,html.theme--catppuccin-frappe .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11,html.theme--catppuccin-frappe .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11,html.theme--catppuccin-frappe .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12,html.theme--catppuccin-frappe .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12,html.theme--catppuccin-frappe .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-frappe .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-frappe .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-frappe .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-frappe .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-frappe .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-frappe .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-frappe .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-frappe .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-frappe .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-frappe .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-frappe .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-frappe .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-frappe .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-frappe .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-frappe .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-frappe .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-frappe .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-frappe .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-frappe .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-frappe .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-frappe .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-frappe .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-frappe .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-frappe .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-frappe .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-frappe .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-frappe .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-frappe .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-frappe .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-frappe .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-frappe .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-frappe .columns.is-centered{justify-content:center}html.theme--catppuccin-frappe .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-frappe .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-frappe .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-frappe .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-frappe .columns.is-mobile{display:flex}html.theme--catppuccin-frappe .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-frappe .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-desktop{display:flex}}html.theme--catppuccin-frappe .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-frappe .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-frappe .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-frappe .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-frappe .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-frappe .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-frappe .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-frappe .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-frappe .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-frappe .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-frappe .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-frappe .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-frappe .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-frappe .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-frappe .tile.is-child{margin:0 !important}html.theme--catppuccin-frappe .tile.is-parent{padding:.75rem}html.theme--catppuccin-frappe .tile.is-vertical{flex-direction:column}html.theme--catppuccin-frappe .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .tile:not(.is-child){display:flex}html.theme--catppuccin-frappe .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-frappe .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-frappe .tile.is-3{flex:none;width:25%}html.theme--catppuccin-frappe .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-frappe .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-frappe .tile.is-6{flex:none;width:50%}html.theme--catppuccin-frappe .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-frappe .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-frappe .tile.is-9{flex:none;width:75%}html.theme--catppuccin-frappe .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-frappe .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-frappe .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-frappe .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-frappe .hero .navbar{background:none}html.theme--catppuccin-frappe .hero .tabs ul{border-bottom:none}html.theme--catppuccin-frappe .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-white strong{color:inherit}html.theme--catppuccin-frappe .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-frappe .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-frappe .hero.is-white .navbar-item,html.theme--catppuccin-frappe .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-frappe .hero.is-white a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-white .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-frappe .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-frappe .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-black strong{color:inherit}html.theme--catppuccin-frappe .hero.is-black .title{color:#fff}html.theme--catppuccin-frappe .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-frappe .hero.is-black .navbar-item,html.theme--catppuccin-frappe .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-black a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-black .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-frappe .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-frappe .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-light strong{color:inherit}html.theme--catppuccin-frappe .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-frappe .hero.is-light .navbar-item,html.theme--catppuccin-frappe .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-light .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-light .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:#f5f5f5}html.theme--catppuccin-frappe .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-frappe .hero.is-dark,html.theme--catppuccin-frappe .content kbd.hero{background-color:#414559;color:#fff}html.theme--catppuccin-frappe .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-dark strong,html.theme--catppuccin-frappe .content kbd.hero strong{color:inherit}html.theme--catppuccin-frappe .hero.is-dark .title,html.theme--catppuccin-frappe .content kbd.hero .title{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .subtitle,html.theme--catppuccin-frappe .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-frappe .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-dark .subtitle strong,html.theme--catppuccin-frappe .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-dark .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero .navbar-menu{background-color:#414559}}html.theme--catppuccin-frappe .hero.is-dark .navbar-item,html.theme--catppuccin-frappe .content kbd.hero .navbar-item,html.theme--catppuccin-frappe .hero.is-dark .navbar-link,html.theme--catppuccin-frappe .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-frappe .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-dark .navbar-link:hover,html.theme--catppuccin-frappe .content kbd.hero .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-frappe .content kbd.hero .navbar-link.is-active{background-color:#363a4a;color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs a,html.theme--catppuccin-frappe .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-dark .tabs a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs li.is-active a{color:#414559 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#414559}html.theme--catppuccin-frappe .hero.is-dark.is-bold,html.theme--catppuccin-frappe .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-frappe .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #262f41 0%, #414559 71%, #47476c 100%)}}html.theme--catppuccin-frappe .hero.is-primary,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-primary strong,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-frappe .hero.is-primary .title,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .subtitle,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-primary .subtitle strong,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-primary .navbar-menu,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-primary .navbar-item,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-frappe .hero.is-primary .navbar-link,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-primary .navbar-link:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-primary .tabs a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-primary.is-bold,html.theme--catppuccin-frappe .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-frappe .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-link{background-color:#8caaee;color:#fff}html.theme--catppuccin-frappe .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-link strong{color:inherit}html.theme--catppuccin-frappe .hero.is-link .title{color:#fff}html.theme--catppuccin-frappe .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-link .navbar-menu{background-color:#8caaee}}html.theme--catppuccin-frappe .hero.is-link .navbar-item,html.theme--catppuccin-frappe .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-link a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-link .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-link .navbar-link.is-active{background-color:#769aeb;color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs li.is-active a{color:#8caaee !important;opacity:1}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8caaee}html.theme--catppuccin-frappe .hero.is-link.is-bold{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #569ff1 0%, #8caaee 71%, #a0abf4 100%)}}html.theme--catppuccin-frappe .hero.is-info{background-color:#81c8be;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-info strong{color:inherit}html.theme--catppuccin-frappe .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-info .navbar-menu{background-color:#81c8be}}html.theme--catppuccin-frappe .hero.is-info .navbar-item,html.theme--catppuccin-frappe .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-info .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-info .navbar-link.is-active{background-color:#6fc0b5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs li.is-active a{color:#81c8be !important;opacity:1}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-info .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:#81c8be}html.theme--catppuccin-frappe .hero.is-info.is-bold{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52c4a1 0%, #81c8be 71%, #8fd2d4 100%)}}html.theme--catppuccin-frappe .hero.is-success{background-color:#a6d189;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-success strong{color:inherit}html.theme--catppuccin-frappe .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-success .navbar-menu{background-color:#a6d189}}html.theme--catppuccin-frappe .hero.is-success .navbar-item,html.theme--catppuccin-frappe .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-success .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-success .navbar-link.is-active{background-color:#98ca77;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs li.is-active a{color:#a6d189 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-success .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:#a6d189}html.theme--catppuccin-frappe .hero.is-success.is-bold{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #9ccd5a 0%, #a6d189 71%, #a8dc98 100%)}}html.theme--catppuccin-frappe .hero.is-warning{background-color:#e5c890;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-warning strong{color:inherit}html.theme--catppuccin-frappe .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-frappe .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-warning .navbar-menu{background-color:#e5c890}}html.theme--catppuccin-frappe .hero.is-warning .navbar-item,html.theme--catppuccin-frappe .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-warning .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-warning .navbar-link.is-active{background-color:#e0be7b;color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-frappe .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs li.is-active a{color:#e5c890 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .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:#e5c890}html.theme--catppuccin-frappe .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e5a05d 0%, #e5c890 71%, #ede0a2 100%)}}html.theme--catppuccin-frappe .hero.is-danger{background-color:#e78284;color:#fff}html.theme--catppuccin-frappe .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-frappe .hero.is-danger strong{color:inherit}html.theme--catppuccin-frappe .hero.is-danger .title{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-frappe .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-frappe .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .hero.is-danger .navbar-menu{background-color:#e78284}}html.theme--catppuccin-frappe .hero.is-danger .navbar-item,html.theme--catppuccin-frappe .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-frappe .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-frappe .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-frappe .hero.is-danger .navbar-link:hover,html.theme--catppuccin-frappe .hero.is-danger .navbar-link.is-active{background-color:#e36d6f;color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-frappe .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs li.is-active a{color:#e78284 !important;opacity:1}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-frappe .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#e78284}html.theme--catppuccin-frappe .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e94d6a 0%, #e78284 71%, #eea294 100%)}}html.theme--catppuccin-frappe .hero.is-small .hero-body,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-frappe .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-frappe .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-frappe .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-frappe .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-frappe .hero-video{overflow:hidden}html.theme--catppuccin-frappe .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-frappe .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-video{display:none}}html.theme--catppuccin-frappe .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-frappe .hero-buttons .button{display:flex}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-frappe .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-frappe .hero-head,html.theme--catppuccin-frappe .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-frappe .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-frappe .hero-body{padding:3rem 3rem}}html.theme--catppuccin-frappe .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe .section{padding:3rem 3rem}html.theme--catppuccin-frappe .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-frappe .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-frappe .footer{background-color:#292c3c;padding:3rem 1.5rem 6rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor,html.theme--catppuccin-frappe h1 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h1 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h2 .docs-heading-anchor,html.theme--catppuccin-frappe h2 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h2 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h3 .docs-heading-anchor,html.theme--catppuccin-frappe h3 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h3 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h4 .docs-heading-anchor,html.theme--catppuccin-frappe h4 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h4 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h5 .docs-heading-anchor,html.theme--catppuccin-frappe h5 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h5 .docs-heading-anchor:visited,html.theme--catppuccin-frappe h6 .docs-heading-anchor,html.theme--catppuccin-frappe h6 .docs-heading-anchor:hover,html.theme--catppuccin-frappe h6 .docs-heading-anchor:visited{color:#c6d0f5}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-frappe h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-frappe h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-frappe h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-frappe h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-frappe .docs-light-only{display:none !important}html.theme--catppuccin-frappe pre{position:relative;overflow:hidden}html.theme--catppuccin-frappe pre code,html.theme--catppuccin-frappe pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-frappe pre code:first-of-type,html.theme--catppuccin-frappe pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-frappe pre code:last-of-type,html.theme--catppuccin-frappe pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-frappe 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 6 Free";color:#c6d0f5;cursor:pointer;text-align:center}html.theme--catppuccin-frappe pre .copy-button:focus,html.theme--catppuccin-frappe pre .copy-button:hover{opacity:1;background:rgba(198,208,245,0.1);color:#8caaee}html.theme--catppuccin-frappe pre .copy-button.success{color:#a6d189;opacity:1}html.theme--catppuccin-frappe pre .copy-button.error{color:#e78284;opacity:1}html.theme--catppuccin-frappe pre:hover .copy-button{opacity:1}html.theme--catppuccin-frappe .admonition{background-color:#292c3c;border-style:solid;border-width:2px;border-color:#b5bfe2;border-radius:4px;font-size:1rem}html.theme--catppuccin-frappe .admonition strong{color:currentColor}html.theme--catppuccin-frappe .admonition.is-small,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-frappe .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-frappe .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-frappe .admonition.is-default{background-color:#292c3c;border-color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b5bfe2}html.theme--catppuccin-frappe .admonition.is-default>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-info{background-color:#292c3c;border-color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#81c8be}html.theme--catppuccin-frappe .admonition.is-info>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-success{background-color:#292c3c;border-color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6d189}html.theme--catppuccin-frappe .admonition.is-success>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-warning{background-color:#292c3c;border-color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#e5c890}html.theme--catppuccin-frappe .admonition.is-warning>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-danger{background-color:#292c3c;border-color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#e78284}html.theme--catppuccin-frappe .admonition.is-danger>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition.is-compat{background-color:#292c3c;border-color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#99d1db}html.theme--catppuccin-frappe .admonition.is-compat>.admonition-body{color:#c6d0f5}html.theme--catppuccin-frappe .admonition-header{color:#b5bfe2;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-frappe .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-frappe details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-frappe details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-frappe .admonition-body{color:#c6d0f5;padding:0.5rem .75rem}html.theme--catppuccin-frappe .admonition-body pre{background-color:#292c3c}html.theme--catppuccin-frappe .admonition-body code{background-color:#292c3c}html.theme--catppuccin-frappe .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #626880;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-frappe .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#292c3c;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #626880;overflow:auto}html.theme--catppuccin-frappe .docstring>header code{background-color:transparent}html.theme--catppuccin-frappe .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-frappe .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-frappe .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-frappe .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #626880}html.theme--catppuccin-frappe .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-frappe .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-frappe .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-frappe .documenter-example-output{background-color:#303446}html.theme--catppuccin-frappe .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:#292c3c;color:#c6d0f5;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-frappe .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-frappe .outdated-warning-overlay a{color:#8caaee}html.theme--catppuccin-frappe .outdated-warning-overlay a:hover{color:#99d1db}html.theme--catppuccin-frappe .content pre{border:2px solid #626880;border-radius:4px}html.theme--catppuccin-frappe .content code{font-weight:inherit}html.theme--catppuccin-frappe .content a code{color:#8caaee}html.theme--catppuccin-frappe .content a:hover code{color:#99d1db}html.theme--catppuccin-frappe .content h1 code,html.theme--catppuccin-frappe .content h2 code,html.theme--catppuccin-frappe .content h3 code,html.theme--catppuccin-frappe .content h4 code,html.theme--catppuccin-frappe .content h5 code,html.theme--catppuccin-frappe .content h6 code{color:#c6d0f5}html.theme--catppuccin-frappe .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-frappe .content blockquote>ul:first-child,html.theme--catppuccin-frappe .content blockquote>ol:first-child,html.theme--catppuccin-frappe .content .admonition-body>ul:first-child,html.theme--catppuccin-frappe .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-frappe pre,html.theme--catppuccin-frappe code{font-variant-ligatures:no-contextual}html.theme--catppuccin-frappe .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-frappe .breadcrumb a.is-disabled,html.theme--catppuccin-frappe .breadcrumb a.is-disabled:hover{color:#b0bef1}html.theme--catppuccin-frappe .hljs{background:initial !important}html.theme--catppuccin-frappe .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-frappe .katex-display,html.theme--catppuccin-frappe mjx-container,html.theme--catppuccin-frappe .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-frappe html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-frappe li.no-marker{list-style:none}html.theme--catppuccin-frappe #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-frappe #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main{width:100%}html.theme--catppuccin-frappe #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-main>header,html.theme--catppuccin-frappe #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar{background-color:#303446;border-bottom:1px solid #626880;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-frappe #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #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--catppuccin-frappe #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--catppuccin-frappe #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--catppuccin-frappe #documenter .docs-main section.footnotes{border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-frappe #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-frappe .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #626880;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-frappe #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-frappe #documenter .docs-sidebar{display:flex;flex-direction:column;color:#c6d0f5;background-color:#292c3c;border-right:1px solid #626880;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-frappe #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--catppuccin-frappe #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-package-name a:hover{color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #626880;display:none;padding:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #626880;padding-bottom:1.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-frappe #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}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#c6d0f5;background:#292c3c}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#c6d0f5;background-color:#313548}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #626880;border-bottom:1px solid #626880;background-color:#232634}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#232634;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#313548;color:#c6d0f5}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #626880}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-frappe #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4a506c}}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3a3e54}html.theme--catppuccin-frappe #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4a506c}}html.theme--catppuccin-frappe kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-frappe .search-min-width-50{min-width:50%}html.theme--catppuccin-frappe .search-min-height-100{min-height:100%}html.theme--catppuccin-frappe .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .property-search-result-badge,html.theme--catppuccin-frappe .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-frappe .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-frappe .search-filter:hover,html.theme--catppuccin-frappe .search-filter:focus{color:#333}html.theme--catppuccin-frappe .search-filter-selected{color:#414559;background-color:#babbf1}html.theme--catppuccin-frappe .search-filter-selected:hover,html.theme--catppuccin-frappe .search-filter-selected:focus{color:#414559}html.theme--catppuccin-frappe .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #626880}html.theme--catppuccin-frappe .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-frappe .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-frappe #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-frappe #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem}html.theme--catppuccin-frappe .gap-8{gap:2rem}html.theme--catppuccin-frappe{background-color:#303446;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-frappe a{transition:all 200ms ease}html.theme--catppuccin-frappe .label{color:#c6d0f5}html.theme--catppuccin-frappe .button,html.theme--catppuccin-frappe .control.has-icons-left .icon,html.theme--catppuccin-frappe .control.has-icons-right .icon,html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .pagination-ellipsis,html.theme--catppuccin-frappe .pagination-link,html.theme--catppuccin-frappe .pagination-next,html.theme--catppuccin-frappe .pagination-previous,html.theme--catppuccin-frappe .select,html.theme--catppuccin-frappe .select select,html.theme--catppuccin-frappe .textarea{height:2.5em;color:#c6d0f5}html.theme--catppuccin-frappe .input,html.theme--catppuccin-frappe #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-frappe .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#c6d0f5}html.theme--catppuccin-frappe .select:after,html.theme--catppuccin-frappe .select select{border-width:1px}html.theme--catppuccin-frappe .menu-list a{transition:all 300ms ease}html.theme--catppuccin-frappe .modal-card-foot,html.theme--catppuccin-frappe .modal-card-head{border-color:#626880}html.theme--catppuccin-frappe .navbar{border-radius:.4em}html.theme--catppuccin-frappe .navbar.is-transparent{background:none}html.theme--catppuccin-frappe .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-frappe .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8caaee}@media screen and (max-width: 1055px){html.theme--catppuccin-frappe .navbar .navbar-menu{background-color:#8caaee;border-radius:0 0 .4em .4em}}html.theme--catppuccin-frappe .docstring>section>a.docs-sourcelink:not(body){color:#414559}html.theme--catppuccin-frappe .tag.is-link:not(body),html.theme--catppuccin-frappe .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-frappe .content kbd.is-link:not(body){color:#414559}html.theme--catppuccin-frappe .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-frappe .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-frappe .ansi span.sgr3{font-style:italic}html.theme--catppuccin-frappe .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-frappe .ansi span.sgr7{color:#303446;background-color:#c6d0f5}html.theme--catppuccin-frappe .ansi span.sgr8{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-frappe .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-frappe .ansi span.sgr30{color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr31{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr32{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr33{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr34{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr35{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr36{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr37{color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr40{background-color:#51576d}html.theme--catppuccin-frappe .ansi span.sgr41{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr42{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr43{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr44{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr45{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr46{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr47{background-color:#b5bfe2}html.theme--catppuccin-frappe .ansi span.sgr90{color:#626880}html.theme--catppuccin-frappe .ansi span.sgr91{color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr92{color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr93{color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr94{color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr95{color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr96{color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr97{color:#a5adce}html.theme--catppuccin-frappe .ansi span.sgr100{background-color:#626880}html.theme--catppuccin-frappe .ansi span.sgr101{background-color:#e78284}html.theme--catppuccin-frappe .ansi span.sgr102{background-color:#a6d189}html.theme--catppuccin-frappe .ansi span.sgr103{background-color:#e5c890}html.theme--catppuccin-frappe .ansi span.sgr104{background-color:#8caaee}html.theme--catppuccin-frappe .ansi span.sgr105{background-color:#f4b8e4}html.theme--catppuccin-frappe .ansi span.sgr106{background-color:#81c8be}html.theme--catppuccin-frappe .ansi span.sgr107{background-color:#a5adce}html.theme--catppuccin-frappe code.language-julia-repl>span.hljs-meta{color:#a6d189;font-weight:bolder}html.theme--catppuccin-frappe code .hljs{color:#c6d0f5;background:#303446}html.theme--catppuccin-frappe code .hljs-keyword{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-built_in{color:#e78284}html.theme--catppuccin-frappe code .hljs-type{color:#e5c890}html.theme--catppuccin-frappe code .hljs-literal{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-number{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-operator{color:#81c8be}html.theme--catppuccin-frappe code .hljs-punctuation{color:#b5bfe2}html.theme--catppuccin-frappe code .hljs-property{color:#81c8be}html.theme--catppuccin-frappe code .hljs-regexp{color:#f4b8e4}html.theme--catppuccin-frappe code .hljs-string{color:#a6d189}html.theme--catppuccin-frappe code .hljs-char.escape_{color:#a6d189}html.theme--catppuccin-frappe code .hljs-subst{color:#a5adce}html.theme--catppuccin-frappe code .hljs-symbol{color:#eebebe}html.theme--catppuccin-frappe code .hljs-variable{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.language_{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-variable.constant_{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-title{color:#8caaee}html.theme--catppuccin-frappe code .hljs-title.class_{color:#e5c890}html.theme--catppuccin-frappe code .hljs-title.function_{color:#8caaee}html.theme--catppuccin-frappe code .hljs-params{color:#c6d0f5}html.theme--catppuccin-frappe code .hljs-comment{color:#626880}html.theme--catppuccin-frappe code .hljs-doctag{color:#e78284}html.theme--catppuccin-frappe code .hljs-meta{color:#ef9f76}html.theme--catppuccin-frappe code .hljs-section{color:#8caaee}html.theme--catppuccin-frappe code .hljs-tag{color:#a5adce}html.theme--catppuccin-frappe code .hljs-name{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-attr{color:#8caaee}html.theme--catppuccin-frappe code .hljs-attribute{color:#a6d189}html.theme--catppuccin-frappe code .hljs-bullet{color:#81c8be}html.theme--catppuccin-frappe code .hljs-code{color:#a6d189}html.theme--catppuccin-frappe code .hljs-emphasis{color:#e78284;font-style:italic}html.theme--catppuccin-frappe code .hljs-strong{color:#e78284;font-weight:bold}html.theme--catppuccin-frappe code .hljs-formula{color:#81c8be}html.theme--catppuccin-frappe code .hljs-link{color:#85c1dc;font-style:italic}html.theme--catppuccin-frappe code .hljs-quote{color:#a6d189;font-style:italic}html.theme--catppuccin-frappe code .hljs-selector-tag{color:#e5c890}html.theme--catppuccin-frappe code .hljs-selector-id{color:#8caaee}html.theme--catppuccin-frappe code .hljs-selector-class{color:#81c8be}html.theme--catppuccin-frappe code .hljs-selector-attr{color:#ca9ee6}html.theme--catppuccin-frappe code .hljs-selector-pseudo{color:#81c8be}html.theme--catppuccin-frappe code .hljs-template-tag{color:#eebebe}html.theme--catppuccin-frappe code .hljs-template-variable{color:#eebebe}html.theme--catppuccin-frappe code .hljs-addition{color:#a6d189;background:rgba(166,227,161,0.15)}html.theme--catppuccin-frappe code .hljs-deletion{color:#e78284;background:rgba(243,139,168,0.15)}html.theme--catppuccin-frappe .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover,html.theme--catppuccin-frappe .search-result-link:focus{background-color:#414559}html.theme--catppuccin-frappe .search-result-link .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-frappe .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:hover .search-filter,html.theme--catppuccin-frappe .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-frappe .search-result-link:focus .search-filter{color:#414559 !important;background-color:#babbf1 !important}html.theme--catppuccin-frappe .search-result-title{color:#c6d0f5}html.theme--catppuccin-frappe .search-result-highlight{background-color:#e78284;color:#292c3c}html.theme--catppuccin-frappe .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-frappe .w-100{width:100%}html.theme--catppuccin-frappe .gap-2{gap:0.5rem}html.theme--catppuccin-frappe .gap-4{gap:1rem} diff --git a/v0.8.7/assets/themes/catppuccin-latte.css b/v0.8.7/assets/themes/catppuccin-latte.css new file mode 100644 index 0000000000..ca172b630e --- /dev/null +++ b/v0.8.7/assets/themes/catppuccin-latte.css @@ -0,0 +1 @@ +html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .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:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus,html.theme--catppuccin-latte .pagination-ellipsis:focus,html.theme--catppuccin-latte .file-cta:focus,html.theme--catppuccin-latte .file-name:focus,html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .is-focused.pagination-previous,html.theme--catppuccin-latte .is-focused.pagination-next,html.theme--catppuccin-latte .is-focused.pagination-link,html.theme--catppuccin-latte .is-focused.pagination-ellipsis,html.theme--catppuccin-latte .is-focused.file-cta,html.theme--catppuccin-latte .is-focused.file-name,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-focused.button,html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active,html.theme--catppuccin-latte .pagination-ellipsis:active,html.theme--catppuccin-latte .file-cta:active,html.theme--catppuccin-latte .file-name:active,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .is-active.pagination-previous,html.theme--catppuccin-latte .is-active.pagination-next,html.theme--catppuccin-latte .is-active.pagination-link,html.theme--catppuccin-latte .is-active.pagination-ellipsis,html.theme--catppuccin-latte .is-active.file-cta,html.theme--catppuccin-latte .is-active.file-name,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .is-active.button{outline:none}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-ellipsis[disabled],html.theme--catppuccin-latte .file-cta[disabled],html.theme--catppuccin-latte .file-name[disabled],html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte fieldset[disabled] .select select,html.theme--catppuccin-latte .select fieldset[disabled] select,html.theme--catppuccin-latte fieldset[disabled] .textarea,html.theme--catppuccin-latte fieldset[disabled] .input,html.theme--catppuccin-latte fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-latte .button,html.theme--catppuccin-latte fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-latte .tabs,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .breadcrumb,html.theme--catppuccin-latte .file,html.theme--catppuccin-latte .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-latte .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--catppuccin-latte .admonition:not(:last-child),html.theme--catppuccin-latte .tabs:not(:last-child),html.theme--catppuccin-latte .pagination:not(:last-child),html.theme--catppuccin-latte .message:not(:last-child),html.theme--catppuccin-latte .level:not(:last-child),html.theme--catppuccin-latte .breadcrumb:not(:last-child),html.theme--catppuccin-latte .block:not(:last-child),html.theme--catppuccin-latte .title:not(:last-child),html.theme--catppuccin-latte .subtitle:not(:last-child),html.theme--catppuccin-latte .table-container:not(:last-child),html.theme--catppuccin-latte .table:not(:last-child),html.theme--catppuccin-latte .progress:not(:last-child),html.theme--catppuccin-latte .notification:not(:last-child),html.theme--catppuccin-latte .content:not(:last-child),html.theme--catppuccin-latte .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .modal-close,html.theme--catppuccin-latte .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before,html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .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--catppuccin-latte .modal-close::before,html.theme--catppuccin-latte .delete::before{height:2px;width:50%}html.theme--catppuccin-latte .modal-close::after,html.theme--catppuccin-latte .delete::after{height:50%;width:2px}html.theme--catppuccin-latte .modal-close:hover,html.theme--catppuccin-latte .delete:hover,html.theme--catppuccin-latte .modal-close:focus,html.theme--catppuccin-latte .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-latte .modal-close:active,html.theme--catppuccin-latte .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-latte .is-small.modal-close,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-latte .is-small.delete,html.theme--catppuccin-latte #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--catppuccin-latte .is-medium.modal-close,html.theme--catppuccin-latte .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-latte .is-large.modal-close,html.theme--catppuccin-latte .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-latte .control.is-loading::after,html.theme--catppuccin-latte .select.is-loading::after,html.theme--catppuccin-latte .loader,html.theme--catppuccin-latte .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8c8fa1;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-latte .hero-video,html.theme--catppuccin-latte .modal-background,html.theme--catppuccin-latte .modal,html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-latte .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | 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,video{height:auto;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:inherit}.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:#ccd0da !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#aeb5c5 !important}.has-background-dark{background-color:#ccd0da !important}.has-text-primary{color:#1e66f5 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#0a4ed6 !important}.has-background-primary{background-color:#1e66f5 !important}.has-text-primary-light{color:#ebf2fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd1fc !important}.has-background-primary-light{background-color:#ebf2fe !important}.has-text-primary-dark{color:#0a52e1 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#286df5 !important}.has-background-primary-dark{background-color:#0a52e1 !important}.has-text-link{color:#1e66f5 !important}a.has-text-link:hover,a.has-text-link:focus{color:#0a4ed6 !important}.has-background-link{background-color:#1e66f5 !important}.has-text-link-light{color:#ebf2fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd1fc !important}.has-background-link-light{background-color:#ebf2fe !important}.has-text-link-dark{color:#0a52e1 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#286df5 !important}.has-background-link-dark{background-color:#0a52e1 !important}.has-text-info{color:#179299 !important}a.has-text-info:hover,a.has-text-info:focus{color:#10686d !important}.has-background-info{background-color:#179299 !important}.has-text-info-light{color:#edfcfc !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c1f3f6 !important}.has-background-info-light{background-color:#edfcfc !important}.has-text-info-dark{color:#1cb2ba !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2ad5df !important}.has-background-info-dark{background-color:#1cb2ba !important}.has-text-success{color:#40a02b !important}a.has-text-success:hover,a.has-text-success:focus{color:#307820 !important}.has-background-success{background-color:#40a02b !important}.has-text-success-light{color:#f1fbef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cef0c7 !important}.has-background-success-light{background-color:#f1fbef !important}.has-text-success-dark{color:#40a12b !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#50c936 !important}.has-background-success-dark{background-color:#40a12b !important}.has-text-warning{color:#df8e1d !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#b27117 !important}.has-background-warning{background-color:#df8e1d !important}.has-text-warning-light{color:#fdf6ed !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f7e0c0 !important}.has-background-warning-light{background-color:#fdf6ed !important}.has-text-warning-dark{color:#9e6515 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#cb811a !important}.has-background-warning-dark{background-color:#9e6515 !important}.has-text-danger{color:#d20f39 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a20c2c !important}.has-background-danger{background-color:#d20f39 !important}.has-text-danger-light{color:#feecf0 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fabcca !important}.has-background-danger-light{background-color:#feecf0 !important}.has-text-danger-dark{color:#e9113f !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f13c63 !important}.has-background-danger-dark{background-color:#e9113f !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:#ccd0da !important}.has-background-grey-darker{background-color:#ccd0da !important}.has-text-grey-dark{color:#bcc0cc !important}.has-background-grey-dark{background-color:#bcc0cc !important}.has-text-grey{color:#acb0be !important}.has-background-grey{background-color:#acb0be !important}.has-text-grey-light{color:#9ca0b0 !important}.has-background-grey-light{background-color:#9ca0b0 !important}.has-text-grey-lighter{color:#8c8fa1 !important}.has-background-grey-lighter{background-color:#8c8fa1 !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}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-latte .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}.is-underlined{text-decoration:underline !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}}html.theme--catppuccin-latte html{background-color:#eff1f5;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--catppuccin-latte article,html.theme--catppuccin-latte aside,html.theme--catppuccin-latte figure,html.theme--catppuccin-latte footer,html.theme--catppuccin-latte header,html.theme--catppuccin-latte hgroup,html.theme--catppuccin-latte section{display:block}html.theme--catppuccin-latte body,html.theme--catppuccin-latte button,html.theme--catppuccin-latte input,html.theme--catppuccin-latte optgroup,html.theme--catppuccin-latte select,html.theme--catppuccin-latte textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-latte code,html.theme--catppuccin-latte 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--catppuccin-latte body{color:#4c4f69;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-latte a{color:#1e66f5;cursor:pointer;text-decoration:none}html.theme--catppuccin-latte a strong{color:currentColor}html.theme--catppuccin-latte a:hover{color:#04a5e5}html.theme--catppuccin-latte code{background-color:#e6e9ef;color:#4c4f69;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-latte hr{background-color:#e6e9ef;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-latte img{height:auto;max-width:100%}html.theme--catppuccin-latte input[type="checkbox"],html.theme--catppuccin-latte input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-latte small{font-size:.875em}html.theme--catppuccin-latte span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-latte strong{color:#41445a;font-weight:700}html.theme--catppuccin-latte fieldset{border:none}html.theme--catppuccin-latte pre{-webkit-overflow-scrolling:touch;background-color:#e6e9ef;color:#4c4f69;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-latte table td,html.theme--catppuccin-latte table th{vertical-align:top}html.theme--catppuccin-latte table td:not([align]),html.theme--catppuccin-latte table th:not([align]){text-align:inherit}html.theme--catppuccin-latte table th{color:#41445a}html.theme--catppuccin-latte .box{background-color:#bcc0cc;border-radius:8px;box-shadow:none;color:#4c4f69;display:block;padding:1.25rem}html.theme--catppuccin-latte a.box:hover,html.theme--catppuccin-latte a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1e66f5}html.theme--catppuccin-latte a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1e66f5}html.theme--catppuccin-latte .button{background-color:#e6e9ef;border-color:#fff;border-width:1px;color:#1e66f5;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-latte .button strong{color:inherit}html.theme--catppuccin-latte .button .icon,html.theme--catppuccin-latte .button .icon.is-small,html.theme--catppuccin-latte .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-latte .button .icon.is-medium,html.theme--catppuccin-latte .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-latte .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-latte .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-latte .button:hover,html.theme--catppuccin-latte .button.is-hovered{border-color:#9ca0b0;color:#41445a}html.theme--catppuccin-latte .button:focus,html.theme--catppuccin-latte .button.is-focused{border-color:#9ca0b0;color:#0b57ef}html.theme--catppuccin-latte .button:focus:not(:active),html.theme--catppuccin-latte .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button:active,html.theme--catppuccin-latte .button.is-active{border-color:#bcc0cc;color:#41445a}html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;color:#4c4f69;text-decoration:underline}html.theme--catppuccin-latte .button.is-text:hover,html.theme--catppuccin-latte .button.is-text.is-hovered,html.theme--catppuccin-latte .button.is-text:focus,html.theme--catppuccin-latte .button.is-text.is-focused{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .button.is-text:active,html.theme--catppuccin-latte .button.is-text.is-active{background-color:#d6dbe5;color:#41445a}html.theme--catppuccin-latte .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-latte .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1e66f5;text-decoration:none}html.theme--catppuccin-latte .button.is-ghost:hover,html.theme--catppuccin-latte .button.is-ghost.is-hovered{color:#1e66f5;text-decoration:underline}html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:hover,html.theme--catppuccin-latte .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus,html.theme--catppuccin-latte .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white:focus:not(:active),html.theme--catppuccin-latte .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .button.is-white:active,html.theme--catppuccin-latte .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-latte .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-white.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:hover,html.theme--catppuccin-latte .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus,html.theme--catppuccin-latte .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black:focus:not(:active),html.theme--catppuccin-latte .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .button.is-black:active,html.theme--catppuccin-latte .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:hover,html.theme--catppuccin-latte .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus,html.theme--catppuccin-latte .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light:focus:not(:active),html.theme--catppuccin-latte .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .button.is-light:active,html.theme--catppuccin-latte .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-latte .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-light.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)}html.theme--catppuccin-latte .button.is-dark,html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:hover,html.theme--catppuccin-latte .content kbd.button:hover,html.theme--catppuccin-latte .button.is-dark.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-hovered{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus,html.theme--catppuccin-latte .content kbd.button:focus,html.theme--catppuccin-latte .button.is-dark.is-focused,html.theme--catppuccin-latte .content kbd.button.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark:focus:not(:active),html.theme--catppuccin-latte .content kbd.button:focus:not(:active),html.theme--catppuccin-latte .button.is-dark.is-focused:not(:active),html.theme--catppuccin-latte .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .button.is-dark:active,html.theme--catppuccin-latte .content kbd.button:active,html.theme--catppuccin-latte .button.is-dark.is-active,html.theme--catppuccin-latte .content kbd.button.is-active{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark[disabled],html.theme--catppuccin-latte .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button{background-color:#ccd0da;border-color:#ccd0da;box-shadow:none}html.theme--catppuccin-latte .button.is-dark.is-inverted,html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-focused{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-latte .button.is-dark.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.is-outlined{background-color:transparent;border-color:#ccd0da;box-shadow:none;color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ccd0da}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ccd0da #ccd0da !important}html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .content kbd.button.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)}html.theme--catppuccin-latte .button.is-primary,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:hover,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary:focus:not(:active),html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-latte .button.is-primary.is-focused:not(:active),html.theme--catppuccin-latte .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-primary:active,html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-active,html.theme--catppuccin-latte .docstring>section>a.button.is-active.docs-sourcelink{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-primary[disabled],html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-primary.is-inverted,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-primary.is-inverted[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-loading::after,html.theme--catppuccin-latte .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-outlined:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-outlined:focus,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-primary.is-outlined[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-latte .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-primary.is-light,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:hover,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-latte .button.is-primary.is-light.is-hovered,html.theme--catppuccin-latte .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-primary.is-light:active,html.theme--catppuccin-latte .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-latte .button.is-primary.is-light.is-active,html.theme--catppuccin-latte .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:hover,html.theme--catppuccin-latte .button.is-link.is-hovered{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus,html.theme--catppuccin-latte .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link:focus:not(:active),html.theme--catppuccin-latte .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .button.is-link:active,html.theme--catppuccin-latte .button.is-link.is-active{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link{background-color:#1e66f5;border-color:#1e66f5;box-shadow:none}html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-outlined.is-focused{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-outlined{background-color:transparent;border-color:#1e66f5;box-shadow:none;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1e66f5 #1e66f5 !important}html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:hover,html.theme--catppuccin-latte .button.is-link.is-light.is-hovered{background-color:#dfe9fe;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-link.is-light:active,html.theme--catppuccin-latte .button.is-link.is-light.is-active{background-color:#d3e1fd;border-color:transparent;color:#0a52e1}html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:hover,html.theme--catppuccin-latte .button.is-info.is-hovered{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus,html.theme--catppuccin-latte .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info:focus:not(:active),html.theme--catppuccin-latte .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .button.is-info:active,html.theme--catppuccin-latte .button.is-info.is-active{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info{background-color:#179299;border-color:#179299;box-shadow:none}html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;color:#179299}html.theme--catppuccin-latte .button.is-info.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-outlined.is-focused{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-outlined{background-color:transparent;border-color:#179299;box-shadow:none;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#179299}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #179299 #179299 !important}html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:hover,html.theme--catppuccin-latte .button.is-info.is-light.is-hovered{background-color:#e2f9fb;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-info.is-light:active,html.theme--catppuccin-latte .button.is-info.is-light.is-active{background-color:#d7f7f9;border-color:transparent;color:#1cb2ba}html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:hover,html.theme--catppuccin-latte .button.is-success.is-hovered{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus,html.theme--catppuccin-latte .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success:focus:not(:active),html.theme--catppuccin-latte .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .button.is-success:active,html.theme--catppuccin-latte .button.is-success.is-active{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success{background-color:#40a02b;border-color:#40a02b;box-shadow:none}html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-outlined.is-focused{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-outlined{background-color:transparent;border-color:#40a02b;box-shadow:none;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#40a02b}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #40a02b #40a02b !important}html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:hover,html.theme--catppuccin-latte .button.is-success.is-light.is-hovered{background-color:#e8f8e5;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-success.is-light:active,html.theme--catppuccin-latte .button.is-success.is-light.is-active{background-color:#e0f5db;border-color:transparent;color:#40a12b}html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:hover,html.theme--catppuccin-latte .button.is-warning.is-hovered{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus,html.theme--catppuccin-latte .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning:focus:not(:active),html.theme--catppuccin-latte .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .button.is-warning:active,html.theme--catppuccin-latte .button.is-warning.is-active{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning{background-color:#df8e1d;border-color:#df8e1d;box-shadow:none}html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-focused{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-outlined{background-color:transparent;border-color:#df8e1d;box-shadow:none;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #df8e1d #df8e1d !important}html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:hover,html.theme--catppuccin-latte .button.is-warning.is-light.is-hovered{background-color:#fbf1e2;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-warning.is-light:active,html.theme--catppuccin-latte .button.is-warning.is-light.is-active{background-color:#faebd6;border-color:transparent;color:#9e6515}html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:hover,html.theme--catppuccin-latte .button.is-danger.is-hovered{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus,html.theme--catppuccin-latte .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger:focus:not(:active),html.theme--catppuccin-latte .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .button.is-danger:active,html.theme--catppuccin-latte .button.is-danger.is-active{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger{background-color:#d20f39;border-color:#d20f39;box-shadow:none}html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-latte .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-focused{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-latte .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-outlined{background-color:transparent;border-color:#d20f39;box-shadow:none;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#d20f39}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #d20f39 #d20f39 !important}html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-latte .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-latte .button.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:hover,html.theme--catppuccin-latte .button.is-danger.is-light.is-hovered{background-color:#fde0e6;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-danger.is-light:active,html.theme--catppuccin-latte .button.is-danger.is-light.is-active{background-color:#fcd4dd;border-color:transparent;color:#e9113f}html.theme--catppuccin-latte .button.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-latte .button.is-small:not(.is-rounded),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .button.is-normal{font-size:1rem}html.theme--catppuccin-latte .button.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .button.is-large{font-size:1.5rem}html.theme--catppuccin-latte .button[disabled],fieldset[disabled] html.theme--catppuccin-latte .button{background-color:#9ca0b0;border-color:#acb0be;box-shadow:none;opacity:.5}html.theme--catppuccin-latte .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-latte .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-latte .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-latte .button.is-static{background-color:#e6e9ef;border-color:#acb0be;color:#8c8fa1;box-shadow:none;pointer-events:none}html.theme--catppuccin-latte .button.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-latte .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-latte .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-latte .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-latte .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-latte .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-latte .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-latte .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-latte .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-latte .buttons.has-addons .button:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-latte .buttons.has-addons .button:focus,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused,html.theme--catppuccin-latte .buttons.has-addons .button:active,html.theme--catppuccin-latte .buttons.has-addons .button.is-active,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-latte .buttons.has-addons .button:focus:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-latte .buttons.has-addons .button:active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-latte .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-latte .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .buttons.is-centered{justify-content:center}html.theme--catppuccin-latte .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-latte .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-latte .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .button.is-responsive.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-latte .button.is-responsive,html.theme--catppuccin-latte .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-latte .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-latte .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-latte .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-latte .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-latte .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-latte .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-latte .content li+li{margin-top:0.25em}html.theme--catppuccin-latte .content p:not(:last-child),html.theme--catppuccin-latte .content dl:not(:last-child),html.theme--catppuccin-latte .content ol:not(:last-child),html.theme--catppuccin-latte .content ul:not(:last-child),html.theme--catppuccin-latte .content blockquote:not(:last-child),html.theme--catppuccin-latte .content pre:not(:last-child),html.theme--catppuccin-latte .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .content h1,html.theme--catppuccin-latte .content h2,html.theme--catppuccin-latte .content h3,html.theme--catppuccin-latte .content h4,html.theme--catppuccin-latte .content h5,html.theme--catppuccin-latte .content h6{color:#4c4f69;font-weight:600;line-height:1.125}html.theme--catppuccin-latte .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-latte .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-latte .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-latte .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-latte .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-latte .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-latte .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-latte .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-latte .content blockquote{background-color:#e6e9ef;border-left:5px solid #acb0be;padding:1.25em 1.5em}html.theme--catppuccin-latte .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-latte .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-latte .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-latte .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-latte .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-latte .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-latte .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-latte .content ul ul ul{list-style-type:square}html.theme--catppuccin-latte .content dd{margin-left:2em}html.theme--catppuccin-latte .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-latte .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-latte .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-latte .content figure img{display:inline-block}html.theme--catppuccin-latte .content figure figcaption{font-style:italic}html.theme--catppuccin-latte .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-latte .content sup,html.theme--catppuccin-latte .content sub{font-size:75%}html.theme--catppuccin-latte .content table{width:100%}html.theme--catppuccin-latte .content table td,html.theme--catppuccin-latte .content table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .content table th{color:#41445a}html.theme--catppuccin-latte .content table th:not([align]){text-align:inherit}html.theme--catppuccin-latte .content table thead td,html.theme--catppuccin-latte .content table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .content table tfoot td,html.theme--catppuccin-latte .content table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .content table tbody tr:last-child td,html.theme--catppuccin-latte .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .content .tabs li+li{margin-top:0}html.theme--catppuccin-latte .content.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-latte .content.is-normal{font-size:1rem}html.theme--catppuccin-latte .content.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .content.is-large{font-size:1.5rem}html.theme--catppuccin-latte .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-latte .icon.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-latte .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-latte .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-latte .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-latte .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-latte .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-latte div.icon-text{display:flex}html.theme--catppuccin-latte .image,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-latte .image img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-latte .image img.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-latte .image.is-fullwidth,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-latte .image.is-square img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-latte .image.is-square .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-latte .image.is-1by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-latte .image.is-1by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-latte .image.is-5by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-latte .image.is-5by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-latte .image.is-4by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-latte .image.is-4by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-latte .image.is-3by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-latte .image.is-5by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-latte .image.is-5by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-latte .image.is-16by9 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-latte .image.is-16by9 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-latte .image.is-2by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-latte .image.is-2by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-latte .image.is-3by1 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-latte .image.is-3by1 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-latte .image.is-4by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-latte .image.is-4by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-latte .image.is-3by4 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-latte .image.is-3by4 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-latte .image.is-2by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-latte .image.is-2by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-latte .image.is-3by5 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-latte .image.is-3by5 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-latte .image.is-9by16 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-latte .image.is-9by16 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-latte .image.is-1by2 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-latte .image.is-1by2 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-latte .image.is-1by3 img,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-latte .image.is-1by3 .has-ratio,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-latte .image.is-square,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-latte .image.is-1by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-latte .image.is-5by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-latte .image.is-4by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-latte .image.is-3by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-latte .image.is-5by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-latte .image.is-16by9,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-latte .image.is-2by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-latte .image.is-3by1,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-latte .image.is-4by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-latte .image.is-3by4,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-latte .image.is-2by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-latte .image.is-3by5,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-latte .image.is-9by16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-latte .image.is-1by2,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-latte .image.is-1by3,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-latte .image.is-16x16,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-latte .image.is-24x24,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-latte .image.is-32x32,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-latte .image.is-48x48,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-latte .image.is-64x64,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-latte .image.is-96x96,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-latte .image.is-128x128,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-latte .notification{background-color:#e6e9ef;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-latte .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .notification strong{color:currentColor}html.theme--catppuccin-latte .notification code,html.theme--catppuccin-latte .notification pre{background:#fff}html.theme--catppuccin-latte .notification pre code{background:transparent}html.theme--catppuccin-latte .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-latte .notification .title,html.theme--catppuccin-latte .notification .subtitle,html.theme--catppuccin-latte .notification .content{color:currentColor}html.theme--catppuccin-latte .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-dark,html.theme--catppuccin-latte .content kbd.notification{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .notification.is-primary,html.theme--catppuccin-latte .docstring>section>a.notification.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-primary.is-light,html.theme--catppuccin-latte .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .notification.is-link.is-light{background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .notification.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .notification.is-info.is-light{background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .notification.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .notification.is-success.is-light{background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .notification.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .notification.is-warning.is-light{background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .notification.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .notification.is-danger.is-light{background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-latte .progress::-webkit-progress-bar{background-color:#bcc0cc}html.theme--catppuccin-latte .progress::-webkit-progress-value{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-moz-progress-bar{background-color:#8c8fa1}html.theme--catppuccin-latte .progress::-ms-fill{background-color:#8c8fa1;border:none}html.theme--catppuccin-latte .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-latte .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-latte .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-latte .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-latte .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-latte .content kbd.progress::-webkit-progress-value{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-latte .content kbd.progress::-moz-progress-bar{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark::-ms-fill,html.theme--catppuccin-latte .content kbd.progress::-ms-fill{background-color:#ccd0da}html.theme--catppuccin-latte .progress.is-dark:indeterminate,html.theme--catppuccin-latte .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #ccd0da 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary::-ms-fill,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-primary:indeterminate,html.theme--catppuccin-latte .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-link::-webkit-progress-value{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-moz-progress-bar{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link::-ms-fill{background-color:#1e66f5}html.theme--catppuccin-latte .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1e66f5 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-info::-webkit-progress-value{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-moz-progress-bar{background-color:#179299}html.theme--catppuccin-latte .progress.is-info::-ms-fill{background-color:#179299}html.theme--catppuccin-latte .progress.is-info:indeterminate{background-image:linear-gradient(to right, #179299 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-success::-webkit-progress-value{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-moz-progress-bar{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success::-ms-fill{background-color:#40a02b}html.theme--catppuccin-latte .progress.is-success:indeterminate{background-image:linear-gradient(to right, #40a02b 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-warning::-webkit-progress-value{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-moz-progress-bar{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning::-ms-fill{background-color:#df8e1d}html.theme--catppuccin-latte .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #df8e1d 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress.is-danger::-webkit-progress-value{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-moz-progress-bar{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger::-ms-fill{background-color:#d20f39}html.theme--catppuccin-latte .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #d20f39 30%, #bcc0cc 30%)}html.theme--catppuccin-latte .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#bcc0cc;background-image:linear-gradient(to right, #4c4f69 30%, #bcc0cc 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-latte .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-latte .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-latte .progress.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-latte .progress.is-medium{height:1.25rem}html.theme--catppuccin-latte .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-latte .table{background-color:#bcc0cc;color:#4c4f69}html.theme--catppuccin-latte .table td,html.theme--catppuccin-latte .table th{border:1px solid #acb0be;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-latte .table td.is-white,html.theme--catppuccin-latte .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .table td.is-black,html.theme--catppuccin-latte .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .table td.is-light,html.theme--catppuccin-latte .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-dark,html.theme--catppuccin-latte .table th.is-dark{background-color:#ccd0da;border-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .table td.is-primary,html.theme--catppuccin-latte .table th.is-primary{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-link,html.theme--catppuccin-latte .table th.is-link{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-info,html.theme--catppuccin-latte .table th.is-info{background-color:#179299;border-color:#179299;color:#fff}html.theme--catppuccin-latte .table td.is-success,html.theme--catppuccin-latte .table th.is-success{background-color:#40a02b;border-color:#40a02b;color:#fff}html.theme--catppuccin-latte .table td.is-warning,html.theme--catppuccin-latte .table th.is-warning{background-color:#df8e1d;border-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .table td.is-danger,html.theme--catppuccin-latte .table th.is-danger{background-color:#d20f39;border-color:#d20f39;color:#fff}html.theme--catppuccin-latte .table td.is-narrow,html.theme--catppuccin-latte .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-latte .table td.is-selected,html.theme--catppuccin-latte .table th.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table td.is-selected a,html.theme--catppuccin-latte .table td.is-selected strong,html.theme--catppuccin-latte .table th.is-selected a,html.theme--catppuccin-latte .table th.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table td.is-vcentered,html.theme--catppuccin-latte .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-latte .table th{color:#41445a}html.theme--catppuccin-latte .table th:not([align]){text-align:left}html.theme--catppuccin-latte .table tr.is-selected{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .table tr.is-selected a,html.theme--catppuccin-latte .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-latte .table tr.is-selected td,html.theme--catppuccin-latte .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-latte .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table thead td,html.theme--catppuccin-latte .table thead th{border-width:0 0 2px;color:#41445a}html.theme--catppuccin-latte .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tfoot td,html.theme--catppuccin-latte .table tfoot th{border-width:2px 0 0;color:#41445a}html.theme--catppuccin-latte .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .table tbody tr:last-child td,html.theme--catppuccin-latte .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-latte .table.is-bordered td,html.theme--catppuccin-latte .table.is-bordered th{border-width:1px}html.theme--catppuccin-latte .table.is-bordered tr:last-child td,html.theme--catppuccin-latte .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-latte .table.is-fullwidth{width:100%}html.theme--catppuccin-latte .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#ccd0da}html.theme--catppuccin-latte .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#d2d5de}html.theme--catppuccin-latte .table.is-narrow td,html.theme--catppuccin-latte .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-latte .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#ccd0da}html.theme--catppuccin-latte .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-latte .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .tags .tag,html.theme--catppuccin-latte .tags .content kbd,html.theme--catppuccin-latte .content .tags kbd,html.theme--catppuccin-latte .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-latte .tags .tag:not(:last-child),html.theme--catppuccin-latte .tags .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags kbd:not(:last-child),html.theme--catppuccin-latte .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-latte .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-latte .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-latte .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-latte .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-latte .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-latte .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-latte .tags.is-centered{justify-content:center}html.theme--catppuccin-latte .tags.is-centered .tag,html.theme--catppuccin-latte .tags.is-centered .content kbd,html.theme--catppuccin-latte .content .tags.is-centered kbd,html.theme--catppuccin-latte .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-latte .tags.is-right{justify-content:flex-end}html.theme--catppuccin-latte .tags.is-right .tag:not(:first-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-latte .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-latte .tags.is-right .tag:not(:last-child),html.theme--catppuccin-latte .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-latte .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag,html.theme--catppuccin-latte .tags.has-addons .content kbd,html.theme--catppuccin-latte .content .tags.has-addons kbd,html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-latte .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-latte .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-latte .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-latte .tag:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#e6e9ef;border-radius:.4em;color:#4c4f69;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}html.theme--catppuccin-latte .tag:not(body) .delete,html.theme--catppuccin-latte .content kbd:not(body) .delete,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-latte .tag.is-white:not(body),html.theme--catppuccin-latte .content kbd.is-white:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .tag.is-black:not(body),html.theme--catppuccin-latte .content kbd.is-black:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .tag.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-dark:not(body),html.theme--catppuccin-latte .content kbd:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-latte .content .docstring>section>kbd:not(body){background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .tag.is-primary:not(body),html.theme--catppuccin-latte .content kbd.is-primary:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-primary.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .tag.is-link.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-link.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf2fe;color:#0a52e1}html.theme--catppuccin-latte .tag.is-info:not(body),html.theme--catppuccin-latte .content kbd.is-info:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#179299;color:#fff}html.theme--catppuccin-latte .tag.is-info.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-info.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#edfcfc;color:#1cb2ba}html.theme--catppuccin-latte .tag.is-success:not(body),html.theme--catppuccin-latte .content kbd.is-success:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .tag.is-success.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-success.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f1fbef;color:#40a12b}html.theme--catppuccin-latte .tag.is-warning:not(body),html.theme--catppuccin-latte .content kbd.is-warning:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .tag.is-warning.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fdf6ed;color:#9e6515}html.theme--catppuccin-latte .tag.is-danger:not(body),html.theme--catppuccin-latte .content kbd.is-danger:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .tag.is-danger.is-light:not(body),html.theme--catppuccin-latte .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#feecf0;color:#e9113f}html.theme--catppuccin-latte .tag.is-normal:not(body),html.theme--catppuccin-latte .content kbd.is-normal:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-latte .tag.is-medium:not(body),html.theme--catppuccin-latte .content kbd.is-medium:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-latte .tag.is-large:not(body),html.theme--catppuccin-latte .content kbd.is-large:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-latte .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-latte .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-latte .tag.is-delete:not(body),html.theme--catppuccin-latte .content kbd.is-delete:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte .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--catppuccin-latte .tag.is-delete:not(body)::before,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::before,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-latte .tag.is-delete:not(body)::after,html.theme--catppuccin-latte .content kbd.is-delete:not(body)::after,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-latte .tag.is-delete:not(body):hover,html.theme--catppuccin-latte .content kbd.is-delete:not(body):hover,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-latte .tag.is-delete:not(body):focus,html.theme--catppuccin-latte .content kbd.is-delete:not(body):focus,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#d6dbe5}html.theme--catppuccin-latte .tag.is-delete:not(body):active,html.theme--catppuccin-latte .content kbd.is-delete:not(body):active,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#c7cedb}html.theme--catppuccin-latte .tag.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-latte .content kbd.is-rounded:not(body),html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-latte a.tag:hover,html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-latte .title,html.theme--catppuccin-latte .subtitle{word-break:break-word}html.theme--catppuccin-latte .title em,html.theme--catppuccin-latte .title span,html.theme--catppuccin-latte .subtitle em,html.theme--catppuccin-latte .subtitle span{font-weight:inherit}html.theme--catppuccin-latte .title sub,html.theme--catppuccin-latte .subtitle sub{font-size:.75em}html.theme--catppuccin-latte .title sup,html.theme--catppuccin-latte .subtitle sup{font-size:.75em}html.theme--catppuccin-latte .title .tag,html.theme--catppuccin-latte .title .content kbd,html.theme--catppuccin-latte .content .title kbd,html.theme--catppuccin-latte .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-latte .subtitle .tag,html.theme--catppuccin-latte .subtitle .content kbd,html.theme--catppuccin-latte .content .subtitle kbd,html.theme--catppuccin-latte .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-latte .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-latte .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-latte .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-latte .title.is-1{font-size:3rem}html.theme--catppuccin-latte .title.is-2{font-size:2.5rem}html.theme--catppuccin-latte .title.is-3{font-size:2rem}html.theme--catppuccin-latte .title.is-4{font-size:1.5rem}html.theme--catppuccin-latte .title.is-5{font-size:1.25rem}html.theme--catppuccin-latte .title.is-6{font-size:1rem}html.theme--catppuccin-latte .title.is-7{font-size:.75rem}html.theme--catppuccin-latte .subtitle{color:#9ca0b0;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-latte .subtitle strong{color:#9ca0b0;font-weight:600}html.theme--catppuccin-latte .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-latte .subtitle.is-1{font-size:3rem}html.theme--catppuccin-latte .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-latte .subtitle.is-3{font-size:2rem}html.theme--catppuccin-latte .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-latte .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-latte .subtitle.is-6{font-size:1rem}html.theme--catppuccin-latte .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-latte .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-latte .number{align-items:center;background-color:#e6e9ef;border-radius:9999px;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--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#eff1f5;border-color:#acb0be;border-radius:.4em;color:#8c8fa1}html.theme--catppuccin-latte .select select::-moz-placeholder,html.theme--catppuccin-latte .textarea::-moz-placeholder,html.theme--catppuccin-latte .input::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,html.theme--catppuccin-latte .input::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-moz-placeholder,html.theme--catppuccin-latte .textarea:-moz-placeholder,html.theme--catppuccin-latte .input:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:-ms-input-placeholder,html.theme--catppuccin-latte .textarea:-ms-input-placeholder,html.theme--catppuccin-latte .input:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-latte .select select:hover,html.theme--catppuccin-latte .textarea:hover,html.theme--catppuccin-latte .input:hover,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-latte .select select.is-hovered,html.theme--catppuccin-latte .is-hovered.textarea,html.theme--catppuccin-latte .is-hovered.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#9ca0b0}html.theme--catppuccin-latte .select select:focus,html.theme--catppuccin-latte .textarea:focus,html.theme--catppuccin-latte .input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-latte .select select.is-focused,html.theme--catppuccin-latte .is-focused.textarea,html.theme--catppuccin-latte .is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .select select:active,html.theme--catppuccin-latte .textarea:active,html.theme--catppuccin-latte .input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-latte .select select.is-active,html.theme--catppuccin-latte .is-active.textarea,html.theme--catppuccin-latte .is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1e66f5;box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select select[disabled],html.theme--catppuccin-latte .textarea[disabled],html.theme--catppuccin-latte .input[disabled],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-latte .select select,fieldset[disabled] html.theme--catppuccin-latte .textarea,fieldset[disabled] html.theme--catppuccin-latte .input,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{background-color:#9ca0b0;border-color:#e6e9ef;box-shadow:none;color:#616587}html.theme--catppuccin-latte .select select[disabled]::-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-latte .input[disabled]::-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-moz-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-latte .input[disabled]:-moz-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(97,101,135,0.3)}html.theme--catppuccin-latte .textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-latte .textarea[readonly],html.theme--catppuccin-latte .input[readonly],html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-latte .is-white.textarea,html.theme--catppuccin-latte .is-white.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-latte .is-white.textarea:focus,html.theme--catppuccin-latte .is-white.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-latte .is-white.is-focused.textarea,html.theme--catppuccin-latte .is-white.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-white.textarea:active,html.theme--catppuccin-latte .is-white.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-latte .is-white.is-active.textarea,html.theme--catppuccin-latte .is-white.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .is-black.textarea,html.theme--catppuccin-latte .is-black.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-latte .is-black.textarea:focus,html.theme--catppuccin-latte .is-black.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-latte .is-black.is-focused.textarea,html.theme--catppuccin-latte .is-black.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-black.textarea:active,html.theme--catppuccin-latte .is-black.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-latte .is-black.is-active.textarea,html.theme--catppuccin-latte .is-black.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .is-light.textarea,html.theme--catppuccin-latte .is-light.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-latte .is-light.textarea:focus,html.theme--catppuccin-latte .is-light.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-latte .is-light.is-focused.textarea,html.theme--catppuccin-latte .is-light.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-light.textarea:active,html.theme--catppuccin-latte .is-light.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-latte .is-light.is-active.textarea,html.theme--catppuccin-latte .is-light.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .is-dark.textarea,html.theme--catppuccin-latte .content kbd.textarea,html.theme--catppuccin-latte .is-dark.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-latte .content kbd.input{border-color:#ccd0da}html.theme--catppuccin-latte .is-dark.textarea:focus,html.theme--catppuccin-latte .content kbd.textarea:focus,html.theme--catppuccin-latte .is-dark.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-latte .content kbd.input:focus,html.theme--catppuccin-latte .is-dark.is-focused.textarea,html.theme--catppuccin-latte .content kbd.is-focused.textarea,html.theme--catppuccin-latte .is-dark.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .content kbd.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-dark.textarea:active,html.theme--catppuccin-latte .content kbd.textarea:active,html.theme--catppuccin-latte .is-dark.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-latte .content kbd.input:active,html.theme--catppuccin-latte .is-dark.is-active.textarea,html.theme--catppuccin-latte .content kbd.is-active.textarea,html.theme--catppuccin-latte .is-dark.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .content kbd.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .is-primary.textarea,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink{border-color:#1e66f5}html.theme--catppuccin-latte .is-primary.textarea:focus,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-latte .is-primary.is-focused.textarea,html.theme--catppuccin-latte .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-latte .is-primary.textarea:active,html.theme--catppuccin-latte .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-latte .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-latte .is-primary.is-active.textarea,html.theme--catppuccin-latte .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-latte .is-primary.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-latte .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-link.textarea,html.theme--catppuccin-latte .is-link.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1e66f5}html.theme--catppuccin-latte .is-link.textarea:focus,html.theme--catppuccin-latte .is-link.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-latte .is-link.is-focused.textarea,html.theme--catppuccin-latte .is-link.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-link.textarea:active,html.theme--catppuccin-latte .is-link.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-latte .is-link.is-active.textarea,html.theme--catppuccin-latte .is-link.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .is-info.textarea,html.theme--catppuccin-latte .is-info.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#179299}html.theme--catppuccin-latte .is-info.textarea:focus,html.theme--catppuccin-latte .is-info.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-latte .is-info.is-focused.textarea,html.theme--catppuccin-latte .is-info.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-info.textarea:active,html.theme--catppuccin-latte .is-info.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-latte .is-info.is-active.textarea,html.theme--catppuccin-latte .is-info.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .is-success.textarea,html.theme--catppuccin-latte .is-success.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#40a02b}html.theme--catppuccin-latte .is-success.textarea:focus,html.theme--catppuccin-latte .is-success.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-latte .is-success.is-focused.textarea,html.theme--catppuccin-latte .is-success.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-success.textarea:active,html.theme--catppuccin-latte .is-success.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-latte .is-success.is-active.textarea,html.theme--catppuccin-latte .is-success.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .is-warning.textarea,html.theme--catppuccin-latte .is-warning.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#df8e1d}html.theme--catppuccin-latte .is-warning.textarea:focus,html.theme--catppuccin-latte .is-warning.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-latte .is-warning.is-focused.textarea,html.theme--catppuccin-latte .is-warning.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-warning.textarea:active,html.theme--catppuccin-latte .is-warning.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-latte .is-warning.is-active.textarea,html.theme--catppuccin-latte .is-warning.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .is-danger.textarea,html.theme--catppuccin-latte .is-danger.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#d20f39}html.theme--catppuccin-latte .is-danger.textarea:focus,html.theme--catppuccin-latte .is-danger.input:focus,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-latte .is-danger.is-focused.textarea,html.theme--catppuccin-latte .is-danger.is-focused.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-latte .is-danger.textarea:active,html.theme--catppuccin-latte .is-danger.input:active,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-latte .is-danger.is-active.textarea,html.theme--catppuccin-latte .is-danger.is-active.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .is-small.textarea,html.theme--catppuccin-latte .is-small.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .is-medium.textarea,html.theme--catppuccin-latte .is-medium.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .is-large.textarea,html.theme--catppuccin-latte .is-large.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-latte .is-fullwidth.textarea,html.theme--catppuccin-latte .is-fullwidth.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-latte .is-inline.textarea,html.theme--catppuccin-latte .is-inline.input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-latte .input.is-rounded,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-latte .input.is-static,html.theme--catppuccin-latte #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--catppuccin-latte .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-latte .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-latte .textarea[rows]{height:initial}html.theme--catppuccin-latte .textarea.has-fixed-size{resize:none}html.theme--catppuccin-latte .radio,html.theme--catppuccin-latte .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-latte .radio input,html.theme--catppuccin-latte .checkbox input{cursor:pointer}html.theme--catppuccin-latte .radio:hover,html.theme--catppuccin-latte .checkbox:hover{color:#04a5e5}html.theme--catppuccin-latte .radio[disabled],html.theme--catppuccin-latte .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-latte .radio,fieldset[disabled] html.theme--catppuccin-latte .checkbox,html.theme--catppuccin-latte .radio input[disabled],html.theme--catppuccin-latte .checkbox input[disabled]{color:#616587;cursor:not-allowed}html.theme--catppuccin-latte .radio+.radio{margin-left:.5em}html.theme--catppuccin-latte .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-latte .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading)::after{border-color:#1e66f5;right:1.125em;z-index:4}html.theme--catppuccin-latte .select.is-rounded select,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-latte .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-latte .select select::-ms-expand{display:none}html.theme--catppuccin-latte .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-latte .select select:hover{border-color:#e6e9ef}html.theme--catppuccin-latte .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-latte .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-latte .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-latte .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#04a5e5}html.theme--catppuccin-latte .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-latte .select.is-white select{border-color:#fff}html.theme--catppuccin-latte .select.is-white select:hover,html.theme--catppuccin-latte .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-latte .select.is-white select:focus,html.theme--catppuccin-latte .select.is-white select.is-focused,html.theme--catppuccin-latte .select.is-white select:active,html.theme--catppuccin-latte .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-latte .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-latte .select.is-black select:hover,html.theme--catppuccin-latte .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-latte .select.is-black select:focus,html.theme--catppuccin-latte .select.is-black select.is-focused,html.theme--catppuccin-latte .select.is-black select:active,html.theme--catppuccin-latte .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-latte .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-latte .select.is-light select:hover,html.theme--catppuccin-latte .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-latte .select.is-light select:focus,html.theme--catppuccin-latte .select.is-light select.is-focused,html.theme--catppuccin-latte .select.is-light select:active,html.theme--catppuccin-latte .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-latte .select.is-dark:not(:hover)::after,html.theme--catppuccin-latte .content kbd.select:not(:hover)::after{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select,html.theme--catppuccin-latte .content kbd.select select{border-color:#ccd0da}html.theme--catppuccin-latte .select.is-dark select:hover,html.theme--catppuccin-latte .content kbd.select select:hover,html.theme--catppuccin-latte .select.is-dark select.is-hovered,html.theme--catppuccin-latte .content kbd.select select.is-hovered{border-color:#bdc2cf}html.theme--catppuccin-latte .select.is-dark select:focus,html.theme--catppuccin-latte .content kbd.select select:focus,html.theme--catppuccin-latte .select.is-dark select.is-focused,html.theme--catppuccin-latte .content kbd.select select.is-focused,html.theme--catppuccin-latte .select.is-dark select:active,html.theme--catppuccin-latte .content kbd.select select:active,html.theme--catppuccin-latte .select.is-dark select.is-active,html.theme--catppuccin-latte .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(204,208,218,0.25)}html.theme--catppuccin-latte .select.is-primary:not(:hover)::after,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-primary select:hover,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-latte .select.is-primary select.is-hovered,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-primary select:focus,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-latte .select.is-primary select.is-focused,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-latte .select.is-primary select:active,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-latte .select.is-primary select.is-active,html.theme--catppuccin-latte .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-link:not(:hover)::after{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select{border-color:#1e66f5}html.theme--catppuccin-latte .select.is-link select:hover,html.theme--catppuccin-latte .select.is-link select.is-hovered{border-color:#0b57ef}html.theme--catppuccin-latte .select.is-link select:focus,html.theme--catppuccin-latte .select.is-link select.is-focused,html.theme--catppuccin-latte .select.is-link select:active,html.theme--catppuccin-latte .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(30,102,245,0.25)}html.theme--catppuccin-latte .select.is-info:not(:hover)::after{border-color:#179299}html.theme--catppuccin-latte .select.is-info select{border-color:#179299}html.theme--catppuccin-latte .select.is-info select:hover,html.theme--catppuccin-latte .select.is-info select.is-hovered{border-color:#147d83}html.theme--catppuccin-latte .select.is-info select:focus,html.theme--catppuccin-latte .select.is-info select.is-focused,html.theme--catppuccin-latte .select.is-info select:active,html.theme--catppuccin-latte .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(23,146,153,0.25)}html.theme--catppuccin-latte .select.is-success:not(:hover)::after{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select{border-color:#40a02b}html.theme--catppuccin-latte .select.is-success select:hover,html.theme--catppuccin-latte .select.is-success select.is-hovered{border-color:#388c26}html.theme--catppuccin-latte .select.is-success select:focus,html.theme--catppuccin-latte .select.is-success select.is-focused,html.theme--catppuccin-latte .select.is-success select:active,html.theme--catppuccin-latte .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(64,160,43,0.25)}html.theme--catppuccin-latte .select.is-warning:not(:hover)::after{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select{border-color:#df8e1d}html.theme--catppuccin-latte .select.is-warning select:hover,html.theme--catppuccin-latte .select.is-warning select.is-hovered{border-color:#c8801a}html.theme--catppuccin-latte .select.is-warning select:focus,html.theme--catppuccin-latte .select.is-warning select.is-focused,html.theme--catppuccin-latte .select.is-warning select:active,html.theme--catppuccin-latte .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(223,142,29,0.25)}html.theme--catppuccin-latte .select.is-danger:not(:hover)::after{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select{border-color:#d20f39}html.theme--catppuccin-latte .select.is-danger select:hover,html.theme--catppuccin-latte .select.is-danger select.is-hovered{border-color:#ba0d33}html.theme--catppuccin-latte .select.is-danger select:focus,html.theme--catppuccin-latte .select.is-danger select.is-focused,html.theme--catppuccin-latte .select.is-danger select:active,html.theme--catppuccin-latte .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(210,15,57,0.25)}html.theme--catppuccin-latte .select.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-latte .select.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .select.is-large{font-size:1.5rem}html.theme--catppuccin-latte .select.is-disabled::after{border-color:#616587 !important;opacity:0.5}html.theme--catppuccin-latte .select.is-fullwidth{width:100%}html.theme--catppuccin-latte .select.is-fullwidth select{width:100%}html.theme--catppuccin-latte .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-latte .select.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-latte .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:hover .file-cta,html.theme--catppuccin-latte .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-white:focus .file-cta,html.theme--catppuccin-latte .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--catppuccin-latte .file.is-white:active .file-cta,html.theme--catppuccin-latte .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-latte .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:hover .file-cta,html.theme--catppuccin-latte .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-black:focus .file-cta,html.theme--catppuccin-latte .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--catppuccin-latte .file.is-black:active .file-cta,html.theme--catppuccin-latte .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:hover .file-cta,html.theme--catppuccin-latte .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:focus .file-cta,html.theme--catppuccin-latte .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-light:active .file-cta,html.theme--catppuccin-latte .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark .file-cta,html.theme--catppuccin-latte .content kbd.file .file-cta{background-color:#ccd0da;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:hover .file-cta,html.theme--catppuccin-latte .content kbd.file:hover .file-cta,html.theme--catppuccin-latte .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-latte .content kbd.file.is-hovered .file-cta{background-color:#c5c9d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:focus .file-cta,html.theme--catppuccin-latte .content kbd.file:focus .file-cta,html.theme--catppuccin-latte .file.is-dark.is-focused .file-cta,html.theme--catppuccin-latte .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(204,208,218,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-dark:active .file-cta,html.theme--catppuccin-latte .content kbd.file:active .file-cta,html.theme--catppuccin-latte .file.is-dark.is-active .file-cta,html.theme--catppuccin-latte .content kbd.file.is-active .file-cta{background-color:#bdc2cf;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .file.is-primary .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:hover .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-latte .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-primary:focus .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-latte .file.is-primary.is-focused .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-primary:active .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-latte .file.is-primary.is-active .file-cta,html.theme--catppuccin-latte .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link .file-cta{background-color:#1e66f5;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:hover .file-cta,html.theme--catppuccin-latte .file.is-link.is-hovered .file-cta{background-color:#125ef4;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-link:focus .file-cta,html.theme--catppuccin-latte .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(30,102,245,0.25);color:#fff}html.theme--catppuccin-latte .file.is-link:active .file-cta,html.theme--catppuccin-latte .file.is-link.is-active .file-cta{background-color:#0b57ef;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info .file-cta{background-color:#179299;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:hover .file-cta,html.theme--catppuccin-latte .file.is-info.is-hovered .file-cta{background-color:#15878e;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-info:focus .file-cta,html.theme--catppuccin-latte .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(23,146,153,0.25);color:#fff}html.theme--catppuccin-latte .file.is-info:active .file-cta,html.theme--catppuccin-latte .file.is-info.is-active .file-cta{background-color:#147d83;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success .file-cta{background-color:#40a02b;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:hover .file-cta,html.theme--catppuccin-latte .file.is-success.is-hovered .file-cta{background-color:#3c9628;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-success:focus .file-cta,html.theme--catppuccin-latte .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(64,160,43,0.25);color:#fff}html.theme--catppuccin-latte .file.is-success:active .file-cta,html.theme--catppuccin-latte .file.is-success.is-active .file-cta{background-color:#388c26;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning .file-cta{background-color:#df8e1d;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:hover .file-cta,html.theme--catppuccin-latte .file.is-warning.is-hovered .file-cta{background-color:#d4871c;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-warning:focus .file-cta,html.theme--catppuccin-latte .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(223,142,29,0.25);color:#fff}html.theme--catppuccin-latte .file.is-warning:active .file-cta,html.theme--catppuccin-latte .file.is-warning.is-active .file-cta{background-color:#c8801a;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger .file-cta{background-color:#d20f39;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:hover .file-cta,html.theme--catppuccin-latte .file.is-danger.is-hovered .file-cta{background-color:#c60e36;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-danger:focus .file-cta,html.theme--catppuccin-latte .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(210,15,57,0.25);color:#fff}html.theme--catppuccin-latte .file.is-danger:active .file-cta,html.theme--catppuccin-latte .file.is-danger.is-active .file-cta{background-color:#ba0d33;border-color:transparent;color:#fff}html.theme--catppuccin-latte .file.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-latte .file.is-normal{font-size:1rem}html.theme--catppuccin-latte .file.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-large{font-size:1.5rem}html.theme--catppuccin-latte .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-latte .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-latte .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-latte .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-latte .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-latte .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-latte .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-latte .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-latte .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-latte .file.is-centered{justify-content:center}html.theme--catppuccin-latte .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-latte .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-latte .file.is-right{justify-content:flex-end}html.theme--catppuccin-latte .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-latte .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-latte .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-latte .file-label:hover .file-cta{background-color:#c5c9d5;color:#41445a}html.theme--catppuccin-latte .file-label:hover .file-name{border-color:#a5a9b8}html.theme--catppuccin-latte .file-label:active .file-cta{background-color:#bdc2cf;color:#41445a}html.theme--catppuccin-latte .file-label:active .file-name{border-color:#9ea2b3}html.theme--catppuccin-latte .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-latte .file-cta,html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-latte .file-cta{background-color:#ccd0da;color:#4c4f69}html.theme--catppuccin-latte .file-name{border-color:#acb0be;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-latte .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-latte .file-icon .fa{font-size:14px}html.theme--catppuccin-latte .label{color:#41445a;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-latte .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-latte .label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-latte .label.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .label.is-large{font-size:1.5rem}html.theme--catppuccin-latte .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-latte .help.is-white{color:#fff}html.theme--catppuccin-latte .help.is-black{color:#0a0a0a}html.theme--catppuccin-latte .help.is-light{color:#f5f5f5}html.theme--catppuccin-latte .help.is-dark,html.theme--catppuccin-latte .content kbd.help{color:#ccd0da}html.theme--catppuccin-latte .help.is-primary,html.theme--catppuccin-latte .docstring>section>a.help.docs-sourcelink{color:#1e66f5}html.theme--catppuccin-latte .help.is-link{color:#1e66f5}html.theme--catppuccin-latte .help.is-info{color:#179299}html.theme--catppuccin-latte .help.is-success{color:#40a02b}html.theme--catppuccin-latte .help.is-warning{color:#df8e1d}html.theme--catppuccin-latte .help.is-danger{color:#d20f39}html.theme--catppuccin-latte .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-latte .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-latte .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-latte .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-latte .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-latte .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-latte .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-latte .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-latte .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-latte .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-latte .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field.is-horizontal{display:flex}}html.theme--catppuccin-latte .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-latte .field-label.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-latte .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-latte .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-latte .field-body .field{margin-bottom:0}html.theme--catppuccin-latte .field-body>.field{flex-shrink:1}html.theme--catppuccin-latte .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-latte .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-latte .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-latte .control.has-icons-right .select:focus~.icon{color:#ccd0da}html.theme--catppuccin-latte .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-latte .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-latte .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon{color:#acb0be;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-latte .control.has-icons-left .input,html.theme--catppuccin-latte .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-latte .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-latte .control.has-icons-right .input,html.theme--catppuccin-latte .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-latte .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-latte .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-latte .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-latte .control.is-loading.is-small:after,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-latte .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-latte .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-latte .breadcrumb a{align-items:center;color:#1e66f5;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-latte .breadcrumb a:hover{color:#04a5e5}html.theme--catppuccin-latte .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-latte .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-latte .breadcrumb li.is-active a{color:#41445a;cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb li+li::before{color:#9ca0b0;content:"\0002f"}html.theme--catppuccin-latte .breadcrumb ul,html.theme--catppuccin-latte .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-latte .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .breadcrumb.is-centered ol,html.theme--catppuccin-latte .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-latte .breadcrumb.is-right ol,html.theme--catppuccin-latte .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .breadcrumb.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-latte .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-latte .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-latte .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-latte .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-latte .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-latte .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#4c4f69;max-width:100%;position:relative}html.theme--catppuccin-latte .card-footer:first-child,html.theme--catppuccin-latte .card-content:first-child,html.theme--catppuccin-latte .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-footer:last-child,html.theme--catppuccin-latte .card-content:last-child,html.theme--catppuccin-latte .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-latte .card-header-title{align-items:center;color:#41445a;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-latte .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-latte .card-image{display:block;position:relative}html.theme--catppuccin-latte .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-latte .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-latte .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-latte .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-latte .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-latte .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-latte .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-latte .dropdown.is-active .dropdown-menu,html.theme--catppuccin-latte .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-latte .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-latte .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-latte .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-latte .dropdown-content{background-color:#e6e9ef;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-latte .dropdown-item{color:#4c4f69;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-latte a.dropdown-item,html.theme--catppuccin-latte button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-latte a.dropdown-item:hover,html.theme--catppuccin-latte button.dropdown-item:hover{background-color:#e6e9ef;color:#0a0a0a}html.theme--catppuccin-latte a.dropdown-item.is-active,html.theme--catppuccin-latte button.dropdown-item.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-latte .level{align-items:center;justify-content:space-between}html.theme--catppuccin-latte .level code{border-radius:.4em}html.theme--catppuccin-latte .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-latte .level.is-mobile{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left,html.theme--catppuccin-latte .level.is-mobile .level-right{display:flex}html.theme--catppuccin-latte .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-latte .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-latte .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level{display:flex}html.theme--catppuccin-latte .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-latte .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-latte .level-item .title,html.theme--catppuccin-latte .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-latte .level-left,html.theme--catppuccin-latte .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .level-left .level-item.is-flexible,html.theme--catppuccin-latte .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left .level-item:not(:last-child),html.theme--catppuccin-latte .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-latte .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-latte .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-left{display:flex}}html.theme--catppuccin-latte .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .level-right{display:flex}}html.theme--catppuccin-latte .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-latte .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .media .media{border-top:1px solid rgba(172,176,190,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-latte .media .media .content:not(:last-child),html.theme--catppuccin-latte .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-latte .media .media .media{padding-top:.5rem}html.theme--catppuccin-latte .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-latte .media+.media{border-top:1px solid rgba(172,176,190,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-latte .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-latte .media-left,html.theme--catppuccin-latte .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .media-left{margin-right:1rem}html.theme--catppuccin-latte .media-right{margin-left:1rem}html.theme--catppuccin-latte .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-latte .media-content{overflow-x:auto}}html.theme--catppuccin-latte .menu{font-size:1rem}html.theme--catppuccin-latte .menu.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-latte .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .menu.is-large{font-size:1.5rem}html.theme--catppuccin-latte .menu-list{line-height:1.25}html.theme--catppuccin-latte .menu-list a{border-radius:3px;color:#4c4f69;display:block;padding:0.5em 0.75em}html.theme--catppuccin-latte .menu-list a:hover{background-color:#e6e9ef;color:#41445a}html.theme--catppuccin-latte .menu-list a.is-active{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .menu-list li ul{border-left:1px solid #acb0be;margin:.75em;padding-left:.75em}html.theme--catppuccin-latte .menu-label{color:#616587;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-latte .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-latte .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-latte .message{background-color:#e6e9ef;border-radius:.4em;font-size:1rem}html.theme--catppuccin-latte .message strong{color:currentColor}html.theme--catppuccin-latte .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-latte .message.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-latte .message.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .message.is-large{font-size:1.5rem}html.theme--catppuccin-latte .message.is-white{background-color:#fff}html.theme--catppuccin-latte .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-latte .message.is-black{background-color:#fafafa}html.theme--catppuccin-latte .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-latte .message.is-light{background-color:#fafafa}html.theme--catppuccin-latte .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-latte .message.is-dark,html.theme--catppuccin-latte .content kbd.message{background-color:#f9fafb}html.theme--catppuccin-latte .message.is-dark .message-header,html.theme--catppuccin-latte .content kbd.message .message-header{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .message.is-dark .message-body,html.theme--catppuccin-latte .content kbd.message .message-body{border-color:#ccd0da}html.theme--catppuccin-latte .message.is-primary,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-primary .message-header,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-primary .message-body,html.theme--catppuccin-latte .docstring>section>a.message.docs-sourcelink .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-link{background-color:#ebf2fe}html.theme--catppuccin-latte .message.is-link .message-header{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .message.is-link .message-body{border-color:#1e66f5;color:#0a52e1}html.theme--catppuccin-latte .message.is-info{background-color:#edfcfc}html.theme--catppuccin-latte .message.is-info .message-header{background-color:#179299;color:#fff}html.theme--catppuccin-latte .message.is-info .message-body{border-color:#179299;color:#1cb2ba}html.theme--catppuccin-latte .message.is-success{background-color:#f1fbef}html.theme--catppuccin-latte .message.is-success .message-header{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .message.is-success .message-body{border-color:#40a02b;color:#40a12b}html.theme--catppuccin-latte .message.is-warning{background-color:#fdf6ed}html.theme--catppuccin-latte .message.is-warning .message-header{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .message.is-warning .message-body{border-color:#df8e1d;color:#9e6515}html.theme--catppuccin-latte .message.is-danger{background-color:#feecf0}html.theme--catppuccin-latte .message.is-danger .message-header{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .message.is-danger .message-body{border-color:#d20f39;color:#e9113f}html.theme--catppuccin-latte .message-header{align-items:center;background-color:#4c4f69;border-radius:.4em .4em 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--catppuccin-latte .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-latte .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-latte .message-body{border-color:#acb0be;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#4c4f69;padding:1.25em 1.5em}html.theme--catppuccin-latte .message-body code,html.theme--catppuccin-latte .message-body pre{background-color:#fff}html.theme--catppuccin-latte .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-latte .modal.is-active{display:flex}html.theme--catppuccin-latte .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-latte .modal-content,html.theme--catppuccin-latte .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-latte .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-latte .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-latte .modal-card-head,html.theme--catppuccin-latte .modal-card-foot{align-items:center;background-color:#e6e9ef;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-latte .modal-card-head{border-bottom:1px solid #acb0be;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-latte .modal-card-title{color:#4c4f69;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-latte .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #acb0be}html.theme--catppuccin-latte .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-latte .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#eff1f5;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-latte .navbar{background-color:#1e66f5;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-latte .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-latte .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-latte .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-latte .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-dark,html.theme--catppuccin-latte .content kbd.navbar{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-burger,html.theme--catppuccin-latte .content kbd.navbar .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-latte .content kbd.navbar .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#ccd0da;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-latte .navbar.is-primary,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-burger,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5;color:#fff}}html.theme--catppuccin-latte .navbar.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#179299;color:#fff}}html.theme--catppuccin-latte .navbar.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#40a02b;color:#fff}}html.theme--catppuccin-latte .navbar.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#df8e1d;color:#fff}}html.theme--catppuccin-latte .navbar.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-latte .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#d20f39;color:#fff}}html.theme--catppuccin-latte .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-latte .navbar.has-shadow{box-shadow:0 2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-bottom,html.theme--catppuccin-latte .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #e6e9ef}html.theme--catppuccin-latte .navbar.is-fixed-top{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top,html.theme--catppuccin-latte body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-latte .navbar-brand,html.theme--catppuccin-latte .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-latte .navbar-brand a.navbar-item:focus,html.theme--catppuccin-latte .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-latte .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-latte .navbar-burger{color:#4c4f69;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-latte .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--catppuccin-latte .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-latte .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-latte .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-latte .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-latte .navbar-menu{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{color:#4c4f69;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-latte .navbar-item .icon:only-child,html.theme--catppuccin-latte .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-latte a.navbar-item,html.theme--catppuccin-latte .navbar-link{cursor:pointer}html.theme--catppuccin-latte a.navbar-item:focus,html.theme--catppuccin-latte a.navbar-item:focus-within,html.theme--catppuccin-latte a.navbar-item:hover,html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link:focus,html.theme--catppuccin-latte .navbar-link:focus-within,html.theme--catppuccin-latte .navbar-link:hover,html.theme--catppuccin-latte .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .navbar-item img{max-height:1.75rem}html.theme--catppuccin-latte .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-latte .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-latte .navbar-item.is-tab:focus,html.theme--catppuccin-latte .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5}html.theme--catppuccin-latte .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1e66f5;border-bottom-style:solid;border-bottom-width:3px;color:#1e66f5;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-latte .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-latte .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-latte .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-latte .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-latte .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--catppuccin-latte .navbar>.container{display:block}html.theme--catppuccin-latte .navbar-brand .navbar-item,html.theme--catppuccin-latte .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-link::after{display:none}html.theme--catppuccin-latte .navbar-menu{background-color:#1e66f5;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-latte .navbar-menu.is-active{display:block}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch,html.theme--catppuccin-latte .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-latte .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-latte .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-latte html.has-navbar-fixed-top-touch,html.theme--catppuccin-latte body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .navbar,html.theme--catppuccin-latte .navbar-menu,html.theme--catppuccin-latte .navbar-start,html.theme--catppuccin-latte .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-latte .navbar{min-height:4rem}html.theme--catppuccin-latte .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-latte .navbar.is-spaced .navbar-start,html.theme--catppuccin-latte .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-latte .navbar.is-spaced a.navbar-item,html.theme--catppuccin-latte .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-latte .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-latte .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-latte .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}html.theme--catppuccin-latte .navbar-burger{display:none}html.theme--catppuccin-latte .navbar-item,html.theme--catppuccin-latte .navbar-link{align-items:center;display:flex}html.theme--catppuccin-latte .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-latte .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-latte .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--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-latte .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-latte .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-latte .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-latte .navbar-dropdown{background-color:#1e66f5;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--catppuccin-latte .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-latte .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8c8fa1}html.theme--catppuccin-latte .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1e66f5}.navbar.is-spaced html.theme--catppuccin-latte .navbar-dropdown,html.theme--catppuccin-latte .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--catppuccin-latte .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-latte .navbar-divider{display:block}html.theme--catppuccin-latte .navbar>.container .navbar-brand,html.theme--catppuccin-latte .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-latte .navbar>.container .navbar-menu,html.theme--catppuccin-latte .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-latte .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-latte .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-latte html.has-navbar-fixed-top-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-latte html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-latte body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-top,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-latte html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-latte body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-latte a.navbar-item.is-active,html.theme--catppuccin-latte .navbar-link.is-active{color:#1e66f5}html.theme--catppuccin-latte a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-latte .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-latte .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-latte .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-latte .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-latte .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-latte .pagination.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-latte .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-latte .pagination.is-rounded .pagination-previous,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-latte .pagination.is-rounded .pagination-next,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-latte .pagination.is-rounded .pagination-link,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-latte .pagination,html.theme--catppuccin-latte .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link{border-color:#acb0be;color:#1e66f5;min-width:2.5em}html.theme--catppuccin-latte .pagination-previous:hover,html.theme--catppuccin-latte .pagination-next:hover,html.theme--catppuccin-latte .pagination-link:hover{border-color:#9ca0b0;color:#04a5e5}html.theme--catppuccin-latte .pagination-previous:focus,html.theme--catppuccin-latte .pagination-next:focus,html.theme--catppuccin-latte .pagination-link:focus{border-color:#9ca0b0}html.theme--catppuccin-latte .pagination-previous:active,html.theme--catppuccin-latte .pagination-next:active,html.theme--catppuccin-latte .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-latte .pagination-previous[disabled],html.theme--catppuccin-latte .pagination-previous.is-disabled,html.theme--catppuccin-latte .pagination-next[disabled],html.theme--catppuccin-latte .pagination-next.is-disabled,html.theme--catppuccin-latte .pagination-link[disabled],html.theme--catppuccin-latte .pagination-link.is-disabled{background-color:#acb0be;border-color:#acb0be;box-shadow:none;color:#616587;opacity:0.5}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-latte .pagination-link.is-current{background-color:#1e66f5;border-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .pagination-ellipsis{color:#9ca0b0;pointer-events:none}html.theme--catppuccin-latte .pagination-list{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-latte .pagination{flex-wrap:wrap}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination-previous{order:2}html.theme--catppuccin-latte .pagination-next{order:3}html.theme--catppuccin-latte .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-latte .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-latte .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-latte .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-latte .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-latte .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-latte .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-latte .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-latte .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-latte .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-latte .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-latte .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-latte .panel.is-dark .panel-heading,html.theme--catppuccin-latte .content kbd.panel .panel-heading{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-latte .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#ccd0da}html.theme--catppuccin-latte .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .content kbd.panel .panel-block.is-active .panel-icon{color:#ccd0da}html.theme--catppuccin-latte .panel.is-primary .panel-heading,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-latte .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-heading{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1e66f5}html.theme--catppuccin-latte .panel.is-link .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel.is-info .panel-heading{background-color:#179299;color:#fff}html.theme--catppuccin-latte .panel.is-info .panel-tabs a.is-active{border-bottom-color:#179299}html.theme--catppuccin-latte .panel.is-info .panel-block.is-active .panel-icon{color:#179299}html.theme--catppuccin-latte .panel.is-success .panel-heading{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .panel.is-success .panel-tabs a.is-active{border-bottom-color:#40a02b}html.theme--catppuccin-latte .panel.is-success .panel-block.is-active .panel-icon{color:#40a02b}html.theme--catppuccin-latte .panel.is-warning .panel-heading{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#df8e1d}html.theme--catppuccin-latte .panel.is-warning .panel-block.is-active .panel-icon{color:#df8e1d}html.theme--catppuccin-latte .panel.is-danger .panel-heading{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#d20f39}html.theme--catppuccin-latte .panel.is-danger .panel-block.is-active .panel-icon{color:#d20f39}html.theme--catppuccin-latte .panel-tabs:not(:last-child),html.theme--catppuccin-latte .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-latte .panel-heading{background-color:#bcc0cc;border-radius:8px 8px 0 0;color:#41445a;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-latte .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-latte .panel-tabs a{border-bottom:1px solid #acb0be;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-latte .panel-tabs a.is-active{border-bottom-color:#bcc0cc;color:#0b57ef}html.theme--catppuccin-latte .panel-list a{color:#4c4f69}html.theme--catppuccin-latte .panel-list a:hover{color:#1e66f5}html.theme--catppuccin-latte .panel-block{align-items:center;color:#41445a;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-latte .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-latte .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-latte .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-latte .panel-block.is-active{border-left-color:#1e66f5;color:#0b57ef}html.theme--catppuccin-latte .panel-block.is-active .panel-icon{color:#1e66f5}html.theme--catppuccin-latte .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-latte a.panel-block,html.theme--catppuccin-latte label.panel-block{cursor:pointer}html.theme--catppuccin-latte a.panel-block:hover,html.theme--catppuccin-latte label.panel-block:hover{background-color:#e6e9ef}html.theme--catppuccin-latte .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#616587;margin-right:.75em}html.theme--catppuccin-latte .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-latte .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}html.theme--catppuccin-latte .tabs a{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;color:#4c4f69;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-latte .tabs a:hover{border-bottom-color:#41445a;color:#41445a}html.theme--catppuccin-latte .tabs li{display:block}html.theme--catppuccin-latte .tabs li.is-active a{border-bottom-color:#1e66f5;color:#1e66f5}html.theme--catppuccin-latte .tabs ul{align-items:center;border-bottom-color:#acb0be;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-latte .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-latte .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-latte .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-latte .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-latte .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-latte .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-latte .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-latte .tabs.is-boxed a:hover{background-color:#e6e9ef;border-bottom-color:#acb0be}html.theme--catppuccin-latte .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#acb0be;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-latte .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-latte .tabs.is-toggle a{border-color:#acb0be;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-latte .tabs.is-toggle a:hover{background-color:#e6e9ef;border-color:#9ca0b0;z-index:2}html.theme--catppuccin-latte .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-latte .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-latte .tabs.is-toggle li.is-active a{background-color:#1e66f5;border-color:#1e66f5;color:#fff;z-index:1}html.theme--catppuccin-latte .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-latte .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-latte .tabs.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-latte .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-latte .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-latte .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-latte .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-latte .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-latte .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-latte .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-latte .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-latte .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-latte .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-latte .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .column.is-narrow,html.theme--catppuccin-latte .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full,html.theme--catppuccin-latte .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters,html.theme--catppuccin-latte .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds,html.theme--catppuccin-latte .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half,html.theme--catppuccin-latte .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third,html.theme--catppuccin-latte .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter,html.theme--catppuccin-latte .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth,html.theme--catppuccin-latte .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths,html.theme--catppuccin-latte .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths,html.theme--catppuccin-latte .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths,html.theme--catppuccin-latte .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters,html.theme--catppuccin-latte .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds,html.theme--catppuccin-latte .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half,html.theme--catppuccin-latte .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third,html.theme--catppuccin-latte .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter,html.theme--catppuccin-latte .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth,html.theme--catppuccin-latte .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths,html.theme--catppuccin-latte .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths,html.theme--catppuccin-latte .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths,html.theme--catppuccin-latte .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-latte .column.is-0,html.theme--catppuccin-latte .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0,html.theme--catppuccin-latte .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-latte .column.is-1,html.theme--catppuccin-latte .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1,html.theme--catppuccin-latte .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2,html.theme--catppuccin-latte .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2,html.theme--catppuccin-latte .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3,html.theme--catppuccin-latte .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3,html.theme--catppuccin-latte .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-latte .column.is-4,html.theme--catppuccin-latte .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4,html.theme--catppuccin-latte .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5,html.theme--catppuccin-latte .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5,html.theme--catppuccin-latte .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6,html.theme--catppuccin-latte .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6,html.theme--catppuccin-latte .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-latte .column.is-7,html.theme--catppuccin-latte .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7,html.theme--catppuccin-latte .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8,html.theme--catppuccin-latte .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8,html.theme--catppuccin-latte .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9,html.theme--catppuccin-latte .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9,html.theme--catppuccin-latte .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-latte .column.is-10,html.theme--catppuccin-latte .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10,html.theme--catppuccin-latte .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11,html.theme--catppuccin-latte .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11,html.theme--catppuccin-latte .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12,html.theme--catppuccin-latte .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12,html.theme--catppuccin-latte .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-latte .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-latte .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-latte .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-latte .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-latte .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-latte .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-latte .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-latte .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-latte .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-latte .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-latte .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-latte .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-latte .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-latte .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-latte .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-latte .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-latte .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-latte .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-latte .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-latte .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-latte .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-latte .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-latte .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-latte .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-latte .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-latte .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-latte .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-latte .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-latte .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-latte .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-latte .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-latte .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-latte .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-latte .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-latte .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-latte .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-latte .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-latte .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-latte .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-latte .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-latte .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-latte .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-latte .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-latte .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-latte .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-latte .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-latte .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-latte .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-latte .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-latte .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-latte .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-latte .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-latte .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-latte .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-latte .columns.is-centered{justify-content:center}html.theme--catppuccin-latte .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-latte .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-latte .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-latte .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-latte .columns.is-mobile{display:flex}html.theme--catppuccin-latte .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-latte .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-desktop{display:flex}}html.theme--catppuccin-latte .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-latte .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-latte .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-latte .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-latte .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-latte .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-latte .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-latte .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-latte .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-latte .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-latte .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-latte .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-latte .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-latte .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-latte .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-latte .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-latte .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-latte .tile.is-child{margin:0 !important}html.theme--catppuccin-latte .tile.is-parent{padding:.75rem}html.theme--catppuccin-latte .tile.is-vertical{flex-direction:column}html.theme--catppuccin-latte .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .tile:not(.is-child){display:flex}html.theme--catppuccin-latte .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-latte .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-latte .tile.is-3{flex:none;width:25%}html.theme--catppuccin-latte .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-latte .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-latte .tile.is-6{flex:none;width:50%}html.theme--catppuccin-latte .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-latte .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-latte .tile.is-9{flex:none;width:75%}html.theme--catppuccin-latte .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-latte .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-latte .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-latte .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-latte .hero .navbar{background:none}html.theme--catppuccin-latte .hero .tabs ul{border-bottom:none}html.theme--catppuccin-latte .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-white strong{color:inherit}html.theme--catppuccin-latte .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-latte .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-latte .hero.is-white .navbar-item,html.theme--catppuccin-latte .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-latte .hero.is-white a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-white .navbar-link:hover,html.theme--catppuccin-latte .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-latte .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-latte .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-black strong{color:inherit}html.theme--catppuccin-latte .hero.is-black .title{color:#fff}html.theme--catppuccin-latte .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-latte .hero.is-black .navbar-item,html.theme--catppuccin-latte .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-black a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-black .navbar-link:hover,html.theme--catppuccin-latte .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-latte .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-latte .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-light strong{color:inherit}html.theme--catppuccin-latte .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-latte .hero.is-light .navbar-item,html.theme--catppuccin-latte .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-light .navbar-link:hover,html.theme--catppuccin-latte .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-light .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:#f5f5f5}html.theme--catppuccin-latte .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-latte .hero.is-dark,html.theme--catppuccin-latte .content kbd.hero{background-color:#ccd0da;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-dark strong,html.theme--catppuccin-latte .content kbd.hero strong{color:inherit}html.theme--catppuccin-latte .hero.is-dark .title,html.theme--catppuccin-latte .content kbd.hero .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .subtitle,html.theme--catppuccin-latte .content kbd.hero .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-latte .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-latte .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-dark .subtitle strong,html.theme--catppuccin-latte .content kbd.hero .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-dark .navbar-menu,html.theme--catppuccin-latte .content kbd.hero .navbar-menu{background-color:#ccd0da}}html.theme--catppuccin-latte .hero.is-dark .navbar-item,html.theme--catppuccin-latte .content kbd.hero .navbar-item,html.theme--catppuccin-latte .hero.is-dark .navbar-link,html.theme--catppuccin-latte .content kbd.hero .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-latte .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-latte .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-dark .navbar-link:hover,html.theme--catppuccin-latte .content kbd.hero .navbar-link:hover,html.theme--catppuccin-latte .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-latte .content kbd.hero .navbar-link.is-active{background-color:#bdc2cf;color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs a,html.theme--catppuccin-latte .content kbd.hero .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-latte .hero.is-dark .tabs a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs li.is-active a{color:#ccd0da !important;opacity:1}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-dark .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:#ccd0da}html.theme--catppuccin-latte .hero.is-dark.is-bold,html.theme--catppuccin-latte .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-latte .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a7b8cc 0%, #ccd0da 71%, #d9dbe6 100%)}}html.theme--catppuccin-latte .hero.is-primary,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-primary strong,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-latte .hero.is-primary .title,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-latte .hero.is-primary .subtitle,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-primary .subtitle strong,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-primary .navbar-menu,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-primary .navbar-item,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-latte .hero.is-primary .navbar-link,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-primary .navbar-link:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-latte .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-primary .tabs a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-primary.is-bold,html.theme--catppuccin-latte .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-latte .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-link{background-color:#1e66f5;color:#fff}html.theme--catppuccin-latte .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-link strong{color:inherit}html.theme--catppuccin-latte .hero.is-link .title{color:#fff}html.theme--catppuccin-latte .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-link .navbar-menu{background-color:#1e66f5}}html.theme--catppuccin-latte .hero.is-link .navbar-item,html.theme--catppuccin-latte .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-link a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-link .navbar-link:hover,html.theme--catppuccin-latte .hero.is-link .navbar-link.is-active{background-color:#0b57ef;color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs li.is-active a{color:#1e66f5 !important;opacity:1}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1e66f5}html.theme--catppuccin-latte .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0070e0 0%, #1e66f5 71%, #3153fb 100%)}}html.theme--catppuccin-latte .hero.is-info{background-color:#179299;color:#fff}html.theme--catppuccin-latte .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-info strong{color:inherit}html.theme--catppuccin-latte .hero.is-info .title{color:#fff}html.theme--catppuccin-latte .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-info .navbar-menu{background-color:#179299}}html.theme--catppuccin-latte .hero.is-info .navbar-item,html.theme--catppuccin-latte .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-info a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-info .navbar-link:hover,html.theme--catppuccin-latte .hero.is-info .navbar-link.is-active{background-color:#147d83;color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs li.is-active a{color:#179299 !important;opacity:1}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#179299}html.theme--catppuccin-latte .hero.is-info.is-bold{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0a7367 0%, #179299 71%, #1591b4 100%)}}html.theme--catppuccin-latte .hero.is-success{background-color:#40a02b;color:#fff}html.theme--catppuccin-latte .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-success strong{color:inherit}html.theme--catppuccin-latte .hero.is-success .title{color:#fff}html.theme--catppuccin-latte .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-success .navbar-menu{background-color:#40a02b}}html.theme--catppuccin-latte .hero.is-success .navbar-item,html.theme--catppuccin-latte .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-success a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-success .navbar-link:hover,html.theme--catppuccin-latte .hero.is-success .navbar-link.is-active{background-color:#388c26;color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs li.is-active a{color:#40a02b !important;opacity:1}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#40a02b}html.theme--catppuccin-latte .hero.is-success.is-bold{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #3c7f19 0%, #40a02b 71%, #2dba2b 100%)}}html.theme--catppuccin-latte .hero.is-warning{background-color:#df8e1d;color:#fff}html.theme--catppuccin-latte .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-warning strong{color:inherit}html.theme--catppuccin-latte .hero.is-warning .title{color:#fff}html.theme--catppuccin-latte .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-warning .navbar-menu{background-color:#df8e1d}}html.theme--catppuccin-latte .hero.is-warning .navbar-item,html.theme--catppuccin-latte .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-warning .navbar-link:hover,html.theme--catppuccin-latte .hero.is-warning .navbar-link.is-active{background-color:#c8801a;color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs li.is-active a{color:#df8e1d !important;opacity:1}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#df8e1d}html.theme--catppuccin-latte .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #bc560d 0%, #df8e1d 71%, #eaba2b 100%)}}html.theme--catppuccin-latte .hero.is-danger{background-color:#d20f39;color:#fff}html.theme--catppuccin-latte .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-latte .hero.is-danger strong{color:inherit}html.theme--catppuccin-latte .hero.is-danger .title{color:#fff}html.theme--catppuccin-latte .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-latte .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-latte .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .hero.is-danger .navbar-menu{background-color:#d20f39}}html.theme--catppuccin-latte .hero.is-danger .navbar-item,html.theme--catppuccin-latte .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-latte .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-latte .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-latte .hero.is-danger .navbar-link:hover,html.theme--catppuccin-latte .hero.is-danger .navbar-link.is-active{background-color:#ba0d33;color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-latte .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs li.is-active a{color:#d20f39 !important;opacity:1}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-latte .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#d20f39}html.theme--catppuccin-latte .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ab0343 0%, #d20f39 71%, #f00a16 100%)}}html.theme--catppuccin-latte .hero.is-small .hero-body,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-latte .hero.is-halfheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight .hero-body,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-latte .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-latte .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-latte .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-latte .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-latte .hero-video{overflow:hidden}html.theme--catppuccin-latte .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-latte .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-video{display:none}}html.theme--catppuccin-latte .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-latte .hero-buttons .button{display:flex}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-latte .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-latte .hero-head,html.theme--catppuccin-latte .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-latte .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-latte .hero-body{padding:3rem 3rem}}html.theme--catppuccin-latte .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-latte .section{padding:3rem 3rem}html.theme--catppuccin-latte .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-latte .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-latte .footer{background-color:#e6e9ef;padding:3rem 1.5rem 6rem}html.theme--catppuccin-latte h1 .docs-heading-anchor,html.theme--catppuccin-latte h1 .docs-heading-anchor:hover,html.theme--catppuccin-latte h1 .docs-heading-anchor:visited,html.theme--catppuccin-latte h2 .docs-heading-anchor,html.theme--catppuccin-latte h2 .docs-heading-anchor:hover,html.theme--catppuccin-latte h2 .docs-heading-anchor:visited,html.theme--catppuccin-latte h3 .docs-heading-anchor,html.theme--catppuccin-latte h3 .docs-heading-anchor:hover,html.theme--catppuccin-latte h3 .docs-heading-anchor:visited,html.theme--catppuccin-latte h4 .docs-heading-anchor,html.theme--catppuccin-latte h4 .docs-heading-anchor:hover,html.theme--catppuccin-latte h4 .docs-heading-anchor:visited,html.theme--catppuccin-latte h5 .docs-heading-anchor,html.theme--catppuccin-latte h5 .docs-heading-anchor:hover,html.theme--catppuccin-latte h5 .docs-heading-anchor:visited,html.theme--catppuccin-latte h6 .docs-heading-anchor,html.theme--catppuccin-latte h6 .docs-heading-anchor:hover,html.theme--catppuccin-latte h6 .docs-heading-anchor:visited{color:#4c4f69}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-latte h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-latte h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-latte h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-latte h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-latte .docs-dark-only{display:none !important}html.theme--catppuccin-latte pre{position:relative;overflow:hidden}html.theme--catppuccin-latte pre code,html.theme--catppuccin-latte pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-latte pre code:first-of-type,html.theme--catppuccin-latte pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-latte pre code:last-of-type,html.theme--catppuccin-latte pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-latte 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 6 Free";color:#4c4f69;cursor:pointer;text-align:center}html.theme--catppuccin-latte pre .copy-button:focus,html.theme--catppuccin-latte pre .copy-button:hover{opacity:1;background:rgba(76,79,105,0.1);color:#1e66f5}html.theme--catppuccin-latte pre .copy-button.success{color:#40a02b;opacity:1}html.theme--catppuccin-latte pre .copy-button.error{color:#d20f39;opacity:1}html.theme--catppuccin-latte pre:hover .copy-button{opacity:1}html.theme--catppuccin-latte .admonition{background-color:#e6e9ef;border-style:solid;border-width:2px;border-color:#5c5f77;border-radius:4px;font-size:1rem}html.theme--catppuccin-latte .admonition strong{color:currentColor}html.theme--catppuccin-latte .admonition.is-small,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-latte .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-latte .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-latte .admonition.is-default{background-color:#e6e9ef;border-color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#5c5f77}html.theme--catppuccin-latte .admonition.is-default>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-info{background-color:#e6e9ef;border-color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#179299}html.theme--catppuccin-latte .admonition.is-info>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-success{background-color:#e6e9ef;border-color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#40a02b}html.theme--catppuccin-latte .admonition.is-success>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-warning{background-color:#e6e9ef;border-color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#df8e1d}html.theme--catppuccin-latte .admonition.is-warning>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-danger{background-color:#e6e9ef;border-color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#d20f39}html.theme--catppuccin-latte .admonition.is-danger>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition.is-compat{background-color:#e6e9ef;border-color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#04a5e5}html.theme--catppuccin-latte .admonition.is-compat>.admonition-body{color:#4c4f69}html.theme--catppuccin-latte .admonition-header{color:#5c5f77;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-latte .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-latte details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-latte details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-latte .admonition-body{color:#4c4f69;padding:0.5rem .75rem}html.theme--catppuccin-latte .admonition-body pre{background-color:#e6e9ef}html.theme--catppuccin-latte .admonition-body code{background-color:#e6e9ef}html.theme--catppuccin-latte .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #acb0be;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-latte .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#e6e9ef;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #acb0be;overflow:auto}html.theme--catppuccin-latte .docstring>header code{background-color:transparent}html.theme--catppuccin-latte .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-latte .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-latte .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-latte .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-latte .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-latte .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-latte .documenter-example-output{background-color:#eff1f5}html.theme--catppuccin-latte .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:#e6e9ef;color:#4c4f69;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-latte .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-latte .outdated-warning-overlay a{color:#1e66f5}html.theme--catppuccin-latte .outdated-warning-overlay a:hover{color:#04a5e5}html.theme--catppuccin-latte .content pre{border:2px solid #acb0be;border-radius:4px}html.theme--catppuccin-latte .content code{font-weight:inherit}html.theme--catppuccin-latte .content a code{color:#1e66f5}html.theme--catppuccin-latte .content a:hover code{color:#04a5e5}html.theme--catppuccin-latte .content h1 code,html.theme--catppuccin-latte .content h2 code,html.theme--catppuccin-latte .content h3 code,html.theme--catppuccin-latte .content h4 code,html.theme--catppuccin-latte .content h5 code,html.theme--catppuccin-latte .content h6 code{color:#4c4f69}html.theme--catppuccin-latte .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-latte .content blockquote>ul:first-child,html.theme--catppuccin-latte .content blockquote>ol:first-child,html.theme--catppuccin-latte .content .admonition-body>ul:first-child,html.theme--catppuccin-latte .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-latte pre,html.theme--catppuccin-latte code{font-variant-ligatures:no-contextual}html.theme--catppuccin-latte .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-latte .breadcrumb a.is-disabled,html.theme--catppuccin-latte .breadcrumb a.is-disabled:hover{color:#41445a}html.theme--catppuccin-latte .hljs{background:initial !important}html.theme--catppuccin-latte .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-latte .katex-display,html.theme--catppuccin-latte mjx-container,html.theme--catppuccin-latte .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-latte html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-latte li.no-marker{list-style:none}html.theme--catppuccin-latte #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-latte #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main{width:100%}html.theme--catppuccin-latte #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-main>header,html.theme--catppuccin-latte #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar{background-color:#eff1f5;border-bottom:1px solid #acb0be;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-latte #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #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--catppuccin-latte #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--catppuccin-latte #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--catppuccin-latte #documenter .docs-main section.footnotes{border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-latte #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-latte .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-latte #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #acb0be;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-latte #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-latte #documenter .docs-sidebar{display:flex;flex-direction:column;color:#4c4f69;background-color:#e6e9ef;border-right:1px solid #acb0be;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-latte #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-latte #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--catppuccin-latte #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-latte #documenter .docs-sidebar .docs-package-name a:hover{color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #acb0be;display:none;padding:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #acb0be;padding-bottom:1.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-latte #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}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#4c4f69;background:#e6e9ef}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#4c4f69;background-color:#f2f4f7}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #acb0be;border-bottom:1px solid #acb0be;background-color:#dce0e8}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#dce0e8;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#f2f4f7;color:#4c4f69}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #acb0be}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-latte #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#fff}}@media screen and (max-width: 1055px){html.theme--catppuccin-latte #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#fff}html.theme--catppuccin-latte #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#fff}}html.theme--catppuccin-latte kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-latte .search-min-width-50{min-width:50%}html.theme--catppuccin-latte .search-min-height-100{min-height:100%}html.theme--catppuccin-latte .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .property-search-result-badge,html.theme--catppuccin-latte .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-latte .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-latte .search-filter:hover,html.theme--catppuccin-latte .search-filter:focus{color:#333}html.theme--catppuccin-latte .search-filter-selected{color:#ccd0da;background-color:#7287fd}html.theme--catppuccin-latte .search-filter-selected:hover,html.theme--catppuccin-latte .search-filter-selected:focus{color:#ccd0da}html.theme--catppuccin-latte .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #acb0be}html.theme--catppuccin-latte .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-latte .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-latte #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-latte #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem}html.theme--catppuccin-latte .gap-8{gap:2rem}html.theme--catppuccin-latte{background-color:#eff1f5;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-latte a{transition:all 200ms ease}html.theme--catppuccin-latte .label{color:#4c4f69}html.theme--catppuccin-latte .button,html.theme--catppuccin-latte .control.has-icons-left .icon,html.theme--catppuccin-latte .control.has-icons-right .icon,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .pagination-ellipsis,html.theme--catppuccin-latte .pagination-link,html.theme--catppuccin-latte .pagination-next,html.theme--catppuccin-latte .pagination-previous,html.theme--catppuccin-latte .select,html.theme--catppuccin-latte .select select,html.theme--catppuccin-latte .textarea{height:2.5em;color:#4c4f69}html.theme--catppuccin-latte .input,html.theme--catppuccin-latte #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-latte .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#4c4f69}html.theme--catppuccin-latte .select:after,html.theme--catppuccin-latte .select select{border-width:1px}html.theme--catppuccin-latte .menu-list a{transition:all 300ms ease}html.theme--catppuccin-latte .modal-card-foot,html.theme--catppuccin-latte .modal-card-head{border-color:#acb0be}html.theme--catppuccin-latte .navbar{border-radius:.4em}html.theme--catppuccin-latte .navbar.is-transparent{background:none}html.theme--catppuccin-latte .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-latte .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1e66f5}@media screen and (max-width: 1055px){html.theme--catppuccin-latte .navbar .navbar-menu{background-color:#1e66f5;border-radius:0 0 .4em .4em}}html.theme--catppuccin-latte .docstring>section>a.docs-sourcelink:not(body){color:#ccd0da}html.theme--catppuccin-latte .tag.is-link:not(body),html.theme--catppuccin-latte .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-latte .content kbd.is-link:not(body){color:#ccd0da}html.theme--catppuccin-latte .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-latte .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-latte .ansi span.sgr3{font-style:italic}html.theme--catppuccin-latte .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-latte .ansi span.sgr7{color:#eff1f5;background-color:#4c4f69}html.theme--catppuccin-latte .ansi span.sgr8{color:transparent}html.theme--catppuccin-latte .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-latte .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-latte .ansi span.sgr30{color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr31{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr32{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr33{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr34{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr35{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr36{color:#179299}html.theme--catppuccin-latte .ansi span.sgr37{color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr40{background-color:#5c5f77}html.theme--catppuccin-latte .ansi span.sgr41{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr42{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr43{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr44{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr45{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr46{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr47{background-color:#acb0be}html.theme--catppuccin-latte .ansi span.sgr90{color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr91{color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr92{color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr93{color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr94{color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr95{color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr96{color:#179299}html.theme--catppuccin-latte .ansi span.sgr97{color:#bcc0cc}html.theme--catppuccin-latte .ansi span.sgr100{background-color:#6c6f85}html.theme--catppuccin-latte .ansi span.sgr101{background-color:#d20f39}html.theme--catppuccin-latte .ansi span.sgr102{background-color:#40a02b}html.theme--catppuccin-latte .ansi span.sgr103{background-color:#df8e1d}html.theme--catppuccin-latte .ansi span.sgr104{background-color:#1e66f5}html.theme--catppuccin-latte .ansi span.sgr105{background-color:#ea76cb}html.theme--catppuccin-latte .ansi span.sgr106{background-color:#179299}html.theme--catppuccin-latte .ansi span.sgr107{background-color:#bcc0cc}html.theme--catppuccin-latte code.language-julia-repl>span.hljs-meta{color:#40a02b;font-weight:bolder}html.theme--catppuccin-latte code .hljs{color:#4c4f69;background:#eff1f5}html.theme--catppuccin-latte code .hljs-keyword{color:#8839ef}html.theme--catppuccin-latte code .hljs-built_in{color:#d20f39}html.theme--catppuccin-latte code .hljs-type{color:#df8e1d}html.theme--catppuccin-latte code .hljs-literal{color:#fe640b}html.theme--catppuccin-latte code .hljs-number{color:#fe640b}html.theme--catppuccin-latte code .hljs-operator{color:#179299}html.theme--catppuccin-latte code .hljs-punctuation{color:#5c5f77}html.theme--catppuccin-latte code .hljs-property{color:#179299}html.theme--catppuccin-latte code .hljs-regexp{color:#ea76cb}html.theme--catppuccin-latte code .hljs-string{color:#40a02b}html.theme--catppuccin-latte code .hljs-char.escape_{color:#40a02b}html.theme--catppuccin-latte code .hljs-subst{color:#6c6f85}html.theme--catppuccin-latte code .hljs-symbol{color:#dd7878}html.theme--catppuccin-latte code .hljs-variable{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.language_{color:#8839ef}html.theme--catppuccin-latte code .hljs-variable.constant_{color:#fe640b}html.theme--catppuccin-latte code .hljs-title{color:#1e66f5}html.theme--catppuccin-latte code .hljs-title.class_{color:#df8e1d}html.theme--catppuccin-latte code .hljs-title.function_{color:#1e66f5}html.theme--catppuccin-latte code .hljs-params{color:#4c4f69}html.theme--catppuccin-latte code .hljs-comment{color:#acb0be}html.theme--catppuccin-latte code .hljs-doctag{color:#d20f39}html.theme--catppuccin-latte code .hljs-meta{color:#fe640b}html.theme--catppuccin-latte code .hljs-section{color:#1e66f5}html.theme--catppuccin-latte code .hljs-tag{color:#6c6f85}html.theme--catppuccin-latte code .hljs-name{color:#8839ef}html.theme--catppuccin-latte code .hljs-attr{color:#1e66f5}html.theme--catppuccin-latte code .hljs-attribute{color:#40a02b}html.theme--catppuccin-latte code .hljs-bullet{color:#179299}html.theme--catppuccin-latte code .hljs-code{color:#40a02b}html.theme--catppuccin-latte code .hljs-emphasis{color:#d20f39;font-style:italic}html.theme--catppuccin-latte code .hljs-strong{color:#d20f39;font-weight:bold}html.theme--catppuccin-latte code .hljs-formula{color:#179299}html.theme--catppuccin-latte code .hljs-link{color:#209fb5;font-style:italic}html.theme--catppuccin-latte code .hljs-quote{color:#40a02b;font-style:italic}html.theme--catppuccin-latte code .hljs-selector-tag{color:#df8e1d}html.theme--catppuccin-latte code .hljs-selector-id{color:#1e66f5}html.theme--catppuccin-latte code .hljs-selector-class{color:#179299}html.theme--catppuccin-latte code .hljs-selector-attr{color:#8839ef}html.theme--catppuccin-latte code .hljs-selector-pseudo{color:#179299}html.theme--catppuccin-latte code .hljs-template-tag{color:#dd7878}html.theme--catppuccin-latte code .hljs-template-variable{color:#dd7878}html.theme--catppuccin-latte code .hljs-addition{color:#40a02b;background:rgba(166,227,161,0.15)}html.theme--catppuccin-latte code .hljs-deletion{color:#d20f39;background:rgba(243,139,168,0.15)}html.theme--catppuccin-latte .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover,html.theme--catppuccin-latte .search-result-link:focus{background-color:#ccd0da}html.theme--catppuccin-latte .search-result-link .property-search-result-badge,html.theme--catppuccin-latte .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-latte .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:hover .search-filter,html.theme--catppuccin-latte .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-latte .search-result-link:focus .search-filter{color:#ccd0da !important;background-color:#7287fd !important}html.theme--catppuccin-latte .search-result-title{color:#4c4f69}html.theme--catppuccin-latte .search-result-highlight{background-color:#d20f39;color:#e6e9ef}html.theme--catppuccin-latte .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-latte .w-100{width:100%}html.theme--catppuccin-latte .gap-2{gap:0.5rem}html.theme--catppuccin-latte .gap-4{gap:1rem} diff --git a/v0.8.7/assets/themes/catppuccin-macchiato.css b/v0.8.7/assets/themes/catppuccin-macchiato.css new file mode 100644 index 0000000000..6ed16f8eb1 --- /dev/null +++ b/v0.8.7/assets/themes/catppuccin-macchiato.css @@ -0,0 +1 @@ +html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .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:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus,html.theme--catppuccin-macchiato .pagination-ellipsis:focus,html.theme--catppuccin-macchiato .file-cta:focus,html.theme--catppuccin-macchiato .file-name:focus,html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .is-focused.pagination-previous,html.theme--catppuccin-macchiato .is-focused.pagination-next,html.theme--catppuccin-macchiato .is-focused.pagination-link,html.theme--catppuccin-macchiato .is-focused.pagination-ellipsis,html.theme--catppuccin-macchiato .is-focused.file-cta,html.theme--catppuccin-macchiato .is-focused.file-name,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-focused.button,html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active,html.theme--catppuccin-macchiato .pagination-ellipsis:active,html.theme--catppuccin-macchiato .file-cta:active,html.theme--catppuccin-macchiato .file-name:active,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .is-active.pagination-previous,html.theme--catppuccin-macchiato .is-active.pagination-next,html.theme--catppuccin-macchiato .is-active.pagination-link,html.theme--catppuccin-macchiato .is-active.pagination-ellipsis,html.theme--catppuccin-macchiato .is-active.file-cta,html.theme--catppuccin-macchiato .is-active.file-name,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .is-active.button{outline:none}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-ellipsis[disabled],html.theme--catppuccin-macchiato .file-cta[disabled],html.theme--catppuccin-macchiato .file-name[disabled],html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-macchiato .file-name,html.theme--catppuccin-macchiato fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato fieldset[disabled] .select select,html.theme--catppuccin-macchiato .select fieldset[disabled] select,html.theme--catppuccin-macchiato fieldset[disabled] .textarea,html.theme--catppuccin-macchiato fieldset[disabled] .input,html.theme--catppuccin-macchiato fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-macchiato .tabs,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .breadcrumb,html.theme--catppuccin-macchiato .file,html.theme--catppuccin-macchiato .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-macchiato .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--catppuccin-macchiato .admonition:not(:last-child),html.theme--catppuccin-macchiato .tabs:not(:last-child),html.theme--catppuccin-macchiato .pagination:not(:last-child),html.theme--catppuccin-macchiato .message:not(:last-child),html.theme--catppuccin-macchiato .level:not(:last-child),html.theme--catppuccin-macchiato .breadcrumb:not(:last-child),html.theme--catppuccin-macchiato .block:not(:last-child),html.theme--catppuccin-macchiato .title:not(:last-child),html.theme--catppuccin-macchiato .subtitle:not(:last-child),html.theme--catppuccin-macchiato .table-container:not(:last-child),html.theme--catppuccin-macchiato .table:not(:last-child),html.theme--catppuccin-macchiato .progress:not(:last-child),html.theme--catppuccin-macchiato .notification:not(:last-child),html.theme--catppuccin-macchiato .content:not(:last-child),html.theme--catppuccin-macchiato .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .modal-close,html.theme--catppuccin-macchiato .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before,html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .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--catppuccin-macchiato .modal-close::before,html.theme--catppuccin-macchiato .delete::before{height:2px;width:50%}html.theme--catppuccin-macchiato .modal-close::after,html.theme--catppuccin-macchiato .delete::after{height:50%;width:2px}html.theme--catppuccin-macchiato .modal-close:hover,html.theme--catppuccin-macchiato .delete:hover,html.theme--catppuccin-macchiato .modal-close:focus,html.theme--catppuccin-macchiato .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-macchiato .modal-close:active,html.theme--catppuccin-macchiato .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-macchiato .is-small.modal-close,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-macchiato .is-small.delete,html.theme--catppuccin-macchiato #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--catppuccin-macchiato .is-medium.modal-close,html.theme--catppuccin-macchiato .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-macchiato .is-large.modal-close,html.theme--catppuccin-macchiato .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-macchiato .control.is-loading::after,html.theme--catppuccin-macchiato .select.is-loading::after,html.theme--catppuccin-macchiato .loader,html.theme--catppuccin-macchiato .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #8087a2;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-macchiato .hero-video,html.theme--catppuccin-macchiato .modal-background,html.theme--catppuccin-macchiato .modal,html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-macchiato .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | 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,video{height:auto;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:inherit}.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:#363a4f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#212431 !important}.has-background-dark{background-color:#363a4f !important}.has-text-primary{color:#8aadf4 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5b8cf0 !important}.has-background-primary{background-color:#8aadf4 !important}.has-text-primary-light{color:#ecf2fd !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bed1f9 !important}.has-background-primary-light{background-color:#ecf2fd !important}.has-text-primary-dark{color:#0e3b95 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#124dc4 !important}.has-background-primary-dark{background-color:#0e3b95 !important}.has-text-link{color:#8aadf4 !important}a.has-text-link:hover,a.has-text-link:focus{color:#5b8cf0 !important}.has-background-link{background-color:#8aadf4 !important}.has-text-link-light{color:#ecf2fd !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bed1f9 !important}.has-background-link-light{background-color:#ecf2fd !important}.has-text-link-dark{color:#0e3b95 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#124dc4 !important}.has-background-link-dark{background-color:#0e3b95 !important}.has-text-info{color:#8bd5ca !important}a.has-text-info:hover,a.has-text-info:focus{color:#66c7b9 !important}.has-background-info{background-color:#8bd5ca !important}.has-text-info-light{color:#f0faf8 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#cbece7 !important}.has-background-info-light{background-color:#f0faf8 !important}.has-text-info-dark{color:#276d62 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#359284 !important}.has-background-info-dark{background-color:#276d62 !important}.has-text-success{color:#a6da95 !important}a.has-text-success:hover,a.has-text-success:focus{color:#86cd6f !important}.has-background-success{background-color:#a6da95 !important}.has-text-success-light{color:#f2faf0 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#d3edca !important}.has-background-success-light{background-color:#f2faf0 !important}.has-text-success-dark{color:#386e26 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#4b9333 !important}.has-background-success-dark{background-color:#386e26 !important}.has-text-warning{color:#eed49f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e6c174 !important}.has-background-warning{background-color:#eed49f !important}.has-text-warning-light{color:#fcf7ee !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#f4e4c2 !important}.has-background-warning-light{background-color:#fcf7ee !important}.has-text-warning-dark{color:#7e5c16 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#a97b1e !important}.has-background-warning-dark{background-color:#7e5c16 !important}.has-text-danger{color:#ed8796 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#e65b6f !important}.has-background-danger{background-color:#ed8796 !important}.has-text-danger-light{color:#fcedef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f6c1c9 !important}.has-background-danger-light{background-color:#fcedef !important}.has-text-danger-dark{color:#971729 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c31d36 !important}.has-background-danger-dark{background-color:#971729 !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:#363a4f !important}.has-background-grey-darker{background-color:#363a4f !important}.has-text-grey-dark{color:#494d64 !important}.has-background-grey-dark{background-color:#494d64 !important}.has-text-grey{color:#5b6078 !important}.has-background-grey{background-color:#5b6078 !important}.has-text-grey-light{color:#6e738d !important}.has-background-grey-light{background-color:#6e738d !important}.has-text-grey-lighter{color:#8087a2 !important}.has-background-grey-lighter{background-color:#8087a2 !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}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-macchiato .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}.is-underlined{text-decoration:underline !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}}html.theme--catppuccin-macchiato html{background-color:#24273a;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--catppuccin-macchiato article,html.theme--catppuccin-macchiato aside,html.theme--catppuccin-macchiato figure,html.theme--catppuccin-macchiato footer,html.theme--catppuccin-macchiato header,html.theme--catppuccin-macchiato hgroup,html.theme--catppuccin-macchiato section{display:block}html.theme--catppuccin-macchiato body,html.theme--catppuccin-macchiato button,html.theme--catppuccin-macchiato input,html.theme--catppuccin-macchiato optgroup,html.theme--catppuccin-macchiato select,html.theme--catppuccin-macchiato textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-macchiato code,html.theme--catppuccin-macchiato 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--catppuccin-macchiato body{color:#cad3f5;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-macchiato a{color:#8aadf4;cursor:pointer;text-decoration:none}html.theme--catppuccin-macchiato a strong{color:currentColor}html.theme--catppuccin-macchiato a:hover{color:#91d7e3}html.theme--catppuccin-macchiato code{background-color:#1e2030;color:#cad3f5;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-macchiato hr{background-color:#1e2030;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-macchiato img{height:auto;max-width:100%}html.theme--catppuccin-macchiato input[type="checkbox"],html.theme--catppuccin-macchiato input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-macchiato small{font-size:.875em}html.theme--catppuccin-macchiato span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-macchiato strong{color:#b5c1f1;font-weight:700}html.theme--catppuccin-macchiato fieldset{border:none}html.theme--catppuccin-macchiato pre{-webkit-overflow-scrolling:touch;background-color:#1e2030;color:#cad3f5;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-macchiato table td,html.theme--catppuccin-macchiato table th{vertical-align:top}html.theme--catppuccin-macchiato table td:not([align]),html.theme--catppuccin-macchiato table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato table th{color:#b5c1f1}html.theme--catppuccin-macchiato .box{background-color:#494d64;border-radius:8px;box-shadow:none;color:#cad3f5;display:block;padding:1.25rem}html.theme--catppuccin-macchiato a.box:hover,html.theme--catppuccin-macchiato a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #8aadf4}html.theme--catppuccin-macchiato .button{background-color:#1e2030;border-color:#3b3f5f;border-width:1px;color:#8aadf4;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-macchiato .button strong{color:inherit}html.theme--catppuccin-macchiato .button .icon,html.theme--catppuccin-macchiato .button .icon.is-small,html.theme--catppuccin-macchiato .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-macchiato .button .icon.is-medium,html.theme--catppuccin-macchiato .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-macchiato .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-macchiato .button:hover,html.theme--catppuccin-macchiato .button.is-hovered{border-color:#6e738d;color:#b5c1f1}html.theme--catppuccin-macchiato .button:focus,html.theme--catppuccin-macchiato .button.is-focused{border-color:#6e738d;color:#739df2}html.theme--catppuccin-macchiato .button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button:active,html.theme--catppuccin-macchiato .button.is-active{border-color:#494d64;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;color:#cad3f5;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-text:hover,html.theme--catppuccin-macchiato .button.is-text.is-hovered,html.theme--catppuccin-macchiato .button.is-text:focus,html.theme--catppuccin-macchiato .button.is-text.is-focused{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text:active,html.theme--catppuccin-macchiato .button.is-text.is-active{background-color:#141620;color:#b5c1f1}html.theme--catppuccin-macchiato .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-macchiato .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#8aadf4;text-decoration:none}html.theme--catppuccin-macchiato .button.is-ghost:hover,html.theme--catppuccin-macchiato .button.is-ghost.is-hovered{color:#8aadf4;text-decoration:underline}html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:hover,html.theme--catppuccin-macchiato .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus,html.theme--catppuccin-macchiato .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white:focus:not(:active),html.theme--catppuccin-macchiato .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .button.is-white:active,html.theme--catppuccin-macchiato .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-macchiato .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:hover,html.theme--catppuccin-macchiato .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus,html.theme--catppuccin-macchiato .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black:focus:not(:active),html.theme--catppuccin-macchiato .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .button.is-black:active,html.theme--catppuccin-macchiato .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:hover,html.theme--catppuccin-macchiato .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus,html.theme--catppuccin-macchiato .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light:focus:not(:active),html.theme--catppuccin-macchiato .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .button.is-light:active,html.theme--catppuccin-macchiato .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-macchiato .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-light.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)}html.theme--catppuccin-macchiato .button.is-dark,html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:hover,html.theme--catppuccin-macchiato .content kbd.button:hover,html.theme--catppuccin-macchiato .button.is-dark.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-hovered{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.button:focus,html.theme--catppuccin-macchiato .button.is-dark.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark:focus:not(:active),html.theme--catppuccin-macchiato .content kbd.button:focus:not(:active),html.theme--catppuccin-macchiato .button.is-dark.is-focused:not(:active),html.theme--catppuccin-macchiato .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .button.is-dark:active,html.theme--catppuccin-macchiato .content kbd.button:active,html.theme--catppuccin-macchiato .button.is-dark.is-active,html.theme--catppuccin-macchiato .content kbd.button.is-active{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-dark[disabled],html.theme--catppuccin-macchiato .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button{background-color:#363a4f;border-color:#363a4f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-dark.is-inverted,html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-dark.is-inverted[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-focused{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-dark.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-outlined{background-color:transparent;border-color:#363a4f;box-shadow:none;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363a4f #363a4f !important}html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary:focus:not(:active),html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-macchiato .button.is-primary.is-focused:not(:active),html.theme--catppuccin-macchiato .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-primary:active,html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-active.docs-sourcelink{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-primary[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-primary.is-inverted,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-primary.is-inverted[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-loading::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-outlined:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-outlined:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-primary.is-outlined[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-macchiato .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-primary.is-light,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:hover,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-primary.is-light:active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-macchiato .button.is-primary.is-light.is-active,html.theme--catppuccin-macchiato .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:hover,html.theme--catppuccin-macchiato .button.is-link.is-hovered{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus,html.theme--catppuccin-macchiato .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link:focus:not(:active),html.theme--catppuccin-macchiato .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .button.is-link:active,html.theme--catppuccin-macchiato .button.is-link.is-active{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link{background-color:#8aadf4;border-color:#8aadf4;box-shadow:none}html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-focused{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-outlined{background-color:transparent;border-color:#8aadf4;box-shadow:none;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8aadf4 #8aadf4 !important}html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:hover,html.theme--catppuccin-macchiato .button.is-link.is-light.is-hovered{background-color:#e1eafc;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-link.is-light:active,html.theme--catppuccin-macchiato .button.is-link.is-light.is-active{background-color:#d5e2fb;border-color:transparent;color:#0e3b95}html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:hover,html.theme--catppuccin-macchiato .button.is-info.is-hovered{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus,html.theme--catppuccin-macchiato .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info:focus:not(:active),html.theme--catppuccin-macchiato .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .button.is-info:active,html.theme--catppuccin-macchiato .button.is-info.is-active{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info{background-color:#8bd5ca;border-color:#8bd5ca;box-shadow:none}html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-focused{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.is-outlined{background-color:transparent;border-color:#8bd5ca;box-shadow:none;color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#8bd5ca}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #8bd5ca #8bd5ca !important}html.theme--catppuccin-macchiato .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-info.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)}html.theme--catppuccin-macchiato .button.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:hover,html.theme--catppuccin-macchiato .button.is-info.is-light.is-hovered{background-color:#e7f6f4;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-info.is-light:active,html.theme--catppuccin-macchiato .button.is-info.is-light.is-active{background-color:#ddf3f0;border-color:transparent;color:#276d62}html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:hover,html.theme--catppuccin-macchiato .button.is-success.is-hovered{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus,html.theme--catppuccin-macchiato .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success:focus:not(:active),html.theme--catppuccin-macchiato .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .button.is-success:active,html.theme--catppuccin-macchiato .button.is-success.is-active{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success{background-color:#a6da95;border-color:#a6da95;box-shadow:none}html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-focused{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.is-outlined{background-color:transparent;border-color:#a6da95;box-shadow:none;color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6da95}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6da95 #a6da95 !important}html.theme--catppuccin-macchiato .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-success.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)}html.theme--catppuccin-macchiato .button.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:hover,html.theme--catppuccin-macchiato .button.is-success.is-light.is-hovered{background-color:#eaf6e6;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-success.is-light:active,html.theme--catppuccin-macchiato .button.is-success.is-light.is-active{background-color:#e2f3dd;border-color:transparent;color:#386e26}html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:hover,html.theme--catppuccin-macchiato .button.is-warning.is-hovered{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus,html.theme--catppuccin-macchiato .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning:focus:not(:active),html.theme--catppuccin-macchiato .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .button.is-warning:active,html.theme--catppuccin-macchiato .button.is-warning.is-active{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning{background-color:#eed49f;border-color:#eed49f;box-shadow:none}html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-focused{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .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}html.theme--catppuccin-macchiato .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-warning.is-outlined{background-color:transparent;border-color:#eed49f;box-shadow:none;color:#eed49f}html.theme--catppuccin-macchiato .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)}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#eed49f}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #eed49f #eed49f !important}html.theme--catppuccin-macchiato .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .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)}html.theme--catppuccin-macchiato .button.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:hover,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-hovered{background-color:#faf2e3;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-warning.is-light:active,html.theme--catppuccin-macchiato .button.is-warning.is-light.is-active{background-color:#f8eed8;border-color:transparent;color:#7e5c16}html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:hover,html.theme--catppuccin-macchiato .button.is-danger.is-hovered{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus,html.theme--catppuccin-macchiato .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger:focus:not(:active),html.theme--catppuccin-macchiato .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .button.is-danger:active,html.theme--catppuccin-macchiato .button.is-danger.is-active{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger{background-color:#ed8796;border-color:#ed8796;box-shadow:none}html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-macchiato .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-focused{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-macchiato .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-outlined{background-color:transparent;border-color:#ed8796;box-shadow:none;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ed8796 #ed8796 !important}html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-macchiato .button.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:hover,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-hovered{background-color:#fbe2e6;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-danger.is-light:active,html.theme--catppuccin-macchiato .button.is-danger.is-light.is-active{background-color:#f9d7dc;border-color:transparent;color:#971729}html.theme--catppuccin-macchiato .button.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-small:not(.is-rounded),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .button.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .button.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .button.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .button[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .button{background-color:#6e738d;border-color:#5b6078;box-shadow:none;opacity:.5}html.theme--catppuccin-macchiato .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-macchiato .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-macchiato .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-macchiato .button.is-static{background-color:#1e2030;border-color:#5b6078;color:#8087a2;box-shadow:none;pointer-events:none}html.theme--catppuccin-macchiato .button.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-macchiato .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-macchiato .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-macchiato .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-macchiato .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-macchiato .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-macchiato .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-macchiato .buttons.has-addons .button:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused,html.theme--catppuccin-macchiato .buttons.has-addons .button:active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-macchiato .buttons.has-addons .button:focus:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button:active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-macchiato .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-macchiato .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .buttons.is-centered{justify-content:center}html.theme--catppuccin-macchiato .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-macchiato .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .button.is-responsive.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-macchiato .button.is-responsive,html.theme--catppuccin-macchiato .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-macchiato .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-macchiato .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-macchiato .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-macchiato .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-macchiato .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-macchiato .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-macchiato .content li+li{margin-top:0.25em}html.theme--catppuccin-macchiato .content p:not(:last-child),html.theme--catppuccin-macchiato .content dl:not(:last-child),html.theme--catppuccin-macchiato .content ol:not(:last-child),html.theme--catppuccin-macchiato .content ul:not(:last-child),html.theme--catppuccin-macchiato .content blockquote:not(:last-child),html.theme--catppuccin-macchiato .content pre:not(:last-child),html.theme--catppuccin-macchiato .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .content h1,html.theme--catppuccin-macchiato .content h2,html.theme--catppuccin-macchiato .content h3,html.theme--catppuccin-macchiato .content h4,html.theme--catppuccin-macchiato .content h5,html.theme--catppuccin-macchiato .content h6{color:#cad3f5;font-weight:600;line-height:1.125}html.theme--catppuccin-macchiato .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-macchiato .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-macchiato .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-macchiato .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-macchiato .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-macchiato .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-macchiato .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-macchiato .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-macchiato .content blockquote{background-color:#1e2030;border-left:5px solid #5b6078;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-macchiato .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-macchiato .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-macchiato .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-macchiato .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-macchiato .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-macchiato .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-macchiato .content ul ul ul{list-style-type:square}html.theme--catppuccin-macchiato .content dd{margin-left:2em}html.theme--catppuccin-macchiato .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-macchiato .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-macchiato .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-macchiato .content figure img{display:inline-block}html.theme--catppuccin-macchiato .content figure figcaption{font-style:italic}html.theme--catppuccin-macchiato .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-macchiato .content sup,html.theme--catppuccin-macchiato .content sub{font-size:75%}html.theme--catppuccin-macchiato .content table{width:100%}html.theme--catppuccin-macchiato .content table td,html.theme--catppuccin-macchiato .content table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .content table th{color:#b5c1f1}html.theme--catppuccin-macchiato .content table th:not([align]){text-align:inherit}html.theme--catppuccin-macchiato .content table thead td,html.theme--catppuccin-macchiato .content table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tfoot td,html.theme--catppuccin-macchiato .content table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .content table tbody tr:last-child td,html.theme--catppuccin-macchiato .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .content .tabs li+li{margin-top:0}html.theme--catppuccin-macchiato .content.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-macchiato .content.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .content.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .content.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-macchiato .icon.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-macchiato .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-macchiato .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-macchiato .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-macchiato .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-macchiato .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-macchiato div.icon-text{display:flex}html.theme--catppuccin-macchiato .image,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-macchiato .image img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-macchiato .image img.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-macchiato .image.is-fullwidth,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .image.is-square img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-macchiato .image.is-square .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-macchiato .image.is-1by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-macchiato .image.is-1by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-macchiato .image.is-5by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-macchiato .image.is-4by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-macchiato .image.is-3by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-5by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-macchiato .image.is-5by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-16by9 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-macchiato .image.is-16by9 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-macchiato .image.is-2by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by1 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-macchiato .image.is-3by1 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-macchiato .image.is-4by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-macchiato .image.is-4by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by4 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-macchiato .image.is-3by4 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-macchiato .image.is-2by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-macchiato .image.is-2by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-macchiato .image.is-3by5 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-macchiato .image.is-3by5 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-macchiato .image.is-9by16 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-macchiato .image.is-9by16 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by2 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-macchiato .image.is-1by2 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-macchiato .image.is-1by3 img,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-macchiato .image.is-1by3 .has-ratio,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-macchiato .image.is-square,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-macchiato .image.is-1by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-macchiato .image.is-5by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-macchiato .image.is-4by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-macchiato .image.is-3by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-macchiato .image.is-5by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-macchiato .image.is-16by9,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-macchiato .image.is-2by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-macchiato .image.is-3by1,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-macchiato .image.is-4by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-macchiato .image.is-3by4,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-macchiato .image.is-2by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-macchiato .image.is-3by5,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-macchiato .image.is-9by16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-macchiato .image.is-1by2,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-macchiato .image.is-1by3,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-macchiato .image.is-16x16,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-macchiato .image.is-24x24,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-macchiato .image.is-32x32,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-macchiato .image.is-48x48,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-macchiato .image.is-64x64,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-macchiato .image.is-96x96,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-macchiato .image.is-128x128,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-macchiato .notification{background-color:#1e2030;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-macchiato .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .notification strong{color:currentColor}html.theme--catppuccin-macchiato .notification code,html.theme--catppuccin-macchiato .notification pre{background:#fff}html.theme--catppuccin-macchiato .notification pre code{background:transparent}html.theme--catppuccin-macchiato .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-macchiato .notification .title,html.theme--catppuccin-macchiato .notification .subtitle,html.theme--catppuccin-macchiato .notification .content{color:currentColor}html.theme--catppuccin-macchiato .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-dark,html.theme--catppuccin-macchiato .content kbd.notification{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.notification.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-primary.is-light,html.theme--catppuccin-macchiato .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .notification.is-link.is-light{background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .notification.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-info.is-light{background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .notification.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-success.is-light{background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .notification.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .notification.is-warning.is-light{background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .notification.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .notification.is-danger.is-light{background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-macchiato .progress::-webkit-progress-bar{background-color:#494d64}html.theme--catppuccin-macchiato .progress::-webkit-progress-value{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-moz-progress-bar{background-color:#8087a2}html.theme--catppuccin-macchiato .progress::-ms-fill{background-color:#8087a2;border:none}html.theme--catppuccin-macchiato .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-macchiato .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-macchiato .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-macchiato .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-macchiato .content kbd.progress::-webkit-progress-value{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-macchiato .content kbd.progress::-moz-progress-bar{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark::-ms-fill,html.theme--catppuccin-macchiato .content kbd.progress::-ms-fill{background-color:#363a4f}html.theme--catppuccin-macchiato .progress.is-dark:indeterminate,html.theme--catppuccin-macchiato .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363a4f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary::-ms-fill,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-primary:indeterminate,html.theme--catppuccin-macchiato .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-link::-webkit-progress-value{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-moz-progress-bar{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link::-ms-fill{background-color:#8aadf4}html.theme--catppuccin-macchiato .progress.is-link:indeterminate{background-image:linear-gradient(to right, #8aadf4 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-info::-webkit-progress-value{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-moz-progress-bar{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info::-ms-fill{background-color:#8bd5ca}html.theme--catppuccin-macchiato .progress.is-info:indeterminate{background-image:linear-gradient(to right, #8bd5ca 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-success::-webkit-progress-value{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-moz-progress-bar{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success::-ms-fill{background-color:#a6da95}html.theme--catppuccin-macchiato .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6da95 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-warning::-webkit-progress-value{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-moz-progress-bar{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning::-ms-fill{background-color:#eed49f}html.theme--catppuccin-macchiato .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #eed49f 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress.is-danger::-webkit-progress-value{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-moz-progress-bar{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger::-ms-fill{background-color:#ed8796}html.theme--catppuccin-macchiato .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #ed8796 30%, #494d64 30%)}html.theme--catppuccin-macchiato .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#494d64;background-image:linear-gradient(to right, #cad3f5 30%, #494d64 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-macchiato .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-macchiato .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-macchiato .progress.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-macchiato .progress.is-medium{height:1.25rem}html.theme--catppuccin-macchiato .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-macchiato .table{background-color:#494d64;color:#cad3f5}html.theme--catppuccin-macchiato .table td,html.theme--catppuccin-macchiato .table th{border:1px solid #5b6078;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-macchiato .table td.is-white,html.theme--catppuccin-macchiato .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .table td.is-black,html.theme--catppuccin-macchiato .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .table td.is-light,html.theme--catppuccin-macchiato .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-dark,html.theme--catppuccin-macchiato .table th.is-dark{background-color:#363a4f;border-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .table td.is-primary,html.theme--catppuccin-macchiato .table th.is-primary{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-link,html.theme--catppuccin-macchiato .table th.is-link{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-info,html.theme--catppuccin-macchiato .table th.is-info{background-color:#8bd5ca;border-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-success,html.theme--catppuccin-macchiato .table th.is-success{background-color:#a6da95;border-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-warning,html.theme--catppuccin-macchiato .table th.is-warning{background-color:#eed49f;border-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .table td.is-danger,html.theme--catppuccin-macchiato .table th.is-danger{background-color:#ed8796;border-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .table td.is-narrow,html.theme--catppuccin-macchiato .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-macchiato .table td.is-selected,html.theme--catppuccin-macchiato .table th.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table td.is-selected a,html.theme--catppuccin-macchiato .table td.is-selected strong,html.theme--catppuccin-macchiato .table th.is-selected a,html.theme--catppuccin-macchiato .table th.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table td.is-vcentered,html.theme--catppuccin-macchiato .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-macchiato .table th{color:#b5c1f1}html.theme--catppuccin-macchiato .table th:not([align]){text-align:left}html.theme--catppuccin-macchiato .table tr.is-selected{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .table tr.is-selected a,html.theme--catppuccin-macchiato .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-macchiato .table tr.is-selected td,html.theme--catppuccin-macchiato .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-macchiato .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table thead td,html.theme--catppuccin-macchiato .table thead th{border-width:0 0 2px;color:#b5c1f1}html.theme--catppuccin-macchiato .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tfoot td,html.theme--catppuccin-macchiato .table tfoot th{border-width:2px 0 0;color:#b5c1f1}html.theme--catppuccin-macchiato .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .table tbody tr:last-child td,html.theme--catppuccin-macchiato .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-macchiato .table.is-bordered td,html.theme--catppuccin-macchiato .table.is-bordered th{border-width:1px}html.theme--catppuccin-macchiato .table.is-bordered tr:last-child td,html.theme--catppuccin-macchiato .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-macchiato .table.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#363a4f}html.theme--catppuccin-macchiato .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#3a3e55}html.theme--catppuccin-macchiato .table.is-narrow td,html.theme--catppuccin-macchiato .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-macchiato .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#363a4f}html.theme--catppuccin-macchiato .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-macchiato .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .tags .tag,html.theme--catppuccin-macchiato .tags .content kbd,html.theme--catppuccin-macchiato .content .tags kbd,html.theme--catppuccin-macchiato .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-macchiato .tags .tag:not(:last-child),html.theme--catppuccin-macchiato .tags .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags kbd:not(:last-child),html.theme--catppuccin-macchiato .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-macchiato .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-macchiato .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-macchiato .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-macchiato .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-macchiato .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-macchiato .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-macchiato .tags.is-centered{justify-content:center}html.theme--catppuccin-macchiato .tags.is-centered .tag,html.theme--catppuccin-macchiato .tags.is-centered .content kbd,html.theme--catppuccin-macchiato .content .tags.is-centered kbd,html.theme--catppuccin-macchiato .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-macchiato .tags.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-macchiato .tags.is-right .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag,html.theme--catppuccin-macchiato .tags.has-addons .content kbd,html.theme--catppuccin-macchiato .content .tags.has-addons kbd,html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-macchiato .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-macchiato .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-macchiato .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-macchiato .tag:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#1e2030;border-radius:.4em;color:#cad3f5;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}html.theme--catppuccin-macchiato .tag:not(body) .delete,html.theme--catppuccin-macchiato .content kbd:not(body) .delete,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-macchiato .tag.is-white:not(body),html.theme--catppuccin-macchiato .content kbd.is-white:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .tag.is-black:not(body),html.theme--catppuccin-macchiato .content kbd.is-black:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .tag.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-dark:not(body),html.theme--catppuccin-macchiato .content kbd:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-macchiato .content .docstring>section>kbd:not(body){background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .tag.is-link.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-link.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ecf2fd;color:#0e3b95}html.theme--catppuccin-macchiato .tag.is-info:not(body),html.theme--catppuccin-macchiato .content kbd.is-info:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-info.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-info.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#f0faf8;color:#276d62}html.theme--catppuccin-macchiato .tag.is-success:not(body),html.theme--catppuccin-macchiato .content kbd.is-success:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-success.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-success.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f2faf0;color:#386e26}html.theme--catppuccin-macchiato .tag.is-warning:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .tag.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fcf7ee;color:#7e5c16}html.theme--catppuccin-macchiato .tag.is-danger:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .tag.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fcedef;color:#971729}html.theme--catppuccin-macchiato .tag.is-normal:not(body),html.theme--catppuccin-macchiato .content kbd.is-normal:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-macchiato .tag.is-medium:not(body),html.theme--catppuccin-macchiato .content kbd.is-medium:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-macchiato .tag.is-large:not(body),html.theme--catppuccin-macchiato .content kbd.is-large:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-macchiato .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-macchiato .tag.is-delete:not(body),html.theme--catppuccin-macchiato .content kbd.is-delete:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato .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--catppuccin-macchiato .tag.is-delete:not(body)::before,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::before,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-macchiato .tag.is-delete:not(body)::after,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body)::after,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-macchiato .tag.is-delete:not(body):hover,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):hover,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-macchiato .tag.is-delete:not(body):focus,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):focus,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#141620}html.theme--catppuccin-macchiato .tag.is-delete:not(body):active,html.theme--catppuccin-macchiato .content kbd.is-delete:not(body):active,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#0a0b11}html.theme--catppuccin-macchiato .tag.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-macchiato .content kbd.is-rounded:not(body),html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-macchiato a.tag:hover,html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-macchiato .title,html.theme--catppuccin-macchiato .subtitle{word-break:break-word}html.theme--catppuccin-macchiato .title em,html.theme--catppuccin-macchiato .title span,html.theme--catppuccin-macchiato .subtitle em,html.theme--catppuccin-macchiato .subtitle span{font-weight:inherit}html.theme--catppuccin-macchiato .title sub,html.theme--catppuccin-macchiato .subtitle sub{font-size:.75em}html.theme--catppuccin-macchiato .title sup,html.theme--catppuccin-macchiato .subtitle sup{font-size:.75em}html.theme--catppuccin-macchiato .title .tag,html.theme--catppuccin-macchiato .title .content kbd,html.theme--catppuccin-macchiato .content .title kbd,html.theme--catppuccin-macchiato .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-macchiato .subtitle .tag,html.theme--catppuccin-macchiato .subtitle .content kbd,html.theme--catppuccin-macchiato .content .subtitle kbd,html.theme--catppuccin-macchiato .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-macchiato .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-macchiato .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-macchiato .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-macchiato .title.is-1{font-size:3rem}html.theme--catppuccin-macchiato .title.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .title.is-3{font-size:2rem}html.theme--catppuccin-macchiato .title.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .title.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .title.is-6{font-size:1rem}html.theme--catppuccin-macchiato .title.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .subtitle{color:#6e738d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-macchiato .subtitle strong{color:#6e738d;font-weight:600}html.theme--catppuccin-macchiato .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-macchiato .subtitle.is-1{font-size:3rem}html.theme--catppuccin-macchiato .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-macchiato .subtitle.is-3{font-size:2rem}html.theme--catppuccin-macchiato .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-macchiato .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-macchiato .subtitle.is-6{font-size:1rem}html.theme--catppuccin-macchiato .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-macchiato .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-macchiato .number{align-items:center;background-color:#1e2030;border-radius:9999px;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--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#24273a;border-color:#5b6078;border-radius:.4em;color:#8087a2}html.theme--catppuccin-macchiato .select select::-moz-placeholder,html.theme--catppuccin-macchiato .textarea::-moz-placeholder,html.theme--catppuccin-macchiato .input::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-moz-placeholder,html.theme--catppuccin-macchiato .textarea:-moz-placeholder,html.theme--catppuccin-macchiato .input:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,html.theme--catppuccin-macchiato .input:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-macchiato .select select:hover,html.theme--catppuccin-macchiato .textarea:hover,html.theme--catppuccin-macchiato .input:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-macchiato .select select.is-hovered,html.theme--catppuccin-macchiato .is-hovered.textarea,html.theme--catppuccin-macchiato .is-hovered.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6e738d}html.theme--catppuccin-macchiato .select select:focus,html.theme--catppuccin-macchiato .textarea:focus,html.theme--catppuccin-macchiato .input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-macchiato .select select.is-focused,html.theme--catppuccin-macchiato .is-focused.textarea,html.theme--catppuccin-macchiato .is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .select select:active,html.theme--catppuccin-macchiato .textarea:active,html.theme--catppuccin-macchiato .input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-macchiato .select select.is-active,html.theme--catppuccin-macchiato .is-active.textarea,html.theme--catppuccin-macchiato .is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#8aadf4;box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select select[disabled],html.theme--catppuccin-macchiato .textarea[disabled],html.theme--catppuccin-macchiato .input[disabled],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .select select,fieldset[disabled] html.theme--catppuccin-macchiato .textarea,fieldset[disabled] html.theme--catppuccin-macchiato .input,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{background-color:#6e738d;border-color:#1e2030;box-shadow:none;color:#f5f7fd}html.theme--catppuccin-macchiato .select select[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-moz-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(245,247,253,0.3)}html.theme--catppuccin-macchiato .textarea,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-macchiato .textarea[readonly],html.theme--catppuccin-macchiato .input[readonly],html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-macchiato .is-white.textarea,html.theme--catppuccin-macchiato .is-white.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-macchiato .is-white.textarea:focus,html.theme--catppuccin-macchiato .is-white.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-macchiato .is-white.is-focused.textarea,html.theme--catppuccin-macchiato .is-white.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-white.textarea:active,html.theme--catppuccin-macchiato .is-white.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-macchiato .is-white.is-active.textarea,html.theme--catppuccin-macchiato .is-white.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .is-black.textarea,html.theme--catppuccin-macchiato .is-black.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-macchiato .is-black.textarea:focus,html.theme--catppuccin-macchiato .is-black.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-macchiato .is-black.is-focused.textarea,html.theme--catppuccin-macchiato .is-black.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-black.textarea:active,html.theme--catppuccin-macchiato .is-black.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-macchiato .is-black.is-active.textarea,html.theme--catppuccin-macchiato .is-black.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .is-light.textarea,html.theme--catppuccin-macchiato .is-light.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-macchiato .is-light.textarea:focus,html.theme--catppuccin-macchiato .is-light.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-macchiato .is-light.is-focused.textarea,html.theme--catppuccin-macchiato .is-light.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-light.textarea:active,html.theme--catppuccin-macchiato .is-light.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-macchiato .is-light.is-active.textarea,html.theme--catppuccin-macchiato .is-light.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .is-dark.textarea,html.theme--catppuccin-macchiato .content kbd.textarea,html.theme--catppuccin-macchiato .is-dark.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-macchiato .content kbd.input{border-color:#363a4f}html.theme--catppuccin-macchiato .is-dark.textarea:focus,html.theme--catppuccin-macchiato .content kbd.textarea:focus,html.theme--catppuccin-macchiato .is-dark.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-macchiato .content kbd.input:focus,html.theme--catppuccin-macchiato .is-dark.is-focused.textarea,html.theme--catppuccin-macchiato .content kbd.is-focused.textarea,html.theme--catppuccin-macchiato .is-dark.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .content kbd.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-dark.textarea:active,html.theme--catppuccin-macchiato .content kbd.textarea:active,html.theme--catppuccin-macchiato .is-dark.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-macchiato .content kbd.input:active,html.theme--catppuccin-macchiato .is-dark.is-active.textarea,html.theme--catppuccin-macchiato .content kbd.is-active.textarea,html.theme--catppuccin-macchiato .is-dark.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .content kbd.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .is-primary.textarea,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-primary.textarea:focus,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-macchiato .is-primary.is-focused.textarea,html.theme--catppuccin-macchiato .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.textarea:active,html.theme--catppuccin-macchiato .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-macchiato .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-macchiato .is-primary.is-active.textarea,html.theme--catppuccin-macchiato .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-macchiato .is-primary.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-macchiato .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-link.textarea,html.theme--catppuccin-macchiato .is-link.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#8aadf4}html.theme--catppuccin-macchiato .is-link.textarea:focus,html.theme--catppuccin-macchiato .is-link.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-macchiato .is-link.is-focused.textarea,html.theme--catppuccin-macchiato .is-link.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-link.textarea:active,html.theme--catppuccin-macchiato .is-link.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-macchiato .is-link.is-active.textarea,html.theme--catppuccin-macchiato .is-link.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .is-info.textarea,html.theme--catppuccin-macchiato .is-info.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#8bd5ca}html.theme--catppuccin-macchiato .is-info.textarea:focus,html.theme--catppuccin-macchiato .is-info.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-macchiato .is-info.is-focused.textarea,html.theme--catppuccin-macchiato .is-info.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-info.textarea:active,html.theme--catppuccin-macchiato .is-info.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-macchiato .is-info.is-active.textarea,html.theme--catppuccin-macchiato .is-info.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .is-success.textarea,html.theme--catppuccin-macchiato .is-success.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6da95}html.theme--catppuccin-macchiato .is-success.textarea:focus,html.theme--catppuccin-macchiato .is-success.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-macchiato .is-success.is-focused.textarea,html.theme--catppuccin-macchiato .is-success.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-success.textarea:active,html.theme--catppuccin-macchiato .is-success.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-macchiato .is-success.is-active.textarea,html.theme--catppuccin-macchiato .is-success.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .is-warning.textarea,html.theme--catppuccin-macchiato .is-warning.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#eed49f}html.theme--catppuccin-macchiato .is-warning.textarea:focus,html.theme--catppuccin-macchiato .is-warning.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-macchiato .is-warning.is-focused.textarea,html.theme--catppuccin-macchiato .is-warning.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-warning.textarea:active,html.theme--catppuccin-macchiato .is-warning.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-macchiato .is-warning.is-active.textarea,html.theme--catppuccin-macchiato .is-warning.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .is-danger.textarea,html.theme--catppuccin-macchiato .is-danger.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#ed8796}html.theme--catppuccin-macchiato .is-danger.textarea:focus,html.theme--catppuccin-macchiato .is-danger.input:focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-macchiato .is-danger.is-focused.textarea,html.theme--catppuccin-macchiato .is-danger.is-focused.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-macchiato .is-danger.textarea:active,html.theme--catppuccin-macchiato .is-danger.input:active,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-macchiato .is-danger.is-active.textarea,html.theme--catppuccin-macchiato .is-danger.is-active.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .is-small.textarea,html.theme--catppuccin-macchiato .is-small.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .is-medium.textarea,html.theme--catppuccin-macchiato .is-medium.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .is-large.textarea,html.theme--catppuccin-macchiato .is-large.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .is-fullwidth.textarea,html.theme--catppuccin-macchiato .is-fullwidth.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-macchiato .is-inline.textarea,html.theme--catppuccin-macchiato .is-inline.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-macchiato .input.is-rounded,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-macchiato .input.is-static,html.theme--catppuccin-macchiato #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--catppuccin-macchiato .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-macchiato .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-macchiato .textarea[rows]{height:initial}html.theme--catppuccin-macchiato .textarea.has-fixed-size{resize:none}html.theme--catppuccin-macchiato .radio,html.theme--catppuccin-macchiato .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-macchiato .radio input,html.theme--catppuccin-macchiato .checkbox input{cursor:pointer}html.theme--catppuccin-macchiato .radio:hover,html.theme--catppuccin-macchiato .checkbox:hover{color:#91d7e3}html.theme--catppuccin-macchiato .radio[disabled],html.theme--catppuccin-macchiato .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-macchiato .radio,fieldset[disabled] html.theme--catppuccin-macchiato .checkbox,html.theme--catppuccin-macchiato .radio input[disabled],html.theme--catppuccin-macchiato .checkbox input[disabled]{color:#f5f7fd;cursor:not-allowed}html.theme--catppuccin-macchiato .radio+.radio{margin-left:.5em}html.theme--catppuccin-macchiato .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading)::after{border-color:#8aadf4;right:1.125em;z-index:4}html.theme--catppuccin-macchiato .select.is-rounded select,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-macchiato .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-macchiato .select select::-ms-expand{display:none}html.theme--catppuccin-macchiato .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-macchiato .select select:hover{border-color:#1e2030}html.theme--catppuccin-macchiato .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-macchiato .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-macchiato .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-macchiato .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#91d7e3}html.theme--catppuccin-macchiato .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select{border-color:#fff}html.theme--catppuccin-macchiato .select.is-white select:hover,html.theme--catppuccin-macchiato .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-macchiato .select.is-white select:focus,html.theme--catppuccin-macchiato .select.is-white select.is-focused,html.theme--catppuccin-macchiato .select.is-white select:active,html.theme--catppuccin-macchiato .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-macchiato .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-macchiato .select.is-black select:hover,html.theme--catppuccin-macchiato .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-macchiato .select.is-black select:focus,html.theme--catppuccin-macchiato .select.is-black select.is-focused,html.theme--catppuccin-macchiato .select.is-black select:active,html.theme--catppuccin-macchiato .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-macchiato .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-macchiato .select.is-light select:hover,html.theme--catppuccin-macchiato .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-macchiato .select.is-light select:focus,html.theme--catppuccin-macchiato .select.is-light select.is-focused,html.theme--catppuccin-macchiato .select.is-light select:active,html.theme--catppuccin-macchiato .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-macchiato .select.is-dark:not(:hover)::after,html.theme--catppuccin-macchiato .content kbd.select:not(:hover)::after{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select,html.theme--catppuccin-macchiato .content kbd.select select{border-color:#363a4f}html.theme--catppuccin-macchiato .select.is-dark select:hover,html.theme--catppuccin-macchiato .content kbd.select select:hover,html.theme--catppuccin-macchiato .select.is-dark select.is-hovered,html.theme--catppuccin-macchiato .content kbd.select select.is-hovered{border-color:#2c2f40}html.theme--catppuccin-macchiato .select.is-dark select:focus,html.theme--catppuccin-macchiato .content kbd.select select:focus,html.theme--catppuccin-macchiato .select.is-dark select.is-focused,html.theme--catppuccin-macchiato .content kbd.select select.is-focused,html.theme--catppuccin-macchiato .select.is-dark select:active,html.theme--catppuccin-macchiato .content kbd.select select:active,html.theme--catppuccin-macchiato .select.is-dark select.is-active,html.theme--catppuccin-macchiato .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,58,79,0.25)}html.theme--catppuccin-macchiato .select.is-primary:not(:hover)::after,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-primary select:hover,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-macchiato .select.is-primary select.is-hovered,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-primary select:focus,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-macchiato .select.is-primary select.is-focused,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-macchiato .select.is-primary select:active,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-macchiato .select.is-primary select.is-active,html.theme--catppuccin-macchiato .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-link:not(:hover)::after{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select{border-color:#8aadf4}html.theme--catppuccin-macchiato .select.is-link select:hover,html.theme--catppuccin-macchiato .select.is-link select.is-hovered{border-color:#739df2}html.theme--catppuccin-macchiato .select.is-link select:focus,html.theme--catppuccin-macchiato .select.is-link select.is-focused,html.theme--catppuccin-macchiato .select.is-link select:active,html.theme--catppuccin-macchiato .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(138,173,244,0.25)}html.theme--catppuccin-macchiato .select.is-info:not(:hover)::after{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select{border-color:#8bd5ca}html.theme--catppuccin-macchiato .select.is-info select:hover,html.theme--catppuccin-macchiato .select.is-info select.is-hovered{border-color:#78cec1}html.theme--catppuccin-macchiato .select.is-info select:focus,html.theme--catppuccin-macchiato .select.is-info select.is-focused,html.theme--catppuccin-macchiato .select.is-info select:active,html.theme--catppuccin-macchiato .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(139,213,202,0.25)}html.theme--catppuccin-macchiato .select.is-success:not(:hover)::after{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select{border-color:#a6da95}html.theme--catppuccin-macchiato .select.is-success select:hover,html.theme--catppuccin-macchiato .select.is-success select.is-hovered{border-color:#96d382}html.theme--catppuccin-macchiato .select.is-success select:focus,html.theme--catppuccin-macchiato .select.is-success select.is-focused,html.theme--catppuccin-macchiato .select.is-success select:active,html.theme--catppuccin-macchiato .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,218,149,0.25)}html.theme--catppuccin-macchiato .select.is-warning:not(:hover)::after{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select{border-color:#eed49f}html.theme--catppuccin-macchiato .select.is-warning select:hover,html.theme--catppuccin-macchiato .select.is-warning select.is-hovered{border-color:#eaca89}html.theme--catppuccin-macchiato .select.is-warning select:focus,html.theme--catppuccin-macchiato .select.is-warning select.is-focused,html.theme--catppuccin-macchiato .select.is-warning select:active,html.theme--catppuccin-macchiato .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(238,212,159,0.25)}html.theme--catppuccin-macchiato .select.is-danger:not(:hover)::after{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select{border-color:#ed8796}html.theme--catppuccin-macchiato .select.is-danger select:hover,html.theme--catppuccin-macchiato .select.is-danger select.is-hovered{border-color:#ea7183}html.theme--catppuccin-macchiato .select.is-danger select:focus,html.theme--catppuccin-macchiato .select.is-danger select.is-focused,html.theme--catppuccin-macchiato .select.is-danger select:active,html.theme--catppuccin-macchiato .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(237,135,150,0.25)}html.theme--catppuccin-macchiato .select.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-macchiato .select.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .select.is-disabled::after{border-color:#f5f7fd !important;opacity:0.5}html.theme--catppuccin-macchiato .select.is-fullwidth{width:100%}html.theme--catppuccin-macchiato .select.is-fullwidth select{width:100%}html.theme--catppuccin-macchiato .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-macchiato .select.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-macchiato .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:hover .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-white:focus .file-cta,html.theme--catppuccin-macchiato .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--catppuccin-macchiato .file.is-white:active .file-cta,html.theme--catppuccin-macchiato .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-macchiato .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:hover .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-black:focus .file-cta,html.theme--catppuccin-macchiato .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--catppuccin-macchiato .file.is-black:active .file-cta,html.theme--catppuccin-macchiato .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:hover .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:focus .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-light:active .file-cta,html.theme--catppuccin-macchiato .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-dark .file-cta,html.theme--catppuccin-macchiato .content kbd.file .file-cta{background-color:#363a4f;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:hover .file-cta,html.theme--catppuccin-macchiato .content kbd.file:hover .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-hovered .file-cta{background-color:#313447;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-dark:focus .file-cta,html.theme--catppuccin-macchiato .content kbd.file:focus .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-focused .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,58,79,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-dark:active .file-cta,html.theme--catppuccin-macchiato .content kbd.file:active .file-cta,html.theme--catppuccin-macchiato .file.is-dark.is-active .file-cta,html.theme--catppuccin-macchiato .content kbd.file.is-active .file-cta{background-color:#2c2f40;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:hover .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-primary:focus .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-focused .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-primary:active .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-macchiato .file.is-primary.is-active .file-cta,html.theme--catppuccin-macchiato .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link .file-cta{background-color:#8aadf4;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:hover .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-hovered .file-cta{background-color:#7ea5f3;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-link:focus .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(138,173,244,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-link:active .file-cta,html.theme--catppuccin-macchiato .file.is-link.is-active .file-cta{background-color:#739df2;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-info .file-cta{background-color:#8bd5ca;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:hover .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-hovered .file-cta{background-color:#82d2c6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:focus .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(139,213,202,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-info:active .file-cta,html.theme--catppuccin-macchiato .file.is-info.is-active .file-cta{background-color:#78cec1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success .file-cta{background-color:#a6da95;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:hover .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-hovered .file-cta{background-color:#9ed78c;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:focus .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,218,149,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-success:active .file-cta,html.theme--catppuccin-macchiato .file.is-success.is-active .file-cta{background-color:#96d382;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning .file-cta{background-color:#eed49f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:hover .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-hovered .file-cta{background-color:#eccf94;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:focus .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(238,212,159,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-warning:active .file-cta,html.theme--catppuccin-macchiato .file.is-warning.is-active .file-cta{background-color:#eaca89;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .file.is-danger .file-cta{background-color:#ed8796;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:hover .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-hovered .file-cta{background-color:#eb7c8c;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-danger:focus .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(237,135,150,0.25);color:#fff}html.theme--catppuccin-macchiato .file.is-danger:active .file-cta,html.theme--catppuccin-macchiato .file.is-danger.is-active .file-cta{background-color:#ea7183;border-color:transparent;color:#fff}html.theme--catppuccin-macchiato .file.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-macchiato .file.is-normal{font-size:1rem}html.theme--catppuccin-macchiato .file.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-macchiato .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-macchiato .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-macchiato .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-macchiato .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-macchiato .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-macchiato .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-macchiato .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-macchiato .file.is-centered{justify-content:center}html.theme--catppuccin-macchiato .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-macchiato .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-macchiato .file.is-right{justify-content:flex-end}html.theme--catppuccin-macchiato .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-macchiato .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-macchiato .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-macchiato .file-label:hover .file-cta{background-color:#313447;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:hover .file-name{border-color:#565a71}html.theme--catppuccin-macchiato .file-label:active .file-cta{background-color:#2c2f40;color:#b5c1f1}html.theme--catppuccin-macchiato .file-label:active .file-name{border-color:#505469}html.theme--catppuccin-macchiato .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-macchiato .file-cta,html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-macchiato .file-cta{background-color:#363a4f;color:#cad3f5}html.theme--catppuccin-macchiato .file-name{border-color:#5b6078;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-macchiato .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-macchiato .file-icon .fa{font-size:14px}html.theme--catppuccin-macchiato .label{color:#b5c1f1;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-macchiato .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-macchiato .label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-macchiato .label.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .label.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-macchiato .help.is-white{color:#fff}html.theme--catppuccin-macchiato .help.is-black{color:#0a0a0a}html.theme--catppuccin-macchiato .help.is-light{color:#f5f5f5}html.theme--catppuccin-macchiato .help.is-dark,html.theme--catppuccin-macchiato .content kbd.help{color:#363a4f}html.theme--catppuccin-macchiato .help.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.help.docs-sourcelink{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-link{color:#8aadf4}html.theme--catppuccin-macchiato .help.is-info{color:#8bd5ca}html.theme--catppuccin-macchiato .help.is-success{color:#a6da95}html.theme--catppuccin-macchiato .help.is-warning{color:#eed49f}html.theme--catppuccin-macchiato .help.is-danger{color:#ed8796}html.theme--catppuccin-macchiato .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-macchiato .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-macchiato .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-macchiato .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-macchiato .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-macchiato .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-macchiato .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-macchiato .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field.is-horizontal{display:flex}}html.theme--catppuccin-macchiato .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-macchiato .field-label.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-macchiato .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-macchiato .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-macchiato .field-body .field{margin-bottom:0}html.theme--catppuccin-macchiato .field-body>.field{flex-shrink:1}html.theme--catppuccin-macchiato .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-macchiato .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-macchiato .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select:focus~.icon{color:#363a4f}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-macchiato .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-macchiato .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon{color:#5b6078;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-macchiato .control.has-icons-left .input,html.theme--catppuccin-macchiato .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-macchiato .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-macchiato .control.has-icons-right .input,html.theme--catppuccin-macchiato .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-macchiato .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-macchiato .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-macchiato .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-macchiato .control.is-loading.is-small:after,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-macchiato .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-macchiato .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-macchiato .breadcrumb a{align-items:center;color:#8aadf4;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-macchiato .breadcrumb a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-macchiato .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-macchiato .breadcrumb li.is-active a{color:#b5c1f1;cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb li+li::before{color:#6e738d;content:"\0002f"}html.theme--catppuccin-macchiato .breadcrumb ul,html.theme--catppuccin-macchiato .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-macchiato .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .breadcrumb.is-centered ol,html.theme--catppuccin-macchiato .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .breadcrumb.is-right ol,html.theme--catppuccin-macchiato .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .breadcrumb.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-macchiato .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-macchiato .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-macchiato .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-macchiato .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-macchiato .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cad3f5;max-width:100%;position:relative}html.theme--catppuccin-macchiato .card-footer:first-child,html.theme--catppuccin-macchiato .card-content:first-child,html.theme--catppuccin-macchiato .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-footer:last-child,html.theme--catppuccin-macchiato .card-content:last-child,html.theme--catppuccin-macchiato .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-macchiato .card-header-title{align-items:center;color:#b5c1f1;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-macchiato .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-macchiato .card-image{display:block;position:relative}html.theme--catppuccin-macchiato .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-macchiato .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-macchiato .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-macchiato .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-macchiato .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-macchiato .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-macchiato .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-macchiato .dropdown.is-active .dropdown-menu,html.theme--catppuccin-macchiato .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-macchiato .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-macchiato .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-macchiato .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-macchiato .dropdown-content{background-color:#1e2030;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-macchiato .dropdown-item{color:#cad3f5;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-macchiato a.dropdown-item,html.theme--catppuccin-macchiato button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-macchiato a.dropdown-item:hover,html.theme--catppuccin-macchiato button.dropdown-item:hover{background-color:#1e2030;color:#0a0a0a}html.theme--catppuccin-macchiato a.dropdown-item.is-active,html.theme--catppuccin-macchiato button.dropdown-item.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-macchiato .level{align-items:center;justify-content:space-between}html.theme--catppuccin-macchiato .level code{border-radius:.4em}html.theme--catppuccin-macchiato .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-macchiato .level.is-mobile{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left,html.theme--catppuccin-macchiato .level.is-mobile .level-right{display:flex}html.theme--catppuccin-macchiato .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-macchiato .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level{display:flex}html.theme--catppuccin-macchiato .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-macchiato .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-macchiato .level-item .title,html.theme--catppuccin-macchiato .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-macchiato .level-left,html.theme--catppuccin-macchiato .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .level-left .level-item.is-flexible,html.theme--catppuccin-macchiato .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left .level-item:not(:last-child),html.theme--catppuccin-macchiato .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-macchiato .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-left{display:flex}}html.theme--catppuccin-macchiato .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .level-right{display:flex}}html.theme--catppuccin-macchiato .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-macchiato .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .media .media{border-top:1px solid rgba(91,96,120,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-macchiato .media .media .content:not(:last-child),html.theme--catppuccin-macchiato .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-macchiato .media .media .media{padding-top:.5rem}html.theme--catppuccin-macchiato .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-macchiato .media+.media{border-top:1px solid rgba(91,96,120,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-macchiato .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-macchiato .media-left,html.theme--catppuccin-macchiato .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .media-left{margin-right:1rem}html.theme--catppuccin-macchiato .media-right{margin-left:1rem}html.theme--catppuccin-macchiato .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .media-content{overflow-x:auto}}html.theme--catppuccin-macchiato .menu{font-size:1rem}html.theme--catppuccin-macchiato .menu.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-macchiato .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .menu.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .menu-list{line-height:1.25}html.theme--catppuccin-macchiato .menu-list a{border-radius:3px;color:#cad3f5;display:block;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .menu-list a:hover{background-color:#1e2030;color:#b5c1f1}html.theme--catppuccin-macchiato .menu-list a.is-active{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .menu-list li ul{border-left:1px solid #5b6078;margin:.75em;padding-left:.75em}html.theme--catppuccin-macchiato .menu-label{color:#f5f7fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-macchiato .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-macchiato .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-macchiato .message{background-color:#1e2030;border-radius:.4em;font-size:1rem}html.theme--catppuccin-macchiato .message strong{color:currentColor}html.theme--catppuccin-macchiato .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-macchiato .message.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-macchiato .message.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .message.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .message.is-white{background-color:#fff}html.theme--catppuccin-macchiato .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-macchiato .message.is-black{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-macchiato .message.is-light{background-color:#fafafa}html.theme--catppuccin-macchiato .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-macchiato .message.is-dark,html.theme--catppuccin-macchiato .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-macchiato .message.is-dark .message-header,html.theme--catppuccin-macchiato .content kbd.message .message-header{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .message.is-dark .message-body,html.theme--catppuccin-macchiato .content kbd.message .message-body{border-color:#363a4f}html.theme--catppuccin-macchiato .message.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-primary .message-header,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-primary .message-body,html.theme--catppuccin-macchiato .docstring>section>a.message.docs-sourcelink .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-link{background-color:#ecf2fd}html.theme--catppuccin-macchiato .message.is-link .message-header{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .message.is-link .message-body{border-color:#8aadf4;color:#0e3b95}html.theme--catppuccin-macchiato .message.is-info{background-color:#f0faf8}html.theme--catppuccin-macchiato .message.is-info .message-header{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-info .message-body{border-color:#8bd5ca;color:#276d62}html.theme--catppuccin-macchiato .message.is-success{background-color:#f2faf0}html.theme--catppuccin-macchiato .message.is-success .message-header{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-success .message-body{border-color:#a6da95;color:#386e26}html.theme--catppuccin-macchiato .message.is-warning{background-color:#fcf7ee}html.theme--catppuccin-macchiato .message.is-warning .message-header{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .message.is-warning .message-body{border-color:#eed49f;color:#7e5c16}html.theme--catppuccin-macchiato .message.is-danger{background-color:#fcedef}html.theme--catppuccin-macchiato .message.is-danger .message-header{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .message.is-danger .message-body{border-color:#ed8796;color:#971729}html.theme--catppuccin-macchiato .message-header{align-items:center;background-color:#cad3f5;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--catppuccin-macchiato .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-macchiato .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-macchiato .message-body{border-color:#5b6078;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cad3f5;padding:1.25em 1.5em}html.theme--catppuccin-macchiato .message-body code,html.theme--catppuccin-macchiato .message-body pre{background-color:#fff}html.theme--catppuccin-macchiato .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-macchiato .modal.is-active{display:flex}html.theme--catppuccin-macchiato .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-macchiato .modal-content,html.theme--catppuccin-macchiato .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-macchiato .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-macchiato .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-macchiato .modal-card-head,html.theme--catppuccin-macchiato .modal-card-foot{align-items:center;background-color:#1e2030;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-macchiato .modal-card-head{border-bottom:1px solid #5b6078;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-macchiato .modal-card-title{color:#cad3f5;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-macchiato .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-macchiato .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#24273a;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-macchiato .navbar{background-color:#8aadf4;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-macchiato .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-macchiato .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-dark,html.theme--catppuccin-macchiato .content kbd.navbar{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-burger,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363a4f;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-burger,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4;color:#fff}}html.theme--catppuccin-macchiato .navbar.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6da95;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#eed49f;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-macchiato .navbar.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#ed8796;color:#fff}}html.theme--catppuccin-macchiato .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-macchiato .navbar.has-shadow{box-shadow:0 2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom,html.theme--catppuccin-macchiato .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #1e2030}html.theme--catppuccin-macchiato .navbar.is-fixed-top{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-macchiato .navbar-brand,html.theme--catppuccin-macchiato .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-macchiato .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-macchiato .navbar-burger{color:#cad3f5;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-macchiato .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--catppuccin-macchiato .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-macchiato .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-macchiato .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-macchiato .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-macchiato .navbar-menu{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{color:#cad3f5;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-macchiato .navbar-item .icon:only-child,html.theme--catppuccin-macchiato .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-macchiato a.navbar-item,html.theme--catppuccin-macchiato .navbar-link{cursor:pointer}html.theme--catppuccin-macchiato a.navbar-item:focus,html.theme--catppuccin-macchiato a.navbar-item:focus-within,html.theme--catppuccin-macchiato a.navbar-item:hover,html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link:focus,html.theme--catppuccin-macchiato .navbar-link:focus-within,html.theme--catppuccin-macchiato .navbar-link:hover,html.theme--catppuccin-macchiato .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-item img{max-height:1.75rem}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-macchiato .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-macchiato .navbar-item.is-tab:focus,html.theme--catppuccin-macchiato .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#8aadf4;border-bottom-style:solid;border-bottom-width:3px;color:#8aadf4;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-macchiato .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-macchiato .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-macchiato .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-macchiato .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-macchiato .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--catppuccin-macchiato .navbar>.container{display:block}html.theme--catppuccin-macchiato .navbar-brand .navbar-item,html.theme--catppuccin-macchiato .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-link::after{display:none}html.theme--catppuccin-macchiato .navbar-menu{background-color:#8aadf4;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-macchiato .navbar-menu.is-active{display:block}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-macchiato .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-macchiato .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .navbar,html.theme--catppuccin-macchiato .navbar-menu,html.theme--catppuccin-macchiato .navbar-start,html.theme--catppuccin-macchiato .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-macchiato .navbar{min-height:4rem}html.theme--catppuccin-macchiato .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-start,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-macchiato .navbar.is-spaced a.navbar-item,html.theme--catppuccin-macchiato .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-macchiato .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}html.theme--catppuccin-macchiato .navbar-burger{display:none}html.theme--catppuccin-macchiato .navbar-item,html.theme--catppuccin-macchiato .navbar-link{align-items:center;display:flex}html.theme--catppuccin-macchiato .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-macchiato .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-macchiato .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--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-macchiato .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-macchiato .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-macchiato .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-macchiato .navbar-dropdown{background-color:#8aadf4;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--catppuccin-macchiato .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#8087a2}html.theme--catppuccin-macchiato .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#8aadf4}.navbar.is-spaced html.theme--catppuccin-macchiato .navbar-dropdown,html.theme--catppuccin-macchiato .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--catppuccin-macchiato .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-macchiato .navbar-divider{display:block}html.theme--catppuccin-macchiato .navbar>.container .navbar-brand,html.theme--catppuccin-macchiato .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-macchiato .navbar>.container .navbar-menu,html.theme--catppuccin-macchiato .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-macchiato .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-macchiato html.has-navbar-fixed-top-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-macchiato html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-macchiato body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-top,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-macchiato html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-macchiato body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-macchiato a.navbar-item.is-active,html.theme--catppuccin-macchiato .navbar-link.is-active{color:#8aadf4}html.theme--catppuccin-macchiato a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-macchiato .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-macchiato .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-macchiato .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-macchiato .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-macchiato .pagination.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-macchiato .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-previous,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-next,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-macchiato .pagination.is-rounded .pagination-link,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-macchiato .pagination,html.theme--catppuccin-macchiato .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link{border-color:#5b6078;color:#8aadf4;min-width:2.5em}html.theme--catppuccin-macchiato .pagination-previous:hover,html.theme--catppuccin-macchiato .pagination-next:hover,html.theme--catppuccin-macchiato .pagination-link:hover{border-color:#6e738d;color:#91d7e3}html.theme--catppuccin-macchiato .pagination-previous:focus,html.theme--catppuccin-macchiato .pagination-next:focus,html.theme--catppuccin-macchiato .pagination-link:focus{border-color:#6e738d}html.theme--catppuccin-macchiato .pagination-previous:active,html.theme--catppuccin-macchiato .pagination-next:active,html.theme--catppuccin-macchiato .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-macchiato .pagination-previous[disabled],html.theme--catppuccin-macchiato .pagination-previous.is-disabled,html.theme--catppuccin-macchiato .pagination-next[disabled],html.theme--catppuccin-macchiato .pagination-next.is-disabled,html.theme--catppuccin-macchiato .pagination-link[disabled],html.theme--catppuccin-macchiato .pagination-link.is-disabled{background-color:#5b6078;border-color:#5b6078;box-shadow:none;color:#f5f7fd;opacity:0.5}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-macchiato .pagination-link.is-current{background-color:#8aadf4;border-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .pagination-ellipsis{color:#6e738d;pointer-events:none}html.theme--catppuccin-macchiato .pagination-list{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .pagination{flex-wrap:wrap}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination-previous{order:2}html.theme--catppuccin-macchiato .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-macchiato .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-macchiato .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-macchiato .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-macchiato .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-macchiato .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-macchiato .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-macchiato .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-macchiato .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-macchiato .panel.is-dark .panel-heading,html.theme--catppuccin-macchiato .content kbd.panel .panel-heading{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-macchiato .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363a4f}html.theme--catppuccin-macchiato .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .content kbd.panel .panel-block.is-active .panel-icon{color:#363a4f}html.theme--catppuccin-macchiato .panel.is-primary .panel-heading,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-macchiato .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-heading{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .panel.is-link .panel-tabs a.is-active{border-bottom-color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-link .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel.is-info .panel-heading{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-info .panel-tabs a.is-active{border-bottom-color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-info .panel-block.is-active .panel-icon{color:#8bd5ca}html.theme--catppuccin-macchiato .panel.is-success .panel-heading{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6da95}html.theme--catppuccin-macchiato .panel.is-success .panel-block.is-active .panel-icon{color:#a6da95}html.theme--catppuccin-macchiato .panel.is-warning .panel-heading{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#eed49f}html.theme--catppuccin-macchiato .panel.is-warning .panel-block.is-active .panel-icon{color:#eed49f}html.theme--catppuccin-macchiato .panel.is-danger .panel-heading{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#ed8796}html.theme--catppuccin-macchiato .panel.is-danger .panel-block.is-active .panel-icon{color:#ed8796}html.theme--catppuccin-macchiato .panel-tabs:not(:last-child),html.theme--catppuccin-macchiato .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-macchiato .panel-heading{background-color:#494d64;border-radius:8px 8px 0 0;color:#b5c1f1;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-macchiato .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-macchiato .panel-tabs a{border-bottom:1px solid #5b6078;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-macchiato .panel-tabs a.is-active{border-bottom-color:#494d64;color:#739df2}html.theme--catppuccin-macchiato .panel-list a{color:#cad3f5}html.theme--catppuccin-macchiato .panel-list a:hover{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block{align-items:center;color:#b5c1f1;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-macchiato .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-macchiato .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-macchiato .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-macchiato .panel-block.is-active{border-left-color:#8aadf4;color:#739df2}html.theme--catppuccin-macchiato .panel-block.is-active .panel-icon{color:#8aadf4}html.theme--catppuccin-macchiato .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-macchiato a.panel-block,html.theme--catppuccin-macchiato label.panel-block{cursor:pointer}html.theme--catppuccin-macchiato a.panel-block:hover,html.theme--catppuccin-macchiato label.panel-block:hover{background-color:#1e2030}html.theme--catppuccin-macchiato .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f5f7fd;margin-right:.75em}html.theme--catppuccin-macchiato .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-macchiato .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}html.theme--catppuccin-macchiato .tabs a{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;color:#cad3f5;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-macchiato .tabs a:hover{border-bottom-color:#b5c1f1;color:#b5c1f1}html.theme--catppuccin-macchiato .tabs li{display:block}html.theme--catppuccin-macchiato .tabs li.is-active a{border-bottom-color:#8aadf4;color:#8aadf4}html.theme--catppuccin-macchiato .tabs ul{align-items:center;border-bottom-color:#5b6078;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-macchiato .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-macchiato .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-macchiato .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-macchiato .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-macchiato .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-macchiato .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-macchiato .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-macchiato .tabs.is-boxed a:hover{background-color:#1e2030;border-bottom-color:#5b6078}html.theme--catppuccin-macchiato .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5b6078;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-macchiato .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-macchiato .tabs.is-toggle a{border-color:#5b6078;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-macchiato .tabs.is-toggle a:hover{background-color:#1e2030;border-color:#6e738d;z-index:2}html.theme--catppuccin-macchiato .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-macchiato .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-macchiato .tabs.is-toggle li.is-active a{background-color:#8aadf4;border-color:#8aadf4;color:#fff;z-index:1}html.theme--catppuccin-macchiato .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-macchiato .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-macchiato .tabs.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-macchiato .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-macchiato .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .column.is-narrow,html.theme--catppuccin-macchiato .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full,html.theme--catppuccin-macchiato .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters,html.theme--catppuccin-macchiato .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds,html.theme--catppuccin-macchiato .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half,html.theme--catppuccin-macchiato .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third,html.theme--catppuccin-macchiato .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter,html.theme--catppuccin-macchiato .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth,html.theme--catppuccin-macchiato .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths,html.theme--catppuccin-macchiato .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths,html.theme--catppuccin-macchiato .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths,html.theme--catppuccin-macchiato .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters,html.theme--catppuccin-macchiato .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds,html.theme--catppuccin-macchiato .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half,html.theme--catppuccin-macchiato .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third,html.theme--catppuccin-macchiato .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter,html.theme--catppuccin-macchiato .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth,html.theme--catppuccin-macchiato .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths,html.theme--catppuccin-macchiato .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths,html.theme--catppuccin-macchiato .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths,html.theme--catppuccin-macchiato .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0,html.theme--catppuccin-macchiato .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0,html.theme--catppuccin-macchiato .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1,html.theme--catppuccin-macchiato .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1,html.theme--catppuccin-macchiato .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2,html.theme--catppuccin-macchiato .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2,html.theme--catppuccin-macchiato .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3,html.theme--catppuccin-macchiato .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3,html.theme--catppuccin-macchiato .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4,html.theme--catppuccin-macchiato .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4,html.theme--catppuccin-macchiato .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5,html.theme--catppuccin-macchiato .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5,html.theme--catppuccin-macchiato .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6,html.theme--catppuccin-macchiato .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6,html.theme--catppuccin-macchiato .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7,html.theme--catppuccin-macchiato .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7,html.theme--catppuccin-macchiato .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8,html.theme--catppuccin-macchiato .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8,html.theme--catppuccin-macchiato .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9,html.theme--catppuccin-macchiato .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9,html.theme--catppuccin-macchiato .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10,html.theme--catppuccin-macchiato .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10,html.theme--catppuccin-macchiato .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11,html.theme--catppuccin-macchiato .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11,html.theme--catppuccin-macchiato .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12,html.theme--catppuccin-macchiato .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12,html.theme--catppuccin-macchiato .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-macchiato .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-macchiato .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-macchiato .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-macchiato .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-macchiato .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-macchiato .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-macchiato .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-macchiato .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-macchiato .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-macchiato .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-macchiato .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-macchiato .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-macchiato .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-macchiato .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-macchiato .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-macchiato .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-macchiato .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-macchiato .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-macchiato .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-macchiato .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-macchiato .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-macchiato .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-macchiato .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-macchiato .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-macchiato .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-macchiato .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-macchiato .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-macchiato .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-macchiato .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-macchiato .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-macchiato .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-macchiato .columns.is-centered{justify-content:center}html.theme--catppuccin-macchiato .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-macchiato .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-macchiato .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-macchiato .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-macchiato .columns.is-mobile{display:flex}html.theme--catppuccin-macchiato .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-macchiato .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-desktop{display:flex}}html.theme--catppuccin-macchiato .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-macchiato .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-macchiato .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-macchiato .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-macchiato .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-macchiato .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-macchiato .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-macchiato .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-macchiato .tile.is-child{margin:0 !important}html.theme--catppuccin-macchiato .tile.is-parent{padding:.75rem}html.theme--catppuccin-macchiato .tile.is-vertical{flex-direction:column}html.theme--catppuccin-macchiato .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .tile:not(.is-child){display:flex}html.theme--catppuccin-macchiato .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-macchiato .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-macchiato .tile.is-3{flex:none;width:25%}html.theme--catppuccin-macchiato .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-macchiato .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-macchiato .tile.is-6{flex:none;width:50%}html.theme--catppuccin-macchiato .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-macchiato .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-macchiato .tile.is-9{flex:none;width:75%}html.theme--catppuccin-macchiato .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-macchiato .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-macchiato .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-macchiato .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-macchiato .hero .navbar{background:none}html.theme--catppuccin-macchiato .hero .tabs ul{border-bottom:none}html.theme--catppuccin-macchiato .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-white strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-macchiato .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-macchiato .hero.is-white .navbar-item,html.theme--catppuccin-macchiato .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-macchiato .hero.is-white a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-white .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-macchiato .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-black strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-black .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-macchiato .hero.is-black .navbar-item,html.theme--catppuccin-macchiato .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-black a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-black .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-macchiato .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-macchiato .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-light strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-macchiato .hero.is-light .navbar-item,html.theme--catppuccin-macchiato .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-light .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-light .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:#f5f5f5}html.theme--catppuccin-macchiato .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-macchiato .hero.is-dark,html.theme--catppuccin-macchiato .content kbd.hero{background-color:#363a4f;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-dark strong,html.theme--catppuccin-macchiato .content kbd.hero strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-dark .title,html.theme--catppuccin-macchiato .content kbd.hero .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .subtitle,html.theme--catppuccin-macchiato .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-macchiato .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-dark .subtitle strong,html.theme--catppuccin-macchiato .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-dark .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero .navbar-menu{background-color:#363a4f}}html.theme--catppuccin-macchiato .hero.is-dark .navbar-item,html.theme--catppuccin-macchiato .content kbd.hero .navbar-item,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-macchiato .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link:hover,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-macchiato .content kbd.hero .navbar-link.is-active{background-color:#2c2f40;color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs a,html.theme--catppuccin-macchiato .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-dark .tabs a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs li.is-active a{color:#363a4f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363a4f}html.theme--catppuccin-macchiato .hero.is-dark.is-bold,html.theme--catppuccin-macchiato .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-macchiato .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1d2535 0%, #363a4f 71%, #3d3c62 100%)}}html.theme--catppuccin-macchiato .hero.is-primary,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-primary strong,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-primary .title,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .subtitle,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-primary .subtitle strong,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-primary .navbar-menu,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-primary .navbar-item,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-primary .tabs a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-primary.is-bold,html.theme--catppuccin-macchiato .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-macchiato .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-link{background-color:#8aadf4;color:#fff}html.theme--catppuccin-macchiato .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-link strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-link .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-link .navbar-menu{background-color:#8aadf4}}html.theme--catppuccin-macchiato .hero.is-link .navbar-item,html.theme--catppuccin-macchiato .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-link a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-link .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-link .navbar-link.is-active{background-color:#739df2;color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs li.is-active a{color:#8aadf4 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#8aadf4}html.theme--catppuccin-macchiato .hero.is-link.is-bold{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #52a5f9 0%, #8aadf4 71%, #9fadf9 100%)}}html.theme--catppuccin-macchiato .hero.is-info{background-color:#8bd5ca;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-info strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-info .navbar-menu{background-color:#8bd5ca}}html.theme--catppuccin-macchiato .hero.is-info .navbar-item,html.theme--catppuccin-macchiato .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-info .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-info .navbar-link.is-active{background-color:#78cec1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs li.is-active a{color:#8bd5ca !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-info .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:#8bd5ca}html.theme--catppuccin-macchiato .hero.is-info.is-bold{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #5bd2ac 0%, #8bd5ca 71%, #9adedf 100%)}}html.theme--catppuccin-macchiato .hero.is-success{background-color:#a6da95;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-success strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-success .navbar-menu{background-color:#a6da95}}html.theme--catppuccin-macchiato .hero.is-success .navbar-item,html.theme--catppuccin-macchiato .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-success .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-success .navbar-link.is-active{background-color:#96d382;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs li.is-active a{color:#a6da95 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-success .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:#a6da95}html.theme--catppuccin-macchiato .hero.is-success.is-bold{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #94d765 0%, #a6da95 71%, #aae4a5 100%)}}html.theme--catppuccin-macchiato .hero.is-warning{background-color:#eed49f;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-warning strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-macchiato .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-warning .navbar-menu{background-color:#eed49f}}html.theme--catppuccin-macchiato .hero.is-warning .navbar-item,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-warning .navbar-link.is-active{background-color:#eaca89;color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-macchiato .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs li.is-active a{color:#eed49f !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .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:#eed49f}html.theme--catppuccin-macchiato .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #efae6b 0%, #eed49f 71%, #f4e9b2 100%)}}html.theme--catppuccin-macchiato .hero.is-danger{background-color:#ed8796;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-macchiato .hero.is-danger strong{color:inherit}html.theme--catppuccin-macchiato .hero.is-danger .title{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-macchiato .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-macchiato .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .hero.is-danger .navbar-menu{background-color:#ed8796}}html.theme--catppuccin-macchiato .hero.is-danger .navbar-item,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-macchiato .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link:hover,html.theme--catppuccin-macchiato .hero.is-danger .navbar-link.is-active{background-color:#ea7183;color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-macchiato .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs li.is-active a{color:#ed8796 !important;opacity:1}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-macchiato .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ed8796}html.theme--catppuccin-macchiato .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f05183 0%, #ed8796 71%, #f39c9a 100%)}}html.theme--catppuccin-macchiato .hero.is-small .hero-body,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-macchiato .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-macchiato .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-macchiato .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-macchiato .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-macchiato .hero-video{overflow:hidden}html.theme--catppuccin-macchiato .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-macchiato .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-video{display:none}}html.theme--catppuccin-macchiato .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-macchiato .hero-buttons .button{display:flex}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-macchiato .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-macchiato .hero-head,html.theme--catppuccin-macchiato .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-macchiato .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-macchiato .hero-body{padding:3rem 3rem}}html.theme--catppuccin-macchiato .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato .section{padding:3rem 3rem}html.theme--catppuccin-macchiato .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-macchiato .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-macchiato .footer{background-color:#1e2030;padding:3rem 1.5rem 6rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h1 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h2 .docs-heading-anchor,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h2 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h3 .docs-heading-anchor,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h3 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h4 .docs-heading-anchor,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h4 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h5 .docs-heading-anchor,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h5 .docs-heading-anchor:visited,html.theme--catppuccin-macchiato h6 .docs-heading-anchor,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:hover,html.theme--catppuccin-macchiato h6 .docs-heading-anchor:visited{color:#cad3f5}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-macchiato h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-macchiato h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-macchiato h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-macchiato h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-macchiato .docs-light-only{display:none !important}html.theme--catppuccin-macchiato pre{position:relative;overflow:hidden}html.theme--catppuccin-macchiato pre code,html.theme--catppuccin-macchiato pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-macchiato pre code:first-of-type,html.theme--catppuccin-macchiato pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-macchiato pre code:last-of-type,html.theme--catppuccin-macchiato pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-macchiato 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 6 Free";color:#cad3f5;cursor:pointer;text-align:center}html.theme--catppuccin-macchiato pre .copy-button:focus,html.theme--catppuccin-macchiato pre .copy-button:hover{opacity:1;background:rgba(202,211,245,0.1);color:#8aadf4}html.theme--catppuccin-macchiato pre .copy-button.success{color:#a6da95;opacity:1}html.theme--catppuccin-macchiato pre .copy-button.error{color:#ed8796;opacity:1}html.theme--catppuccin-macchiato pre:hover .copy-button{opacity:1}html.theme--catppuccin-macchiato .admonition{background-color:#1e2030;border-style:solid;border-width:2px;border-color:#b8c0e0;border-radius:4px;font-size:1rem}html.theme--catppuccin-macchiato .admonition strong{color:currentColor}html.theme--catppuccin-macchiato .admonition.is-small,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-macchiato .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-macchiato .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-macchiato .admonition.is-default{background-color:#1e2030;border-color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#b8c0e0}html.theme--catppuccin-macchiato .admonition.is-default>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-info{background-color:#1e2030;border-color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#8bd5ca}html.theme--catppuccin-macchiato .admonition.is-info>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-success{background-color:#1e2030;border-color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6da95}html.theme--catppuccin-macchiato .admonition.is-success>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-warning{background-color:#1e2030;border-color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#eed49f}html.theme--catppuccin-macchiato .admonition.is-warning>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-danger{background-color:#1e2030;border-color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#ed8796}html.theme--catppuccin-macchiato .admonition.is-danger>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition.is-compat{background-color:#1e2030;border-color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#91d7e3}html.theme--catppuccin-macchiato .admonition.is-compat>.admonition-body{color:#cad3f5}html.theme--catppuccin-macchiato .admonition-header{color:#b8c0e0;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-macchiato .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-macchiato details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-macchiato details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-macchiato .admonition-body{color:#cad3f5;padding:0.5rem .75rem}html.theme--catppuccin-macchiato .admonition-body pre{background-color:#1e2030}html.theme--catppuccin-macchiato .admonition-body code{background-color:#1e2030}html.theme--catppuccin-macchiato .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #5b6078;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-macchiato .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#1e2030;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5b6078;overflow:auto}html.theme--catppuccin-macchiato .docstring>header code{background-color:transparent}html.theme--catppuccin-macchiato .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-macchiato .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-macchiato .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-macchiato .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-macchiato .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-macchiato .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-macchiato .documenter-example-output{background-color:#24273a}html.theme--catppuccin-macchiato .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:#1e2030;color:#cad3f5;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-macchiato .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-macchiato .outdated-warning-overlay a{color:#8aadf4}html.theme--catppuccin-macchiato .outdated-warning-overlay a:hover{color:#91d7e3}html.theme--catppuccin-macchiato .content pre{border:2px solid #5b6078;border-radius:4px}html.theme--catppuccin-macchiato .content code{font-weight:inherit}html.theme--catppuccin-macchiato .content a code{color:#8aadf4}html.theme--catppuccin-macchiato .content a:hover code{color:#91d7e3}html.theme--catppuccin-macchiato .content h1 code,html.theme--catppuccin-macchiato .content h2 code,html.theme--catppuccin-macchiato .content h3 code,html.theme--catppuccin-macchiato .content h4 code,html.theme--catppuccin-macchiato .content h5 code,html.theme--catppuccin-macchiato .content h6 code{color:#cad3f5}html.theme--catppuccin-macchiato .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-macchiato .content blockquote>ul:first-child,html.theme--catppuccin-macchiato .content blockquote>ol:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ul:first-child,html.theme--catppuccin-macchiato .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-macchiato pre,html.theme--catppuccin-macchiato code{font-variant-ligatures:no-contextual}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-macchiato .breadcrumb a.is-disabled,html.theme--catppuccin-macchiato .breadcrumb a.is-disabled:hover{color:#b5c1f1}html.theme--catppuccin-macchiato .hljs{background:initial !important}html.theme--catppuccin-macchiato .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-macchiato .katex-display,html.theme--catppuccin-macchiato mjx-container,html.theme--catppuccin-macchiato .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-macchiato html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-macchiato li.no-marker{list-style:none}html.theme--catppuccin-macchiato #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-macchiato #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main{width:100%}html.theme--catppuccin-macchiato #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-main>header,html.theme--catppuccin-macchiato #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar{background-color:#24273a;border-bottom:1px solid #5b6078;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-macchiato #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #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--catppuccin-macchiato #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--catppuccin-macchiato #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--catppuccin-macchiato #documenter .docs-main section.footnotes{border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-macchiato #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-macchiato .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5b6078;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-macchiato #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-macchiato #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cad3f5;background-color:#1e2030;border-right:1px solid #5b6078;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-macchiato #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--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-package-name a:hover{color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5b6078;display:none;padding:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5b6078;padding-bottom:1.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-macchiato #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}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cad3f5;background:#1e2030}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cad3f5;background-color:#26283d}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5b6078;border-bottom:1px solid #5b6078;background-color:#181926}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#181926;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#26283d;color:#cad3f5}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5b6078}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-macchiato #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#3d4162}}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#2e3149}html.theme--catppuccin-macchiato #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#3d4162}}html.theme--catppuccin-macchiato kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-macchiato .search-min-width-50{min-width:50%}html.theme--catppuccin-macchiato .search-min-height-100{min-height:100%}html.theme--catppuccin-macchiato .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .property-search-result-badge,html.theme--catppuccin-macchiato .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-macchiato .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-macchiato .search-filter:hover,html.theme--catppuccin-macchiato .search-filter:focus{color:#333}html.theme--catppuccin-macchiato .search-filter-selected{color:#363a4f;background-color:#b7bdf8}html.theme--catppuccin-macchiato .search-filter-selected:hover,html.theme--catppuccin-macchiato .search-filter-selected:focus{color:#363a4f}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5b6078}html.theme--catppuccin-macchiato .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-macchiato .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-macchiato #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-macchiato #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem}html.theme--catppuccin-macchiato .gap-8{gap:2rem}html.theme--catppuccin-macchiato{background-color:#24273a;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-macchiato a{transition:all 200ms ease}html.theme--catppuccin-macchiato .label{color:#cad3f5}html.theme--catppuccin-macchiato .button,html.theme--catppuccin-macchiato .control.has-icons-left .icon,html.theme--catppuccin-macchiato .control.has-icons-right .icon,html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .pagination-ellipsis,html.theme--catppuccin-macchiato .pagination-link,html.theme--catppuccin-macchiato .pagination-next,html.theme--catppuccin-macchiato .pagination-previous,html.theme--catppuccin-macchiato .select,html.theme--catppuccin-macchiato .select select,html.theme--catppuccin-macchiato .textarea{height:2.5em;color:#cad3f5}html.theme--catppuccin-macchiato .input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-macchiato .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cad3f5}html.theme--catppuccin-macchiato .select:after,html.theme--catppuccin-macchiato .select select{border-width:1px}html.theme--catppuccin-macchiato .menu-list a{transition:all 300ms ease}html.theme--catppuccin-macchiato .modal-card-foot,html.theme--catppuccin-macchiato .modal-card-head{border-color:#5b6078}html.theme--catppuccin-macchiato .navbar{border-radius:.4em}html.theme--catppuccin-macchiato .navbar.is-transparent{background:none}html.theme--catppuccin-macchiato .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-macchiato .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#8aadf4}@media screen and (max-width: 1055px){html.theme--catppuccin-macchiato .navbar .navbar-menu{background-color:#8aadf4;border-radius:0 0 .4em .4em}}html.theme--catppuccin-macchiato .docstring>section>a.docs-sourcelink:not(body){color:#363a4f}html.theme--catppuccin-macchiato .tag.is-link:not(body),html.theme--catppuccin-macchiato .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-macchiato .content kbd.is-link:not(body){color:#363a4f}html.theme--catppuccin-macchiato .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-macchiato .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-macchiato .ansi span.sgr3{font-style:italic}html.theme--catppuccin-macchiato .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-macchiato .ansi span.sgr7{color:#24273a;background-color:#cad3f5}html.theme--catppuccin-macchiato .ansi span.sgr8{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-macchiato .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-macchiato .ansi span.sgr30{color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr31{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr32{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr33{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr34{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr35{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr36{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr37{color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr40{background-color:#494d64}html.theme--catppuccin-macchiato .ansi span.sgr41{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr42{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr43{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr44{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr45{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr46{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr47{background-color:#b8c0e0}html.theme--catppuccin-macchiato .ansi span.sgr90{color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr91{color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr92{color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr93{color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr94{color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr95{color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr96{color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr97{color:#a5adcb}html.theme--catppuccin-macchiato .ansi span.sgr100{background-color:#5b6078}html.theme--catppuccin-macchiato .ansi span.sgr101{background-color:#ed8796}html.theme--catppuccin-macchiato .ansi span.sgr102{background-color:#a6da95}html.theme--catppuccin-macchiato .ansi span.sgr103{background-color:#eed49f}html.theme--catppuccin-macchiato .ansi span.sgr104{background-color:#8aadf4}html.theme--catppuccin-macchiato .ansi span.sgr105{background-color:#f5bde6}html.theme--catppuccin-macchiato .ansi span.sgr106{background-color:#8bd5ca}html.theme--catppuccin-macchiato .ansi span.sgr107{background-color:#a5adcb}html.theme--catppuccin-macchiato code.language-julia-repl>span.hljs-meta{color:#a6da95;font-weight:bolder}html.theme--catppuccin-macchiato code .hljs{color:#cad3f5;background:#24273a}html.theme--catppuccin-macchiato code .hljs-keyword{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-built_in{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-type{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-literal{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-number{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-operator{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-punctuation{color:#b8c0e0}html.theme--catppuccin-macchiato code .hljs-property{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-regexp{color:#f5bde6}html.theme--catppuccin-macchiato code .hljs-string{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-char.escape_{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-subst{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-symbol{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-variable{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.language_{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-variable.constant_{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-title{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-title.class_{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-title.function_{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-params{color:#cad3f5}html.theme--catppuccin-macchiato code .hljs-comment{color:#5b6078}html.theme--catppuccin-macchiato code .hljs-doctag{color:#ed8796}html.theme--catppuccin-macchiato code .hljs-meta{color:#f5a97f}html.theme--catppuccin-macchiato code .hljs-section{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-tag{color:#a5adcb}html.theme--catppuccin-macchiato code .hljs-name{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-attr{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-attribute{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-bullet{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-code{color:#a6da95}html.theme--catppuccin-macchiato code .hljs-emphasis{color:#ed8796;font-style:italic}html.theme--catppuccin-macchiato code .hljs-strong{color:#ed8796;font-weight:bold}html.theme--catppuccin-macchiato code .hljs-formula{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-link{color:#7dc4e4;font-style:italic}html.theme--catppuccin-macchiato code .hljs-quote{color:#a6da95;font-style:italic}html.theme--catppuccin-macchiato code .hljs-selector-tag{color:#eed49f}html.theme--catppuccin-macchiato code .hljs-selector-id{color:#8aadf4}html.theme--catppuccin-macchiato code .hljs-selector-class{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-selector-attr{color:#c6a0f6}html.theme--catppuccin-macchiato code .hljs-selector-pseudo{color:#8bd5ca}html.theme--catppuccin-macchiato code .hljs-template-tag{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-template-variable{color:#f0c6c6}html.theme--catppuccin-macchiato code .hljs-addition{color:#a6da95;background:rgba(166,227,161,0.15)}html.theme--catppuccin-macchiato code .hljs-deletion{color:#ed8796;background:rgba(243,139,168,0.15)}html.theme--catppuccin-macchiato .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover,html.theme--catppuccin-macchiato .search-result-link:focus{background-color:#363a4f}html.theme--catppuccin-macchiato .search-result-link .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-macchiato .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:hover .search-filter,html.theme--catppuccin-macchiato .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-macchiato .search-result-link:focus .search-filter{color:#363a4f !important;background-color:#b7bdf8 !important}html.theme--catppuccin-macchiato .search-result-title{color:#cad3f5}html.theme--catppuccin-macchiato .search-result-highlight{background-color:#ed8796;color:#1e2030}html.theme--catppuccin-macchiato .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-macchiato .w-100{width:100%}html.theme--catppuccin-macchiato .gap-2{gap:0.5rem}html.theme--catppuccin-macchiato .gap-4{gap:1rem} diff --git a/v0.8.7/assets/themes/catppuccin-mocha.css b/v0.8.7/assets/themes/catppuccin-mocha.css new file mode 100644 index 0000000000..6f27b4c5f5 --- /dev/null +++ b/v0.8.7/assets/themes/catppuccin-mocha.css @@ -0,0 +1 @@ +html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .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:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus,html.theme--catppuccin-mocha .pagination-ellipsis:focus,html.theme--catppuccin-mocha .file-cta:focus,html.theme--catppuccin-mocha .file-name:focus,html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .is-focused.pagination-previous,html.theme--catppuccin-mocha .is-focused.pagination-next,html.theme--catppuccin-mocha .is-focused.pagination-link,html.theme--catppuccin-mocha .is-focused.pagination-ellipsis,html.theme--catppuccin-mocha .is-focused.file-cta,html.theme--catppuccin-mocha .is-focused.file-name,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-focused.button,html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active,html.theme--catppuccin-mocha .pagination-ellipsis:active,html.theme--catppuccin-mocha .file-cta:active,html.theme--catppuccin-mocha .file-name:active,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .is-active.pagination-previous,html.theme--catppuccin-mocha .is-active.pagination-next,html.theme--catppuccin-mocha .is-active.pagination-link,html.theme--catppuccin-mocha .is-active.pagination-ellipsis,html.theme--catppuccin-mocha .is-active.file-cta,html.theme--catppuccin-mocha .is-active.file-name,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .is-active.button{outline:none}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-ellipsis[disabled],html.theme--catppuccin-mocha .file-cta[disabled],html.theme--catppuccin-mocha .file-name[disabled],html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha fieldset[disabled] .file-cta,fieldset[disabled] html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha fieldset[disabled] .file-name,fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha fieldset[disabled] .select select,html.theme--catppuccin-mocha .select fieldset[disabled] select,html.theme--catppuccin-mocha fieldset[disabled] .textarea,html.theme--catppuccin-mocha fieldset[disabled] .input,html.theme--catppuccin-mocha fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha fieldset[disabled] .button{cursor:not-allowed}html.theme--catppuccin-mocha .tabs,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .breadcrumb,html.theme--catppuccin-mocha .file,html.theme--catppuccin-mocha .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after,html.theme--catppuccin-mocha .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--catppuccin-mocha .admonition:not(:last-child),html.theme--catppuccin-mocha .tabs:not(:last-child),html.theme--catppuccin-mocha .pagination:not(:last-child),html.theme--catppuccin-mocha .message:not(:last-child),html.theme--catppuccin-mocha .level:not(:last-child),html.theme--catppuccin-mocha .breadcrumb:not(:last-child),html.theme--catppuccin-mocha .block:not(:last-child),html.theme--catppuccin-mocha .title:not(:last-child),html.theme--catppuccin-mocha .subtitle:not(:last-child),html.theme--catppuccin-mocha .table-container:not(:last-child),html.theme--catppuccin-mocha .table:not(:last-child),html.theme--catppuccin-mocha .progress:not(:last-child),html.theme--catppuccin-mocha .notification:not(:last-child),html.theme--catppuccin-mocha .content:not(:last-child),html.theme--catppuccin-mocha .box:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .modal-close,html.theme--catppuccin-mocha .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before,html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .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--catppuccin-mocha .modal-close::before,html.theme--catppuccin-mocha .delete::before{height:2px;width:50%}html.theme--catppuccin-mocha .modal-close::after,html.theme--catppuccin-mocha .delete::after{height:50%;width:2px}html.theme--catppuccin-mocha .modal-close:hover,html.theme--catppuccin-mocha .delete:hover,html.theme--catppuccin-mocha .modal-close:focus,html.theme--catppuccin-mocha .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--catppuccin-mocha .modal-close:active,html.theme--catppuccin-mocha .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--catppuccin-mocha .is-small.modal-close,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--catppuccin-mocha .is-small.delete,html.theme--catppuccin-mocha #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--catppuccin-mocha .is-medium.modal-close,html.theme--catppuccin-mocha .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--catppuccin-mocha .is-large.modal-close,html.theme--catppuccin-mocha .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--catppuccin-mocha .control.is-loading::after,html.theme--catppuccin-mocha .select.is-loading::after,html.theme--catppuccin-mocha .loader,html.theme--catppuccin-mocha .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #7f849c;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--catppuccin-mocha .hero-video,html.theme--catppuccin-mocha .modal-background,html.theme--catppuccin-mocha .modal,html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--catppuccin-mocha .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | 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,video{height:auto;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:inherit}.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:#313244 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c26 !important}.has-background-dark{background-color:#313244 !important}.has-text-primary{color:#89b4fa !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#5895f8 !important}.has-background-primary{background-color:#89b4fa !important}.has-text-primary-light{color:#ebf3fe !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#bbd3fc !important}.has-background-primary-light{background-color:#ebf3fe !important}.has-text-primary-dark{color:#063c93 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#0850c4 !important}.has-background-primary-dark{background-color:#063c93 !important}.has-text-link{color:#89b4fa !important}a.has-text-link:hover,a.has-text-link:focus{color:#5895f8 !important}.has-background-link{background-color:#89b4fa !important}.has-text-link-light{color:#ebf3fe !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#bbd3fc !important}.has-background-link-light{background-color:#ebf3fe !important}.has-text-link-dark{color:#063c93 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#0850c4 !important}.has-background-link-dark{background-color:#063c93 !important}.has-text-info{color:#94e2d5 !important}a.has-text-info:hover,a.has-text-info:focus{color:#6cd7c5 !important}.has-background-info{background-color:#94e2d5 !important}.has-text-info-light{color:#effbf9 !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c7f0e9 !important}.has-background-info-light{background-color:#effbf9 !important}.has-text-info-dark{color:#207466 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#2a9c89 !important}.has-background-info-dark{background-color:#207466 !important}.has-text-success{color:#a6e3a1 !important}a.has-text-success:hover,a.has-text-success:focus{color:#81d77a !important}.has-background-success{background-color:#a6e3a1 !important}.has-text-success-light{color:#f0faef !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#cbefc8 !important}.has-background-success-light{background-color:#f0faef !important}.has-text-success-dark{color:#287222 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#36992e !important}.has-background-success-dark{background-color:#287222 !important}.has-text-warning{color:#f9e2af !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#f5d180 !important}.has-background-warning{background-color:#f9e2af !important}.has-text-warning-light{color:#fef8ec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fae7bd !important}.has-background-warning-light{background-color:#fef8ec !important}.has-text-warning-dark{color:#8a620a !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#b9840e !important}.has-background-warning-dark{background-color:#8a620a !important}.has-text-danger{color:#f38ba8 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#ee5d85 !important}.has-background-danger{background-color:#f38ba8 !important}.has-text-danger-light{color:#fdedf1 !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f8bece !important}.has-background-danger-light{background-color:#fdedf1 !important}.has-text-danger-dark{color:#991036 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#c71546 !important}.has-background-danger-dark{background-color:#991036 !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:#313244 !important}.has-background-grey-darker{background-color:#313244 !important}.has-text-grey-dark{color:#45475a !important}.has-background-grey-dark{background-color:#45475a !important}.has-text-grey{color:#585b70 !important}.has-background-grey{background-color:#585b70 !important}.has-text-grey-light{color:#6c7086 !important}.has-background-grey-light{background-color:#6c7086 !important}.has-text-grey-lighter{color:#7f849c !important}.has-background-grey-lighter{background-color:#7f849c !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}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--catppuccin-mocha .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}.is-underlined{text-decoration:underline !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}}html.theme--catppuccin-mocha html{background-color:#1e1e2e;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--catppuccin-mocha article,html.theme--catppuccin-mocha aside,html.theme--catppuccin-mocha figure,html.theme--catppuccin-mocha footer,html.theme--catppuccin-mocha header,html.theme--catppuccin-mocha hgroup,html.theme--catppuccin-mocha section{display:block}html.theme--catppuccin-mocha body,html.theme--catppuccin-mocha button,html.theme--catppuccin-mocha input,html.theme--catppuccin-mocha optgroup,html.theme--catppuccin-mocha select,html.theme--catppuccin-mocha textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--catppuccin-mocha code,html.theme--catppuccin-mocha 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--catppuccin-mocha body{color:#cdd6f4;font-size:1em;font-weight:400;line-height:1.5}html.theme--catppuccin-mocha a{color:#89b4fa;cursor:pointer;text-decoration:none}html.theme--catppuccin-mocha a strong{color:currentColor}html.theme--catppuccin-mocha a:hover{color:#89dceb}html.theme--catppuccin-mocha code{background-color:#181825;color:#cdd6f4;font-size:.875em;font-weight:normal;padding:.1em}html.theme--catppuccin-mocha hr{background-color:#181825;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--catppuccin-mocha img{height:auto;max-width:100%}html.theme--catppuccin-mocha input[type="checkbox"],html.theme--catppuccin-mocha input[type="radio"]{vertical-align:baseline}html.theme--catppuccin-mocha small{font-size:.875em}html.theme--catppuccin-mocha span{font-style:inherit;font-weight:inherit}html.theme--catppuccin-mocha strong{color:#b8c5ef;font-weight:700}html.theme--catppuccin-mocha fieldset{border:none}html.theme--catppuccin-mocha pre{-webkit-overflow-scrolling:touch;background-color:#181825;color:#cdd6f4;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--catppuccin-mocha table td,html.theme--catppuccin-mocha table th{vertical-align:top}html.theme--catppuccin-mocha table td:not([align]),html.theme--catppuccin-mocha table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha table th{color:#b8c5ef}html.theme--catppuccin-mocha .box{background-color:#45475a;border-radius:8px;box-shadow:none;color:#cdd6f4;display:block;padding:1.25rem}html.theme--catppuccin-mocha a.box:hover,html.theme--catppuccin-mocha a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #89b4fa}html.theme--catppuccin-mocha .button{background-color:#181825;border-color:#363653;border-width:1px;color:#89b4fa;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--catppuccin-mocha .button strong{color:inherit}html.theme--catppuccin-mocha .button .icon,html.theme--catppuccin-mocha .button .icon.is-small,html.theme--catppuccin-mocha .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--catppuccin-mocha .button .icon.is-medium,html.theme--catppuccin-mocha .button .icon.is-large{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--catppuccin-mocha .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--catppuccin-mocha .button:hover,html.theme--catppuccin-mocha .button.is-hovered{border-color:#6c7086;color:#b8c5ef}html.theme--catppuccin-mocha .button:focus,html.theme--catppuccin-mocha .button.is-focused{border-color:#6c7086;color:#71a4f9}html.theme--catppuccin-mocha .button:focus:not(:active),html.theme--catppuccin-mocha .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button:active,html.theme--catppuccin-mocha .button.is-active{border-color:#45475a;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;color:#cdd6f4;text-decoration:underline}html.theme--catppuccin-mocha .button.is-text:hover,html.theme--catppuccin-mocha .button.is-text.is-hovered,html.theme--catppuccin-mocha .button.is-text:focus,html.theme--catppuccin-mocha .button.is-text.is-focused{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text:active,html.theme--catppuccin-mocha .button.is-text.is-active{background-color:#0e0e16;color:#b8c5ef}html.theme--catppuccin-mocha .button.is-text[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--catppuccin-mocha .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#89b4fa;text-decoration:none}html.theme--catppuccin-mocha .button.is-ghost:hover,html.theme--catppuccin-mocha .button.is-ghost.is-hovered{color:#89b4fa;text-decoration:underline}html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:hover,html.theme--catppuccin-mocha .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus,html.theme--catppuccin-mocha .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white:focus:not(:active),html.theme--catppuccin-mocha .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .button.is-white:active,html.theme--catppuccin-mocha .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--catppuccin-mocha .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:hover,html.theme--catppuccin-mocha .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus,html.theme--catppuccin-mocha .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black:focus:not(:active),html.theme--catppuccin-mocha .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .button.is-black:active,html.theme--catppuccin-mocha .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-black[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:hover,html.theme--catppuccin-mocha .button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus,html.theme--catppuccin-mocha .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light:focus:not(:active),html.theme--catppuccin-mocha .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .button.is-light:active,html.theme--catppuccin-mocha .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}html.theme--catppuccin-mocha .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-light.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)}html.theme--catppuccin-mocha .button.is-dark,html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:hover,html.theme--catppuccin-mocha .content kbd.button:hover,html.theme--catppuccin-mocha .button.is-dark.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-hovered{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus,html.theme--catppuccin-mocha .content kbd.button:focus,html.theme--catppuccin-mocha .button.is-dark.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark:focus:not(:active),html.theme--catppuccin-mocha .content kbd.button:focus:not(:active),html.theme--catppuccin-mocha .button.is-dark.is-focused:not(:active),html.theme--catppuccin-mocha .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .button.is-dark:active,html.theme--catppuccin-mocha .content kbd.button:active,html.theme--catppuccin-mocha .button.is-dark.is-active,html.theme--catppuccin-mocha .content kbd.button.is-active{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-dark[disabled],html.theme--catppuccin-mocha .content kbd.button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button{background-color:#313244;border-color:#313244;box-shadow:none}html.theme--catppuccin-mocha .button.is-dark.is-inverted,html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-dark.is-inverted[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-focused{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-dark.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-outlined{background-color:transparent;border-color:#313244;box-shadow:none;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#313244}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #313244 #313244 !important}html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:hover,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary:focus:not(:active),html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--catppuccin-mocha .button.is-primary.is-focused:not(:active),html.theme--catppuccin-mocha .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-primary:active,html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-active,html.theme--catppuccin-mocha .docstring>section>a.button.is-active.docs-sourcelink{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-primary[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-primary.is-inverted,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-primary.is-inverted[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-loading::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-outlined:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-outlined:focus,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-primary.is-outlined[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined[disabled],html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--catppuccin-mocha .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-primary.is-light,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:hover,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--catppuccin-mocha .button.is-primary.is-light.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-primary.is-light:active,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--catppuccin-mocha .button.is-primary.is-light.is-active,html.theme--catppuccin-mocha .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:hover,html.theme--catppuccin-mocha .button.is-link.is-hovered{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus,html.theme--catppuccin-mocha .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link:focus:not(:active),html.theme--catppuccin-mocha .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .button.is-link:active,html.theme--catppuccin-mocha .button.is-link.is-active{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-link[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link{background-color:#89b4fa;border-color:#89b4fa;box-shadow:none}html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-focused{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-outlined{background-color:transparent;border-color:#89b4fa;box-shadow:none;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #89b4fa #89b4fa !important}html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:hover,html.theme--catppuccin-mocha .button.is-link.is-light.is-hovered{background-color:#dfebfe;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-link.is-light:active,html.theme--catppuccin-mocha .button.is-link.is-light.is-active{background-color:#d3e3fd;border-color:transparent;color:#063c93}html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:hover,html.theme--catppuccin-mocha .button.is-info.is-hovered{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus,html.theme--catppuccin-mocha .button.is-info.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info:focus:not(:active),html.theme--catppuccin-mocha .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .button.is-info:active,html.theme--catppuccin-mocha .button.is-info.is-active{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info{background-color:#94e2d5;border-color:#94e2d5;box-shadow:none}html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-focused{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.is-outlined{background-color:transparent;border-color:#94e2d5;box-shadow:none;color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#94e2d5}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #94e2d5 #94e2d5 !important}html.theme--catppuccin-mocha .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-info.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)}html.theme--catppuccin-mocha .button.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:hover,html.theme--catppuccin-mocha .button.is-info.is-light.is-hovered{background-color:#e5f8f5;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-info.is-light:active,html.theme--catppuccin-mocha .button.is-info.is-light.is-active{background-color:#dbf5f1;border-color:transparent;color:#207466}html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:hover,html.theme--catppuccin-mocha .button.is-success.is-hovered{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus,html.theme--catppuccin-mocha .button.is-success.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success:focus:not(:active),html.theme--catppuccin-mocha .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .button.is-success:active,html.theme--catppuccin-mocha .button.is-success.is-active{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success{background-color:#a6e3a1;border-color:#a6e3a1;box-shadow:none}html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-focused{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.is-outlined{background-color:transparent;border-color:#a6e3a1;box-shadow:none;color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#a6e3a1}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #a6e3a1 #a6e3a1 !important}html.theme--catppuccin-mocha .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-success.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)}html.theme--catppuccin-mocha .button.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:hover,html.theme--catppuccin-mocha .button.is-success.is-light.is-hovered{background-color:#e7f7e5;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-success.is-light:active,html.theme--catppuccin-mocha .button.is-success.is-light.is-active{background-color:#def4dc;border-color:transparent;color:#287222}html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:hover,html.theme--catppuccin-mocha .button.is-warning.is-hovered{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus,html.theme--catppuccin-mocha .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning:focus:not(:active),html.theme--catppuccin-mocha .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .button.is-warning:active,html.theme--catppuccin-mocha .button.is-warning.is-active{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning{background-color:#f9e2af;border-color:#f9e2af;box-shadow:none}html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-focused{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .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}html.theme--catppuccin-mocha .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-warning.is-outlined{background-color:transparent;border-color:#f9e2af;box-shadow:none;color:#f9e2af}html.theme--catppuccin-mocha .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)}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f9e2af}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f9e2af #f9e2af !important}html.theme--catppuccin-mocha .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .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)}html.theme--catppuccin-mocha .button.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:hover,html.theme--catppuccin-mocha .button.is-warning.is-light.is-hovered{background-color:#fdf4e0;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-warning.is-light:active,html.theme--catppuccin-mocha .button.is-warning.is-light.is-active{background-color:#fcf0d4;border-color:transparent;color:#8a620a}html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:hover,html.theme--catppuccin-mocha .button.is-danger.is-hovered{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus,html.theme--catppuccin-mocha .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger:focus:not(:active),html.theme--catppuccin-mocha .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .button.is-danger:active,html.theme--catppuccin-mocha .button.is-danger.is-active{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .button.is-danger[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger{background-color:#f38ba8;border-color:#f38ba8;box-shadow:none}html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--catppuccin-mocha .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-focused{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--catppuccin-mocha .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-outlined{background-color:transparent;border-color:#f38ba8;box-shadow:none;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:hover,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined:focus,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f38ba8 #f38ba8 !important}html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--catppuccin-mocha .button.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:hover,html.theme--catppuccin-mocha .button.is-danger.is-light.is-hovered{background-color:#fce1e8;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-danger.is-light:active,html.theme--catppuccin-mocha .button.is-danger.is-light.is-active{background-color:#fbd5e0;border-color:transparent;color:#991036}html.theme--catppuccin-mocha .button.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--catppuccin-mocha .button.is-small:not(.is-rounded),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .button.is-normal{font-size:1rem}html.theme--catppuccin-mocha .button.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .button.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .button[disabled],fieldset[disabled] html.theme--catppuccin-mocha .button{background-color:#6c7086;border-color:#585b70;box-shadow:none;opacity:.5}html.theme--catppuccin-mocha .button.is-fullwidth{display:flex;width:100%}html.theme--catppuccin-mocha .button.is-loading{color:transparent !important;pointer-events:none}html.theme--catppuccin-mocha .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--catppuccin-mocha .button.is-static{background-color:#181825;border-color:#585b70;color:#7f849c;box-shadow:none;pointer-events:none}html.theme--catppuccin-mocha .button.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--catppuccin-mocha .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .buttons .button{margin-bottom:0.5rem}html.theme--catppuccin-mocha .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--catppuccin-mocha .buttons:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .buttons:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--catppuccin-mocha .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--catppuccin-mocha .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--catppuccin-mocha .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--catppuccin-mocha .buttons.has-addons .button:last-child{margin-right:0}html.theme--catppuccin-mocha .buttons.has-addons .button:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-hovered{z-index:2}html.theme--catppuccin-mocha .buttons.has-addons .button:focus,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused,html.theme--catppuccin-mocha .buttons.has-addons .button:active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected{z-index:3}html.theme--catppuccin-mocha .buttons.has-addons .button:focus:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-focused:hover,html.theme--catppuccin-mocha .buttons.has-addons .button:active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-active:hover,html.theme--catppuccin-mocha .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--catppuccin-mocha .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .buttons.is-centered{justify-content:center}html.theme--catppuccin-mocha .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--catppuccin-mocha .buttons.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .button.is-responsive.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--catppuccin-mocha .button.is-responsive,html.theme--catppuccin-mocha .button.is-responsive.is-normal{font-size:.75rem}html.theme--catppuccin-mocha .button.is-responsive.is-medium{font-size:1rem}html.theme--catppuccin-mocha .button.is-responsive.is-large{font-size:1.25rem}}html.theme--catppuccin-mocha .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--catppuccin-mocha .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--catppuccin-mocha .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--catppuccin-mocha .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--catppuccin-mocha .content li+li{margin-top:0.25em}html.theme--catppuccin-mocha .content p:not(:last-child),html.theme--catppuccin-mocha .content dl:not(:last-child),html.theme--catppuccin-mocha .content ol:not(:last-child),html.theme--catppuccin-mocha .content ul:not(:last-child),html.theme--catppuccin-mocha .content blockquote:not(:last-child),html.theme--catppuccin-mocha .content pre:not(:last-child),html.theme--catppuccin-mocha .content table:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .content h1,html.theme--catppuccin-mocha .content h2,html.theme--catppuccin-mocha .content h3,html.theme--catppuccin-mocha .content h4,html.theme--catppuccin-mocha .content h5,html.theme--catppuccin-mocha .content h6{color:#cdd6f4;font-weight:600;line-height:1.125}html.theme--catppuccin-mocha .content h1{font-size:2em;margin-bottom:0.5em}html.theme--catppuccin-mocha .content h1:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--catppuccin-mocha .content h2:not(:first-child){margin-top:1.1428em}html.theme--catppuccin-mocha .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--catppuccin-mocha .content h3:not(:first-child){margin-top:1.3333em}html.theme--catppuccin-mocha .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--catppuccin-mocha .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--catppuccin-mocha .content h6{font-size:1em;margin-bottom:1em}html.theme--catppuccin-mocha .content blockquote{background-color:#181825;border-left:5px solid #585b70;padding:1.25em 1.5em}html.theme--catppuccin-mocha .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ol:not([type]){list-style-type:decimal}html.theme--catppuccin-mocha .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--catppuccin-mocha .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--catppuccin-mocha .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--catppuccin-mocha .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--catppuccin-mocha .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--catppuccin-mocha .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--catppuccin-mocha .content ul ul ul{list-style-type:square}html.theme--catppuccin-mocha .content dd{margin-left:2em}html.theme--catppuccin-mocha .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--catppuccin-mocha .content figure:not(:first-child){margin-top:2em}html.theme--catppuccin-mocha .content figure:not(:last-child){margin-bottom:2em}html.theme--catppuccin-mocha .content figure img{display:inline-block}html.theme--catppuccin-mocha .content figure figcaption{font-style:italic}html.theme--catppuccin-mocha .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--catppuccin-mocha .content sup,html.theme--catppuccin-mocha .content sub{font-size:75%}html.theme--catppuccin-mocha .content table{width:100%}html.theme--catppuccin-mocha .content table td,html.theme--catppuccin-mocha .content table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .content table th{color:#b8c5ef}html.theme--catppuccin-mocha .content table th:not([align]){text-align:inherit}html.theme--catppuccin-mocha .content table thead td,html.theme--catppuccin-mocha .content table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .content table tfoot td,html.theme--catppuccin-mocha .content table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .content table tbody tr:last-child td,html.theme--catppuccin-mocha .content table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .content .tabs li+li{margin-top:0}html.theme--catppuccin-mocha .content.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--catppuccin-mocha .content.is-normal{font-size:1rem}html.theme--catppuccin-mocha .content.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .content.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--catppuccin-mocha .icon.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--catppuccin-mocha .icon.is-medium{height:2rem;width:2rem}html.theme--catppuccin-mocha .icon.is-large{height:3rem;width:3rem}html.theme--catppuccin-mocha .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--catppuccin-mocha .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--catppuccin-mocha .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--catppuccin-mocha div.icon-text{display:flex}html.theme--catppuccin-mocha .image,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--catppuccin-mocha .image img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--catppuccin-mocha .image img.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--catppuccin-mocha .image.is-fullwidth,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--catppuccin-mocha .image.is-square img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--catppuccin-mocha .image.is-square .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--catppuccin-mocha .image.is-1by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--catppuccin-mocha .image.is-1by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--catppuccin-mocha .image.is-5by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--catppuccin-mocha .image.is-5by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--catppuccin-mocha .image.is-4by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--catppuccin-mocha .image.is-4by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--catppuccin-mocha .image.is-3by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--catppuccin-mocha .image.is-5by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--catppuccin-mocha .image.is-5by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--catppuccin-mocha .image.is-16by9 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--catppuccin-mocha .image.is-16by9 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--catppuccin-mocha .image.is-2by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--catppuccin-mocha .image.is-2by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--catppuccin-mocha .image.is-3by1 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--catppuccin-mocha .image.is-3by1 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--catppuccin-mocha .image.is-4by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--catppuccin-mocha .image.is-4by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--catppuccin-mocha .image.is-3by4 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--catppuccin-mocha .image.is-3by4 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--catppuccin-mocha .image.is-2by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--catppuccin-mocha .image.is-2by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--catppuccin-mocha .image.is-3by5 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--catppuccin-mocha .image.is-3by5 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--catppuccin-mocha .image.is-9by16 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--catppuccin-mocha .image.is-9by16 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--catppuccin-mocha .image.is-1by2 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--catppuccin-mocha .image.is-1by2 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--catppuccin-mocha .image.is-1by3 img,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--catppuccin-mocha .image.is-1by3 .has-ratio,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--catppuccin-mocha .image.is-square,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--catppuccin-mocha .image.is-1by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--catppuccin-mocha .image.is-5by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--catppuccin-mocha .image.is-4by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--catppuccin-mocha .image.is-3by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--catppuccin-mocha .image.is-5by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--catppuccin-mocha .image.is-16by9,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--catppuccin-mocha .image.is-2by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--catppuccin-mocha .image.is-3by1,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--catppuccin-mocha .image.is-4by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--catppuccin-mocha .image.is-3by4,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--catppuccin-mocha .image.is-2by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--catppuccin-mocha .image.is-3by5,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--catppuccin-mocha .image.is-9by16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--catppuccin-mocha .image.is-1by2,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--catppuccin-mocha .image.is-1by3,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--catppuccin-mocha .image.is-16x16,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--catppuccin-mocha .image.is-24x24,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--catppuccin-mocha .image.is-32x32,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--catppuccin-mocha .image.is-48x48,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--catppuccin-mocha .image.is-64x64,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--catppuccin-mocha .image.is-96x96,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--catppuccin-mocha .image.is-128x128,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--catppuccin-mocha .notification{background-color:#181825;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--catppuccin-mocha .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .notification strong{color:currentColor}html.theme--catppuccin-mocha .notification code,html.theme--catppuccin-mocha .notification pre{background:#fff}html.theme--catppuccin-mocha .notification pre code{background:transparent}html.theme--catppuccin-mocha .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--catppuccin-mocha .notification .title,html.theme--catppuccin-mocha .notification .subtitle,html.theme--catppuccin-mocha .notification .content{color:currentColor}html.theme--catppuccin-mocha .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-dark,html.theme--catppuccin-mocha .content kbd.notification{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .notification.is-primary,html.theme--catppuccin-mocha .docstring>section>a.notification.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-primary.is-light,html.theme--catppuccin-mocha .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .notification.is-link.is-light{background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .notification.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-info.is-light{background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .notification.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-success.is-light{background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .notification.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .notification.is-warning.is-light{background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .notification.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .notification.is-danger.is-light{background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--catppuccin-mocha .progress::-webkit-progress-bar{background-color:#45475a}html.theme--catppuccin-mocha .progress::-webkit-progress-value{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-moz-progress-bar{background-color:#7f849c}html.theme--catppuccin-mocha .progress::-ms-fill{background-color:#7f849c;border:none}html.theme--catppuccin-mocha .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white::-ms-fill{background-color:#fff}html.theme--catppuccin-mocha .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--catppuccin-mocha .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-light::-webkit-progress-value{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-moz-progress-bar{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light::-ms-fill{background-color:#f5f5f5}html.theme--catppuccin-mocha .progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-dark::-webkit-progress-value,html.theme--catppuccin-mocha .content kbd.progress::-webkit-progress-value{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-moz-progress-bar,html.theme--catppuccin-mocha .content kbd.progress::-moz-progress-bar{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark::-ms-fill,html.theme--catppuccin-mocha .content kbd.progress::-ms-fill{background-color:#313244}html.theme--catppuccin-mocha .progress.is-dark:indeterminate,html.theme--catppuccin-mocha .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #313244 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-primary::-webkit-progress-value,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-moz-progress-bar,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary::-ms-fill,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-primary:indeterminate,html.theme--catppuccin-mocha .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-link::-webkit-progress-value{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-moz-progress-bar{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link::-ms-fill{background-color:#89b4fa}html.theme--catppuccin-mocha .progress.is-link:indeterminate{background-image:linear-gradient(to right, #89b4fa 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-info::-webkit-progress-value{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-moz-progress-bar{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info::-ms-fill{background-color:#94e2d5}html.theme--catppuccin-mocha .progress.is-info:indeterminate{background-image:linear-gradient(to right, #94e2d5 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-success::-webkit-progress-value{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-moz-progress-bar{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success::-ms-fill{background-color:#a6e3a1}html.theme--catppuccin-mocha .progress.is-success:indeterminate{background-image:linear-gradient(to right, #a6e3a1 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-warning::-webkit-progress-value{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-moz-progress-bar{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning::-ms-fill{background-color:#f9e2af}html.theme--catppuccin-mocha .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f9e2af 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress.is-danger::-webkit-progress-value{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-moz-progress-bar{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger::-ms-fill{background-color:#f38ba8}html.theme--catppuccin-mocha .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #f38ba8 30%, #45475a 30%)}html.theme--catppuccin-mocha .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#45475a;background-image:linear-gradient(to right, #cdd6f4 30%, #45475a 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--catppuccin-mocha .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--catppuccin-mocha .progress:indeterminate::-ms-fill{animation-name:none}html.theme--catppuccin-mocha .progress.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--catppuccin-mocha .progress.is-medium{height:1.25rem}html.theme--catppuccin-mocha .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--catppuccin-mocha .table{background-color:#45475a;color:#cdd6f4}html.theme--catppuccin-mocha .table td,html.theme--catppuccin-mocha .table th{border:1px solid #585b70;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--catppuccin-mocha .table td.is-white,html.theme--catppuccin-mocha .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .table td.is-black,html.theme--catppuccin-mocha .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .table td.is-light,html.theme--catppuccin-mocha .table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-dark,html.theme--catppuccin-mocha .table th.is-dark{background-color:#313244;border-color:#313244;color:#fff}html.theme--catppuccin-mocha .table td.is-primary,html.theme--catppuccin-mocha .table th.is-primary{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-link,html.theme--catppuccin-mocha .table th.is-link{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-info,html.theme--catppuccin-mocha .table th.is-info{background-color:#94e2d5;border-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-success,html.theme--catppuccin-mocha .table th.is-success{background-color:#a6e3a1;border-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-warning,html.theme--catppuccin-mocha .table th.is-warning{background-color:#f9e2af;border-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .table td.is-danger,html.theme--catppuccin-mocha .table th.is-danger{background-color:#f38ba8;border-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .table td.is-narrow,html.theme--catppuccin-mocha .table th.is-narrow{white-space:nowrap;width:1%}html.theme--catppuccin-mocha .table td.is-selected,html.theme--catppuccin-mocha .table th.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table td.is-selected a,html.theme--catppuccin-mocha .table td.is-selected strong,html.theme--catppuccin-mocha .table th.is-selected a,html.theme--catppuccin-mocha .table th.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table td.is-vcentered,html.theme--catppuccin-mocha .table th.is-vcentered{vertical-align:middle}html.theme--catppuccin-mocha .table th{color:#b8c5ef}html.theme--catppuccin-mocha .table th:not([align]){text-align:left}html.theme--catppuccin-mocha .table tr.is-selected{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .table tr.is-selected a,html.theme--catppuccin-mocha .table tr.is-selected strong{color:currentColor}html.theme--catppuccin-mocha .table tr.is-selected td,html.theme--catppuccin-mocha .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--catppuccin-mocha .table thead{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table thead td,html.theme--catppuccin-mocha .table thead th{border-width:0 0 2px;color:#b8c5ef}html.theme--catppuccin-mocha .table tfoot{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tfoot td,html.theme--catppuccin-mocha .table tfoot th{border-width:2px 0 0;color:#b8c5ef}html.theme--catppuccin-mocha .table tbody{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .table tbody tr:last-child td,html.theme--catppuccin-mocha .table tbody tr:last-child th{border-bottom-width:0}html.theme--catppuccin-mocha .table.is-bordered td,html.theme--catppuccin-mocha .table.is-bordered th{border-width:1px}html.theme--catppuccin-mocha .table.is-bordered tr:last-child td,html.theme--catppuccin-mocha .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--catppuccin-mocha .table.is-fullwidth{width:100%}html.theme--catppuccin-mocha .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#313244}html.theme--catppuccin-mocha .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#35364a}html.theme--catppuccin-mocha .table.is-narrow td,html.theme--catppuccin-mocha .table.is-narrow th{padding:0.25em 0.5em}html.theme--catppuccin-mocha .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#313244}html.theme--catppuccin-mocha .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--catppuccin-mocha .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .tags .tag,html.theme--catppuccin-mocha .tags .content kbd,html.theme--catppuccin-mocha .content .tags kbd,html.theme--catppuccin-mocha .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--catppuccin-mocha .tags .tag:not(:last-child),html.theme--catppuccin-mocha .tags .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags kbd:not(:last-child),html.theme--catppuccin-mocha .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--catppuccin-mocha .tags:last-child{margin-bottom:-0.5rem}html.theme--catppuccin-mocha .tags:not(:last-child){margin-bottom:1rem}html.theme--catppuccin-mocha .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--catppuccin-mocha .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--catppuccin-mocha .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--catppuccin-mocha .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--catppuccin-mocha .tags.is-centered{justify-content:center}html.theme--catppuccin-mocha .tags.is-centered .tag,html.theme--catppuccin-mocha .tags.is-centered .content kbd,html.theme--catppuccin-mocha .content .tags.is-centered kbd,html.theme--catppuccin-mocha .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--catppuccin-mocha .tags.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .tags.is-right .tag:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:first-child),html.theme--catppuccin-mocha .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--catppuccin-mocha .tags.is-right .tag:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.is-right kbd:not(:last-child),html.theme--catppuccin-mocha .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag,html.theme--catppuccin-mocha .tags.has-addons .content kbd,html.theme--catppuccin-mocha .content .tags.has-addons kbd,html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:first-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:first-child),html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--catppuccin-mocha .tags.has-addons .tag:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .content kbd:not(:last-child),html.theme--catppuccin-mocha .content .tags.has-addons kbd:not(:last-child),html.theme--catppuccin-mocha .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--catppuccin-mocha .tag:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#181825;border-radius:.4em;color:#cdd6f4;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}html.theme--catppuccin-mocha .tag:not(body) .delete,html.theme--catppuccin-mocha .content kbd:not(body) .delete,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--catppuccin-mocha .tag.is-white:not(body),html.theme--catppuccin-mocha .content kbd.is-white:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .tag.is-black:not(body),html.theme--catppuccin-mocha .content kbd.is-black:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .tag.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-dark:not(body),html.theme--catppuccin-mocha .content kbd:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--catppuccin-mocha .content .docstring>section>kbd:not(body){background-color:#313244;color:#fff}html.theme--catppuccin-mocha .tag.is-primary:not(body),html.theme--catppuccin-mocha .content kbd.is-primary:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-primary.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-primary.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .tag.is-link.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-link.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#ebf3fe;color:#063c93}html.theme--catppuccin-mocha .tag.is-info:not(body),html.theme--catppuccin-mocha .content kbd.is-info:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-info.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-info.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#effbf9;color:#207466}html.theme--catppuccin-mocha .tag.is-success:not(body),html.theme--catppuccin-mocha .content kbd.is-success:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-success.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-success.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#f0faef;color:#287222}html.theme--catppuccin-mocha .tag.is-warning:not(body),html.theme--catppuccin-mocha .content kbd.is-warning:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .tag.is-warning.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-warning.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fef8ec;color:#8a620a}html.theme--catppuccin-mocha .tag.is-danger:not(body),html.theme--catppuccin-mocha .content kbd.is-danger:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .tag.is-danger.is-light:not(body),html.theme--catppuccin-mocha .content kbd.is-danger.is-light:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdedf1;color:#991036}html.theme--catppuccin-mocha .tag.is-normal:not(body),html.theme--catppuccin-mocha .content kbd.is-normal:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--catppuccin-mocha .tag.is-medium:not(body),html.theme--catppuccin-mocha .content kbd.is-medium:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--catppuccin-mocha .tag.is-large:not(body),html.theme--catppuccin-mocha .content kbd.is-large:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--catppuccin-mocha .tag:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--catppuccin-mocha .tag:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .content kbd:not(body) .icon:first-child:last-child,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--catppuccin-mocha .tag.is-delete:not(body),html.theme--catppuccin-mocha .content kbd.is-delete:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha .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--catppuccin-mocha .tag.is-delete:not(body)::before,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::before,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--catppuccin-mocha .tag.is-delete:not(body)::after,html.theme--catppuccin-mocha .content kbd.is-delete:not(body)::after,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--catppuccin-mocha .tag.is-delete:not(body):hover,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):hover,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--catppuccin-mocha .tag.is-delete:not(body):focus,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):focus,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#0e0e16}html.theme--catppuccin-mocha .tag.is-delete:not(body):active,html.theme--catppuccin-mocha .content kbd.is-delete:not(body):active,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#040406}html.theme--catppuccin-mocha .tag.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--catppuccin-mocha .content kbd.is-rounded:not(body),html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--catppuccin-mocha a.tag:hover,html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--catppuccin-mocha .title,html.theme--catppuccin-mocha .subtitle{word-break:break-word}html.theme--catppuccin-mocha .title em,html.theme--catppuccin-mocha .title span,html.theme--catppuccin-mocha .subtitle em,html.theme--catppuccin-mocha .subtitle span{font-weight:inherit}html.theme--catppuccin-mocha .title sub,html.theme--catppuccin-mocha .subtitle sub{font-size:.75em}html.theme--catppuccin-mocha .title sup,html.theme--catppuccin-mocha .subtitle sup{font-size:.75em}html.theme--catppuccin-mocha .title .tag,html.theme--catppuccin-mocha .title .content kbd,html.theme--catppuccin-mocha .content .title kbd,html.theme--catppuccin-mocha .title .docstring>section>a.docs-sourcelink,html.theme--catppuccin-mocha .subtitle .tag,html.theme--catppuccin-mocha .subtitle .content kbd,html.theme--catppuccin-mocha .content .subtitle kbd,html.theme--catppuccin-mocha .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--catppuccin-mocha .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--catppuccin-mocha .title strong{color:inherit;font-weight:inherit}html.theme--catppuccin-mocha .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--catppuccin-mocha .title.is-1{font-size:3rem}html.theme--catppuccin-mocha .title.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .title.is-3{font-size:2rem}html.theme--catppuccin-mocha .title.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .title.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .title.is-6{font-size:1rem}html.theme--catppuccin-mocha .title.is-7{font-size:.75rem}html.theme--catppuccin-mocha .subtitle{color:#6c7086;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--catppuccin-mocha .subtitle strong{color:#6c7086;font-weight:600}html.theme--catppuccin-mocha .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--catppuccin-mocha .subtitle.is-1{font-size:3rem}html.theme--catppuccin-mocha .subtitle.is-2{font-size:2.5rem}html.theme--catppuccin-mocha .subtitle.is-3{font-size:2rem}html.theme--catppuccin-mocha .subtitle.is-4{font-size:1.5rem}html.theme--catppuccin-mocha .subtitle.is-5{font-size:1.25rem}html.theme--catppuccin-mocha .subtitle.is-6{font-size:1rem}html.theme--catppuccin-mocha .subtitle.is-7{font-size:.75rem}html.theme--catppuccin-mocha .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--catppuccin-mocha .number{align-items:center;background-color:#181825;border-radius:9999px;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--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#1e1e2e;border-color:#585b70;border-radius:.4em;color:#7f849c}html.theme--catppuccin-mocha .select select::-moz-placeholder,html.theme--catppuccin-mocha .textarea::-moz-placeholder,html.theme--catppuccin-mocha .input::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,html.theme--catppuccin-mocha .input::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-moz-placeholder,html.theme--catppuccin-mocha .textarea:-moz-placeholder,html.theme--catppuccin-mocha .input:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,html.theme--catppuccin-mocha .input:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--catppuccin-mocha .select select:hover,html.theme--catppuccin-mocha .textarea:hover,html.theme--catppuccin-mocha .input:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:hover,html.theme--catppuccin-mocha .select select.is-hovered,html.theme--catppuccin-mocha .is-hovered.textarea,html.theme--catppuccin-mocha .is-hovered.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#6c7086}html.theme--catppuccin-mocha .select select:focus,html.theme--catppuccin-mocha .textarea:focus,html.theme--catppuccin-mocha .input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:focus,html.theme--catppuccin-mocha .select select.is-focused,html.theme--catppuccin-mocha .is-focused.textarea,html.theme--catppuccin-mocha .is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .select select:active,html.theme--catppuccin-mocha .textarea:active,html.theme--catppuccin-mocha .input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:active,html.theme--catppuccin-mocha .select select.is-active,html.theme--catppuccin-mocha .is-active.textarea,html.theme--catppuccin-mocha .is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#89b4fa;box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select select[disabled],html.theme--catppuccin-mocha .textarea[disabled],html.theme--catppuccin-mocha .input[disabled],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--catppuccin-mocha .select select,fieldset[disabled] html.theme--catppuccin-mocha .textarea,fieldset[disabled] html.theme--catppuccin-mocha .input,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{background-color:#6c7086;border-color:#181825;box-shadow:none;color:#f7f8fd}html.theme--catppuccin-mocha .select select[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]::-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha .input[disabled]::-webkit-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input::-webkit-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-moz-placeholder,html.theme--catppuccin-mocha .input[disabled]:-moz-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-moz-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .select select[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .textarea[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha .input[disabled]:-ms-input-placeholder,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .select select:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha .input:-ms-input-placeholder,fieldset[disabled] html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(247,248,253,0.3)}html.theme--catppuccin-mocha .textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--catppuccin-mocha .textarea[readonly],html.theme--catppuccin-mocha .input[readonly],html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--catppuccin-mocha .is-white.textarea,html.theme--catppuccin-mocha .is-white.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--catppuccin-mocha .is-white.textarea:focus,html.theme--catppuccin-mocha .is-white.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--catppuccin-mocha .is-white.is-focused.textarea,html.theme--catppuccin-mocha .is-white.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-white.textarea:active,html.theme--catppuccin-mocha .is-white.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--catppuccin-mocha .is-white.is-active.textarea,html.theme--catppuccin-mocha .is-white.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .is-black.textarea,html.theme--catppuccin-mocha .is-black.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--catppuccin-mocha .is-black.textarea:focus,html.theme--catppuccin-mocha .is-black.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--catppuccin-mocha .is-black.is-focused.textarea,html.theme--catppuccin-mocha .is-black.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-black.textarea:active,html.theme--catppuccin-mocha .is-black.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--catppuccin-mocha .is-black.is-active.textarea,html.theme--catppuccin-mocha .is-black.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .is-light.textarea,html.theme--catppuccin-mocha .is-light.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}html.theme--catppuccin-mocha .is-light.textarea:focus,html.theme--catppuccin-mocha .is-light.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--catppuccin-mocha .is-light.is-focused.textarea,html.theme--catppuccin-mocha .is-light.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-light.textarea:active,html.theme--catppuccin-mocha .is-light.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--catppuccin-mocha .is-light.is-active.textarea,html.theme--catppuccin-mocha .is-light.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .is-dark.textarea,html.theme--catppuccin-mocha .content kbd.textarea,html.theme--catppuccin-mocha .is-dark.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--catppuccin-mocha .content kbd.input{border-color:#313244}html.theme--catppuccin-mocha .is-dark.textarea:focus,html.theme--catppuccin-mocha .content kbd.textarea:focus,html.theme--catppuccin-mocha .is-dark.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--catppuccin-mocha .content kbd.input:focus,html.theme--catppuccin-mocha .is-dark.is-focused.textarea,html.theme--catppuccin-mocha .content kbd.is-focused.textarea,html.theme--catppuccin-mocha .is-dark.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .content kbd.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-dark.textarea:active,html.theme--catppuccin-mocha .content kbd.textarea:active,html.theme--catppuccin-mocha .is-dark.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--catppuccin-mocha .content kbd.input:active,html.theme--catppuccin-mocha .is-dark.is-active.textarea,html.theme--catppuccin-mocha .content kbd.is-active.textarea,html.theme--catppuccin-mocha .is-dark.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .content kbd.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .is-primary.textarea,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink{border-color:#89b4fa}html.theme--catppuccin-mocha .is-primary.textarea:focus,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink:focus,html.theme--catppuccin-mocha .is-primary.is-focused.textarea,html.theme--catppuccin-mocha .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.textarea:active,html.theme--catppuccin-mocha .docstring>section>a.textarea.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--catppuccin-mocha .docstring>section>a.input.docs-sourcelink:active,html.theme--catppuccin-mocha .is-primary.is-active.textarea,html.theme--catppuccin-mocha .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--catppuccin-mocha .is-primary.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--catppuccin-mocha .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-link.textarea,html.theme--catppuccin-mocha .is-link.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#89b4fa}html.theme--catppuccin-mocha .is-link.textarea:focus,html.theme--catppuccin-mocha .is-link.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--catppuccin-mocha .is-link.is-focused.textarea,html.theme--catppuccin-mocha .is-link.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-link.textarea:active,html.theme--catppuccin-mocha .is-link.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--catppuccin-mocha .is-link.is-active.textarea,html.theme--catppuccin-mocha .is-link.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .is-info.textarea,html.theme--catppuccin-mocha .is-info.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#94e2d5}html.theme--catppuccin-mocha .is-info.textarea:focus,html.theme--catppuccin-mocha .is-info.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--catppuccin-mocha .is-info.is-focused.textarea,html.theme--catppuccin-mocha .is-info.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-info.textarea:active,html.theme--catppuccin-mocha .is-info.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--catppuccin-mocha .is-info.is-active.textarea,html.theme--catppuccin-mocha .is-info.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .is-success.textarea,html.theme--catppuccin-mocha .is-success.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#a6e3a1}html.theme--catppuccin-mocha .is-success.textarea:focus,html.theme--catppuccin-mocha .is-success.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--catppuccin-mocha .is-success.is-focused.textarea,html.theme--catppuccin-mocha .is-success.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-success.textarea:active,html.theme--catppuccin-mocha .is-success.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--catppuccin-mocha .is-success.is-active.textarea,html.theme--catppuccin-mocha .is-success.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .is-warning.textarea,html.theme--catppuccin-mocha .is-warning.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#f9e2af}html.theme--catppuccin-mocha .is-warning.textarea:focus,html.theme--catppuccin-mocha .is-warning.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--catppuccin-mocha .is-warning.is-focused.textarea,html.theme--catppuccin-mocha .is-warning.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-warning.textarea:active,html.theme--catppuccin-mocha .is-warning.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--catppuccin-mocha .is-warning.is-active.textarea,html.theme--catppuccin-mocha .is-warning.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .is-danger.textarea,html.theme--catppuccin-mocha .is-danger.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#f38ba8}html.theme--catppuccin-mocha .is-danger.textarea:focus,html.theme--catppuccin-mocha .is-danger.input:focus,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--catppuccin-mocha .is-danger.is-focused.textarea,html.theme--catppuccin-mocha .is-danger.is-focused.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--catppuccin-mocha .is-danger.textarea:active,html.theme--catppuccin-mocha .is-danger.input:active,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--catppuccin-mocha .is-danger.is-active.textarea,html.theme--catppuccin-mocha .is-danger.is-active.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .is-small.textarea,html.theme--catppuccin-mocha .is-small.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .is-medium.textarea,html.theme--catppuccin-mocha .is-medium.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .is-large.textarea,html.theme--catppuccin-mocha .is-large.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .is-fullwidth.textarea,html.theme--catppuccin-mocha .is-fullwidth.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--catppuccin-mocha .is-inline.textarea,html.theme--catppuccin-mocha .is-inline.input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--catppuccin-mocha .input.is-rounded,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--catppuccin-mocha .input.is-static,html.theme--catppuccin-mocha #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--catppuccin-mocha .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--catppuccin-mocha .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--catppuccin-mocha .textarea[rows]{height:initial}html.theme--catppuccin-mocha .textarea.has-fixed-size{resize:none}html.theme--catppuccin-mocha .radio,html.theme--catppuccin-mocha .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--catppuccin-mocha .radio input,html.theme--catppuccin-mocha .checkbox input{cursor:pointer}html.theme--catppuccin-mocha .radio:hover,html.theme--catppuccin-mocha .checkbox:hover{color:#89dceb}html.theme--catppuccin-mocha .radio[disabled],html.theme--catppuccin-mocha .checkbox[disabled],fieldset[disabled] html.theme--catppuccin-mocha .radio,fieldset[disabled] html.theme--catppuccin-mocha .checkbox,html.theme--catppuccin-mocha .radio input[disabled],html.theme--catppuccin-mocha .checkbox input[disabled]{color:#f7f8fd;cursor:not-allowed}html.theme--catppuccin-mocha .radio+.radio{margin-left:.5em}html.theme--catppuccin-mocha .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--catppuccin-mocha .select:not(.is-multiple){height:2.5em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading)::after{border-color:#89b4fa;right:1.125em;z-index:4}html.theme--catppuccin-mocha .select.is-rounded select,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--catppuccin-mocha .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--catppuccin-mocha .select select::-ms-expand{display:none}html.theme--catppuccin-mocha .select select[disabled]:hover,fieldset[disabled] html.theme--catppuccin-mocha .select select:hover{border-color:#181825}html.theme--catppuccin-mocha .select select:not([multiple]){padding-right:2.5em}html.theme--catppuccin-mocha .select select[multiple]{height:auto;padding:0}html.theme--catppuccin-mocha .select select[multiple] option{padding:0.5em 1em}html.theme--catppuccin-mocha .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#89dceb}html.theme--catppuccin-mocha .select.is-white:not(:hover)::after{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select{border-color:#fff}html.theme--catppuccin-mocha .select.is-white select:hover,html.theme--catppuccin-mocha .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--catppuccin-mocha .select.is-white select:focus,html.theme--catppuccin-mocha .select.is-white select.is-focused,html.theme--catppuccin-mocha .select.is-white select:active,html.theme--catppuccin-mocha .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--catppuccin-mocha .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select{border-color:#0a0a0a}html.theme--catppuccin-mocha .select.is-black select:hover,html.theme--catppuccin-mocha .select.is-black select.is-hovered{border-color:#000}html.theme--catppuccin-mocha .select.is-black select:focus,html.theme--catppuccin-mocha .select.is-black select.is-focused,html.theme--catppuccin-mocha .select.is-black select:active,html.theme--catppuccin-mocha .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--catppuccin-mocha .select.is-light:not(:hover)::after{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select{border-color:#f5f5f5}html.theme--catppuccin-mocha .select.is-light select:hover,html.theme--catppuccin-mocha .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--catppuccin-mocha .select.is-light select:focus,html.theme--catppuccin-mocha .select.is-light select.is-focused,html.theme--catppuccin-mocha .select.is-light select:active,html.theme--catppuccin-mocha .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--catppuccin-mocha .select.is-dark:not(:hover)::after,html.theme--catppuccin-mocha .content kbd.select:not(:hover)::after{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select,html.theme--catppuccin-mocha .content kbd.select select{border-color:#313244}html.theme--catppuccin-mocha .select.is-dark select:hover,html.theme--catppuccin-mocha .content kbd.select select:hover,html.theme--catppuccin-mocha .select.is-dark select.is-hovered,html.theme--catppuccin-mocha .content kbd.select select.is-hovered{border-color:#262735}html.theme--catppuccin-mocha .select.is-dark select:focus,html.theme--catppuccin-mocha .content kbd.select select:focus,html.theme--catppuccin-mocha .select.is-dark select.is-focused,html.theme--catppuccin-mocha .content kbd.select select.is-focused,html.theme--catppuccin-mocha .select.is-dark select:active,html.theme--catppuccin-mocha .content kbd.select select:active,html.theme--catppuccin-mocha .select.is-dark select.is-active,html.theme--catppuccin-mocha .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(49,50,68,0.25)}html.theme--catppuccin-mocha .select.is-primary:not(:hover)::after,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-primary select:hover,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:hover,html.theme--catppuccin-mocha .select.is-primary select.is-hovered,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-primary select:focus,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:focus,html.theme--catppuccin-mocha .select.is-primary select.is-focused,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--catppuccin-mocha .select.is-primary select:active,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select:active,html.theme--catppuccin-mocha .select.is-primary select.is-active,html.theme--catppuccin-mocha .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-link:not(:hover)::after{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select{border-color:#89b4fa}html.theme--catppuccin-mocha .select.is-link select:hover,html.theme--catppuccin-mocha .select.is-link select.is-hovered{border-color:#71a4f9}html.theme--catppuccin-mocha .select.is-link select:focus,html.theme--catppuccin-mocha .select.is-link select.is-focused,html.theme--catppuccin-mocha .select.is-link select:active,html.theme--catppuccin-mocha .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(137,180,250,0.25)}html.theme--catppuccin-mocha .select.is-info:not(:hover)::after{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select{border-color:#94e2d5}html.theme--catppuccin-mocha .select.is-info select:hover,html.theme--catppuccin-mocha .select.is-info select.is-hovered{border-color:#80ddcd}html.theme--catppuccin-mocha .select.is-info select:focus,html.theme--catppuccin-mocha .select.is-info select.is-focused,html.theme--catppuccin-mocha .select.is-info select:active,html.theme--catppuccin-mocha .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(148,226,213,0.25)}html.theme--catppuccin-mocha .select.is-success:not(:hover)::after{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select{border-color:#a6e3a1}html.theme--catppuccin-mocha .select.is-success select:hover,html.theme--catppuccin-mocha .select.is-success select.is-hovered{border-color:#93dd8d}html.theme--catppuccin-mocha .select.is-success select:focus,html.theme--catppuccin-mocha .select.is-success select.is-focused,html.theme--catppuccin-mocha .select.is-success select:active,html.theme--catppuccin-mocha .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(166,227,161,0.25)}html.theme--catppuccin-mocha .select.is-warning:not(:hover)::after{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select{border-color:#f9e2af}html.theme--catppuccin-mocha .select.is-warning select:hover,html.theme--catppuccin-mocha .select.is-warning select.is-hovered{border-color:#f7d997}html.theme--catppuccin-mocha .select.is-warning select:focus,html.theme--catppuccin-mocha .select.is-warning select.is-focused,html.theme--catppuccin-mocha .select.is-warning select:active,html.theme--catppuccin-mocha .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(249,226,175,0.25)}html.theme--catppuccin-mocha .select.is-danger:not(:hover)::after{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select{border-color:#f38ba8}html.theme--catppuccin-mocha .select.is-danger select:hover,html.theme--catppuccin-mocha .select.is-danger select.is-hovered{border-color:#f17497}html.theme--catppuccin-mocha .select.is-danger select:focus,html.theme--catppuccin-mocha .select.is-danger select.is-focused,html.theme--catppuccin-mocha .select.is-danger select:active,html.theme--catppuccin-mocha .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(243,139,168,0.25)}html.theme--catppuccin-mocha .select.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--catppuccin-mocha .select.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .select.is-disabled::after{border-color:#f7f8fd !important;opacity:0.5}html.theme--catppuccin-mocha .select.is-fullwidth{width:100%}html.theme--catppuccin-mocha .select.is-fullwidth select{width:100%}html.theme--catppuccin-mocha .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--catppuccin-mocha .select.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .select.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--catppuccin-mocha .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:hover .file-cta,html.theme--catppuccin-mocha .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-white:focus .file-cta,html.theme--catppuccin-mocha .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--catppuccin-mocha .file.is-white:active .file-cta,html.theme--catppuccin-mocha .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--catppuccin-mocha .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:hover .file-cta,html.theme--catppuccin-mocha .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-black:focus .file-cta,html.theme--catppuccin-mocha .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--catppuccin-mocha .file.is-black:active .file-cta,html.theme--catppuccin-mocha .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:hover .file-cta,html.theme--catppuccin-mocha .file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:focus .file-cta,html.theme--catppuccin-mocha .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-light:active .file-cta,html.theme--catppuccin-mocha .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-dark .file-cta,html.theme--catppuccin-mocha .content kbd.file .file-cta{background-color:#313244;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:hover .file-cta,html.theme--catppuccin-mocha .content kbd.file:hover .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-hovered .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-hovered .file-cta{background-color:#2c2d3d;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-dark:focus .file-cta,html.theme--catppuccin-mocha .content kbd.file:focus .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-focused .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(49,50,68,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-dark:active .file-cta,html.theme--catppuccin-mocha .content kbd.file:active .file-cta,html.theme--catppuccin-mocha .file.is-dark.is-active .file-cta,html.theme--catppuccin-mocha .content kbd.file.is-active .file-cta{background-color:#262735;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:hover .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-hovered .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-primary:focus .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-focused .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-primary:active .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--catppuccin-mocha .file.is-primary.is-active .file-cta,html.theme--catppuccin-mocha .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link .file-cta{background-color:#89b4fa;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:hover .file-cta,html.theme--catppuccin-mocha .file.is-link.is-hovered .file-cta{background-color:#7dacf9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-link:focus .file-cta,html.theme--catppuccin-mocha .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(137,180,250,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-link:active .file-cta,html.theme--catppuccin-mocha .file.is-link.is-active .file-cta{background-color:#71a4f9;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-info .file-cta{background-color:#94e2d5;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:hover .file-cta,html.theme--catppuccin-mocha .file.is-info.is-hovered .file-cta{background-color:#8adfd1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:focus .file-cta,html.theme--catppuccin-mocha .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(148,226,213,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-info:active .file-cta,html.theme--catppuccin-mocha .file.is-info.is-active .file-cta{background-color:#80ddcd;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success .file-cta{background-color:#a6e3a1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:hover .file-cta,html.theme--catppuccin-mocha .file.is-success.is-hovered .file-cta{background-color:#9de097;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:focus .file-cta,html.theme--catppuccin-mocha .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(166,227,161,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-success:active .file-cta,html.theme--catppuccin-mocha .file.is-success.is-active .file-cta{background-color:#93dd8d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning .file-cta{background-color:#f9e2af;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:hover .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-hovered .file-cta{background-color:#f8dea3;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:focus .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(249,226,175,0.25);color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-warning:active .file-cta,html.theme--catppuccin-mocha .file.is-warning.is-active .file-cta{background-color:#f7d997;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .file.is-danger .file-cta{background-color:#f38ba8;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:hover .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-hovered .file-cta{background-color:#f27f9f;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-danger:focus .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(243,139,168,0.25);color:#fff}html.theme--catppuccin-mocha .file.is-danger:active .file-cta,html.theme--catppuccin-mocha .file.is-danger.is-active .file-cta{background-color:#f17497;border-color:transparent;color:#fff}html.theme--catppuccin-mocha .file.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--catppuccin-mocha .file.is-normal{font-size:1rem}html.theme--catppuccin-mocha .file.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .file.is-medium .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .file.is-large .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--catppuccin-mocha .file.has-name.is-empty .file-name{display:none}html.theme--catppuccin-mocha .file.is-boxed .file-label{flex-direction:column}html.theme--catppuccin-mocha .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--catppuccin-mocha .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--catppuccin-mocha .file.is-boxed .file-icon .fa{font-size:21px}html.theme--catppuccin-mocha .file.is-boxed.is-small .file-icon .fa,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--catppuccin-mocha .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--catppuccin-mocha .file.is-centered{justify-content:center}html.theme--catppuccin-mocha .file.is-fullwidth .file-label{width:100%}html.theme--catppuccin-mocha .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--catppuccin-mocha .file.is-right{justify-content:flex-end}html.theme--catppuccin-mocha .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--catppuccin-mocha .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--catppuccin-mocha .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--catppuccin-mocha .file-label:hover .file-cta{background-color:#2c2d3d;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:hover .file-name{border-color:#525569}html.theme--catppuccin-mocha .file-label:active .file-cta{background-color:#262735;color:#b8c5ef}html.theme--catppuccin-mocha .file-label:active .file-name{border-color:#4d4f62}html.theme--catppuccin-mocha .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--catppuccin-mocha .file-cta,html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--catppuccin-mocha .file-cta{background-color:#313244;color:#cdd6f4}html.theme--catppuccin-mocha .file-name{border-color:#585b70;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--catppuccin-mocha .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--catppuccin-mocha .file-icon .fa{font-size:14px}html.theme--catppuccin-mocha .label{color:#b8c5ef;display:block;font-size:1rem;font-weight:700}html.theme--catppuccin-mocha .label:not(:last-child){margin-bottom:0.5em}html.theme--catppuccin-mocha .label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--catppuccin-mocha .label.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .label.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--catppuccin-mocha .help.is-white{color:#fff}html.theme--catppuccin-mocha .help.is-black{color:#0a0a0a}html.theme--catppuccin-mocha .help.is-light{color:#f5f5f5}html.theme--catppuccin-mocha .help.is-dark,html.theme--catppuccin-mocha .content kbd.help{color:#313244}html.theme--catppuccin-mocha .help.is-primary,html.theme--catppuccin-mocha .docstring>section>a.help.docs-sourcelink{color:#89b4fa}html.theme--catppuccin-mocha .help.is-link{color:#89b4fa}html.theme--catppuccin-mocha .help.is-info{color:#94e2d5}html.theme--catppuccin-mocha .help.is-success{color:#a6e3a1}html.theme--catppuccin-mocha .help.is-warning{color:#f9e2af}html.theme--catppuccin-mocha .help.is-danger{color:#f38ba8}html.theme--catppuccin-mocha .field:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.has-addons{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .button,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--catppuccin-mocha .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .button:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--catppuccin-mocha .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--catppuccin-mocha .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--catppuccin-mocha .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.has-addons.has-addons-centered{justify-content:center}html.theme--catppuccin-mocha .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped{display:flex;justify-content:flex-start}html.theme--catppuccin-mocha .field.is-grouped>.control{flex-shrink:0}html.theme--catppuccin-mocha .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--catppuccin-mocha .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field.is-horizontal{display:flex}}html.theme--catppuccin-mocha .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--catppuccin-mocha .field-label.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-normal{padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--catppuccin-mocha .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--catppuccin-mocha .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--catppuccin-mocha .field-body .field{margin-bottom:0}html.theme--catppuccin-mocha .field-body>.field{flex-shrink:1}html.theme--catppuccin-mocha .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--catppuccin-mocha .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--catppuccin-mocha .control.has-icons-left .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select:focus~.icon{color:#313244}html.theme--catppuccin-mocha .control.has-icons-left .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-small~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--catppuccin-mocha .control.has-icons-left .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-left .select.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--catppuccin-mocha .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon{color:#585b70;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--catppuccin-mocha .control.has-icons-left .input,html.theme--catppuccin-mocha .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-left .select select{padding-left:2.5em}html.theme--catppuccin-mocha .control.has-icons-left .icon.is-left{left:0}html.theme--catppuccin-mocha .control.has-icons-right .input,html.theme--catppuccin-mocha .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--catppuccin-mocha .control.has-icons-right .select select{padding-right:2.5em}html.theme--catppuccin-mocha .control.has-icons-right .icon.is-right{right:0}html.theme--catppuccin-mocha .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--catppuccin-mocha .control.is-loading.is-small:after,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--catppuccin-mocha .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--catppuccin-mocha .control.is-loading.is-large:after{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--catppuccin-mocha .breadcrumb a{align-items:center;color:#89b4fa;display:flex;justify-content:center;padding:0 .75em}html.theme--catppuccin-mocha .breadcrumb a:hover{color:#89dceb}html.theme--catppuccin-mocha .breadcrumb li{align-items:center;display:flex}html.theme--catppuccin-mocha .breadcrumb li:first-child a{padding-left:0}html.theme--catppuccin-mocha .breadcrumb li.is-active a{color:#b8c5ef;cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb li+li::before{color:#6c7086;content:"\0002f"}html.theme--catppuccin-mocha .breadcrumb ul,html.theme--catppuccin-mocha .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--catppuccin-mocha .breadcrumb .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .breadcrumb .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .breadcrumb.is-centered ol,html.theme--catppuccin-mocha .breadcrumb.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .breadcrumb.is-right ol,html.theme--catppuccin-mocha .breadcrumb.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .breadcrumb.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--catppuccin-mocha .breadcrumb.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .breadcrumb.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--catppuccin-mocha .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--catppuccin-mocha .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--catppuccin-mocha .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--catppuccin-mocha .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#cdd6f4;max-width:100%;position:relative}html.theme--catppuccin-mocha .card-footer:first-child,html.theme--catppuccin-mocha .card-content:first-child,html.theme--catppuccin-mocha .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-footer:last-child,html.theme--catppuccin-mocha .card-content:last-child,html.theme--catppuccin-mocha .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--catppuccin-mocha .card-header-title{align-items:center;color:#b8c5ef;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-header-title.is-centered{justify-content:center}html.theme--catppuccin-mocha .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--catppuccin-mocha .card-image{display:block;position:relative}html.theme--catppuccin-mocha .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--catppuccin-mocha .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--catppuccin-mocha .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--catppuccin-mocha .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--catppuccin-mocha .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--catppuccin-mocha .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--catppuccin-mocha .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--catppuccin-mocha .dropdown.is-active .dropdown-menu,html.theme--catppuccin-mocha .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--catppuccin-mocha .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--catppuccin-mocha .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--catppuccin-mocha .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--catppuccin-mocha .dropdown-content{background-color:#181825;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--catppuccin-mocha .dropdown-item{color:#cdd6f4;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--catppuccin-mocha a.dropdown-item,html.theme--catppuccin-mocha button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--catppuccin-mocha a.dropdown-item:hover,html.theme--catppuccin-mocha button.dropdown-item:hover{background-color:#181825;color:#0a0a0a}html.theme--catppuccin-mocha a.dropdown-item.is-active,html.theme--catppuccin-mocha button.dropdown-item.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--catppuccin-mocha .level{align-items:center;justify-content:space-between}html.theme--catppuccin-mocha .level code{border-radius:.4em}html.theme--catppuccin-mocha .level img{display:inline-block;vertical-align:top}html.theme--catppuccin-mocha .level.is-mobile{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left,html.theme--catppuccin-mocha .level.is-mobile .level-right{display:flex}html.theme--catppuccin-mocha .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--catppuccin-mocha .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level{display:flex}html.theme--catppuccin-mocha .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--catppuccin-mocha .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--catppuccin-mocha .level-item .title,html.theme--catppuccin-mocha .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--catppuccin-mocha .level-left,html.theme--catppuccin-mocha .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .level-left .level-item.is-flexible,html.theme--catppuccin-mocha .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left .level-item:not(:last-child),html.theme--catppuccin-mocha .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--catppuccin-mocha .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-left{display:flex}}html.theme--catppuccin-mocha .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .level-right{display:flex}}html.theme--catppuccin-mocha .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--catppuccin-mocha .media .content:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .media .media{border-top:1px solid rgba(88,91,112,0.5);display:flex;padding-top:.75rem}html.theme--catppuccin-mocha .media .media .content:not(:last-child),html.theme--catppuccin-mocha .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--catppuccin-mocha .media .media .media{padding-top:.5rem}html.theme--catppuccin-mocha .media .media .media+.media{margin-top:.5rem}html.theme--catppuccin-mocha .media+.media{border-top:1px solid rgba(88,91,112,0.5);margin-top:1rem;padding-top:1rem}html.theme--catppuccin-mocha .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--catppuccin-mocha .media-left,html.theme--catppuccin-mocha .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .media-left{margin-right:1rem}html.theme--catppuccin-mocha .media-right{margin-left:1rem}html.theme--catppuccin-mocha .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .media-content{overflow-x:auto}}html.theme--catppuccin-mocha .menu{font-size:1rem}html.theme--catppuccin-mocha .menu.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--catppuccin-mocha .menu.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .menu.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .menu-list{line-height:1.25}html.theme--catppuccin-mocha .menu-list a{border-radius:3px;color:#cdd6f4;display:block;padding:0.5em 0.75em}html.theme--catppuccin-mocha .menu-list a:hover{background-color:#181825;color:#b8c5ef}html.theme--catppuccin-mocha .menu-list a.is-active{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .menu-list li ul{border-left:1px solid #585b70;margin:.75em;padding-left:.75em}html.theme--catppuccin-mocha .menu-label{color:#f7f8fd;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--catppuccin-mocha .menu-label:not(:first-child){margin-top:1em}html.theme--catppuccin-mocha .menu-label:not(:last-child){margin-bottom:1em}html.theme--catppuccin-mocha .message{background-color:#181825;border-radius:.4em;font-size:1rem}html.theme--catppuccin-mocha .message strong{color:currentColor}html.theme--catppuccin-mocha .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--catppuccin-mocha .message.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--catppuccin-mocha .message.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .message.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .message.is-white{background-color:#fff}html.theme--catppuccin-mocha .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .message.is-white .message-body{border-color:#fff}html.theme--catppuccin-mocha .message.is-black{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .message.is-black .message-body{border-color:#0a0a0a}html.theme--catppuccin-mocha .message.is-light{background-color:#fafafa}html.theme--catppuccin-mocha .message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-light .message-body{border-color:#f5f5f5}html.theme--catppuccin-mocha .message.is-dark,html.theme--catppuccin-mocha .content kbd.message{background-color:#f9f9fb}html.theme--catppuccin-mocha .message.is-dark .message-header,html.theme--catppuccin-mocha .content kbd.message .message-header{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .message.is-dark .message-body,html.theme--catppuccin-mocha .content kbd.message .message-body{border-color:#313244}html.theme--catppuccin-mocha .message.is-primary,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-primary .message-header,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-primary .message-body,html.theme--catppuccin-mocha .docstring>section>a.message.docs-sourcelink .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-link{background-color:#ebf3fe}html.theme--catppuccin-mocha .message.is-link .message-header{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .message.is-link .message-body{border-color:#89b4fa;color:#063c93}html.theme--catppuccin-mocha .message.is-info{background-color:#effbf9}html.theme--catppuccin-mocha .message.is-info .message-header{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-info .message-body{border-color:#94e2d5;color:#207466}html.theme--catppuccin-mocha .message.is-success{background-color:#f0faef}html.theme--catppuccin-mocha .message.is-success .message-header{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-success .message-body{border-color:#a6e3a1;color:#287222}html.theme--catppuccin-mocha .message.is-warning{background-color:#fef8ec}html.theme--catppuccin-mocha .message.is-warning .message-header{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .message.is-warning .message-body{border-color:#f9e2af;color:#8a620a}html.theme--catppuccin-mocha .message.is-danger{background-color:#fdedf1}html.theme--catppuccin-mocha .message.is-danger .message-header{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .message.is-danger .message-body{border-color:#f38ba8;color:#991036}html.theme--catppuccin-mocha .message-header{align-items:center;background-color:#cdd6f4;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--catppuccin-mocha .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--catppuccin-mocha .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--catppuccin-mocha .message-body{border-color:#585b70;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#cdd6f4;padding:1.25em 1.5em}html.theme--catppuccin-mocha .message-body code,html.theme--catppuccin-mocha .message-body pre{background-color:#fff}html.theme--catppuccin-mocha .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--catppuccin-mocha .modal.is-active{display:flex}html.theme--catppuccin-mocha .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--catppuccin-mocha .modal-content,html.theme--catppuccin-mocha .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--catppuccin-mocha .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--catppuccin-mocha .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--catppuccin-mocha .modal-card-head,html.theme--catppuccin-mocha .modal-card-foot{align-items:center;background-color:#181825;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--catppuccin-mocha .modal-card-head{border-bottom:1px solid #585b70;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--catppuccin-mocha .modal-card-title{color:#cdd6f4;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--catppuccin-mocha .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #585b70}html.theme--catppuccin-mocha .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--catppuccin-mocha .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#1e1e2e;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--catppuccin-mocha .navbar{background-color:#89b4fa;min-height:4rem;position:relative;z-index:30}html.theme--catppuccin-mocha .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-white .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--catppuccin-mocha .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-black .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--catppuccin-mocha .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--catppuccin-mocha .navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-light .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-dark,html.theme--catppuccin-mocha .content kbd.navbar{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-burger,html.theme--catppuccin-mocha .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>.navbar-item,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-dark .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#313244;color:#fff}}html.theme--catppuccin-mocha .navbar.is-primary,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-burger,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>.navbar-item,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-primary .navbar-end .navbar-link::after,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-link .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa;color:#fff}}html.theme--catppuccin-mocha .navbar.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-info .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-info .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#94e2d5;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-success .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-success .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f9e2af;color:rgba(0,0,0,0.7)}}html.theme--catppuccin-mocha .navbar.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>.navbar-item,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-start .navbar-link::after,html.theme--catppuccin-mocha .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f38ba8;color:#fff}}html.theme--catppuccin-mocha .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--catppuccin-mocha .navbar.has-shadow{box-shadow:0 2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-bottom,html.theme--catppuccin-mocha .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #181825}html.theme--catppuccin-mocha .navbar.is-fixed-top{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top,html.theme--catppuccin-mocha body.has-navbar-fixed-top{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--catppuccin-mocha .navbar-brand,html.theme--catppuccin-mocha .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--catppuccin-mocha .navbar-brand a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--catppuccin-mocha .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--catppuccin-mocha .navbar-burger{color:#cdd6f4;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--catppuccin-mocha .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--catppuccin-mocha .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--catppuccin-mocha .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--catppuccin-mocha .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--catppuccin-mocha .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--catppuccin-mocha .navbar-menu{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{color:#cdd6f4;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--catppuccin-mocha .navbar-item .icon:only-child,html.theme--catppuccin-mocha .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--catppuccin-mocha a.navbar-item,html.theme--catppuccin-mocha .navbar-link{cursor:pointer}html.theme--catppuccin-mocha a.navbar-item:focus,html.theme--catppuccin-mocha a.navbar-item:focus-within,html.theme--catppuccin-mocha a.navbar-item:hover,html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link:focus,html.theme--catppuccin-mocha .navbar-link:focus-within,html.theme--catppuccin-mocha .navbar-link:hover,html.theme--catppuccin-mocha .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-item{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .navbar-item img{max-height:1.75rem}html.theme--catppuccin-mocha .navbar-item.has-dropdown{padding:0}html.theme--catppuccin-mocha .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--catppuccin-mocha .navbar-item.is-tab:focus,html.theme--catppuccin-mocha .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#89b4fa;border-bottom-style:solid;border-bottom-width:3px;color:#89b4fa;padding-bottom:calc(0.5rem - 3px)}html.theme--catppuccin-mocha .navbar-content{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--catppuccin-mocha .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--catppuccin-mocha .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--catppuccin-mocha .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--catppuccin-mocha .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--catppuccin-mocha .navbar>.container{display:block}html.theme--catppuccin-mocha .navbar-brand .navbar-item,html.theme--catppuccin-mocha .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-link::after{display:none}html.theme--catppuccin-mocha .navbar-menu{background-color:#89b4fa;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--catppuccin-mocha .navbar-menu.is-active{display:block}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-touch{top:0}html.theme--catppuccin-mocha .navbar.is-fixed-top .navbar-menu,html.theme--catppuccin-mocha .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--catppuccin-mocha html.has-navbar-fixed-top-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-touch,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .navbar,html.theme--catppuccin-mocha .navbar-menu,html.theme--catppuccin-mocha .navbar-start,html.theme--catppuccin-mocha .navbar-end{align-items:stretch;display:flex}html.theme--catppuccin-mocha .navbar{min-height:4rem}html.theme--catppuccin-mocha .navbar.is-spaced{padding:1rem 2rem}html.theme--catppuccin-mocha .navbar.is-spaced .navbar-start,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-end{align-items:center}html.theme--catppuccin-mocha .navbar.is-spaced a.navbar-item,html.theme--catppuccin-mocha .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item:hover,html.theme--catppuccin-mocha .navbar.is-transparent a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link:hover,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}html.theme--catppuccin-mocha .navbar-burger{display:none}html.theme--catppuccin-mocha .navbar-item,html.theme--catppuccin-mocha .navbar-link{align-items:center;display:flex}html.theme--catppuccin-mocha .navbar-item.has-dropdown{align-items:stretch}html.theme--catppuccin-mocha .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--catppuccin-mocha .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--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--catppuccin-mocha .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--catppuccin-mocha .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--catppuccin-mocha .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--catppuccin-mocha .navbar-dropdown{background-color:#89b4fa;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--catppuccin-mocha .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:focus,html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#7f849c}html.theme--catppuccin-mocha .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#89b4fa}.navbar.is-spaced html.theme--catppuccin-mocha .navbar-dropdown,html.theme--catppuccin-mocha .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--catppuccin-mocha .navbar-dropdown.is-right{left:auto;right:0}html.theme--catppuccin-mocha .navbar-divider{display:block}html.theme--catppuccin-mocha .navbar>.container .navbar-brand,html.theme--catppuccin-mocha .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--catppuccin-mocha .navbar>.container .navbar-menu,html.theme--catppuccin-mocha .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop,html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--catppuccin-mocha .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .navbar.is-fixed-top-desktop{top:0}html.theme--catppuccin-mocha html.has-navbar-fixed-top-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--catppuccin-mocha html.has-navbar-fixed-bottom-desktop,html.theme--catppuccin-mocha body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-top,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--catppuccin-mocha html.has-spaced-navbar-fixed-bottom,html.theme--catppuccin-mocha body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--catppuccin-mocha a.navbar-item.is-active,html.theme--catppuccin-mocha .navbar-link.is-active{color:#89b4fa}html.theme--catppuccin-mocha a.navbar-item.is-active:not(:focus):not(:hover),html.theme--catppuccin-mocha .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--catppuccin-mocha .navbar-item.has-dropdown:focus .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown:hover .navbar-link,html.theme--catppuccin-mocha .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--catppuccin-mocha .pagination{font-size:1rem;margin:-.25rem}html.theme--catppuccin-mocha .pagination.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--catppuccin-mocha .pagination.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .pagination.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-previous,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--catppuccin-mocha .pagination.is-rounded .pagination-next,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--catppuccin-mocha .pagination.is-rounded .pagination-link,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--catppuccin-mocha .pagination,html.theme--catppuccin-mocha .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link{border-color:#585b70;color:#89b4fa;min-width:2.5em}html.theme--catppuccin-mocha .pagination-previous:hover,html.theme--catppuccin-mocha .pagination-next:hover,html.theme--catppuccin-mocha .pagination-link:hover{border-color:#6c7086;color:#89dceb}html.theme--catppuccin-mocha .pagination-previous:focus,html.theme--catppuccin-mocha .pagination-next:focus,html.theme--catppuccin-mocha .pagination-link:focus{border-color:#6c7086}html.theme--catppuccin-mocha .pagination-previous:active,html.theme--catppuccin-mocha .pagination-next:active,html.theme--catppuccin-mocha .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--catppuccin-mocha .pagination-previous[disabled],html.theme--catppuccin-mocha .pagination-previous.is-disabled,html.theme--catppuccin-mocha .pagination-next[disabled],html.theme--catppuccin-mocha .pagination-next.is-disabled,html.theme--catppuccin-mocha .pagination-link[disabled],html.theme--catppuccin-mocha .pagination-link.is-disabled{background-color:#585b70;border-color:#585b70;box-shadow:none;color:#f7f8fd;opacity:0.5}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--catppuccin-mocha .pagination-link.is-current{background-color:#89b4fa;border-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .pagination-ellipsis{color:#6c7086;pointer-events:none}html.theme--catppuccin-mocha .pagination-list{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .pagination{flex-wrap:wrap}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination-previous{order:2}html.theme--catppuccin-mocha .pagination-next{order:3}html.theme--catppuccin-mocha .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--catppuccin-mocha .pagination.is-centered .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--catppuccin-mocha .pagination.is-centered .pagination-next{order:3}html.theme--catppuccin-mocha .pagination.is-right .pagination-previous{order:1}html.theme--catppuccin-mocha .pagination.is-right .pagination-next{order:2}html.theme--catppuccin-mocha .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--catppuccin-mocha .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--catppuccin-mocha .panel:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--catppuccin-mocha .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--catppuccin-mocha .panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}html.theme--catppuccin-mocha .panel.is-dark .panel-heading,html.theme--catppuccin-mocha .content kbd.panel .panel-heading{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .panel.is-dark .panel-tabs a.is-active,html.theme--catppuccin-mocha .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#313244}html.theme--catppuccin-mocha .panel.is-dark .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .content kbd.panel .panel-block.is-active .panel-icon{color:#313244}html.theme--catppuccin-mocha .panel.is-primary .panel-heading,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-primary .panel-tabs a.is-active,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-primary .panel-block.is-active .panel-icon,html.theme--catppuccin-mocha .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-heading{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .panel.is-link .panel-tabs a.is-active{border-bottom-color:#89b4fa}html.theme--catppuccin-mocha .panel.is-link .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel.is-info .panel-heading{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-info .panel-tabs a.is-active{border-bottom-color:#94e2d5}html.theme--catppuccin-mocha .panel.is-info .panel-block.is-active .panel-icon{color:#94e2d5}html.theme--catppuccin-mocha .panel.is-success .panel-heading{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-success .panel-tabs a.is-active{border-bottom-color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-success .panel-block.is-active .panel-icon{color:#a6e3a1}html.theme--catppuccin-mocha .panel.is-warning .panel-heading{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f9e2af}html.theme--catppuccin-mocha .panel.is-warning .panel-block.is-active .panel-icon{color:#f9e2af}html.theme--catppuccin-mocha .panel.is-danger .panel-heading{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f38ba8}html.theme--catppuccin-mocha .panel.is-danger .panel-block.is-active .panel-icon{color:#f38ba8}html.theme--catppuccin-mocha .panel-tabs:not(:last-child),html.theme--catppuccin-mocha .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--catppuccin-mocha .panel-heading{background-color:#45475a;border-radius:8px 8px 0 0;color:#b8c5ef;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--catppuccin-mocha .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--catppuccin-mocha .panel-tabs a{border-bottom:1px solid #585b70;margin-bottom:-1px;padding:0.5em}html.theme--catppuccin-mocha .panel-tabs a.is-active{border-bottom-color:#45475a;color:#71a4f9}html.theme--catppuccin-mocha .panel-list a{color:#cdd6f4}html.theme--catppuccin-mocha .panel-list a:hover{color:#89b4fa}html.theme--catppuccin-mocha .panel-block{align-items:center;color:#b8c5ef;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--catppuccin-mocha .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--catppuccin-mocha .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--catppuccin-mocha .panel-block.is-wrapped{flex-wrap:wrap}html.theme--catppuccin-mocha .panel-block.is-active{border-left-color:#89b4fa;color:#71a4f9}html.theme--catppuccin-mocha .panel-block.is-active .panel-icon{color:#89b4fa}html.theme--catppuccin-mocha .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--catppuccin-mocha a.panel-block,html.theme--catppuccin-mocha label.panel-block{cursor:pointer}html.theme--catppuccin-mocha a.panel-block:hover,html.theme--catppuccin-mocha label.panel-block:hover{background-color:#181825}html.theme--catppuccin-mocha .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#f7f8fd;margin-right:.75em}html.theme--catppuccin-mocha .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--catppuccin-mocha .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}html.theme--catppuccin-mocha .tabs a{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;color:#cdd6f4;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--catppuccin-mocha .tabs a:hover{border-bottom-color:#b8c5ef;color:#b8c5ef}html.theme--catppuccin-mocha .tabs li{display:block}html.theme--catppuccin-mocha .tabs li.is-active a{border-bottom-color:#89b4fa;color:#89b4fa}html.theme--catppuccin-mocha .tabs ul{align-items:center;border-bottom-color:#585b70;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--catppuccin-mocha .tabs ul.is-left{padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--catppuccin-mocha .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--catppuccin-mocha .tabs .icon:first-child{margin-right:.5em}html.theme--catppuccin-mocha .tabs .icon:last-child{margin-left:.5em}html.theme--catppuccin-mocha .tabs.is-centered ul{justify-content:center}html.theme--catppuccin-mocha .tabs.is-right ul{justify-content:flex-end}html.theme--catppuccin-mocha .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--catppuccin-mocha .tabs.is-boxed a:hover{background-color:#181825;border-bottom-color:#585b70}html.theme--catppuccin-mocha .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#585b70;border-bottom-color:rgba(0,0,0,0) !important}html.theme--catppuccin-mocha .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--catppuccin-mocha .tabs.is-toggle a{border-color:#585b70;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--catppuccin-mocha .tabs.is-toggle a:hover{background-color:#181825;border-color:#6c7086;z-index:2}html.theme--catppuccin-mocha .tabs.is-toggle li+li{margin-left:-1px}html.theme--catppuccin-mocha .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--catppuccin-mocha .tabs.is-toggle li.is-active a{background-color:#89b4fa;border-color:#89b4fa;color:#fff;z-index:1}html.theme--catppuccin-mocha .tabs.is-toggle ul{border-bottom:none}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--catppuccin-mocha .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--catppuccin-mocha .tabs.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--catppuccin-mocha .tabs.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .tabs.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--catppuccin-mocha .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .column.is-narrow-mobile{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-mobile{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-mobile{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-mobile{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-mobile{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-mobile{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-mobile{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-mobile{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-mobile{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-mobile{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .column.is-narrow,html.theme--catppuccin-mocha .column.is-narrow-tablet{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full,html.theme--catppuccin-mocha .column.is-full-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters,html.theme--catppuccin-mocha .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds,html.theme--catppuccin-mocha .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half,html.theme--catppuccin-mocha .column.is-half-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third,html.theme--catppuccin-mocha .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter,html.theme--catppuccin-mocha .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth,html.theme--catppuccin-mocha .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths,html.theme--catppuccin-mocha .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths,html.theme--catppuccin-mocha .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths,html.theme--catppuccin-mocha .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters,html.theme--catppuccin-mocha .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds,html.theme--catppuccin-mocha .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half,html.theme--catppuccin-mocha .column.is-offset-half-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third,html.theme--catppuccin-mocha .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter,html.theme--catppuccin-mocha .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth,html.theme--catppuccin-mocha .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths,html.theme--catppuccin-mocha .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths,html.theme--catppuccin-mocha .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths,html.theme--catppuccin-mocha .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--catppuccin-mocha .column.is-0,html.theme--catppuccin-mocha .column.is-0-tablet{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0,html.theme--catppuccin-mocha .column.is-offset-0-tablet{margin-left:0%}html.theme--catppuccin-mocha .column.is-1,html.theme--catppuccin-mocha .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1,html.theme--catppuccin-mocha .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2,html.theme--catppuccin-mocha .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2,html.theme--catppuccin-mocha .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3,html.theme--catppuccin-mocha .column.is-3-tablet{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3,html.theme--catppuccin-mocha .column.is-offset-3-tablet{margin-left:25%}html.theme--catppuccin-mocha .column.is-4,html.theme--catppuccin-mocha .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4,html.theme--catppuccin-mocha .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5,html.theme--catppuccin-mocha .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5,html.theme--catppuccin-mocha .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6,html.theme--catppuccin-mocha .column.is-6-tablet{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6,html.theme--catppuccin-mocha .column.is-offset-6-tablet{margin-left:50%}html.theme--catppuccin-mocha .column.is-7,html.theme--catppuccin-mocha .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7,html.theme--catppuccin-mocha .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8,html.theme--catppuccin-mocha .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8,html.theme--catppuccin-mocha .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9,html.theme--catppuccin-mocha .column.is-9-tablet{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9,html.theme--catppuccin-mocha .column.is-offset-9-tablet{margin-left:75%}html.theme--catppuccin-mocha .column.is-10,html.theme--catppuccin-mocha .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10,html.theme--catppuccin-mocha .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11,html.theme--catppuccin-mocha .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11,html.theme--catppuccin-mocha .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12,html.theme--catppuccin-mocha .column.is-12-tablet{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12,html.theme--catppuccin-mocha .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .column.is-narrow-touch{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-touch{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-touch{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-touch{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-touch{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-touch{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-touch{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-touch{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-touch{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-touch{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-touch{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-touch{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-touch{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-touch{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-touch{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-touch{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-touch{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-touch{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-touch{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-touch{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-touch{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-touch{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .column.is-narrow-desktop{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-desktop{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-desktop{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-desktop{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-desktop{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-desktop{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-desktop{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-desktop{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-desktop{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-desktop{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .column.is-narrow-widescreen{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-widescreen{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-widescreen{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-widescreen{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-widescreen{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-widescreen{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-widescreen{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-widescreen{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-widescreen{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-widescreen{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .column.is-narrow-fullhd{flex:none;width:unset}html.theme--catppuccin-mocha .column.is-full-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--catppuccin-mocha .column.is-half-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--catppuccin-mocha .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--catppuccin-mocha .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--catppuccin-mocha .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--catppuccin-mocha .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--catppuccin-mocha .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--catppuccin-mocha .column.is-offset-half-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--catppuccin-mocha .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--catppuccin-mocha .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--catppuccin-mocha .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--catppuccin-mocha .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--catppuccin-mocha .column.is-0-fullhd{flex:none;width:0%}html.theme--catppuccin-mocha .column.is-offset-0-fullhd{margin-left:0%}html.theme--catppuccin-mocha .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--catppuccin-mocha .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--catppuccin-mocha .column.is-3-fullhd{flex:none;width:25%}html.theme--catppuccin-mocha .column.is-offset-3-fullhd{margin-left:25%}html.theme--catppuccin-mocha .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--catppuccin-mocha .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--catppuccin-mocha .column.is-6-fullhd{flex:none;width:50%}html.theme--catppuccin-mocha .column.is-offset-6-fullhd{margin-left:50%}html.theme--catppuccin-mocha .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--catppuccin-mocha .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--catppuccin-mocha .column.is-9-fullhd{flex:none;width:75%}html.theme--catppuccin-mocha .column.is-offset-9-fullhd{margin-left:75%}html.theme--catppuccin-mocha .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--catppuccin-mocha .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--catppuccin-mocha .column.is-12-fullhd{flex:none;width:100%}html.theme--catppuccin-mocha .column.is-offset-12-fullhd{margin-left:100%}}html.theme--catppuccin-mocha .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .columns:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--catppuccin-mocha .columns.is-centered{justify-content:center}html.theme--catppuccin-mocha .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--catppuccin-mocha .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--catppuccin-mocha .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--catppuccin-mocha .columns.is-gapless:last-child{margin-bottom:0}html.theme--catppuccin-mocha .columns.is-mobile{display:flex}html.theme--catppuccin-mocha .columns.is-multiline{flex-wrap:wrap}html.theme--catppuccin-mocha .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-desktop{display:flex}}html.theme--catppuccin-mocha .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--catppuccin-mocha .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--catppuccin-mocha .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--catppuccin-mocha .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--catppuccin-mocha .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--catppuccin-mocha .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--catppuccin-mocha .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--catppuccin-mocha .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--catppuccin-mocha .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--catppuccin-mocha .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--catppuccin-mocha .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--catppuccin-mocha .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--catppuccin-mocha .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--catppuccin-mocha .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--catppuccin-mocha .tile.is-child{margin:0 !important}html.theme--catppuccin-mocha .tile.is-parent{padding:.75rem}html.theme--catppuccin-mocha .tile.is-vertical{flex-direction:column}html.theme--catppuccin-mocha .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .tile:not(.is-child){display:flex}html.theme--catppuccin-mocha .tile.is-1{flex:none;width:8.33333337%}html.theme--catppuccin-mocha .tile.is-2{flex:none;width:16.66666674%}html.theme--catppuccin-mocha .tile.is-3{flex:none;width:25%}html.theme--catppuccin-mocha .tile.is-4{flex:none;width:33.33333337%}html.theme--catppuccin-mocha .tile.is-5{flex:none;width:41.66666674%}html.theme--catppuccin-mocha .tile.is-6{flex:none;width:50%}html.theme--catppuccin-mocha .tile.is-7{flex:none;width:58.33333337%}html.theme--catppuccin-mocha .tile.is-8{flex:none;width:66.66666674%}html.theme--catppuccin-mocha .tile.is-9{flex:none;width:75%}html.theme--catppuccin-mocha .tile.is-10{flex:none;width:83.33333337%}html.theme--catppuccin-mocha .tile.is-11{flex:none;width:91.66666674%}html.theme--catppuccin-mocha .tile.is-12{flex:none;width:100%}}html.theme--catppuccin-mocha .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--catppuccin-mocha .hero .navbar{background:none}html.theme--catppuccin-mocha .hero .tabs ul{border-bottom:none}html.theme--catppuccin-mocha .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-white strong{color:inherit}html.theme--catppuccin-mocha .hero.is-white .title{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--catppuccin-mocha .hero.is-white .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-white .navbar-menu{background-color:#fff}}html.theme--catppuccin-mocha .hero.is-white .navbar-item,html.theme--catppuccin-mocha .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--catppuccin-mocha .hero.is-white a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-white a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-white .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--catppuccin-mocha .hero.is-white .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--catppuccin-mocha .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-black strong{color:inherit}html.theme--catppuccin-mocha .hero.is-black .title{color:#fff}html.theme--catppuccin-mocha .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-black .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--catppuccin-mocha .hero.is-black .navbar-item,html.theme--catppuccin-mocha .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-black a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-black a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-black .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-black .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--catppuccin-mocha .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--catppuccin-mocha .hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-light strong{color:inherit}html.theme--catppuccin-mocha .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-light .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-light .navbar-menu{background-color:#f5f5f5}}html.theme--catppuccin-mocha .hero.is-light .navbar-item,html.theme--catppuccin-mocha .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-light a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-light .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-light .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-light .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-light .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:#f5f5f5}html.theme--catppuccin-mocha .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}html.theme--catppuccin-mocha .hero.is-dark,html.theme--catppuccin-mocha .content kbd.hero{background-color:#313244;color:#fff}html.theme--catppuccin-mocha .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-dark strong,html.theme--catppuccin-mocha .content kbd.hero strong{color:inherit}html.theme--catppuccin-mocha .hero.is-dark .title,html.theme--catppuccin-mocha .content kbd.hero .title{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .subtitle,html.theme--catppuccin-mocha .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-dark .subtitle a:not(.button),html.theme--catppuccin-mocha .content kbd.hero .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-dark .subtitle strong,html.theme--catppuccin-mocha .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-dark .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero .navbar-menu{background-color:#313244}}html.theme--catppuccin-mocha .hero.is-dark .navbar-item,html.theme--catppuccin-mocha .content kbd.hero .navbar-item,html.theme--catppuccin-mocha .hero.is-dark .navbar-link,html.theme--catppuccin-mocha .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-dark a.navbar-item:hover,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-dark a.navbar-item.is-active,html.theme--catppuccin-mocha .content kbd.hero a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-dark .navbar-link:hover,html.theme--catppuccin-mocha .content kbd.hero .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-dark .navbar-link.is-active,html.theme--catppuccin-mocha .content kbd.hero .navbar-link.is-active{background-color:#262735;color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs a,html.theme--catppuccin-mocha .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-dark .tabs a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs li.is-active a{color:#313244 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#313244}html.theme--catppuccin-mocha .hero.is-dark.is-bold,html.theme--catppuccin-mocha .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-dark.is-bold .navbar-menu,html.theme--catppuccin-mocha .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #181c2a 0%, #313244 71%, #3c3856 100%)}}html.theme--catppuccin-mocha .hero.is-primary,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-primary strong,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--catppuccin-mocha .hero.is-primary .title,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .subtitle,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-primary .subtitle a:not(.button),html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-primary .subtitle strong,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-primary .navbar-menu,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-primary .navbar-item,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--catppuccin-mocha .hero.is-primary .navbar-link,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-primary a.navbar-item:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-primary a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-primary .navbar-link:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-primary .navbar-link.is-active,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-primary .tabs a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle a:hover,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-primary.is-bold,html.theme--catppuccin-mocha .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-primary.is-bold .navbar-menu,html.theme--catppuccin-mocha .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-link{background-color:#89b4fa;color:#fff}html.theme--catppuccin-mocha .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-link strong{color:inherit}html.theme--catppuccin-mocha .hero.is-link .title{color:#fff}html.theme--catppuccin-mocha .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-link .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-link .navbar-menu{background-color:#89b4fa}}html.theme--catppuccin-mocha .hero.is-link .navbar-item,html.theme--catppuccin-mocha .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-link a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-link a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-link .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-link .navbar-link.is-active{background-color:#71a4f9;color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-link .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs li.is-active a{color:#89b4fa !important;opacity:1}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#89b4fa}html.theme--catppuccin-mocha .hero.is-link.is-bold{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #51b0ff 0%, #89b4fa 71%, #9fb3fd 100%)}}html.theme--catppuccin-mocha .hero.is-info{background-color:#94e2d5;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-info strong{color:inherit}html.theme--catppuccin-mocha .hero.is-info .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-info .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-info .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-info .navbar-menu{background-color:#94e2d5}}html.theme--catppuccin-mocha .hero.is-info .navbar-item,html.theme--catppuccin-mocha .hero.is-info .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-info a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-info .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-info .navbar-link.is-active{background-color:#80ddcd;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-info .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs li.is-active a{color:#94e2d5 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-info .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-info .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:#94e2d5}html.theme--catppuccin-mocha .hero.is-info.is-bold{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #63e0b6 0%, #94e2d5 71%, #a5eaea 100%)}}html.theme--catppuccin-mocha .hero.is-success{background-color:#a6e3a1;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-success strong{color:inherit}html.theme--catppuccin-mocha .hero.is-success .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-success .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-success .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-success .navbar-menu{background-color:#a6e3a1}}html.theme--catppuccin-mocha .hero.is-success .navbar-item,html.theme--catppuccin-mocha .hero.is-success .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-success a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-success .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-success .navbar-link.is-active{background-color:#93dd8d;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-success .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs li.is-active a{color:#a6e3a1 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-success .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-success .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:#a6e3a1}html.theme--catppuccin-mocha .hero.is-success.is-bold{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #8ce071 0%, #a6e3a1 71%, #b2ebb7 100%)}}html.theme--catppuccin-mocha .hero.is-warning{background-color:#f9e2af;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-warning strong{color:inherit}html.theme--catppuccin-mocha .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--catppuccin-mocha .hero.is-warning .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-warning .navbar-menu{background-color:#f9e2af}}html.theme--catppuccin-mocha .hero.is-warning .navbar-item,html.theme--catppuccin-mocha .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-warning a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-warning .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-warning .navbar-link.is-active{background-color:#f7d997;color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--catppuccin-mocha .hero.is-warning .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs li.is-active a{color:#f9e2af !important;opacity:1}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .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:#f9e2af}html.theme--catppuccin-mocha .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #fcbd79 0%, #f9e2af 71%, #fcf4c5 100%)}}html.theme--catppuccin-mocha .hero.is-danger{background-color:#f38ba8;color:#fff}html.theme--catppuccin-mocha .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--catppuccin-mocha .hero.is-danger strong{color:inherit}html.theme--catppuccin-mocha .hero.is-danger .title{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--catppuccin-mocha .hero.is-danger .subtitle a:not(.button),html.theme--catppuccin-mocha .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .hero.is-danger .navbar-menu{background-color:#f38ba8}}html.theme--catppuccin-mocha .hero.is-danger .navbar-item,html.theme--catppuccin-mocha .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--catppuccin-mocha .hero.is-danger a.navbar-item:hover,html.theme--catppuccin-mocha .hero.is-danger a.navbar-item.is-active,html.theme--catppuccin-mocha .hero.is-danger .navbar-link:hover,html.theme--catppuccin-mocha .hero.is-danger .navbar-link.is-active{background-color:#f17497;color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--catppuccin-mocha .hero.is-danger .tabs a:hover{opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs li.is-active a{color:#f38ba8 !important;opacity:1}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--catppuccin-mocha .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f38ba8}html.theme--catppuccin-mocha .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f7549d 0%, #f38ba8 71%, #f8a0a9 100%)}}html.theme--catppuccin-mocha .hero.is-small .hero-body,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--catppuccin-mocha .hero.is-halfheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight .hero-body>.container,html.theme--catppuccin-mocha .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--catppuccin-mocha .hero.is-halfheight{min-height:50vh}html.theme--catppuccin-mocha .hero.is-fullheight{min-height:100vh}html.theme--catppuccin-mocha .hero-video{overflow:hidden}html.theme--catppuccin-mocha .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--catppuccin-mocha .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-video{display:none}}html.theme--catppuccin-mocha .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--catppuccin-mocha .hero-buttons .button{display:flex}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-buttons{display:flex;justify-content:center}html.theme--catppuccin-mocha .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--catppuccin-mocha .hero-head,html.theme--catppuccin-mocha .hero-foot{flex-grow:0;flex-shrink:0}html.theme--catppuccin-mocha .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--catppuccin-mocha .hero-body{padding:3rem 3rem}}html.theme--catppuccin-mocha .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha .section{padding:3rem 3rem}html.theme--catppuccin-mocha .section.is-medium{padding:9rem 4.5rem}html.theme--catppuccin-mocha .section.is-large{padding:18rem 6rem}}html.theme--catppuccin-mocha .footer{background-color:#181825;padding:3rem 1.5rem 6rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor,html.theme--catppuccin-mocha h1 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h1 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h2 .docs-heading-anchor,html.theme--catppuccin-mocha h2 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h2 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h3 .docs-heading-anchor,html.theme--catppuccin-mocha h3 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h3 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h4 .docs-heading-anchor,html.theme--catppuccin-mocha h4 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h4 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h5 .docs-heading-anchor,html.theme--catppuccin-mocha h5 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h5 .docs-heading-anchor:visited,html.theme--catppuccin-mocha h6 .docs-heading-anchor,html.theme--catppuccin-mocha h6 .docs-heading-anchor:hover,html.theme--catppuccin-mocha h6 .docs-heading-anchor:visited{color:#cdd6f4}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--catppuccin-mocha h1 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h2 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h3 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h4 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h5 .docs-heading-anchor-permalink::before,html.theme--catppuccin-mocha h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--catppuccin-mocha h1:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h2:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h3:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h4:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h5:hover .docs-heading-anchor-permalink,html.theme--catppuccin-mocha h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--catppuccin-mocha .docs-light-only{display:none !important}html.theme--catppuccin-mocha pre{position:relative;overflow:hidden}html.theme--catppuccin-mocha pre code,html.theme--catppuccin-mocha pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--catppuccin-mocha pre code:first-of-type,html.theme--catppuccin-mocha pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--catppuccin-mocha pre code:last-of-type,html.theme--catppuccin-mocha pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--catppuccin-mocha 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 6 Free";color:#cdd6f4;cursor:pointer;text-align:center}html.theme--catppuccin-mocha pre .copy-button:focus,html.theme--catppuccin-mocha pre .copy-button:hover{opacity:1;background:rgba(205,214,244,0.1);color:#89b4fa}html.theme--catppuccin-mocha pre .copy-button.success{color:#a6e3a1;opacity:1}html.theme--catppuccin-mocha pre .copy-button.error{color:#f38ba8;opacity:1}html.theme--catppuccin-mocha pre:hover .copy-button{opacity:1}html.theme--catppuccin-mocha .admonition{background-color:#181825;border-style:solid;border-width:2px;border-color:#bac2de;border-radius:4px;font-size:1rem}html.theme--catppuccin-mocha .admonition strong{color:currentColor}html.theme--catppuccin-mocha .admonition.is-small,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--catppuccin-mocha .admonition.is-medium{font-size:1.25rem}html.theme--catppuccin-mocha .admonition.is-large{font-size:1.5rem}html.theme--catppuccin-mocha .admonition.is-default{background-color:#181825;border-color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#bac2de}html.theme--catppuccin-mocha .admonition.is-default>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-info{background-color:#181825;border-color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#94e2d5}html.theme--catppuccin-mocha .admonition.is-info>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-success{background-color:#181825;border-color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#a6e3a1}html.theme--catppuccin-mocha .admonition.is-success>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-warning{background-color:#181825;border-color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f9e2af}html.theme--catppuccin-mocha .admonition.is-warning>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-danger{background-color:#181825;border-color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#f38ba8}html.theme--catppuccin-mocha .admonition.is-danger>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition.is-compat{background-color:#181825;border-color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#89dceb}html.theme--catppuccin-mocha .admonition.is-compat>.admonition-body{color:#cdd6f4}html.theme--catppuccin-mocha .admonition-header{color:#bac2de;background-color:rgba(0,0,0,0);align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--catppuccin-mocha .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header{list-style:none}html.theme--catppuccin-mocha details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--catppuccin-mocha details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--catppuccin-mocha .admonition-body{color:#cdd6f4;padding:0.5rem .75rem}html.theme--catppuccin-mocha .admonition-body pre{background-color:#181825}html.theme--catppuccin-mocha .admonition-body code{background-color:#181825}html.theme--catppuccin-mocha .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:2px solid #585b70;border-radius:4px;box-shadow:none;max-width:100%}html.theme--catppuccin-mocha .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#181825;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #585b70;overflow:auto}html.theme--catppuccin-mocha .docstring>header code{background-color:transparent}html.theme--catppuccin-mocha .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--catppuccin-mocha .docstring>header .docstring-binding{margin-right:0.3em}html.theme--catppuccin-mocha .docstring>header .docstring-category{margin-left:0.3em}html.theme--catppuccin-mocha .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .docstring>section:last-child{border-bottom:none}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--catppuccin-mocha .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--catppuccin-mocha .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--catppuccin-mocha .documenter-example-output{background-color:#1e1e2e}html.theme--catppuccin-mocha .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:#181825;color:#cdd6f4;border-bottom:3px solid rgba(0,0,0,0);padding:10px 35px;text-align:center;font-size:15px}html.theme--catppuccin-mocha .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--catppuccin-mocha .outdated-warning-overlay a{color:#89b4fa}html.theme--catppuccin-mocha .outdated-warning-overlay a:hover{color:#89dceb}html.theme--catppuccin-mocha .content pre{border:2px solid #585b70;border-radius:4px}html.theme--catppuccin-mocha .content code{font-weight:inherit}html.theme--catppuccin-mocha .content a code{color:#89b4fa}html.theme--catppuccin-mocha .content a:hover code{color:#89dceb}html.theme--catppuccin-mocha .content h1 code,html.theme--catppuccin-mocha .content h2 code,html.theme--catppuccin-mocha .content h3 code,html.theme--catppuccin-mocha .content h4 code,html.theme--catppuccin-mocha .content h5 code,html.theme--catppuccin-mocha .content h6 code{color:#cdd6f4}html.theme--catppuccin-mocha .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--catppuccin-mocha .content blockquote>ul:first-child,html.theme--catppuccin-mocha .content blockquote>ol:first-child,html.theme--catppuccin-mocha .content .admonition-body>ul:first-child,html.theme--catppuccin-mocha .content .admonition-body>ol:first-child{margin-top:0}html.theme--catppuccin-mocha pre,html.theme--catppuccin-mocha code{font-variant-ligatures:no-contextual}html.theme--catppuccin-mocha .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--catppuccin-mocha .breadcrumb a.is-disabled,html.theme--catppuccin-mocha .breadcrumb a.is-disabled:hover{color:#b8c5ef}html.theme--catppuccin-mocha .hljs{background:initial !important}html.theme--catppuccin-mocha .katex .katex-mathml{top:0;right:0}html.theme--catppuccin-mocha .katex-display,html.theme--catppuccin-mocha mjx-container,html.theme--catppuccin-mocha .MathJax_Display{margin:0.5em 0 !important}html.theme--catppuccin-mocha html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--catppuccin-mocha li.no-marker{list-style:none}html.theme--catppuccin-mocha #documenter .docs-main>article{overflow-wrap:break-word}html.theme--catppuccin-mocha #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main{width:100%}html.theme--catppuccin-mocha #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-main>header,html.theme--catppuccin-mocha #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar{background-color:#1e1e2e;border-bottom:1px solid #585b70;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--catppuccin-mocha #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #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--catppuccin-mocha #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--catppuccin-mocha #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--catppuccin-mocha #documenter .docs-main section.footnotes{border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .tag:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--catppuccin-mocha #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--catppuccin-mocha .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #585b70;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--catppuccin-mocha #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--catppuccin-mocha #documenter .docs-sidebar{display:flex;flex-direction:column;color:#cdd6f4;background-color:#181825;border-right:1px solid #585b70;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar{left:0;top:0}}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--catppuccin-mocha #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--catppuccin-mocha #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a,html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-package-name a:hover{color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #585b70;display:none;padding:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #585b70;padding-bottom:1.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--catppuccin-mocha #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}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#cdd6f4;background:#181825}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#cdd6f4;background-color:#202031}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #585b70;border-bottom:1px solid #585b70;background-color:#11111b}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#11111b;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#202031;color:#cdd6f4}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #585b70}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--catppuccin-mocha #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#383856}}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#28283e}html.theme--catppuccin-mocha #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#383856}}html.theme--catppuccin-mocha kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--catppuccin-mocha .search-min-width-50{min-width:50%}html.theme--catppuccin-mocha .search-min-height-100{min-height:100%}html.theme--catppuccin-mocha .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .property-search-result-badge,html.theme--catppuccin-mocha .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--catppuccin-mocha .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--catppuccin-mocha .search-filter:hover,html.theme--catppuccin-mocha .search-filter:focus{color:#333}html.theme--catppuccin-mocha .search-filter-selected{color:#313244;background-color:#b4befe}html.theme--catppuccin-mocha .search-filter-selected:hover,html.theme--catppuccin-mocha .search-filter-selected:focus{color:#313244}html.theme--catppuccin-mocha .search-result-highlight{background-color:#ffdd57;color:black}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #585b70}html.theme--catppuccin-mocha .search-result-title{width:85%;color:#f5f5f5}html.theme--catppuccin-mocha .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--catppuccin-mocha #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--catppuccin-mocha #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem}html.theme--catppuccin-mocha .gap-8{gap:2rem}html.theme--catppuccin-mocha{background-color:#1e1e2e;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--catppuccin-mocha a{transition:all 200ms ease}html.theme--catppuccin-mocha .label{color:#cdd6f4}html.theme--catppuccin-mocha .button,html.theme--catppuccin-mocha .control.has-icons-left .icon,html.theme--catppuccin-mocha .control.has-icons-right .icon,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .pagination-ellipsis,html.theme--catppuccin-mocha .pagination-link,html.theme--catppuccin-mocha .pagination-next,html.theme--catppuccin-mocha .pagination-previous,html.theme--catppuccin-mocha .select,html.theme--catppuccin-mocha .select select,html.theme--catppuccin-mocha .textarea{height:2.5em;color:#cdd6f4}html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha #documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin-mocha .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em;color:#cdd6f4}html.theme--catppuccin-mocha .select:after,html.theme--catppuccin-mocha .select select{border-width:1px}html.theme--catppuccin-mocha .menu-list a{transition:all 300ms ease}html.theme--catppuccin-mocha .modal-card-foot,html.theme--catppuccin-mocha .modal-card-head{border-color:#585b70}html.theme--catppuccin-mocha .navbar{border-radius:.4em}html.theme--catppuccin-mocha .navbar.is-transparent{background:none}html.theme--catppuccin-mocha .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--catppuccin-mocha .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#89b4fa}@media screen and (max-width: 1055px){html.theme--catppuccin-mocha .navbar .navbar-menu{background-color:#89b4fa;border-radius:0 0 .4em .4em}}html.theme--catppuccin-mocha .docstring>section>a.docs-sourcelink:not(body){color:#313244}html.theme--catppuccin-mocha .tag.is-link:not(body),html.theme--catppuccin-mocha .docstring>section>a.is-link.docs-sourcelink:not(body),html.theme--catppuccin-mocha .content kbd.is-link:not(body){color:#313244}html.theme--catppuccin-mocha .ansi span.sgr1{font-weight:bolder}html.theme--catppuccin-mocha .ansi span.sgr2{font-weight:lighter}html.theme--catppuccin-mocha .ansi span.sgr3{font-style:italic}html.theme--catppuccin-mocha .ansi span.sgr4{text-decoration:underline}html.theme--catppuccin-mocha .ansi span.sgr7{color:#1e1e2e;background-color:#cdd6f4}html.theme--catppuccin-mocha .ansi span.sgr8{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr8 span{color:transparent}html.theme--catppuccin-mocha .ansi span.sgr9{text-decoration:line-through}html.theme--catppuccin-mocha .ansi span.sgr30{color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr31{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr32{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr33{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr34{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr35{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr36{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr37{color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr40{background-color:#45475a}html.theme--catppuccin-mocha .ansi span.sgr41{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr42{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr43{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr44{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr45{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr46{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr47{background-color:#bac2de}html.theme--catppuccin-mocha .ansi span.sgr90{color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr91{color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr92{color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr93{color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr94{color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr95{color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr96{color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr97{color:#a6adc8}html.theme--catppuccin-mocha .ansi span.sgr100{background-color:#585b70}html.theme--catppuccin-mocha .ansi span.sgr101{background-color:#f38ba8}html.theme--catppuccin-mocha .ansi span.sgr102{background-color:#a6e3a1}html.theme--catppuccin-mocha .ansi span.sgr103{background-color:#f9e2af}html.theme--catppuccin-mocha .ansi span.sgr104{background-color:#89b4fa}html.theme--catppuccin-mocha .ansi span.sgr105{background-color:#f5c2e7}html.theme--catppuccin-mocha .ansi span.sgr106{background-color:#94e2d5}html.theme--catppuccin-mocha .ansi span.sgr107{background-color:#a6adc8}html.theme--catppuccin-mocha code.language-julia-repl>span.hljs-meta{color:#a6e3a1;font-weight:bolder}html.theme--catppuccin-mocha code .hljs{color:#cdd6f4;background:#1e1e2e}html.theme--catppuccin-mocha code .hljs-keyword{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-built_in{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-type{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-literal{color:#fab387}html.theme--catppuccin-mocha code .hljs-number{color:#fab387}html.theme--catppuccin-mocha code .hljs-operator{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-punctuation{color:#bac2de}html.theme--catppuccin-mocha code .hljs-property{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-regexp{color:#f5c2e7}html.theme--catppuccin-mocha code .hljs-string{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-char.escape_{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-subst{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-symbol{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-variable{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.language_{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-variable.constant_{color:#fab387}html.theme--catppuccin-mocha code .hljs-title{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-title.class_{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-title.function_{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-params{color:#cdd6f4}html.theme--catppuccin-mocha code .hljs-comment{color:#585b70}html.theme--catppuccin-mocha code .hljs-doctag{color:#f38ba8}html.theme--catppuccin-mocha code .hljs-meta{color:#fab387}html.theme--catppuccin-mocha code .hljs-section{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-tag{color:#a6adc8}html.theme--catppuccin-mocha code .hljs-name{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-attr{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-attribute{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-bullet{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-code{color:#a6e3a1}html.theme--catppuccin-mocha code .hljs-emphasis{color:#f38ba8;font-style:italic}html.theme--catppuccin-mocha code .hljs-strong{color:#f38ba8;font-weight:bold}html.theme--catppuccin-mocha code .hljs-formula{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-link{color:#74c7ec;font-style:italic}html.theme--catppuccin-mocha code .hljs-quote{color:#a6e3a1;font-style:italic}html.theme--catppuccin-mocha code .hljs-selector-tag{color:#f9e2af}html.theme--catppuccin-mocha code .hljs-selector-id{color:#89b4fa}html.theme--catppuccin-mocha code .hljs-selector-class{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-selector-attr{color:#cba6f7}html.theme--catppuccin-mocha code .hljs-selector-pseudo{color:#94e2d5}html.theme--catppuccin-mocha code .hljs-template-tag{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-template-variable{color:#f2cdcd}html.theme--catppuccin-mocha code .hljs-addition{color:#a6e3a1;background:rgba(166,227,161,0.15)}html.theme--catppuccin-mocha code .hljs-deletion{color:#f38ba8;background:rgba(243,139,168,0.15)}html.theme--catppuccin-mocha .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover,html.theme--catppuccin-mocha .search-result-link:focus{background-color:#313244}html.theme--catppuccin-mocha .search-result-link .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link .search-filter{transition:all 300ms}html.theme--catppuccin-mocha .search-result-link:hover .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:hover .search-filter,html.theme--catppuccin-mocha .search-result-link:focus .property-search-result-badge,html.theme--catppuccin-mocha .search-result-link:focus .search-filter{color:#313244 !important;background-color:#b4befe !important}html.theme--catppuccin-mocha .search-result-title{color:#cdd6f4}html.theme--catppuccin-mocha .search-result-highlight{background-color:#f38ba8;color:#181825}html.theme--catppuccin-mocha .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--catppuccin-mocha .w-100{width:100%}html.theme--catppuccin-mocha .gap-2{gap:0.5rem}html.theme--catppuccin-mocha .gap-4{gap:1rem} diff --git a/v0.8.7/assets/themes/documenter-dark.css b/v0.8.7/assets/themes/documenter-dark.css new file mode 100644 index 0000000000..2892b385e0 --- /dev/null +++ b/v0.8.7/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +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:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 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}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{-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 .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb: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{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:9999px;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 .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | 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,video{height:auto;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:inherit}.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-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !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-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#f4c72f !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#e4b30c !important}.has-background-warning{background-color:#f4c72f !important}.has-text-warning-light{color:#fefaec !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fbedbb !important}.has-background-warning-light{background-color:#fefaec !important}.has-text-warning-dark{color:#8c6e07 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#bd940a !important}.has-background-warning-dark{background-color:#8c6e07 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !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}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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,html.theme--documenter-dark .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}.is-underlined{text-decoration:underline !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}}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 optgroup,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:inherit}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 0.5em 1em -0.125em 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.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 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.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 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-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}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:#fff;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:#0a0a0a;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:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);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:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !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:rgba(0,0,0,0.7)}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 rgba(0,0,0,0.7) rgba(0,0,0,0.7) !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:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7);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:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}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:#fff}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:#fff}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:#fff}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:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;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:#f2f2f2}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:#fff;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 #fff #fff !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:#fff}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 #fff #fff !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:#fff;color:#fff}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:#fff;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:#fff;box-shadow:none;color:#fff}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:#375a7f;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-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}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:#1abc9c;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-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#3355c9;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(60,93,205,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}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:#3c5dcd}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:#3c5dcd;color:#3c5dcd}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:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !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:#3c5dcd;box-shadow:none;color:#3c5dcd}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:#3c5dcd}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 #3c5dcd #3c5dcd !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-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#228f11;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(37,154,18,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#259a12}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:#259a12}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:#259a12;color:#259a12}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:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !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:#259a12;box-shadow:none;color:#259a12}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:#259a12}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 #259a12 #259a12 !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-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}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(244,199,47,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#f4c72f;border-color:#f4c72f;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#f4c72f;color:#f4c72f}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:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #f4c72f #f4c72f !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 rgba(0,0,0,0.7) rgba(0,0,0,0.7) !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:#f4c72f;box-shadow:none;color:#f4c72f}html.theme--documenter-dark .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)}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:rgba(0,0,0,0.7);color:#f4c72f}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 #f4c72f #f4c72f !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:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fdf7e0;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fdf3d3;border-color:transparent;color:#8c6e07}html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#c13930;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(203,60,51,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}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:#cb3c33}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:#cb3c33;color:#cb3c33}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:#cb3c33;border-color:#cb3c33;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !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:#cb3c33;box-shadow:none;color:#cb3c33}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:#cb3c33}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 #cb3c33 #cb3c33 !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-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}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:#5e6d6f;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 * 0.5));top:calc(50% - (1em * 0.5));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:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}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:.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){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}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}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){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:inherit}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:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}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 .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}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:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}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;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}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{right:.5rem;position:absolute;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:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}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-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}html.theme--documenter-dark .notification.is-success{background-color:#259a12;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#effded;color:#2ec016}html.theme--documenter-dark .notification.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fefaec;color:#8c6e07}html.theme--documenter-dark .notification.is-danger{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fbefef;color:#c03930}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}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%, #343c3d 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%, #343c3d 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%, #343c3d 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%, #343c3d 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%, #343c3d 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%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#3c5dcd}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#259a12}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#259a12}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#f4c72f}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #f4c72f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#cb3c33}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 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:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}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:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}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:#3c5dcd;border-color:#3c5dcd;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#f4c72f;border-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;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 td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}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:.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:1rem}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-top-left-radius:0;border-bottom-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-top-right-radius:0;border-bottom-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:.75rem;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:.25rem;margin-right:-.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:rgba(0,0,0,0.7)}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:#fff}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-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}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-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}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:#3c5dcd;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}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:#259a12;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}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:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fefaec;color:#8c6e07}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:#cb3c33;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}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:.75rem}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:1rem}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:-.375em;margin-right:.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:.1875em;margin-right:-.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:-.375em;margin-right:-.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:9999px}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: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:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}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:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;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:#868c98}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:#868c98}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:#868c98}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:#868c98}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 0.0625em 0.125em rgba(10,10,10,0.05);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:#3c5dcd}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(60,93,205,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:#259a12}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(37,154,18,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:#f4c72f}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(244,199,47,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:#cb3c33}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(203,60,51,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:.75rem}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:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}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:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}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,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.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.5em}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:9999px;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:#3c5dcd}html.theme--documenter-dark .select.is-info select{border-color:#3c5dcd}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#3151bf}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(60,93,205,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#259a12}html.theme--documenter-dark .select.is-success select{border-color:#259a12}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#20830f}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(37,154,18,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select{border-color:#f4c72f}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#f3c017}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(244,199,47,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select{border-color:#cb3c33}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#b7362e}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(203,60,51,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:.75rem}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 !important;opacity:0.5}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:.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:.75rem}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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}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:#fff}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:#fff}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:#fff}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:#fff}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:#3c5dcd;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:#3355c9;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(60,93,205,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:#3151bf;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#259a12;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:#228f11;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(37,154,18,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:#20830f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#f4c72f;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#f3c423;border-color:transparent;color:rgba(0,0,0,0.7)}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(244,199,47,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#f3c017;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#cb3c33;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:#c13930;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(203,60,51,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:#b7362e;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:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}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:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}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:#282f2f;color:#fff}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:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;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:.75rem}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:.75rem;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:#3c5dcd}html.theme--documenter-dark .help.is-success{color:#259a12}html.theme--documenter-dark .help.is-warning{color:#f4c72f}html.theme--documenter-dark .help.is-danger{color:#cb3c33}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:.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:.75rem;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:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}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:#282f2f}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:.75rem}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:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;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.5em}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.5em}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:.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:.75rem}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:1rem;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:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.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:.75rem}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;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em 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:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}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 #ededed;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 #ededed}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:#171717;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:inherit;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:#ededed;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 .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.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:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}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:1rem}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:.75rem}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}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}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}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:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}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:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}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:#15987e}html.theme--documenter-dark .message.is-info{background-color:#eff2fb}html.theme--documenter-dark .message.is-info .message-header{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}html.theme--documenter-dark .message.is-success{background-color:#effded}html.theme--documenter-dark .message.is-success .message-header{background-color:#259a12;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#259a12;color:#2ec016}html.theme--documenter-dark .message.is-warning{background-color:#fefaec}html.theme--documenter-dark .message.is-warning .message-header{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-warning .message-body{border-color:#f4c72f;color:#8c6e07}html.theme--documenter-dark .message.is-danger{background-color:#fbefef}html.theme--documenter-dark .message.is-danger .message-header{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#cb3c33;color:#c03930}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:.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){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:.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:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}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:#fff}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:#fff}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:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@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:#fff}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:#fff}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:#fff}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:#fff}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:#fff}}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:#3c5dcd;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:#3151bf;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:#3151bf;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:#3151bf;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#259a12;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:#20830f;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:#20830f;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:#20830f;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}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:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@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:rgba(0,0,0,0.7)}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:#f3c017;color:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}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:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#f4c72f;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-danger{background-color:#cb3c33;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:#b7362e;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:#b7362e;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:#b7362e;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;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;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;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{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.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:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}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:9999px}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:9999px}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.5em}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-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.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}html.theme--documenter-dark .pagination-list li{list-style:none}@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,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}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;margin-bottom:0;margin-top:0}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{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#259a12;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#259a12}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#f4c72f;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#f4c72f}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#f4c72f}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}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:.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 .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}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:.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:1rem;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:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.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-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}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:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;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:.75rem}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;width:unset}.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.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.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.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.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.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.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.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.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;width:unset}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.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}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;width:unset}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.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}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;width:unset}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.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}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;width:unset}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.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}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;width:unset}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.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}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;width:unset}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.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}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.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}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.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}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{color:#fff !important;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{color:#0a0a0a !important;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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@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(0,0,0,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:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);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{color:#ecf0f1 !important;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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);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:#fff}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:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,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:#fff}@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(255,255,255,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:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;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{color:#282f2f !important;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:#fff}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:#fff;border-color:#fff;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{color:#375a7f !important;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{color:#1abc9c !important;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:#3c5dcd;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:#3c5dcd}}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:#3151bf;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{color:#3c5dcd !important;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:#3c5dcd}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#259a12;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:#259a12}}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:#20830f;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{color:#259a12 !important;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:#259a12}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#f4c72f;color:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#f4c72f}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(0,0,0,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:#f3c017;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);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{color:#f4c72f !important;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:rgba(0,0,0,0.7)}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:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f4c72f}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #f09100 0%, #f4c72f 71%, #faef42 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#cb3c33;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:#cb3c33}}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:#b7362e;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{color:#cb3c33 !important;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:#cb3c33}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 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:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}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}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}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:#5a76d5}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:#3c5dcd;box-shadow:0 0 0 2px rgba(60,93,205,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#2dbc16}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:#259a12;box-shadow:0 0 0 2px rgba(37,154,18,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#f6d153}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:#f4c72f;box-shadow:0 0 0 2px rgba(244,199,47,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#d35951}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:#cb3c33;box-shadow:0 0 0 2px rgba(203,60,51,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:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;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:rgba(0,0,0,0.7);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 6 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 6 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:2px;border-color:#dbdee0;border-radius:4px;font-size:1rem}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:.75rem}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:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#f4c72f}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#dbdee0;background-color:rgba(0,0,0,0);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 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}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:2px solid #5e6d6f;border-radius:4px;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}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 rgba(0,0,0,0);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:2px solid #5e6d6f;border-radius:4px}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}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;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}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{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}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:1rem;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:.95rem;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:.75rem;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 6 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:.85rem;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}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@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 kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}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}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.8.7/assets/themes/documenter-light.css b/v0.8.7/assets/themes/documenter-light.css new file mode 100644 index 0000000000..a435b3b63e --- /dev/null +++ b/v0.8.7/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.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.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 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}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-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),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb: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{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;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:9999px;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}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.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-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !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-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#3c5dcd !important}a.has-text-info:hover,a.has-text-info:focus{color:#2c48aa !important}.has-background-info{background-color:#3c5dcd !important}.has-text-info-light{color:#eff2fb !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#c6d0f0 !important}.has-background-info-light{background-color:#eff2fb !important}.has-text-info-dark{color:#3253c3 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#5571d3 !important}.has-background-info-dark{background-color:#3253c3 !important}.has-text-success{color:#259a12 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a6c0d !important}.has-background-success{background-color:#259a12 !important}.has-text-success-light{color:#effded !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c7f8bf !important}.has-background-success-light{background-color:#effded !important}.has-text-success-dark{color:#2ec016 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#3fe524 !important}.has-background-success-dark{background-color:#2ec016 !important}.has-text-warning{color:#a98800 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#765f00 !important}.has-background-warning{background-color:#a98800 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#cca400 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffcd00 !important}.has-background-warning-dark{background-color:#cca400 !important}.has-text-danger{color:#cb3c33 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a23029 !important}.has-background-danger{background-color:#cb3c33 !important}.has-text-danger-light{color:#fbefef !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#f1c8c6 !important}.has-background-danger-light{background-color:#fbefef !important}.has-text-danger-dark{color:#c03930 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#d35850 !important}.has-background-danger-dark{background-color:#c03930 !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}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !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}.is-underlined{text-decoration:underline !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}}/*! minireset.css v0.0.6 | 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,video{height:auto;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:inherit}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,optgroup,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:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em 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:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 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.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 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-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.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:#fff;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:#0a0a0a;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:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !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:rgba(0,0,0,0.7)}.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 rgba(0,0,0,0.7) rgba(0,0,0,0.7) !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:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7);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:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.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:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.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:#fff}.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:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;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:#f2f2f2}.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:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !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:#fff}.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 #fff #fff !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:#fff;color:#fff}.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:#fff;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:#fff;box-shadow:none;color:#fff}.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:#4eb5de;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-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.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:#2e63b8;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-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#3c5dcd;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#3355c9;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(60,93,205,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#3151bf;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3c5dcd;border-color:#3c5dcd;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3c5dcd}.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:#3c5dcd}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#3c5dcd;color:#3c5dcd}.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:#3c5dcd;border-color:#3c5dcd;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3c5dcd #3c5dcd !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:#3c5dcd;box-shadow:none;color:#3c5dcd}.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:#3c5dcd}.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 #3c5dcd #3c5dcd !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-info.is-light{background-color:#eff2fb;color:#3253c3}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e5e9f8;border-color:transparent;color:#3253c3}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#dae1f6;border-color:transparent;color:#3253c3}.button.is-success{background-color:#259a12;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#228f11;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(37,154,18,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#20830f;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#259a12;border-color:#259a12;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#259a12}.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:#259a12}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#259a12;color:#259a12}.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:#259a12;border-color:#259a12;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #259a12 #259a12 !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:#259a12;box-shadow:none;color:#259a12}.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:#259a12}.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 #259a12 #259a12 !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-success.is-light{background-color:#effded;color:#2ec016}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e5fce1;border-color:transparent;color:#2ec016}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#dbfad6;border-color:transparent;color:#2ec016}.button.is-warning{background-color:#a98800;border-color:transparent;color:#fff}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#9c7d00;border-color:transparent;color:#fff}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:#fff}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(169,136,0,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#8f7300;border-color:transparent;color:#fff}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#a98800;border-color:#a98800;box-shadow:none}.button.is-warning.is-inverted{background-color:#fff;color:#a98800}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#a98800}.button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;color:#a98800}.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:#a98800;border-color:#a98800;color:#fff}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #a98800 #a98800 !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 #fff #fff !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#a98800;box-shadow:none;color:#a98800}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.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:#fff;color:#a98800}.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 #a98800 #a98800 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning.is-light{background-color:#fffbeb;color:#cca400}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff9de;border-color:transparent;color:#cca400}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#cca400}.button.is-danger{background-color:#cb3c33;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#c13930;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(203,60,51,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#b7362e;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#cb3c33;border-color:#cb3c33;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#cb3c33}.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:#cb3c33}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#cb3c33;color:#cb3c33}.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:#cb3c33;border-color:#cb3c33;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #cb3c33 #cb3c33 !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:#cb3c33;box-shadow:none;color:#cb3c33}.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:#cb3c33}.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 #cb3c33 #cb3c33 !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-danger.is-light{background-color:#fbefef;color:#c03930}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#f8e6e5;border-color:transparent;color:#c03930}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#f6dcda;border-color:transparent;color:#c03930}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.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 * 0.5));top:calc(50% - (1em * 0.5));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:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.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:.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){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.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}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){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:inherit}.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-normal{font-size:1rem}.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}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.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:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.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;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.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{right:.5rem;position:absolute;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:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#3c5dcd;color:#fff}.notification.is-info.is-light{background-color:#eff2fb;color:#3253c3}.notification.is-success{background-color:#259a12;color:#fff}.notification.is-success.is-light{background-color:#effded;color:#2ec016}.notification.is-warning{background-color:#a98800;color:#fff}.notification.is-warning.is-light{background-color:#fffbeb;color:#cca400}.notification.is-danger{background-color:#cb3c33;color:#fff}.notification.is-danger.is-light{background-color:#fbefef;color:#c03930}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.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%, #ededed 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%, #ededed 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%, #ededed 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%, #ededed 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%, #ededed 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%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3c5dcd}.progress.is-info::-moz-progress-bar{background-color:#3c5dcd}.progress.is-info::-ms-fill{background-color:#3c5dcd}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #3c5dcd 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#259a12}.progress.is-success::-moz-progress-bar{background-color:#259a12}.progress.is-success::-ms-fill{background-color:#259a12}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #259a12 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#a98800}.progress.is-warning::-moz-progress-bar{background-color:#a98800}.progress.is-warning::-ms-fill{background-color:#a98800}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #a98800 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#cb3c33}.progress.is-danger::-moz-progress-bar{background-color:#cb3c33}.progress.is-danger::-ms-fill{background-color:#cb3c33}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #cb3c33 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 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:indeterminate::-ms-fill{animation-name:none}.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:#222}.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:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.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:#3c5dcd;border-color:#3c5dcd;color:#fff}.table td.is-success,.table th.is-success{background-color:#259a12;border-color:#259a12;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#a98800;border-color:#a98800;color:#fff}.table td.is-danger,.table th.is-danger{background-color:#cb3c33;border-color:#cb3c33;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 td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.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:.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-top-left-radius:0;border-bottom-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-top-right-radius:0;border-bottom-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:.25rem;margin-right:-.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:rgba(0,0,0,0.7)}.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:#fff}.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-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.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-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#3c5dcd;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#eff2fb;color:#3253c3}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#259a12;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#effded;color:#2ec016}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#a98800;color:#fff}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#cca400}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#cb3c33;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fbefef;color:#c03930}.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:-.375em;margin-right:.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:.1875em;margin-right:-.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:-.375em;margin-right:-.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:9999px}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:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.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:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;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}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;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:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.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 0.0625em 0.125em rgba(10,10,10,0.05);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:#3c5dcd}.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(60,93,205,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#259a12}.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(37,154,18,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#a98800}.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(169,136,0,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#cb3c33}.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(203,60,51,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:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.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:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.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:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.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:9999px;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:#222}.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:#3c5dcd}.select.is-info select{border-color:#3c5dcd}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#3151bf}.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(60,93,205,0.25)}.select.is-success:not(:hover)::after{border-color:#259a12}.select.is-success select{border-color:#259a12}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#20830f}.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(37,154,18,0.25)}.select.is-warning:not(:hover)::after{border-color:#a98800}.select.is-warning select{border-color:#a98800}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#8f7300}.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(169,136,0,0.25)}.select.is-danger:not(:hover)::after{border-color:#cb3c33}.select.is-danger select{border-color:#cb3c33}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#b7362e}.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(203,60,51,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 !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.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:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.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:#fff}.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:#fff}.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:#fff}.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:#3c5dcd;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#3355c9;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(60,93,205,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#3151bf;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#259a12;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#228f11;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(37,154,18,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#20830f;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#a98800;border-color:transparent;color:#fff}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#9c7d00;border-color:transparent;color:#fff}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(169,136,0,0.25);color:#fff}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#8f7300;border-color:transparent;color:#fff}.file.is-danger .file-cta{background-color:#cb3c33;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#c13930;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(203,60,51,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#b7362e;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.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:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.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:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;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:#3c5dcd}.help.is-success{color:#259a12}.help.is-warning{color:#a98800}.help.is-danger{color:#cb3c33}.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:.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:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.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:#222}.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.5em;pointer-events:none;position:absolute;top:0;width:2.5em;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.5em}.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.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.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:.5em}.breadcrumb .icon:last-child{margin-left:.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;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em 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:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.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 #ededed;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 #ededed}.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:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;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:inherit;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:#ededed;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}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.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:inherit}@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}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.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:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#eff2fb}.message.is-info .message-header{background-color:#3c5dcd;color:#fff}.message.is-info .message-body{border-color:#3c5dcd;color:#3253c3}.message.is-success{background-color:#effded}.message.is-success .message-header{background-color:#259a12;color:#fff}.message.is-success .message-body{border-color:#259a12;color:#2ec016}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#a98800;color:#fff}.message.is-warning .message-body{border-color:#a98800;color:#cca400}.message.is-danger{background-color:#fbefef}.message.is-danger .message-header{background-color:#cb3c33;color:#fff}.message.is-danger .message-body{border-color:#cb3c33;color:#c03930}.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:.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){.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:.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:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@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:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.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:#fff}.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:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@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:#fff}.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:#fff}.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:#fff}.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:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.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:#3c5dcd;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:#3151bf;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:#3151bf;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:#3151bf;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3c5dcd;color:#fff}}.navbar.is-success{background-color:#259a12;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:#20830f;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:#20830f;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:#20830f;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#259a12;color:#fff}}.navbar.is-warning{background-color:#a98800;color:#fff}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:#fff}.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:#8f7300;color:#fff}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-warning .navbar-burger{color:#fff}@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:#fff}.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:#8f7300;color:#fff}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}.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:#8f7300;color:#fff}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#a98800;color:#fff}}.navbar.is-danger{background-color:#cb3c33;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:#b7362e;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:#b7362e;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:#b7362e;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#cb3c33;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:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;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:#222;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{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.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:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.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:#222;min-width:2.5em}.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-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.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}.pagination-list li{list-style:none}@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,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.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{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#3c5dcd;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3c5dcd}.panel.is-info .panel-block.is-active .panel-icon{color:#3c5dcd}.panel.is-success .panel-heading{background-color:#259a12;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#259a12}.panel.is-success .panel-block.is-active .panel-icon{color:#259a12}.panel.is-warning .panel-heading{background-color:#a98800;color:#fff}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#a98800}.panel.is-warning .panel-block.is-active .panel-icon{color:#a98800}.panel.is-danger .panel-heading{background-color:#cb3c33;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#cb3c33}.panel.is-danger .panel-block.is-active .panel-icon{color:#cb3c33}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.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:.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}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}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:.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:.5em}.tabs .icon:last-child{margin-left:.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-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.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:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;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;width:unset}.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.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.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.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.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.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.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.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.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.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.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.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.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.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.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;width:unset}.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.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.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.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.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{color:#fff !important;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{color:#0a0a0a !important;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:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@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(0,0,0,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:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.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:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);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:#fff}.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:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,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:#fff}@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(255,255,255,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:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;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{color:#363636 !important;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:#fff}.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:#fff;border-color:#fff;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{color:#4eb5de !important;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{color:#2e63b8 !important;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:#3c5dcd;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:#3c5dcd}}.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:#3151bf;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{color:#3c5dcd !important;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:#3c5dcd}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #215bb5 0%, #3c5dcd 71%, #4b53d8 100%)}}.hero.is-success{background-color:#259a12;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:#259a12}}.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:#20830f;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{color:#259a12 !important;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:#259a12}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #287207 0%, #259a12 71%, #10b614 100%)}}.hero.is-warning{background-color:#a98800;color:#fff}.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:#fff}.hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#a98800}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(255,255,255,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:#8f7300;color:#fff}.hero.is-warning .tabs a{color:#fff;opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#a98800 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:#fff}.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:#fff;border-color:#fff;color:#a98800}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #764b00 0%, #a98800 71%, #c2bd00 100%)}}.hero.is-danger{background-color:#cb3c33;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:#cb3c33}}.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:#b7362e;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{color:#cb3c33 !important;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:#cb3c33}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ac1f2e 0%, #cb3c33 71%, #d66341 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.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}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.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 6 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 6 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:#f5f5f5;border-style:solid;border-width:2px;border-color:#4a4a4a;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:#f5f5f5;border-color:#4a4a4a}.admonition.is-default>.admonition-header{background-color:rgba(0,0,0,0);color:#4a4a4a}.admonition.is-default>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-info{background-color:#f5f5f5;border-color:#3c5dcd}.admonition.is-info>.admonition-header{background-color:rgba(0,0,0,0);color:#3c5dcd}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#f5f5f5;border-color:#259a12}.admonition.is-success>.admonition-header{background-color:rgba(0,0,0,0);color:#259a12}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#f5f5f5;border-color:#a98800}.admonition.is-warning>.admonition-header{background-color:rgba(0,0,0,0);color:#a98800}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#f5f5f5;border-color:#cb3c33}.admonition.is-danger>.admonition-header{background-color:rgba(0,0,0,0);color:#cb3c33}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#f5f5f5;border-color:#3489da}.admonition.is-compat>.admonition-header{background-color:rgba(0,0,0,0);color:#3489da}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#4a4a4a;background-color:rgba(0,0,0,0);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 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.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:2px solid #dbdbdb;border-radius:4px;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.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:#f5f5f5;color:rgba(0,0,0,0.7);border-bottom:3px solid rgba(0,0,0,0);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:2px solid #dbdbdb;border-radius:4px}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.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;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#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 6 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}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@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}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.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;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.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:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.8.7/assets/themeswap.js b/v0.8.7/assets/themeswap.js new file mode 100644 index 0000000000..9f5eebe6aa --- /dev/null +++ b/v0.8.7/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize 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 users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === 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 primaryLightTheme = null; + var primaryDarkTheme = 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. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = 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); + } + var activeTheme = null; + 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; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + 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; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.8.7/assets/trixi.drawio b/v0.8.7/assets/trixi.drawio new file mode 100644 index 0000000000..f13fe4a96c --- /dev/null +++ b/v0.8.7/assets/trixi.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/v0.8.7/assets/warner.js b/v0.8.7/assets/warner.js new file mode 100644 index 0000000000..3f6f5d0083 --- /dev/null +++ b/v0.8.7/assets/warner.js @@ -0,0 +1,52 @@ +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/v0.8.7/authors/index.html b/v0.8.7/authors/index.html new file mode 100644 index 0000000000..440dfa27b2 --- /dev/null +++ b/v0.8.7/authors/index.html @@ -0,0 +1,2 @@ + +Authors · Trixi.jl

Authors

Trixi.jl's development is coordinated by a group of principal developers, who are also its main contributors and who can be contacted in case of questions about Trixi.jl. In addition, there are contributors who have provided substantial additions or modifications. Together, these two groups form "The Trixi.jl Authors" as mentioned under License.

Principal Developers

Contributors

The following people contributed major additions or modifications to Trixi.jl and are listed in alphabetical order:

  • Maximilian D. Bertrand
  • Benjamin Bolm
  • Simon Candelaresi
  • Jesse Chan
  • Lars Christmann
  • Christof Czernik
  • Daniel Doehring
  • Patrick Ersing
  • Erik Faulhaber
  • Gregor Gassner
  • Lucas Gemein
  • Sven Goldberg
  • Joshua Lampert
  • Julia Odenthal
  • Sigrun Ortleb
  • Hendrik Ranocha
  • Warisa Roongaraya
  • Andrés M. Rueda-Ramírez
  • Felipe Santillan
  • Michael Schlottke-Lakemper
  • Toskan Theine
  • Andrew Winters
  • Huiyu Xie
diff --git a/v0.8.7/callbacks/index.html b/v0.8.7/callbacks/index.html new file mode 100644 index 0000000000..140c390862 --- /dev/null +++ b/v0.8.7/callbacks/index.html @@ -0,0 +1,15 @@ + +Callbacks · Trixi.jl

Callbacks

Many of the advanced features of Trixi.jl, such as adaptive mesh refinement, are implemented as callbacks. A callback is an algorithmic entity that gets passed to the ODE solver and is called at specific points during execution to perform certain tasks. Callbacks in Trixi.jl are either called after each time step (step callbacks) or after each stage of the ODE solver (stage callbacks).

callbacks_illustration

The advantage of callbacks over hard-coding all features is that it allows to extend Trixi.jl without modifying the internal source code. Trixi.jl provides callbacks for time step control, adaptive mesh refinement, I/O, and more.

Step callbacks

CFL-based time step control

Time step control can be performed with a StepsizeCallback. An example making use of this can be found at examples/tree_2d_dgsem/elixir_advection_basic.jl

Adaptive mesh refinement

Trixi.jl uses a hierarchical Cartesian mesh which can be locally refined in a solution-adaptive way. This can be used to speed up simulations with minimal loss in overall accuracy. Adaptive mesh refinement (AMR) can be used by passing an AMRCallback to the ODE solver. The AMRCallback requires a controller such as ControllerThreeLevel or ControllerThreeLevelCombined to tell the AMR algorithm which cells to refine/coarsen.

An example elixir using AMR can be found at examples/tree_2d_dgsem/elixir_advection_amr.jl.

Analyzing the numerical solution

The AnalysisCallback can be used to analyze the numerical solution, e.g. calculate errors or user-specified integrals, and print the results to the screen. The results can also be saved in a file. An example can be found at examples/tree_2d_dgsem/elixir_euler_vortex.jl. Note that the errors (e.g. L2 error or Linf error) are computed with respect to the initial condition. The percentage of the simulation time refers to the ratio of the current time and the final time, i.e. it does not consider the maximal number of iterations. So the simulation could finish before 100% are reached. Note that, e.g., due to AMR or smaller time step sizes, the simulation can actually take longer than the percentage indicates. In Performance metrics of the AnalysisCallback you can find a detailed description of the different performance metrics the AnalysisCallback computes.

I/O

Solution and restart files

To save the solution in regular intervals you can use a SaveSolutionCallback. It is also possible to create restart files using the SaveRestartCallback. An example making use of these can be found at examples/tree_2d_dgsem/elixir_advection_extended.jl. An example showing how to restart a simulation from a restart file can be found at examples/tree_2d_dgsem/elixir_advection_restart.jl.

Time series

Sometimes it is useful to record the evaluations of state variables over time at a given set of points. This can be achieved by the TimeSeriesCallback, which is used, e.g., in examples/tree_2d_dgsem/elixir_acoustics_gaussian_source.jl. The TimeSeriesCallback constructor expects a semidiscretization and a list of points at which the solution should be recorded in regular time step intervals. After the last time step, the entire record is stored in an HDF5 file.

For the points, two different input formats are supported: You can either provide them as a list of tuples, which is handy if you specify them by hand on the REPL. Alternatively, you can provide them as a two-dimensional array, where the first dimension is the point number and the second dimension is the coordinate dimension. This is especially useful when reading them from a file.

For example, to record the primitive variables at the points (0.0, 0.0) and (-1.0, 0.5) every five timesteps and storing the collected data in the file tseries.h5, you can create the TimeSeriesCallback as

time_series = TimeSeriesCallback(semi, [(0.0, 0.0), (-1.0, 0.5)];
+                                 interval=5,
+                                 solution_variables=cons2prim,
+                                 filename="tseries.h5")

For a full list of possible arguments, please check the documentation for the TimeSeriesCallback. As an alternative to specifying the point coordinates directly in the elixir or on the REPL, you can read them from a file. For instance, with a text file points.dat with content

 0.0 0.0
+-1.0 0.5

you can create a time series callback with

using DelimitedFiles: readdlm
+time_series = TimeSeriesCallback(semi, readdlm("points.dat"))

To plot the individual point data series over time, you can create a PlotData1D from the TimeSeriesCallback and a given point ID. For example, executing

julia> using Trixi, Plots
+
+julia> trixi_include(joinpath(examples_dir(), "tree_2d_dgsem", "elixir_acoustics_gaussian_source.jl"))
+
+julia> pd1 = PlotData1D(time_series, 1)
+
+julia> pd2 = PlotData1D(time_series, 2)
+
+julia> plot(pd1["p_prime"]); plot!(pd2["p_prime"], xguide="t")

will yield the following plot:

image

Miscellaneous

Equation-specific callbacks

Some callbacks provided by Trixi.jl implement specific features for certain equations:

Usage of step callbacks

Step callbacks are passed to the solve method from the ODE solver via the keyword argument callback. If you want to use a single callback cb, pass it as callback=cb. When using two or more callbacks, you need to turn them into a CallbackSet first by calling callbacks = CallbackSet(cb1, cb2) and passing it as callback=callbacks.

Note

There are some restrictions regarding the order of callbacks in a CallbackSet.

The callbacks are called after each time step but some callbacks actually belong to the next time step. Therefore, the callbacks should be ordered in the following way:

  • Callbacks that belong to the current time step:
    • SummaryCallback controls, among other things, timers and should thus be first
    • SteadyStateCallback may mark a time step as the last one
    • AnalysisCallback may do some checks that mark a time step as the last one
    • AliveCallback should be nearby AnalysisCallback
    • SaveSolutionCallback/SaveRestartCallback should save the current solution before it is degraded by AMR
    • VisualizationCallback should be called before the mesh is adapted
  • Callbacks that belong to the next time step:
    • AMRCallback
    • StepsizeCallback must be called after AMRCallback to accommodate potential changes to the mesh
    • GlmSpeedCallback must be called after StepsizeCallback because the step size affects the value of c_h
    • LBMCollisionCallback is already part of the calculations of the next time step and should therefore be called after StepsizeCallback

Stage callbacks

PositivityPreservingLimiterZhangShu is a positivity-preserving limiter, used to enforce physical constraints. An example elixir using this feature can be found at examples/tree_2d_dgsem/elixir_euler_positivity.jl.

Implementing new callbacks

Since Trixi.jl is compatible with OrdinaryDiffEq.jl, both packages share the same callback interface. A detailed description of it can be found in the OrdinaryDiffEq.jl documentation. Step callbacks are just called callbacks. Stage callbacks are called stage_limiter!.

An example elixir showing how to implement a new simple stage callback and a new simple step callback can be found at examples/tree_2d_dgsem/elixir_advection_callbacks.jl.

diff --git a/v0.8.7/changelog/index.html b/v0.8.7/changelog/index.html new file mode 100644 index 0000000000..1942ecac3b --- /dev/null +++ b/v0.8.7/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · Trixi.jl

Changelog

Trixi.jl follows the interpretation of semantic versioning (semver) used in the Julia ecosystem. Notable changes will be documented in this file for human readability.

Changes when updating to v0.8 from v0.7.x

Added

Changed

  • The specification of boundary names on which AnalysisSurfaceIntegrals are computed (such as drag and lift coefficients) has changed from Symbol and Vector{Symbol} to NTuple{Symbol}. Thus, for one boundary the syntax changes from :boundary to (:boundary,) and for Vectors [:boundary1, :boundary2] to (:boundary1, :boundary2) (#1959).
  • The names of output files like the one created from the SaveSolutionCallback have changed from %06d to %09d to allow longer-running simulations (#1996).

Deprecated

Removed

Changes in the v0.7 lifecycle

Added

  • Implementation of TimeSeriesCallback for curvilinear meshes on UnstructuredMesh2D and extension to 1D and 3D on TreeMesh (#1855, #1873).
  • Implementation of 1D Linearized Euler Equations (#1867).
  • New analysis callback for 2D P4estMesh to compute integrated quantities along a boundary surface, e.g., pressure lift and drag coefficients (#1812).
  • Optional tuple parameter for GlmSpeedCallback called semi_indices to specify for which semidiscretization of a SemidiscretizationCoupled we need to update the GLM speed (#1835).
  • Subcell local one-sided limiting support for nonlinear variables in 2D for TreeMesh (#1792).
  • New time integrator PairedExplicitRK2, implementing the second-order paired explicit Runge-Kutta method with Convex.jl and ECOS.jl (#1908)
  • Add subcell limiting support for StructuredMesh (#1946).

Changes when updating to v0.7 from v0.6.x

Added

Changed

  • The default wave speed estimate used within flux_hll is now min_max_speed_davis instead of min_max_speed_naive.

Deprecated

Removed

  • Some specialized shallow water specific features are no longer available directly in Trixi.jl, but are moved to a dedicated repository: TrixiShallowWater.jl. This includes all features related to wetting and drying, as well as the ShallowWaterTwoLayerEquations1D and ShallowWaterTwoLayerEquations2D. However, the basic shallow water equations are still part of Trixi.jl. We'll also be updating the TrixiShallowWater.jl documentation with instructions on how to use these relocated features in the future.

Changes in the v0.6 lifecycle

Added

  • AMR for hyperbolic-parabolic equations on 3D P4estMesh
  • flux_hllc on non-cartesian meshes for CompressibleEulerEquations{2,3}D
  • Different boundary conditions for quad/hex meshes in Abaqus format, even if not generated by HOHQMesh, can now be digested by Trixi in 2D and 3D.
  • Subcell (positivity) limiting support for nonlinear variables in 2D for TreeMesh
  • Added Lighthill-Whitham-Richards (LWR) traffic model

Changes when updating to v0.6 from v0.5.x

Added

  • AMR for hyperbolic-parabolic equations on 2D P4estMesh

Changed

  • The wave speed estimates for flux_hll, FluxHLL() are now consistent across equations. In particular, the functions min_max_speed_naive, min_max_speed_einfeldt are now conceptually identical across equations. Users, who have been using flux_hll for MHD have now to use flux_hlle in order to use the Einfeldt wave speed estimate.
  • Parabolic diffusion terms are now officially supported and not marked as experimental anymore.

Deprecated

Removed

  • The neural network-based shock indicators have been migrated to a new repository TrixiSmartShockFinder.jl. To continue using the indicators, you will need to use both Trixi.jl and TrixiSmartShockFinder.jl, as explained in the latter packages' README.md.

Changes in the v0.5 lifecycle

Added

  • Experimental support for 3D parabolic diffusion terms has been added.
  • Non-uniform TreeMesh available for hyperbolic-parabolic equations.
  • Capability to set truly discontinuous initial conditions in 1D.
  • Wetting and drying feature and examples for 1D and 2D shallow water equations
  • Implementation of the polytropic Euler equations in 2D
  • Implementation of the quasi-1D shallow water and compressible Euler equations
  • Subcell (positivity and local min/max) limiting support for conservative variables in 2D for TreeMesh
  • AMR for hyperbolic-parabolic equations on 2D/3D TreeMesh
  • Added GradientVariables type parameter to AbstractEquationsParabolic

Changed

  • The required Julia version is updated to v1.8 in Trixi.jl v0.5.13.

Deprecated

  • The macro @unpack (re-exported originally from UnPack.jl) is deprecated and will be removed. Consider using Julia's standard destructuring syntax (; a, b) = stuff instead of @unpack a, b = stuff.
  • The constructor DGMultiMesh(dg; cells_per_dimension, kwargs...) is deprecated and will be removed. The new constructor DGMultiMesh(dg, cells_per_dimension; kwargs...) does not have cells_per_dimesion as a keyword argument.

Removed

Changes when updating to v0.5 from v0.4.x

Added

Changed

  • Compile-time boolean indicators have been changed from Val{true}/Val{false} to Trixi.True/Trixi.False. This affects user code only if new equations with nonconservative terms are created. Change Trixi.has_nonconservative_terms(::YourEquations) = Val{true}() to Trixi.has_nonconservative_terms(::YourEquations) = Trixi.True().
  • The (non-exported) DGSEM function split_form_kernel! has been renamed to flux_differencing_kernel!
  • Trixi.jl updated its dependency P4est.jl from v0.3 to v0.4. The new bindings of the C library p4est have been generated using Clang.jl instead of CBinding.jl v0.9. This affects only user code that is interacting directly with p4est, e.g., because custom refinement functions have been passed to p4est. Please consult the NEWS.md of P4est.jl for further information.

Deprecated

  • The signature of the DGMultiMesh constructors has changed - the dg::DGMulti argument now comes first.
  • The undocumented and unused DGMultiMesh(triangulateIO, rd::RefElemData{2, Tri}, boundary_dict::Dict{Symbol, Int}) constructor was removed.

Removed

  • Everything deprecated in Trixi.jl v0.4.x has been removed.

Changes in the v0.4 lifecycle

Added

  • Implementation of linearized Euler equations in 2D
  • Experimental support for upwind finite difference summation by parts (FDSBP) has been added in Trixi.jl v0.4.55. The first implementation requires a TreeMesh and comes with several examples in the examples_dir() of Trixi.jl.
  • Experimental support for 2D parabolic diffusion terms has been added.
    • LaplaceDiffusion2D and CompressibleNavierStokesDiffusion2D can be used to add
    diffusion to systems. LaplaceDiffusion2D can be used to add scalar diffusion to each equation of a system, while CompressibleNavierStokesDiffusion2D can be used to add Navier-Stokes diffusion to CompressibleEulerEquations2D.
    • Parabolic boundary conditions can be imposed as well. For LaplaceDiffusion2D, both
    Dirichlet and Neumann conditions are supported. For CompressibleNavierStokesDiffusion2D, viscous no-slip velocity boundary conditions are supported, along with adiabatic and isothermal temperature boundary conditions. See the boundary condition container BoundaryConditionNavierStokesWall and boundary condition types NoSlip, Adiabatic, and Isothermal for more information.
    • CompressibleNavierStokesDiffusion2D can utilize both primitive variables (which are not
    guaranteed to provably dissipate entropy) and entropy variables (which provably dissipate entropy at the semi-discrete level).
    • Please check the examples directory for further information about the supported setups. Further documentation will be added later.
  • Numerical fluxes flux_shima_etal_turbo and flux_ranocha_turbo that are equivalent to their non-_turbo counterparts but may enable specialized methods making use of SIMD instructions to increase runtime efficiency
  • Support for (periodic and non-periodic) SBP operators of SummationByPartsOperators.jl as approximation type in DGMulti solvers
  • Initial support for MPI-based parallel simulations using non-conforming meshes of type P4estMesh in 2D and 3D including adaptive mesh refinement

Removed

  • The VertexMappedMesh type is removed in favor of the DGMultiMesh type. The VertexMappedMesh constructor is deprecated.

Changed

  • The required Julia version is updated to v1.7.
  • The isentropic vortex setups contained a bug that was fixed in Trixi.jl v0.4.54. Moreover, the setup was made a bit more challenging. See https://github.com/trixi-framework/Trixi.jl/issues/1269 for further information.

Deprecated

  • The DGMultiMesh constructor which uses a rd::RefElemData argument is deprecated in favor of the constructor which uses a dg::DGMulti argument instead.

Changes when updating to v0.4 from v0.3.x

Added

  • Experimental support for artificial neural network-based indicators for shock capturing and adaptive mesh refinement (#632)
  • Experimental support for direct-hybrid aeroacoustics simulations (#712)
  • Implementation of shallow water equations in 2D
  • Experimental support for interactive visualization with Makie.jl

Changed

  • Implementation of acoustic perturbation equations now uses the conservative form, i.e. the perturbed pressure p_prime has been replaced with p_prime_scaled = p_prime / c_mean^2.
  • Removed the experimental BoundaryConditionWall and instead directly compute slip wall boundary condition flux term using the function boundary_condition_slip_wall.
  • Renamed advectionvelocity in LinearScalarAdvectionEquation to advection_velocity.
  • The signature of indicators used for adaptive mesh refinement (AMR) and shock capturing changed to generalize them to curved meshes.

Deprecated

Removed

  • Many initial/boundary conditions and source terms for typical setups were moved from Trixi/src to the example elixirs Trixi/examples. Thus, they are no longer available when using Trixi, e.g., the initial condition for the Kelvin Helmholtz instability.
  • Features deprecated in v0.3 were removed.

Changes in the v0.3 lifecycle

Added

  • Support for automatic differentiation, e.g. jacobian_ad_forward
  • In-situ visualization and post hoc visualization with Plots.jl
  • New systems of equations
    • multicomponent compressible Euler and MHD equations
    • acoustic perturbation equations
    • Lattice-Boltzmann equations
  • Composable FluxPlusDissipation and FluxLaxFriedrichs(), FluxHLL() with adaptable wave speed estimates were added in #493
  • New structured, curvilinear, conforming mesh type StructuredMesh
  • New unstructured, curvilinear, conforming mesh type UnstructuredMesh2D in 2D
  • New unstructured, curvilinear, adaptive (non-conforming) mesh type P4estMesh in 2D and 3D
  • Experimental support for finite difference (FD) summation-by-parts (SBP) methods via SummationByPartsOperators.jl
  • New support for modal DG and SBP-DG methods on triangular and tetrahedral meshes via StartUpDG.jl

Changed

  • flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations2D) and flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations3D) were actually using the logic of flux_godunov. Thus, they were renamed accordingly in #493. This is considered a bugfix (released in Trixi.jl v0.3.22).
  • The required Julia version is updated to v1.6.

Deprecated

  • calcfluxflux (#463)
  • flux_upwindflux_godunov
  • flux_hindenlangflux_hindenlang_gassner
  • Providing the keyword argument solution_variables of SaveSolutionCallback as Symbol is deprecated in favor of using functions like cons2cons and cons2prim
  • varnames_cons(equations)varnames(cons2cons, equations)
  • varnames_prim(equations)varnames(cons2prim, equations)
  • The old interface for nonconservative terms is deprecated. In particular, passing only a single two-point numerical flux for nonconservative is deprecated. The new interface is described in a tutorial. Now, a tuple of two numerical fluxes of the form (conservative_flux, nonconservative_flux) needs to be passed for nonconservative equations, see #657.

Removed

diff --git a/v0.8.7/changelog_tmp/index.html b/v0.8.7/changelog_tmp/index.html new file mode 100644 index 0000000000..d327fca292 --- /dev/null +++ b/v0.8.7/changelog_tmp/index.html @@ -0,0 +1,2 @@ + +Changelog · Trixi.jl

Changelog

Trixi.jl follows the interpretation of semantic versioning (semver) used in the Julia ecosystem. Notable changes will be documented in this file for human readability.

Changes when updating to v0.8 from v0.7.x

Added

Changed

  • The specification of boundary names on which AnalysisSurfaceIntegrals are computed (such as drag and lift coefficients) has changed from Symbol and Vector{Symbol} to NTuple{Symbol}. Thus, for one boundary the syntax changes from :boundary to (:boundary,) and for Vectors [:boundary1, :boundary2] to (:boundary1, :boundary2) (#1959).
  • The names of output files like the one created from the SaveSolutionCallback have changed from %06d to %09d to allow longer-running simulations (#1996).

Deprecated

Removed

Changes in the v0.7 lifecycle

Added

  • Implementation of TimeSeriesCallback for curvilinear meshes on UnstructuredMesh2D and extension to 1D and 3D on TreeMesh (#1855, #1873).
  • Implementation of 1D Linearized Euler Equations (#1867).
  • New analysis callback for 2D P4estMesh to compute integrated quantities along a boundary surface, e.g., pressure lift and drag coefficients (#1812).
  • Optional tuple parameter for GlmSpeedCallback called semi_indices to specify for which semidiscretization of a SemidiscretizationCoupled we need to update the GLM speed (#1835).
  • Subcell local one-sided limiting support for nonlinear variables in 2D for TreeMesh (#1792).
  • New time integrator PairedExplicitRK2, implementing the second-order paired explicit Runge-Kutta method with Convex.jl and ECOS.jl (#1908)
  • Add subcell limiting support for StructuredMesh (#1946).

Changes when updating to v0.7 from v0.6.x

Added

Changed

  • The default wave speed estimate used within flux_hll is now min_max_speed_davis instead of min_max_speed_naive.

Deprecated

Removed

  • Some specialized shallow water specific features are no longer available directly in Trixi.jl, but are moved to a dedicated repository: TrixiShallowWater.jl. This includes all features related to wetting and drying, as well as the ShallowWaterTwoLayerEquations1D and ShallowWaterTwoLayerEquations2D. However, the basic shallow water equations are still part of Trixi.jl. We'll also be updating the TrixiShallowWater.jl documentation with instructions on how to use these relocated features in the future.

Changes in the v0.6 lifecycle

Added

  • AMR for hyperbolic-parabolic equations on 3D P4estMesh
  • flux_hllc on non-cartesian meshes for CompressibleEulerEquations{2,3}D
  • Different boundary conditions for quad/hex meshes in Abaqus format, even if not generated by HOHQMesh, can now be digested by Trixi in 2D and 3D.
  • Subcell (positivity) limiting support for nonlinear variables in 2D for TreeMesh
  • Added Lighthill-Whitham-Richards (LWR) traffic model

Changes when updating to v0.6 from v0.5.x

Added

  • AMR for hyperbolic-parabolic equations on 2D P4estMesh

Changed

  • The wave speed estimates for flux_hll, FluxHLL() are now consistent across equations. In particular, the functions min_max_speed_naive, min_max_speed_einfeldt are now conceptually identical across equations. Users, who have been using flux_hll for MHD have now to use flux_hlle in order to use the Einfeldt wave speed estimate.
  • Parabolic diffusion terms are now officially supported and not marked as experimental anymore.

Deprecated

Removed

  • The neural network-based shock indicators have been migrated to a new repository TrixiSmartShockFinder.jl. To continue using the indicators, you will need to use both Trixi.jl and TrixiSmartShockFinder.jl, as explained in the latter packages' README.md.

Changes in the v0.5 lifecycle

Added

  • Experimental support for 3D parabolic diffusion terms has been added.
  • Non-uniform TreeMesh available for hyperbolic-parabolic equations.
  • Capability to set truly discontinuous initial conditions in 1D.
  • Wetting and drying feature and examples for 1D and 2D shallow water equations
  • Implementation of the polytropic Euler equations in 2D
  • Implementation of the quasi-1D shallow water and compressible Euler equations
  • Subcell (positivity and local min/max) limiting support for conservative variables in 2D for TreeMesh
  • AMR for hyperbolic-parabolic equations on 2D/3D TreeMesh
  • Added GradientVariables type parameter to AbstractEquationsParabolic

Changed

  • The required Julia version is updated to v1.8 in Trixi.jl v0.5.13.

Deprecated

  • The macro @unpack (re-exported originally from UnPack.jl) is deprecated and will be removed. Consider using Julia's standard destructuring syntax (; a, b) = stuff instead of @unpack a, b = stuff.
  • The constructor DGMultiMesh(dg; cells_per_dimension, kwargs...) is deprecated and will be removed. The new constructor DGMultiMesh(dg, cells_per_dimension; kwargs...) does not have cells_per_dimesion as a keyword argument.

Removed

Changes when updating to v0.5 from v0.4.x

Added

Changed

  • Compile-time boolean indicators have been changed from Val{true}/Val{false} to Trixi.True/Trixi.False. This affects user code only if new equations with nonconservative terms are created. Change Trixi.has_nonconservative_terms(::YourEquations) = Val{true}() to Trixi.has_nonconservative_terms(::YourEquations) = Trixi.True().
  • The (non-exported) DGSEM function split_form_kernel! has been renamed to flux_differencing_kernel!
  • Trixi.jl updated its dependency P4est.jl from v0.3 to v0.4. The new bindings of the C library p4est have been generated using Clang.jl instead of CBinding.jl v0.9. This affects only user code that is interacting directly with p4est, e.g., because custom refinement functions have been passed to p4est. Please consult the NEWS.md of P4est.jl for further information.

Deprecated

  • The signature of the DGMultiMesh constructors has changed - the dg::DGMulti argument now comes first.
  • The undocumented and unused DGMultiMesh(triangulateIO, rd::RefElemData{2, Tri}, boundary_dict::Dict{Symbol, Int}) constructor was removed.

Removed

  • Everything deprecated in Trixi.jl v0.4.x has been removed.

Changes in the v0.4 lifecycle

Added

  • Implementation of linearized Euler equations in 2D
  • Experimental support for upwind finite difference summation by parts (FDSBP) has been added in Trixi.jl v0.4.55. The first implementation requires a TreeMesh and comes with several examples in the examples_dir() of Trixi.jl.
  • Experimental support for 2D parabolic diffusion terms has been added.
    • LaplaceDiffusion2D and CompressibleNavierStokesDiffusion2D can be used to add
    diffusion to systems. LaplaceDiffusion2D can be used to add scalar diffusion to each equation of a system, while CompressibleNavierStokesDiffusion2D can be used to add Navier-Stokes diffusion to CompressibleEulerEquations2D.
    • Parabolic boundary conditions can be imposed as well. For LaplaceDiffusion2D, both
    Dirichlet and Neumann conditions are supported. For CompressibleNavierStokesDiffusion2D, viscous no-slip velocity boundary conditions are supported, along with adiabatic and isothermal temperature boundary conditions. See the boundary condition container BoundaryConditionNavierStokesWall and boundary condition types NoSlip, Adiabatic, and Isothermal for more information.
    • CompressibleNavierStokesDiffusion2D can utilize both primitive variables (which are not
    guaranteed to provably dissipate entropy) and entropy variables (which provably dissipate entropy at the semi-discrete level).
    • Please check the examples directory for further information about the supported setups. Further documentation will be added later.
  • Numerical fluxes flux_shima_etal_turbo and flux_ranocha_turbo that are equivalent to their non-_turbo counterparts but may enable specialized methods making use of SIMD instructions to increase runtime efficiency
  • Support for (periodic and non-periodic) SBP operators of SummationByPartsOperators.jl as approximation type in DGMulti solvers
  • Initial support for MPI-based parallel simulations using non-conforming meshes of type P4estMesh in 2D and 3D including adaptive mesh refinement

Removed

  • The VertexMappedMesh type is removed in favor of the DGMultiMesh type. The VertexMappedMesh constructor is deprecated.

Changed

  • The required Julia version is updated to v1.7.
  • The isentropic vortex setups contained a bug that was fixed in Trixi.jl v0.4.54. Moreover, the setup was made a bit more challenging. See https://github.com/trixi-framework/Trixi.jl/issues/1269 for further information.

Deprecated

  • The DGMultiMesh constructor which uses a rd::RefElemData argument is deprecated in favor of the constructor which uses a dg::DGMulti argument instead.

Changes when updating to v0.4 from v0.3.x

Added

  • Experimental support for artificial neural network-based indicators for shock capturing and adaptive mesh refinement (#632)
  • Experimental support for direct-hybrid aeroacoustics simulations (#712)
  • Implementation of shallow water equations in 2D
  • Experimental support for interactive visualization with Makie.jl

Changed

  • Implementation of acoustic perturbation equations now uses the conservative form, i.e. the perturbed pressure p_prime has been replaced with p_prime_scaled = p_prime / c_mean^2.
  • Removed the experimental BoundaryConditionWall and instead directly compute slip wall boundary condition flux term using the function boundary_condition_slip_wall.
  • Renamed advectionvelocity in LinearScalarAdvectionEquation to advection_velocity.
  • The signature of indicators used for adaptive mesh refinement (AMR) and shock capturing changed to generalize them to curved meshes.

Deprecated

Removed

  • Many initial/boundary conditions and source terms for typical setups were moved from Trixi/src to the example elixirs Trixi/examples. Thus, they are no longer available when using Trixi, e.g., the initial condition for the Kelvin Helmholtz instability.
  • Features deprecated in v0.3 were removed.

Changes in the v0.3 lifecycle

Added

  • Support for automatic differentiation, e.g. jacobian_ad_forward
  • In-situ visualization and post hoc visualization with Plots.jl
  • New systems of equations
    • multicomponent compressible Euler and MHD equations
    • acoustic perturbation equations
    • Lattice-Boltzmann equations
  • Composable FluxPlusDissipation and FluxLaxFriedrichs(), FluxHLL() with adaptable wave speed estimates were added in #493
  • New structured, curvilinear, conforming mesh type StructuredMesh
  • New unstructured, curvilinear, conforming mesh type UnstructuredMesh2D in 2D
  • New unstructured, curvilinear, adaptive (non-conforming) mesh type P4estMesh in 2D and 3D
  • Experimental support for finite difference (FD) summation-by-parts (SBP) methods via SummationByPartsOperators.jl
  • New support for modal DG and SBP-DG methods on triangular and tetrahedral meshes via StartUpDG.jl

Changed

  • flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations2D) and flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations3D) were actually using the logic of flux_godunov. Thus, they were renamed accordingly in #493. This is considered a bugfix (released in Trixi.jl v0.3.22).
  • The required Julia version is updated to v1.6.

Deprecated

  • calcfluxflux (#463)
  • flux_upwindflux_godunov
  • flux_hindenlangflux_hindenlang_gassner
  • Providing the keyword argument solution_variables of SaveSolutionCallback as Symbol is deprecated in favor of using functions like cons2cons and cons2prim
  • varnames_cons(equations)varnames(cons2cons, equations)
  • varnames_prim(equations)varnames(cons2prim, equations)
  • The old interface for nonconservative terms is deprecated. In particular, passing only a single two-point numerical flux for nonconservative is deprecated. The new interface is described in a tutorial. Now, a tuple of two numerical fluxes of the form (conservative_flux, nonconservative_flux) needs to be passed for nonconservative equations, see #657.

Removed

diff --git a/v0.8.7/code_of_conduct/index.html b/v0.8.7/code_of_conduct/index.html new file mode 100644 index 0000000000..285c9d0aa6 --- /dev/null +++ b/v0.8.7/code_of_conduct/index.html @@ -0,0 +1,2 @@ + +Code of Conduct · Trixi.jl

Code of Conduct

Contributor Covenant Code of Conduct

Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

Our Standards

Examples of behavior that contributes to a positive environment for our community include:

  • Demonstrating empathy and kindness toward other people
  • Being respectful of differing opinions, viewpoints, and experiences
  • Giving and gracefully accepting constructive feedback
  • Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
  • Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

  • The use of sexualized language or imagery, and sexual attention or advances of any kind
  • Trolling, insulting or derogatory comments, and personal or political attacks
  • Public or private harassment
  • Publishing others' private information, such as a physical or email address, without their explicit permission
  • Other conduct which could reasonably be considered inappropriate in a professional setting

Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to Michael Schlottke-Lakemper, Hendrik Ranocha, or any other of the principal developers responsible for enforcement listed in Authors. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

1. Correction

Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

2. Warning

Community Impact: A violation through a single incident or series of actions.

Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

3. Temporary Ban

Community Impact: A serious violation of community standards, including sustained inappropriate behavior.

Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

4. Permanent Ban

Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.

Consequence: A permanent ban from any sort of public interaction within the community.

Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/codeofconduct.html.

Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.

diff --git a/v0.8.7/contributing/index.html b/v0.8.7/contributing/index.html new file mode 100644 index 0000000000..2a193b71dc --- /dev/null +++ b/v0.8.7/contributing/index.html @@ -0,0 +1,38 @@ + +Contributing · Trixi.jl

Contributing

Trixi.jl is an open-source project and we are very happy to accept contributions from the community. Please feel free to open issues or submit patches (preferably as pull requests) any time. For planned larger contributions, it is often beneficial to get in contact with one of the principal developers first (see Authors).

Trixi.jl and its contributions are licensed under the MIT license (see License). As a contributor, you certify that all your contributions are in conformance with the Developer Certificate of Origin (Version 1.1), which is reproduced below.

Developer Certificate of Origin (Version 1.1)

The following text was taken from https://developercertificate.org:

Developer Certificate of Origin
+Version 1.1
+
+Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
+1 Letterman Drive
+Suite D4700
+San Francisco, CA, 94129
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+
+Developer's Certificate of Origin 1.1
+
+By making a contribution to this project, I certify that:
+
+(a) The contribution was created in whole or in part by me and I
+    have the right to submit it under the open source license
+    indicated in the file; or
+
+(b) The contribution is based upon previous work that, to the best
+    of my knowledge, is covered under an appropriate open source
+    license and I have the right under that license to submit that
+    work with modifications, whether created in whole or in part
+    by me, under the same open source license (unless I am
+    permitted to submit under a different license), as indicated
+    in the file; or
+
+(c) The contribution was provided directly to me by some other
+    person who certified (a), (b) or (c) and I have not modified
+    it.
+
+(d) I understand and agree that this project and the contribution
+    are public and that a record of the contribution (including all
+    personal information I submit with it, including my sign-off) is
+    maintained indefinitely and may be redistributed consistent with
+    this project or the open source license(s) involved.
diff --git a/v0.8.7/conventions/index.html b/v0.8.7/conventions/index.html new file mode 100644 index 0000000000..72d2b90b53 --- /dev/null +++ b/v0.8.7/conventions/index.html @@ -0,0 +1,26 @@ + +Conventions · Trixi.jl

Conventions

Spatial dimensions and directions

We use the following numbering schemes on Cartesian or curved structured meshes.

  • The orientations are numbered as 1 => x, 2 => y, 3 => z. For example, numerical fluxes such as flux_central(u_ll, u_rr, orientation, equations::AbstractEquations) use the orientation in this way.
  • The directions are numbered as 1 => -x, 2 => +x, 3 => -y, 4 => +y, 5 => -z, 6 => +z. For example, the boundary_conditions are ordered in this way when a Tuple of boundary conditions per direction is passed to the constructor of a SemidiscretizationHyperbolic.
  • For structured and unstructured curved meshes the concept of direction is generalized via the variable normal_direction. This variable points in the normal direction at a given, curved surface. For the computation of boundary fluxes the normal_direction is normalized to be a normal_vector used, for example, in FluxRotated.

Cells vs. elements vs. nodes

To uniquely distinguish between different components of the discretization, we use the following naming conventions:

  • The computational domain is discretized by a mesh, which is made up of individual cells. In general, neither the mesh nor the cells should be aware of any solver-specific knowledge, i.e., they should not store anything that goes beyond the geometrical information and the connectivity.
  • The numerical solvers do not directly store their information inside the mesh, but use own data structures. Specifically, for each cell on which a solver wants to operate, the solver creates an element to store solver-specific data.
  • For discretization schemes such as the discontinuous Galerkin or the finite element method, inside each element multiple nodes may be defined, which hold nodal information. The nodes are again a solver-specific component, just like the elements.
  • We often identify elements, nodes, etc. with their (local or global) integer index. Convenience iterators such as eachelement, eachnode use these indices.

Keywords in elixirs

Trixi.jl is distributed with several examples in the form of elixirs, small Julia scripts containing everything to set up and run a simulation. Working interactively from the Julia REPL with these scripts can be quite convenient while for exploratory research and development of Trixi.jl. For example, you can use the convenience function trixi_include to include an elixir with some modified arguments. To enable this, it is helpful to use a consistent naming scheme in elixirs, since trixi_include can only perform simple replacements. Some standard variables names are

  • polydeg for the polynomial degree of a solver
  • surface_flux for the numerical flux at surfaces
  • volume_flux for the numerical flux used in flux differencing volume terms

Moreover, convergence_test requires that the spatial resolution is set via the keywords

Variable names

  • Use descriptive names (using snake_case for variables/functions and CamelCase for types)
  • Use a suffix _ as in name_ for local variables that would otherwise hide existing symbols.
  • Use a prefix _ as in _name to indicate internal methods/data that are "fragile" in the sense that there's no guarantee that they might get changed without notice. These are also not documented with a docstring (but maybe with comments using #).

Array types and wrapping

To allow adaptive mesh refinement efficiently when using time integrators from OrdinaryDiffEq, Trixi.jl allows to represent numerical solutions in two different ways. Some discussion can be found online and in form of comments describing Trixi.wrap_array and Trixi.wrap_array_native in the source code of Trixi.jl. The flexibility introduced by this possible wrapping enables additional performance optimizations. However, it comes at the cost of some additional abstractions (and needs to be used with caution, as described in the source code of Trixi.jl). Thus, we use the following conventions to distinguish between arrays visible to the time integrator and wrapped arrays mainly used internally.

  • Arrays visible to the time integrator have a suffix _ode, e.g., du_ode, u_ode.
  • Wrapped arrays do not have a suffix, e.g., du, u.

Methods either accept arrays visible to the time integrator or wrapped arrays based on the following rules.

  • When some solution is passed together with a semidiscretization semi, the solution must be a u_ode that needs to be wrapped via wrap_array(u_ode, semi) (or wrap_array_native(u_ode, semi)) for further processing.
  • When some solution is passed together with the mesh, equations, solver, cache, ..., it is already wrapped via wrap_array (or wrap_array_native).
  • Exceptions of this rule are possible, e.g., for AMR, but must be documented in the code.
  • wrap_array should be used as default option. wrap_array_native should only be used when necessary, e.g., to avoid additional overhead when interfacing with external C libraries such as HDF5, MPI, or visualization.

Numeric types and type stability

In Trixi.jl, we use generic programming to support custom data types to store the numerical simulation data, including standard floating point types and automatic differentiation types. Specifically, Float32 and Float64 types are fully supported, including the ability to run Trixi.jl on hardware that only supports Float32 types. We ensure the type stability of these numeric types throughout the development process. Below are some guidelines to apply in various scenarios.

Exact floating-point numbers

Some real numbers can be represented exactly as both Float64 and Float32 values (e.g., 0.25, 0.5, 1/2). We prefer to use Float32 type for these numbers to achieve a concise way of possible type promotion. For example,

# Assume we have `0.25`, `0.5`, `1/2` in function
+0.25f0, 0.5f0, 0.5f0 # corresponding numbers

Generally, this equivalence is true for integer multiples of powers of two. That is, numbers that can be written as $m 2^n$, where $m, n \in \mathbb{Z}$, and where $m$ and $n$ are such that the result is representable as a single precision floating point value. If a decimal value v is exactly representable in Float32, the expression

Float32(v) == v

will evaluate to true.

Non-exact floating-point numbers

For real numbers that cannot be exactly represented in machine precision (e.g., 0.1, 1/3, pi), use the convert function to make them consistent with the type of the function input. For example,

# Assume we are handling `pi` in function
+function foo(..., input, ...)
+  RealT = eltype(input) # see **notes** below
+  # ...
+  c1 = convert(RealT, pi) * c2 # sample operation
+  # ...
+end

Integer numbers

Integers need special consideration. Using functions like convert (as mentioned above), zero, and one to change integers to a specific type or keeping them in integer format is feasible in most cases. We aim to balance code readability and consistency while maintaining type stability. Here are some examples to guide our developers.

# The first example - `SVector`, keep code consistency within `SVector`
+SVector(0, 0, 0)
+SVector(zero(RealT), zero(RealT), zero(RealT))
+Svector(one(RealT), one(RealT), one(RealT))
+
+# The second example - inner functions, keep them type-stable as well
+function foo(..., input, ...)
+RealT = eltype(input) # see **notes** below
+# ...
+c1 = c2 > 0.5f0 ? one(RealT) : convert(RealT, 0.1) # make type-stable
+# ...
+end 
+
+# The third example - some operations (e.g., `/`, `sqrt`, `inv`), convert them definitely
+c1 = convert(RealT, 4) # suppose we get RealT before
+c2 = 1 / c1
+c3 = sqrt(c1)
+c4 = inv(c1)

In general, in the case of integer numbers, our developers should apply a case-by-case strategy to maintain type stability.

Notes

  1. If the function gets a local pointwise vector of the solution variables u such as flux(u, equations), use u to determine the real type eltype(u).
  2. If u is not passed as an argument but a vector of coordinates x such as initial_condition(x, t, equations), use eltype(x) instead.
  3. Choose an appropriate argument to determine the real type otherwise.
diff --git a/v0.8.7/development/index.html b/v0.8.7/development/index.html new file mode 100644 index 0000000000..35dc49d4d4 --- /dev/null +++ b/v0.8.7/development/index.html @@ -0,0 +1,42 @@ + +Development · Trixi.jl

Development

Interactive use of Julia

When a Julia program is executed, Julia first loads and parses all code. Then, the just-in-time compiler has to compile all functions at their first use, which incurs an overhead each time a program is run. For proper packages and commands executed in the REPL (= "return-eval-print loop", which is what the Julia community calls the interactive command-line prompt that opens when executing julia without any files as arguments), however, the previously compiled functions are cached. Therefore, Trixi.jl should generally always be used interactively from the REPL without closing Julia during development, as it allows much faster turnaround times.

If you naively run Trixi.jl from the REPL, you will not be able to change your Trixi.jl source files and then run the changed code without restarting the REPL, which destroys any potential benefits from caching. However, restarting Julia can be avoided by using the Revise.jl package, which tracks changed files and re-loads them automatically. Therefore, it is highly recommended to first install Revise with the following command in Julia: To enter the package REPL mode, press ] in the standard Julia REPL mode. Then, execute

(@v1.9) pkg> add Revise

Now you are able to run Trixi.jl from the REPL, change Trixi.jl code between runs, and enjoy the advantages of the compilation cache! Before you start using Revise regularly, please be aware of some of the Pitfalls when using Revise.

Another recommended package for working from the REPL is OhMyREPL.jl. It can be installed by running

(@v1.9) pkg> add OhMyREPL

and adds syntax highlighting, bracket highlighting, and other helpful improvements for using Julia interactively. To automatically use OhMyREPL when starting the REPL, follow the instructions given in the official documentation.

Running Trixi.jl interactively in the global environment

If you've installed Trixi.jl and Revise in your default environment, begin by executing:

julia

This will start the Julia REPL. Then, run

julia> using Revise; using Trixi

You can run a simulation by executing

julia> trixi_include(default_example())

Together, all of these commands can take some time, roughly half a minute on a modern workstation. Most of the time is spent on compilation of Julia code etc. If you execute the last command again in the same REPL, it will finish within a few milliseconds (maybe ~45 on a modern workstation). This demonstrates the second reason for using the REPL: the compilation cache. That is, those parts of the code that do not change between two Trixi.jl runs do not need to be recompiled and thus execute much faster after the first run.

Manually starting Trixi.jl in the local environment

If you followed the installation instructions for developers, execute Julia with the project directory set to the run directory of the program/tool you want to use. For example, to run Trixi.jl this way, you need to start the REPL with

julia --project=path/to/Trixi.jl/run

and execute

julia> using Revise; using Trixi

to load Revise and Trixi.jl. You can then proceed with the usual commands and run Trixi.jl as in the example above. The --project flag is required such that Julia can properly load Trixi.jl and all dependencies if Trixi.jl is not installed in the global environment. The same procedure also applies should you opt to install the postprocessing tool Trixi2Vtk manually such that you can modify their implementations.

Pitfalls when using Revise

While Revise is a great help for developing Julia code, there are a few situations to watch out for when using Revise. The following list of potential issues is based on personal experiences of the Trixi.jl developers and probably incomplete. Further information on limitations and possible issues with Revise can be found in the official documentation.

If in doubt, restart the REPL

Oftentimes, it is possible to recover from issues with Revise by fixing the offending code. Sometimes, however, this is not possible or you might have troubles finding out what exactly caused the problems. Therefore, in these cases, or if in doubt, restart the REPL to get a fresh start.

Syntax errors are easy to miss

Revise does not stop on syntax errors, e.g., when you accidentally write a[i) instead of a[i]. In this case, Revise reports an error but continues to use the old version of your files! This is especially dangerous for syntax errors, as they are detected while Revise reloads changed code, which happens in the beginning of a new execution. Thus, the syntax error message quickly disappears from the terminal once Trixi.jl starts writing output to the screen and you might not even have noticed that an error occurred at all.

Therefore, when you are deep in a coding/debugging session and wonder why your code modifications do not seem to have any effect, scroll up in your terminal to check if you missed earlier syntax errors, or - if in doubt - restart your REPL.

Files are not tracked after changing branches

Sometimes, Revise stops tracking files when changing the Git branch. That is, modifications to Trixi.jl's source files will not be reloaded by Revise and thus have no effect of a currently running REPL session. This issue is particularly annoying for a developer, since it does not come with any warning! Therefore, it is good practice to always restart the REPL after changing branches.

Changes to type definitions are not allowed

Revise cannot handle changes to type definitions, e.g., when modifying the fields in a struct. In this case, Revise reports an error and refuses to run your code unless you undo the modifications. Once you undo the changes, Revise will usually continue to work as expected again. However, if you want to keep your type modifications, you need to restart the REPL.

Using the Julia REPL effectively

The Julia manual is an excellent resource to learn Julia. Here, we list some helpful commands than can increase your productivity in the Julia REPL.

  • Use the REPL help mode entered by typing ?.

    julia> using Trixi
    +
    +help?> trixi_include
    +search: trixi_include
    +
    +  trixi_include([mod::Module=Main,] elixir::AbstractString; kwargs...)
    +
    +  include the file elixir and evaluate its content in the global scope of module mod. You can override specific
    +  assignments in elixir by supplying keyword arguments. It's basic purpose is to make it easier to modify some
    +  parameters while running Trixi.jl from the REPL. Additionally, this is used in tests to reduce the computational
    +  burden for CI while still providing examples with sensible default values for users.
    +
    +  Examples
    +  ≡≡≡≡≡≡≡≡≡≡
    +
    +  julia> trixi_include(@__MODULE__, default_example(), tspan=(0.0, 0.1))
    +  [...]
    +
    +  julia> sol.t[end]
    +  0.1
  • You can copy and paste REPL history including julia> prompts into the REPL.

  • Use tab completion in the REPL, both for names of functions/types/variables and for function arguments.

    julia> flux_ranocha( # and TAB
    +flux_ranocha(u_ll, u_rr, orientation::Integer, equations::CompressibleEulerEquations1D) in Trixi at ~/.julia/dev/Trixi/src/equations/compressible_euler_1d.jl:390
    +flux_ranocha(u_ll, u_rr, orientation::Integer, equations::CompressibleEulerEquations2D) in Trixi at ~/.julia/dev/Trixi/src/equations/compressible_euler_2d.jl:839
    +[...]
  • Use methodswith to discover methods associated to a given type etc.

    julia> methodswith(CompressibleEulerEquations2D)
    +[1] initial_condition_convergence_test(x, t, equations::CompressibleEulerEquations2D) in Trixi at ~/.julia/dev/Trixi/src/equations/compressible_euler_2d.jl:51
    +[...]
  • Use @which (or @edit) for method calls.

    julia> @which trixi_include(default_example())
    +trixi_include(elixir::AbstractString; kwargs...) in Trixi at ~/.julia/dev/Trixi/src/auxiliary/special_elixirs.jl:36
  • Use apropos to search through the documentation and docstrings.

    julia> apropos("MHD")
    +Trixi.IdealGlmMhdEquations3D
    +Trixi.IdealGlmMhdMulticomponentEquations2D
    +Trixi.calc_fast_wavespeed_roe
    +Trixi.IdealGlmMhdEquations1D
    +Trixi.initial_condition_constant
    +Trixi.flux_nonconservative_powell
    +Trixi.GlmSpeedCallback
    +Trixi.flux_derigs_etal
    +Trixi.flux_hindenlang_gassner
    +Trixi.initial_condition_convergence_test
    +Trixi.min_max_speed_naive
    +Trixi.IdealGlmMhdEquations2D
    +Trixi.IdealGlmMhdMulticomponentEquations1D
    +[...]

Text editors

When writing code, the choice of text editor can have a significant impact on productivity and developer satisfaction. While using the default text editor of the operating system has its own benefits (specifically the lack of an explicit installation procure), usually it makes sense to switch to a more programming-friendly tool. In the following, a few of the many options are listed and discussed:

VS Code

Visual Studio Code is a modern open source editor with good support for Julia. While Juno had some better support in the past, the developers of Juno and the Julia VS Code plugin are joining forces and concentrating on VS Code since support of Atom has been suspended. Basically, all comments on Juno below also apply to VS Code.

Juno

If you are new to programming or do not have a preference for a text editor yet, Juno is a good choice for developing Julia code. It is based on Atom, a sophisticated and widely used editor for software developers, and is enhanced with several Julia-specific features. Furthermore and especially helpful for novice programmers, it has a MATLAB-like appearance with easy and interactive access to the current variables, the help system, and a debugger.

Vim or Emacs

Vim and Emacs are both very popular editors that work great with Julia. One of their advantages is that they are text editors without a GUI and as such are available for almost any operating system. They also are preinstalled on virtually all Unix-like systems. However, Vim and Emacs come with their own, steep learning curve if they have never been used before. Therefore, if in doubt, it is probably easier to get started with a classic GUI-based text editor (like Juno). If you decide to use Vim or Emacs, make sure that you install the corresponding Vim plugin julia-vim or Emacs major mode julia-emacs.

Debugging

Julia offers several options for debugging. A classical debugger is available with the Debugger.jl package or in the Julia extension for VS Code. However, it can be quite slow and, at the time of writing (January 2023), currently does not work properly with Trixi.jl. The Infiltrator.jl package on the other hand does not offer all features of a full debugger, but is a fast and simple tool that allows users to set breakpoints to open a local REPL session and access the call stack and variables.

Infiltrator

The Infiltrator package provides fast, interactive breakpoints using the @infiltrate command, which drops the user into a local REPL session. From there, it is possible to access local variables, see the call stack, and execute statements.

The package can be installed in the Julia REPL by executing

(@v1.9) pkg> add Infiltrator

To load the package in the Julia REPL execute

julia> using Infiltrator

Breakpoints can be set by adding a line with the @infiltrate macro at the respective position in the code. Use Revise if you want to set and delete breakpoints in your package without having to restart Julia.

Use `@autoinfiltrate` when debugging Trixi.jl

When running Julia inside a package environment, e.g., inside the source code of Trixi.jl itself, the @infiltrate macro only works if Infiltrator has been added to the package dependencies. To avoid this, you can use the (non-exported) @autoinfiltrate macro in Trixi.jl, which only requires Infiltrator.jl to be available in the current environment stack and will auto-load it for you.

Triggering the breakpoint starts a REPL session where it is possible to interact with the current local scope. Possible commands are:

  • @locals: Print the local variables.
  • @exfiltrate: Save the local variables to a global storage, which can be accessed with the safehouse variable outside the Infiltrator session.
  • @trace: Print the current stack trace.
  • Execute other arbitrary statements
  • ?: Print a help list with all options

To finish a debugging session, either use @continue to continue and eventually stop at the next breakpoint or @exit to skip further breakpoints. After the code has finished, local variables saved with @exfiltrate can be accessed in the REPL using the safehouse variable.

Limitations of using Infiltrator.jl are that local variables cannot be changed, and that it is not possible to step into further calls or access other function scopes.

Releasing a new version of Trixi.jl, Trixi2Vtk

  • Check whether everything is okay, tests pass etc.

  • Set the new version number in Project.toml according to the Julian version of semver. Commit and push.

  • Comment @JuliaRegistrator register on the commit setting the version number.

  • JuliaRegistrator will create a PR with the new version in the General registry. Wait for it to be merged.

  • Increment the version number in Project.toml again with suffix -pre. For example, if you have released version v0.2.0, use v0.2.1-pre as new version number.

  • When a new version of Trixi.jl was released, check whether the [compat] entries in test/Project.toml in Trixi2Vtk should be updated. When a new version of Trixi2Vtk was released, check whether the [compat] entries in docs/Project.toml in Trixi.jl should be updated.

    These entries will also be checked regularly by CompatHelper (once a day). Hence, if everything was released correctly, you should only need to do these checks manually if new minor versions with changes in the docs of Trixi2Vtk were released but no new version of Trixi.jl was released afterwards.

Preview of the documentation

You can build the documentation of Trixi.jl locally by running

julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'
+julia --project=docs --color=yes docs/make.jl

from the Trixi.jl main directory. Then, you can look at the html files generated in docs/build. For PRs triggered from branches inside the Trixi.jl main repository previews of the new documentation are generated at https://trixi-framework.github.io/Trixi.jl/previews/PRXXX, where XXX is the number of the PR. This does not work for PRs from forks for security reasons (since anyone could otherwise push arbitrary stuff to the Trixi.jl website, including malicious code).

Developing Trixi2Vtk

Trixi2Vtk has Trixi.jl as dependency and uses Trixi.jl's implementation to, e.g., load mesh files. When developing Trixi2Vtk, one may want to change functions in Trixi.jl to allow them to be reused in Trixi2Vtk. To use a locally modified Trixi.jl clone instead of a Trixi.jl release, one can tell Pkg to use the local source code of Trixi.jl instead of a registered version by running

(@v1.9) pkg> develop path/to/Trixi.jl
diff --git a/v0.8.7/github-git/index.html b/v0.8.7/github-git/index.html new file mode 100644 index 0000000000..5a2f6e6fb7 --- /dev/null +++ b/v0.8.7/github-git/index.html @@ -0,0 +1,44 @@ + +GitHub & Git · Trixi.jl

GitHub & Git

This page contains information on how to use GitHub and Git when developing Trixi.jl.

Development workflow

For adding modifications to Trixi.jl, we generally follow these steps:

Create an issue (optional)

In many cases it makes sense to start by creating an issue on GitHub. For example, if the implementation approach for a new feature is not yet clear or if there should be a discussion about the desired outcome, it is good practice to first get a consensus on what is the expected result of this modification. A GitHub issue is the place to lead this discussion, as it preserves it in the project and - together with the actual code changes - allows in the future to revisit the reasons for a particular choice of implementation or feature.

Create a branch and immediately create a pull request

All feature development, bug fixes etc. should be developed in a branch and not directly on main. If you do not have write access to the main repository on GitHub, first create a fork of the Trixi.jl repository and clone the fork to your machine. Then, create a branch locally by executing git checkout -b yourbranch, push it to the repository, and create a pull request (PR).

If you have already cloned Trixi.jl from the main repo to your local machine, you can also work in that clone. You just need to add your fork as additional remote repository and push your new branch there.

git remote add myfork git@github.com:YOUR_NAME/Trixi.jl.git
+# get latest main from the main repo
+git checkout main
+git pull
+# create a new branch for a cool new feature, bug fix, ...
+git checkout -b YOUR_BRANCH_NAME
+# do some work and push it to your fork
+git push -u myfork
+# go to https://github.com/trixi-framework/Trixi.jl/pull
+# and create a PR from your new branch
Why using pull requests?

Immediately creating a PR for your branch has the benefit that all code discussions can now be held directly next to the corresponding code. Also, the PR allows to easily compare your branch to the upstream branch (usually main) to see what you have changed. Moreover, tests will run automatically.

Make changes

With a branch and PR in place, you can now write your code and commit it to your branch. If you request feedback from someone else, make sure to push your branch to the repository such that the others can easily review your changes or dive in and change something themselves.

Avoid committing unwanted files

When you use git add . or similar catch-all versions, make sure you do not accidentally commit unwanted files (e.g., Trixi.jl output files, images or videos etc.). If it happens anyways, you can undo the last commit (also multiple times) by running git reset HEAD~ (see also Undo last commit). However, this strategy only works if you have not yet pushed your changes. If you did push your changes, please talk to one of the core developers on how to proceed.

Keep your branch in sync with main

For larger features with longer-living branches, it may make sense to synchronize your branch with the current main, e.g., if there was a bug fix in main that is relevant for you. In this case, perform the following steps to merge the current main to your branch:

  1. Commit all your local changes to your branch and push it. This allows you to delete your clone in case you make a mistake and need to abort the merge.
  2. Execute git fetch to get the latest changes from the repository.
  3. Make sure you are in the correct branch by checking the output of git status or by running git checkout yourbranch.
  4. Merge main using git merge main. If there were no conflicts, hooray!, you are done. Otherwise you need to resolve your merge conflicts and commit the changes afterwards. A good guide for resolving merge conflicts can be found here.

In general, always use git merge and not git rebase to get the latest changes from main. It is less error-prone and does not create problems on branches that are worked on collaboratively.

Prepare for review

If you feel like your branch is ready to be merged to main, prepare it for review. That is, you should

  • merge the current main to your branch
  • run tests if available, but at least ensure that you did not accidentally change the results for one of the existing example elixirs
  • properly comment your code
  • delete old/unused code, especially commented lines (unless they contain helpful code, in which case you should add a comment on why you keep this around)
  • remove debug statements
  • add a elixir_xxx.jl that uses your feature (only relevant for new features)
  • make sure your code formatting adheres to the Style guide
  • describe changes in NEWS.md if appropriate

After you are confident that your branch is cleaned up properly, commit all changes and push them to the repository.

Get reviewed

Ask one of the core developers to review your code. Sometimes this will be done directly, either face-to-face or via a video call. Other times a review will be conducted asynchronously, with the reviewer leaving comments and annotations. In some cases it will be necessary to do multiple rounds of reviews, especially if there are larger changes to be added. Just commit and push your changes to your branch, and the corresponding pull request will be updated automatically.

Please note that a review has nothing to do with the lack of experience of the person developing changes: We try to review all code before it gets added to main, even from the most experienced developers. This is good practice and helps to keep the error rate low while ensuring that the code is developed in a consistent fashion. Furthermore, do not take criticism of your code personally - we just try to keep Trixi.jl as accessible and easy to use for everyone.

Merge branch

Once your branch is reviewed and declared ready for merging by the reviewer, make sure that all the latest changes have been pushed. Then, one of the developers will merge your PR. If you are one of the developers, you can also go to the pull request page on GitHub and and click on Merge pull request. Voilà, you are done! Your branch will have been merged to main and the source branch will have been deleted in the GitHub repository (if you are not working in your own fork).

Update your working copy

Once you have merged your branch by accepting the PR on GitHub, you should clean up your local working copy of the repository by performing the following steps:

  1. Update your clone by running git fetch.
  2. Check out main using git checkout main.
  3. Delete merged branch locally with git branch -d yourbranch.
  4. Remove local references to deleted remote branch by executing git remote prune origin.

You can now proceed with your next changes by starting again at the top.

Using Git

Resources for learning Git

Here are a few resources for learning do use Git that at least one of us found helpful in the past (roughly ordered from novice to advanced to expert):

Tips and tricks

This is an unordered collection of different tips and tricks that can be helpful while working with Git. As usual, your mileage might vary.

Undo last commit

If you made a mistake in your last commit, e.g., by committing an unwanted file, you can undo the latest commit by running

git reset HEAD~

This only works if you have not yet pushed your branch to the GitHub repository. In this case, please talk to one of the core developers on how to proceed. Especially when you accidentally committed a large file (image, or video), please let us know as fast as possible, since the effort to fix the repository grows considerably over time.

Remove large file from repository

If a large file was accidentally committed and pushed to the Trixi.jl repository, please talk to one of the core developers as soon as possible so that they can fix it.

Large files

You should never try to fix this yourself, as it potentially disrupts/destroys the work of others!

Based on the instructions found here and here, the following steps need to be taken (as documented for GitLab in issue #33):

  1. Tell everyone to commit and push their changes to the repository.

  2. Fix the branch in which the file was committed by removing it and committing the removal. This is especially important on main.

  3. Perform the following steps to clean up the Git repository:

    cd /tmp
    +
    +# Download bfg-1.13.0.jar from https://rtyley.github.io/bfg-repo-cleaner/
    +
    +# Get fresh clone of repo (so you can throw it away in case there is a problem)
    +git clone --mirror git@github.com:trixi-framework/Trixi.jl.git
    +
    +# Clean up repo of all files larger than 10M
    +java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 10M Trixi.jl.git
    +
    +# Enter repo
    +cd Trixi.jl.git
    +
    +# Clean up reflog and force aggressive garbage collection
    +git reflog expire --expire=now --all && git gc --prune=now --aggressive
    +
    +# Push changes
    +git push
    +
    +# Delete clone
    +rm -rf Trixi.jl.git
  4. Tell everyone to clean up their local working copies by performing the following steps (also do this yourself):

    # Enter repo
    +cd Trixi.jl
    +
    +# Get current changes
    +git fetch
    +
    +# Check out the fixed branch
    +git checkout branchname
    +
    +# IMPORTANT: Do a rebase instead of a pull!
    +git rebase
    +
    +# Clean reflog and force garbage collection
    +git reflog expire --expire=now --all && git gc --prune=now --aggressive

    IMPORTANT: You need to do a git rebase instead of a git pull when updating the fixed branch.

diff --git a/v0.8.7/index.html b/v0.8.7/index.html new file mode 100644 index 0000000000..5dda547751 --- /dev/null +++ b/v0.8.7/index.html @@ -0,0 +1,114 @@ + +Home · Trixi.jl

Trixi.jl

Docs-stable Docs-dev Slack Youtube Build Status Codecov Coveralls Aqua QA License: MIT DOI

Trixi.jl is a numerical simulation framework for conservation laws written in Julia. A key objective for the framework is to be useful to both scientists and students. Therefore, next to having an extensible design with a fast implementation, Trixi.jl is focused on being easy to use for new or inexperienced users, including the installation and postprocessing procedures. Its features include:

  • 1D, 2D, and 3D simulations on line/quad/hex/simplex meshes
    • Cartesian and curvilinear meshes
    • Conforming and non-conforming meshes
    • Structured and unstructured meshes
    • Hierarchical quadtree/octree grid with adaptive mesh refinement
    • Forests of quadtrees/octrees with p4est via P4est.jl
  • High-order accuracy in space and time
  • Discontinuous Galerkin methods
  • Compatible with the SciML ecosystem for ordinary differential equations
  • Native support for differentiable programming
  • Periodic and weakly-enforced boundary conditions
  • Multiple governing equations:
    • Compressible Euler equations
    • Compressible Navier-Stokes equations
    • Magnetohydrodynamics (MHD) equations
    • Multi-component compressible Euler and MHD equations
    • Linearized Euler and acoustic perturbation equations
    • Hyperbolic diffusion equations for elliptic problems
    • Lattice-Boltzmann equations (D2Q9 and D3Q27 schemes)
    • Shallow water equations
    • Scalar advection
  • Multi-physics simulations
  • Shared-memory parallelization via multithreading
  • Multi-node parallelization via MPI
  • Visualization and postprocessing of the results
    • In-situ and a posteriori visualization with Plots.jl
    • Interactive visualization with Makie.jl
    • Postprocessing with ParaView/VisIt via Trixi2Vtk

Installation

If you have not yet installed Julia, please follow the instructions for your operating system. Trixi.jl works with Julia v1.8 and newer. We recommend using the latest stable release of Julia.

For users

Trixi.jl and its related tools are registered Julia packages. Hence, you can install Trixi.jl, the visualization tool Trixi2Vtk, OrdinaryDiffEq.jl, and Plots.jl by executing the following commands in the Julia REPL:

julia> using Pkg
+
+julia> Pkg.add(["Trixi", "Trixi2Vtk", "OrdinaryDiffEq", "Plots"])

You can copy and paste all commands to the REPL including the leading julia> prompts - they will automatically be stripped away by Julia. The package OrdinaryDiffEq.jl provides time integration schemes used by Trixi.jl, while Plots.jl can be used to directly visualize Trixi.jl's results from the REPL.

Note on package versions: If some of the examples for how to use Trixi.jl do not work, verify that you are using a recent Trixi.jl release by comparing the installed Trixi.jl version from

julia> using Pkg; Pkg.update("Trixi"); Pkg.status("Trixi")

to the latest release. If the installed version does not match the current release, please check the Troubleshooting section.

The commands above can also be used to update Trixi.jl. A brief list of notable changes to Trixi.jl is available in NEWS.md.

For developers

If you plan on editing Trixi.jl itself, you can download Trixi.jl to a local folder and use the code from the cloned directory:

git clone git@github.com:trixi-framework/Trixi.jl.git
+cd Trixi.jl
+mkdir run
+cd run
+julia --project=. -e 'using Pkg; Pkg.develop(PackageSpec(path=".."))'

If you installed Trixi.jl this way, you always have to start Julia with the --project flag set to your run directory, e.g.,

julia --project=.

if already inside the run directory.

The advantage of using a separate run directory is that you can also add other related packages (see below, e.g., for time integration or visualization) to the project in the run folder and always have a reproducible environment at hand to share with others.

Since the postprocessing tool Trixi2Vtk.jl typically does not need to be modified, it is recommended to install it as a normal package. Likewise, you can install OrdinaryDiffEq.jl and Plots.jl as ordinary packages. To achieve this, use the following REPL commands:

julia> using Pkg
+
+julia> Pkg.add(["OrdinaryDiffEq", "Trixi2Vtk", "Plots"])

Note that the postprocessing tools Trixi2Vtk.jl and Plots.jl are optional and can be omitted.

Example: Installing Trixi.jl as a package

Please note that the playback speed is set to 3x, thus the entire installation procedure lasts around 45 seconds in real time (depending on the performance of your computer and on how many dependencies had already been installed before).

Usage

In the Julia REPL, first load the package Trixi.jl

julia> using Trixi

Then start a simulation by executing

julia> trixi_include(default_example())

Please be patient since Julia will compile the code just before running it. To visualize the results, load the package Plots

julia> using Plots

and generate a heatmap plot of the results with

julia> plot(sol) # No trailing semicolon, otherwise no plot is shown

This will open a new window with a 2D visualization of the final solution:

image

The method trixi_include(...) expects a single string argument with the path to a Trixi.jl elixir, i.e., a text file containing Julia code necessary to set up and run a simulation. To quickly see Trixi.jl in action, default_example() returns the path to an example elixir with a short, two-dimensional problem setup. A list of all example elixirs packaged with Trixi.jl can be obtained by running get_examples(). Alternatively, you can also browse the examples/ subdirectory. If you want to modify one of the elixirs to set up your own simulation, download it to your machine, edit the configuration, and pass the file path to trixi_include(...).

Example: Running a simulation with Trixi.jl

If this produces weird symbols or question marks in the terminal on your system, you are probably using Mac OS with problematic fonts. In that case, please check the Troubleshooting section.

Note on performance: Julia uses just-in-time compilation to transform its source code to native, optimized machine code at the time of execution and caches the compiled methods for further use. That means that the first execution of a Julia method is typically slow, with subsequent runs being much faster. For instance, in the example above the first execution of trixi_include takes about 20 seconds, while subsequent runs require less than 60 milliseconds.

Performing a convergence analysis

To automatically determine the experimental order of convergence (EOC) for a given setup, execute

julia> convergence_test(default_example(), 4)

This will run a convergence test with the elixir default_example(), using four iterations with different initial refinement levels. The initial iteration will use the elixir unchanged, while for each subsequent iteration the initial_refinement_level parameter is incremented by one. Finally, the measured $l^2$ and $l^\infty$ errors and the determined EOCs will be displayed like this:

[...]
+l2
+scalar
+error     EOC
+9.14e-06  -
+5.69e-07  4.01
+3.55e-08  4.00
+2.22e-09  4.00
+
+mean      4.00
+--------------------------------------------------------------------------------
+linf
+scalar
+error     EOC
+6.44e-05  -
+4.11e-06  3.97
+2.58e-07  3.99
+1.62e-08  4.00
+
+mean      3.99
+--------------------------------------------------------------------------------

An example with multiple variables looks like this:

julia> convergence_test(joinpath(examples_dir(), "tree_2d_dgsem", "elixir_euler_source_terms.jl"), 3)
[...]
+l2
+rho                 rho_v1              rho_v2              rho_e
+error     EOC       error     EOC       error     EOC       error     EOC
+9.32e-07  -         1.42e-06  -         1.42e-06  -         4.82e-06  -
+7.03e-08  3.73      9.53e-08  3.90      9.53e-08  3.90      3.30e-07  3.87
+4.65e-09  3.92      6.09e-09  3.97      6.09e-09  3.97      2.12e-08  3.96
+
+mean      3.82      mean      3.93      mean      3.93      mean      3.91
+--------------------------------------------------------------------------------
+linf
+rho                 rho_v1              rho_v2              rho_e
+error     EOC       error     EOC       error     EOC       error     EOC
+9.58e-06  -         1.17e-05  -         1.17e-05  -         4.89e-05  -
+6.23e-07  3.94      7.48e-07  3.97      7.48e-07  3.97      3.22e-06  3.92
+4.05e-08  3.94      4.97e-08  3.91      4.97e-08  3.91      2.10e-07  3.94
+
+mean      3.94      mean      3.94      mean      3.94      mean      3.93
+--------------------------------------------------------------------------------

Showcase of advanced features

The presentation From Mesh Generation to Adaptive Simulation: A Journey in Julia, originally given as part of JuliaCon 2022, outlines how to use Trixi.jl for an adaptive simulation of the compressible Euler equations in two spatial dimensions on a complex domain. More details as well as code to run the simulation presented can be found at the reproducibility repository for the presentation.

Referencing

If you use Trixi.jl in your own research or write a paper using results obtained with the help of Trixi.jl, please cite the following articles:

@article{ranocha2022adaptive,
+  title={Adaptive numerical simulations with {T}rixi.jl:
+         {A} case study of {J}ulia for scientific computing},
+  author={Ranocha, Hendrik and Schlottke-Lakemper, Michael and Winters, Andrew Ross
+          and Faulhaber, Erik and Chan, Jesse and Gassner, Gregor},
+  journal={Proceedings of the JuliaCon Conferences},
+  volume={1},
+  number={1},
+  pages={77},
+  year={2022},
+  doi={10.21105/jcon.00077},
+  eprint={2108.06476},
+  eprinttype={arXiv},
+  eprintclass={cs.MS}
+}
+
+@article{schlottkelakemper2021purely,
+  title={A purely hyperbolic discontinuous {G}alerkin approach for
+         self-gravitating gas dynamics},
+  author={Schlottke-Lakemper, Michael and Winters, Andrew R and
+          Ranocha, Hendrik and Gassner, Gregor J},
+  journal={Journal of Computational Physics},
+  pages={110467},
+  year={2021},
+  month={06},
+  volume={442},
+  publisher={Elsevier},
+  doi={10.1016/j.jcp.2021.110467},
+  eprint={2008.10593},
+  eprinttype={arXiv},
+  eprintclass={math.NA}
+}

In addition, you can also refer to Trixi.jl directly as

@misc{schlottkelakemper2020trixi,
+  title={{T}rixi.jl: {A}daptive high-order numerical simulations
+         of hyperbolic {PDE}s in {J}ulia},
+  author={Schlottke-Lakemper, Michael and Gassner, Gregor J and
+          Ranocha, Hendrik and Winters, Andrew R and Chan, Jesse},
+  year={2021},
+  month={09},
+  howpublished={\url{https://github.com/trixi-framework/Trixi.jl}},
+  doi={10.5281/zenodo.3996439}
+}

Authors

Trixi.jl was initiated by Michael Schlottke-Lakemper (University of Augsburg, Germany) and Gregor Gassner (University of Cologne, Germany). Together with Hendrik Ranocha (Johannes Gutenberg University Mainz, Germany) and Andrew Winters (Linköping University, Sweden), and Jesse Chan (Rice University, US), they are the principal developers of Trixi.jl. The full list of contributors can be found under Authors.

License and contributing

Trixi.jl is licensed under the MIT license (see License). Since Trixi.jl is an open-source project, we are very happy to accept contributions from the community. Please refer to Contributing for more details. Note that we strive to be a friendly, inclusive open-source community and ask all members of our community to adhere to our Code of Conduct. To get in touch with the developers, join us on Slack or create an issue.

Acknowledgments

+
+
+
+
+
+
+

This project has benefited from funding by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) through the following grants:

  • Excellence Strategy EXC 2044-390685587, Mathematics Münster: Dynamics-Geometry-Structure.
  • Research unit FOR 5409 "Structure-Preserving Numerical Methods for Bulk- and Interface Coupling of Heterogeneous Models (SNuBIC)" (project number 463312734).
  • Individual grant no. 528753982.

This project has benefited from funding from the European Research Council through the ERC Starting Grant "An Exascale aware and Un-crashable Space-Time-Adaptive Discontinuous Spectral Element Solver for Non-Linear Conservation Laws" (Extreme), ERC grant agreement no. 714487.

This project has benefited from funding from Vetenskapsrådet (VR, Swedish Research Council), Sweden through the VR Starting Grant "Shallow water flows including sediment transport and morphodynamics", VR grant agreement 2020-03642 VR.

This project has benefited from funding from the United States National Science Foundation (NSF) under awards DMS-1719818 and DMS-1943186.

This project has benefited from funding from the German Federal Ministry of Education and Research (BMBF) through the project grant "Adaptive earth system modeling with significantly reduced computation time for exascale supercomputers (ADAPTEX)" (funding id: 16ME0668K).

This project has benefited from funding by the Daimler und Benz Stiftung (Daimler and Benz Foundation) through grant no. 32-10/22.

Trixi.jl is supported by NumFOCUS as an Affiliated Project.

diff --git a/v0.8.7/license/index.html b/v0.8.7/license/index.html new file mode 100644 index 0000000000..01b1c7503a --- /dev/null +++ b/v0.8.7/license/index.html @@ -0,0 +1,2 @@ + +License · Trixi.jl

License

MIT License

Copyright (c) 2020-present The Trixi.jl Authors (see Authors)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

diff --git a/v0.8.7/meshes/dgmulti_mesh/index.html b/v0.8.7/meshes/dgmulti_mesh/index.html new file mode 100644 index 0000000000..a2cac9e958 --- /dev/null +++ b/v0.8.7/meshes/dgmulti_mesh/index.html @@ -0,0 +1,8 @@ + +DGMulti mesh · Trixi.jl

Unstructured meshes and the DGMulti solver

Trixi.jl includes support for simplicial and tensor product meshes via the DGMulti solver type, which is based on the StartUpDG.jl package. DGMulti solvers also provide support for quadrilateral and hexahedral meshes, though this feature is currently restricted to Cartesian grids. On these line/quad/hex meshes, the DGMulti solver also allows to use all (finite domain) SBP derivative operators provided by SummationByPartsOperators.jl, including several finite difference SBP methods.

We make a few simplifying assumptions about supported meshes:

  • meshes consist of a single type of element
  • meshes are conforming (e.g., each face of an element is shared with at most one other element).
  • the geometric mapping from reference to physical elements is polynomial (currently, only affine mappings are supported).

StartUpDG.jl includes both simple uniform meshes via uniform_mesh, as well as support for triangular meshes constructed using Triangulate.jl, a wrapper around Jonathan Shewchuk's Triangle package.

The DGMulti solver type

Trixi.jl solvers on simplicial meshes use the DGMulti solver type, which allows users to specify element_type and approximation_type in addition to polydeg, surface_flux, surface_integral, and volume_integral.

DGMulti(; polydeg::Integer,
+          element_type::AbstractElemShape,
+          approximation_type=Polynomial(),
+          surface_flux=flux_central,
+          surface_integral=SurfaceIntegralWeakForm(surface_flux),
+          volume_integral=VolumeIntegralWeakForm(),
+          RefElemData_kwargs...)

Here, element_type can be Tri(), Quad(), Tet(), or Hex(), and approximation_type can be

  • Polynomial(), which specifies a DG discretization using a polynomial basis using quadrature rules which are exact for degree 2 * polydeg integrands, or
  • SBP(), which specifies a DG discretization using multi-dimensional SBP operators. Types of SBP discretizations available include: SBP{Kubatko{LobattoFaceNodes}}() (the default choice), SBP{Kubatko{LegendreFaceNodes}}(), and SBP{Hicken}(). For polydeg = 1, ..., 4, the SBP{Kubatko{LegendreFaceNodes}}() SBP nodes are identical to the SBP nodes of Chen and Shu. More detailed descriptions of each SBP node set can be found in the StartUpDG.jl docs. Trixi.jl will also specialize certain parts of the solver based on the SBP approximation type.
  • a (periodic or non-periodic) derivative operator from SummationByPartsOperators.jl, usually constructed as D = derivative_operator(...). In this case, you do not need to pass a polydeg. Periodic derivative operators will only work with single-element meshes constructed using DGMultiMesh.

Additional options can also be specified through RefElemData_kwargs:

  • quad_rule_vol = quad_nodes(Tri(), Nq) will substitute in a volume quadrature rule of degree Nq instead of the default (which is a quadrature rule of degree polydeg). Here, a degree Nq rule will be exact for at least degree 2*Nq integrands (such that the mass matrix is integrated exactly). Quadrature rules of which exactly integrate degree Nq integrands may also be specified (for example, quad_rule_vol = StartUpDG.quad_nodes_tri(Nq) on triangles).
  • quad_rule_face = quad_nodes(Line(), Nq)) will use a face quadrature rule of degree Nq rather than the default. This rule is also exact for at least degree 2*Nq integrands.

The GaussSBP() approximation type on Quad() and Hex() meshes

When using VolumeIntegralFluxDifferencing on Quad() and Hex() meshes, one can also specify approximation_type = GaussSBP() to use an entropy stable Gauss collocation scheme. Here, GaussSBP() refers to "generalized" summation-by-parts operators (see for example Ranocha 2018 or Fernandez and Zingg 2015).

Unlike traditional SBP operators, generalized SBP operators are constructed from nodes which do not include boundary nodes (i.e., Gauss quadrature nodes as opposed to Gauss-Lobatto quadrature nodes). This makes the computation of interface fluxes slightly more expensive, but also usually results in a more accurate solution. Roughly speaking, an entropy stable Gauss collocation scheme will yield results similar to a modal entropy stable scheme using a Polynomial() approximation type, but will be more efficient at high orders of approximation.

Trixi.jl elixirs on simplicial and tensor product element meshes

Example elixirs with triangular, quadrilateral, and tetrahedral meshes can be found in the examples/dgmulti_2d/ and examples/dgmulti_3d/ folders. Some key elixirs to look at:

For developers

DGMultiMesh wrapper type

DGMulti meshes in Trixi.jl are represented using a DGMultiMesh{NDIMS, ...} type. This mesh type is assumed to have fields md::MeshData, which contains geometric terms derived from the mapping between the reference and physical elements, and boundary_faces, which contains a Dict of boundary segment names (symbols) and list of faces which lie on that boundary segment.

A DGMultiMesh can be constructed in several ways. For example, DGMultiMesh(dg::DGMulti) will return a Cartesian mesh on $[-1, 1]^d$ with element types specified by dg. DGMulti meshes can also be constructed by specifying a list of vertex coordinates vertex_coordinates_x, vertex_coordinates_y, vertex_coordinates_z and a connectivity matrix EToV where EToV[e,:] gives the vertices which correspond to element e. These quantities are available from most unstructured mesh generators.

Initial support for curved DGMultiMeshes is available for flux differencing solvers using SBP and GaussSBP approximation types on quadrilateral and hexahedral meshes. These can be called by specifying mesh = DGMultiMesh(dg, cells_per_dimension, mapping), where mapping is a function which specifies the warping of the mesh (e.g., mapping(xi, eta) = SVector{2}(xi, eta) is the identity mapping) similar to the mapping argument used by StructuredMesh.

Variable naming conventions

We use the convention that coordinates on the reference element are $r$ in 1D, $r, s$ in 2D, or $r, s, t$ in 3D. Physical coordinates use the standard conventions $x$ (1D), $x, y$ (2D), and $x, y, z$ (3D).

"Ref-to-physical mapping"

Derivatives of reference coordinates with respect to physical coordinates are abbreviated, e.g., $\frac{\partial r}{\partial x} = r_x$. Additionally, $J$ is used to denote the determinant of the Jacobian of the reference-to-physical mapping.

Variable meanings and conventions in StartUpDG.jl

StartUpDG.jl exports structs RefElemData{NDIMS, ElemShape, ...} (which contains data associated with the reference element, such as interpolation points, quadrature rules, face nodes, normals, and differentiation/interpolation/projection matrices) and MeshData{NDIMS} (which contains geometric data associated with a mesh). These are currently used for evaluating DG formulations in a matrix-free fashion. These structs contain fields similar (but not identical) to those in Globals1D, Globals2D, Globals3D in the Matlab codes from "Nodal Discontinuous Galerkin Methods" by Hesthaven and Warburton (2007).

In general, we use the following code conventions:

  • variables such as r, s,... and x, y,... correspond to values at nodal interpolation points.
  • variables ending in q (e.g., rq, sq,... and xq, yq,...) correspond to values at volume quadrature points.
  • variables ending in f (e.g., rf, sf,... and xf, yf,...) correspond to values at face quadrature points.
  • variables ending in p (e.g., rp, sp,...) correspond to "plotting" points, which are usually a fine grid of equispaced points.
  • V matrices correspond to interpolation matrices from nodal interpolation points, e.g., Vq interpolates to volume quadrature points, Vf interpolates to face quadrature points.
  • geometric quantities in MeshData are stored as matrices of dimension $\text{number of points per element} \times \text{number of elements}$.

Quantities in rd::RefElemData:

  • rd.Np, rd.Nq, rd.Nf: the number of nodal interpolation points, volume quadrature points, and face quadrature points on the reference element, respectively.
  • rd.Vq: interpolation matrices from values at nodal interpolation points to volume quadrature points
  • rd.wq: volume quadrature weights on the reference element
  • rd.Vf: interpolation matrices from values at nodal interpolation points to face quadrature points
  • rd.wf: a vector containing face quadrature weights on the reference element
  • rd.M: the quadrature-based mass matrix, computed via rd.Vq' * diagm(rd.wq) * rd.Vq.
  • rd.Pq: a quadrature-based $L^2$ projection matrix rd.Pq = rd.M \ rd.Vq' * diagm(rd.wq) which maps between values at quadrature points and values at nodal points.
  • Dr, Ds, Dt matrices are nodal differentiation matrices with respect to the $r,s,t$ coordinates, e.g., Dr*f.(r,s) approximates the derivative of $f(r,s)$ at nodal points.

Quantities in md::MeshData:

  • md.xyz is a tuple of matrices md.x, md.y, md.z, where column e contains coordinates of physical interpolation points.
  • md.xyzq is a tuple of matrices md.xq, md.yq, md.zq, where column e contains coordinates of physical quadrature points.
  • md.rxJ, md.sxJ, ... are matrices where column e contains values of $J\frac{\partial r}{\partial x}$, $J\frac{\partial s}{\partial x}$, etc. at nodal interpolation points on the element e.
  • md.J is a matrix where column e contains values of the Jacobian $J$ at nodal interpolation points.
  • md.Jf is a matrix where column e contains values of the face Jacobian (e.g., determinant of the geometric mapping between a physical face and a reference face) at face quadrature points.
  • md.nxJ, md.nyJ, ... are matrices where column e contains values of components of the unit normal scaled by the face Jacobian md.Jf at face quadrature points.

For more details, please see the StartUpDG.jl docs.

diff --git a/v0.8.7/meshes/p4est_mesh/index.html b/v0.8.7/meshes/p4est_mesh/index.html new file mode 100644 index 0000000000..f6a488c573 --- /dev/null +++ b/v0.8.7/meshes/p4est_mesh/index.html @@ -0,0 +1,348 @@ + +P4est-based mesh · Trixi.jl

P4est-based mesh

The P4estMesh is an unstructured, curvilinear, nonconforming mesh type for quadrilateral (2D) and hexahedral (3D) cells. It supports quadtree/octree-based adaptive mesh refinement (AMR) via the C library p4est. See AMRCallback for further information.

Due to its curvilinear nature, (numerical) fluxes need to implement methods dispatching on the normal::AbstractVector. Rotationally invariant equations such as the compressible Euler equations can use FluxRotated to wrap numerical fluxes implemented only for Cartesian meshes. This simplifies the re-use of existing functionality for the TreeMesh but is usually less efficient, cf. PR #550.

Construction of a P4estMesh from an Abaqus file

One available option to construct a P4estMesh is to read in an Abaqus (.inp) mesh file. We briefly describe the structure of this file, the conventions it uses, and how the mesh file is parsed to create an initial unstructured, curvilinear, and conforming mesh.

Mesh in two spatial dimensions

For this discussion we use the following two-dimensional unstructured curved mesh with three elements:

abaqus-2dmesh-docs

We note that the corner and element connectivity information parsed from the Abaqus file creates a straight sided (linear) mesh. From this linear mesh there are two strategies available to make the mesh curvilinear:

  1. Apply a mapping function to describe a transformation of the linear mesh to another physical domain. The mapping is approximated using interpolation polynomial of a user specified polynomial degree. The default value of this polynomial degree is 1 that corresponds to an uncurved geometry.
  2. High-order boundary information is available in the .inp mesh file because it was created with the HOHQMesh mesh generator, which is available via the Julia package HOHQMesh.jl. This information is used to create appropriate transfinite mappings during the mesh construction.

We divide our discussion into two parts. The first part discusses the standard corner and element information contained in the .inp mesh file. The second part specifically deals with the mesh file parsing of an Abaqus file created by HOHQMesh.jl.

Mesh file header

An Abaqus .inp mesh file typically begins with a *Heading. Though optional, the *Heading is helpful to give users some information about the mesh described by the mesh file. In particular, a .inp mesh file created with HOHQMesh will contain the header

*Heading
+ File created by HOHQMesh

This heading is used to indicate to the mesh constructor which of the above mapping strategies to apply in order to create a curvilinear mesh. If the Abaqus file header is not present then the P4estMesh is created with the first strategy above.

List of corner nodes

Next, prefaced with *NODE, comes a list of the physical (x,y,z) coordinates of all the corners. The first integer in the list of the corners provides its id number. Thus, for the two-dimensional example mesh this block of corner information is

*NODE
+1, 1.0, -1.0, 0.0
+2, 3.0,  0.0, 0.0
+3, 1.0,  1.0, 0.0
+4, 2.0,  0.0, 0.0
+5, 0.0,  0.0, 0.0
+6, 3.0,  1.0, 0.0
+7, 3.0, -1.0, 0.0

List of elements

The element connectivity is given after the list of corners. The header for this information block is

*ELEMENT, type=CPS4, ELSET=Surface1

The Abaqus element type CPS4 corresponds to a quadrilateral element. Each quadrilateral element in the unstructured mesh is dictated by four corner points with indexing taken from the numbering given by the corner list above. The elements connect a set of four corner points (starting from the bottom left) in an anti-clockwise fashion; making the element right-handed. This element handedness is indicated using the circular arrow in the figure above. Just as with the corner list, the first integer in the element connectivity list indicates the element id number. Thus, the element connectivity list for the three element example mesh is

*ELEMENT, type=CPS4, ELSET=Surface1
+1, 5, 1, 4, 3
+2, 4, 2, 6, 3
+3, 7, 2, 4, 1

Element neighbor connectivity

The construction of the element neighbor ids and identifying physical boundary surfaces is done using functionality directly from the p4est library. For example, the neighbor connectivity is created in the mesh constructor using the wrapper read_inp_p4est function.

Encoding of boundaries

HOHQMesh boundary information

If present, any additional information in the mesh file that was created by HOHQMesh is prefaced with ** to make it an Abaqus comment. This ensures that the read in of the file by a standard Abaqus file parser, as done in the read_inp_p4est function, is done correctly.

The high-order, curved boundary information and labels of the physical boundary created by HOHQMesh is found below the comment line

** ***** HOHQMesh boundary information ***** **

Next comes the polynomial degree that the mesh will use to represent any curved sides

** mesh polynomial degree = 8

The mesh file then, again, provides the element connectivity as well as information for curved surfaces either interior to the domain or along the physical boundaries. A set of check digits are included directly below the four corner indexes to indicate whether the local surface index (-y, +x, +y, or -x) within the element is straight sided, 0, or is curved, 1. If the local surface is straight sided no additional information is necessary during the mesh file read in. But for any curved surfaces the mesh file provides (x,y,z) coordinate values in order to construct an interpolant of this surface with the mesh polynomial order at the Chebyshev-Gauss-Lobatto nodes. This list of (x,y,z) data will be given in the direction of the local coordinate system. Given below is the element curvature information for the example mesh:

**  5 1 4 3
+**  0 0 1 1
+**   1.000000000000000   1.000000000000000   0.0
+**   1.024948365654583   0.934461926834452   0.0
+**   1.116583018200151   0.777350964621867   0.0
+**   1.295753434047077   0.606254343587194   0.0
+**   1.537500000000000   0.462500000000000   0.0
+**   1.768263070247418   0.329729152118310   0.0
+**   1.920916981799849   0.185149035378133   0.0
+**   1.986035130050921   0.054554577460044   0.0
+**   2.000000000000000                 0.0   0.0
+**                 0.0                 0.0   0.0
+**   0.035513826946206   0.105291711848750   0.0
+**   0.148591270347399   0.317731556850611   0.0
+**   0.340010713990041   0.452219430075470   0.0
+**   0.575000000000000   0.462500000000000   0.0
+**   0.788022294598950   0.483764065630034   0.0
+**   0.926408729652601   0.644768443149389   0.0
+**   0.986453164464803   0.883724792445746   0.0
+**   1.000000000000000   1.000000000000000   0.0
+**  4 2 6 3
+**  0 0 0 1
+**   2.000000000000000                 0.0   0.0
+**   1.986035130050921   0.054554577460044   0.0
+**   1.920916981799849   0.185149035378133   0.0
+**   1.768263070247418   0.329729152118310   0.0
+**   1.537500000000000   0.462500000000000   0.0
+**   1.295753434047077   0.606254343587194   0.0
+**   1.116583018200151   0.777350964621867   0.0
+**   1.024948365654583   0.934461926834452   0.0
+**   1.000000000000000   1.000000000000000   0.0
+**  7 2 4 1
+**  0 0 0 0

The last piece of information provided by HOHQMesh are labels for the different surfaces of an element. These labels are useful to set boundary conditions along physical surfaces. The labels can be short descriptive words up to 32 characters in length. The label --- indicates an internal surface where no boundary condition is required.

It is important to note that these labels are given in the following order according to the local surface index -x +x -y +y as required by the p4est library.

**  Bezier --- Slant ---
+**  --- Right --- Top
+**  Bottom --- Right ---

For completeness, we provide the entire Abaqus mesh file for the example mesh in the figure above:

*Heading
+ File created by HOHQMesh
+*NODE
+1, 1.0, -1.0, 0.0
+2, 3.0,  0.0, 0.0
+3, 1.0,  1.0, 0.0
+4, 2.0,  0.0, 0.0
+5, 0.0,  0.0, 0.0
+6, 3.0,  1.0, 0.0
+7, 3.0, -1.0, 0.0
+*ELEMENT, type=CPS4, ELSET=Surface1
+1, 5, 1, 4, 3
+2, 4, 2, 6, 3
+3, 7, 2, 4, 1
+** ***** HOHQMesh boundary information ***** **
+** mesh polynomial degree = 8
+**  5 1 4 3
+**  0 0 1 1
+**   1.000000000000000   1.000000000000000   0.0
+**   1.024948365654583   0.934461926834452   0.0
+**   1.116583018200151   0.777350964621867   0.0
+**   1.295753434047077   0.606254343587194   0.0
+**   1.537500000000000   0.462500000000000   0.0
+**   1.768263070247418   0.329729152118310   0.0
+**   1.920916981799849   0.185149035378133   0.0
+**   1.986035130050921   0.054554577460044   0.0
+**   2.000000000000000                 0.0   0.0
+**                 0.0                 0.0   0.0
+**   0.035513826946206   0.105291711848750   0.0
+**   0.148591270347399   0.317731556850611   0.0
+**   0.340010713990041   0.452219430075470   0.0
+**   0.575000000000000   0.462500000000000   0.0
+**   0.788022294598950   0.483764065630034   0.0
+**   0.926408729652601   0.644768443149389   0.0
+**   0.986453164464803   0.883724792445746   0.0
+**   1.000000000000000   1.000000000000000   0.0
+**  4 2 6 3
+**  0 0 0 1
+**   2.000000000000000                 0.0   0.0
+**   1.986035130050921   0.054554577460044   0.0
+**   1.920916981799849   0.185149035378133   0.0
+**   1.768263070247418   0.329729152118310   0.0
+**   1.537500000000000   0.462500000000000   0.0
+**   1.295753434047077   0.606254343587194   0.0
+**   1.116583018200151   0.777350964621867   0.0
+**   1.024948365654583   0.934461926834452   0.0
+**   1.000000000000000   1.000000000000000   0.0
+**  7 2 4 1
+**  0 0 0 0
+**  Bezier --- Slant ---
+**  --- Right --- Top
+**  Bottom --- Right ---
Standard Abaqus format boundary information

As an alternative to an Abaqus mesh generated by HOHQMesh, .inp files with boundary information encoded as nodesets *NSET,NSET= can be used to construct a p4est mesh. This is especially useful for usage of existing meshes (consisting of bilinear elements) which could stem from the popular gmsh meshing software.

In addition to the list of nodes and elements given above, there are nodesets of the form

*NSET,NSET=PhysicalLine1
+1, 4, 52, 53, 54, 55, 56, 57, 58, 

present which are used to associate the edges defined through their corner nodes with a label. In this case it is called PhysicalLine1. By looping over every element and its associated edges, consisting of two nodes, we query the read in NSETs if the current node pair is present.

To prevent that every nodeset following *NSET,NSET= is treated as a boundary, the user must supply a boundary_symbols keyword to the P4estMesh constructor:

boundary_symbols = [:PhysicalLine1]
+
+mesh = P4estMesh{2}(mesh_file, polydeg = polydeg, boundary_symbols = boundary_symbols)

By doing so, only nodesets with a label present in boundary_symbols are treated as physical boundaries. Other nodesets that could be used for diagnostics are not treated as external boundaries. Note that there is a leading colon : compared to the label in the .inp mesh file. This is required to turn the label into a Symbol. Important: In Julia, a symbol cannot contain a hyphen/dash -, i.e., :BC-1 is not a valid symbol. Keep this in mind when importing boundaries, you might have to convert hyphens/dashes - to underscores _ in the .inp mesh file, i.e., BC_1 instead of BC-1.

A 2D example for this mesh, which is read-in for an unstructured mesh file created with gmsh, is presented in examples/p4est_2d_dgsem/elixir_euler_NACA6412airfoil_mach2.jl.

Mesh in three spatial dimensions

HOHQMesh-Extended Abaqus format

The 3D Abaqus file format with high-order boundary information from HOHQMesh is very similar to the 2D version discussed above. There are only three changes:

  1. The element connectivity would be given in terms of the eight corners that define a hexahedron. The corners are numbered as shown in the figure below. The header of the element list changes to be
    *ELEMENT, type=C3D8, ELSET=Volume1
    where C3D8 corresponds to a Abaqus hexahedral element.
  2. There are six check digits included directly below the eight corner indexes to indicate whether the local face within the element is straight sided, 0, or is curved, 1. For curved faces (x,y,z) coordinate values are available in order to construct an face interpolant with the mesh polynomial order at the Chebyshev-Gauss-Lobatto nodes.
  3. The boundary labels are given in the following order according to the local surface index -x +x -y +y -z +z as required by the p4est library.

For completeness, we also give a short description and derivation of the three-dimensional transfinite mapping formulas used to compute the physical coordinates $\mathbf{x}=(x,y,z)$ of a (possibly curved) hexahedral element give the reference coordinates $\boldsymbol{\xi} = (\xi, \eta, \zeta)$ which lie in $[-1,1]^3$. That is, we will create an expression $\mathbf{x}= \mathbf{X}(\boldsymbol{\xi})$.

Below we provide a sketch of a single hexahedral element with curved faces. This is done to introduce the numbering conventions for corners, edges, and faces of the element.

abaqus-3dmesh-docs

When the hexahedron is a straight sided (linear) element we compute the transfinite mapping directly from the element corner points according to

\[\begin{aligned} +\mathbf{X}_{linear}(\boldsymbol{\xi}) &= \frac{1}{8}[\quad\, \mathbf{x}_1(1-\xi)(1-\eta)(1-\zeta) + + \mathbf{x}_2(1+\xi)(1-\eta)(1-\zeta)\\[-0.15cm] + & \qquad\; + \mathbf{x}_3(1+\xi)(1+\eta)(1-\zeta) + + \mathbf{x}_4(1-\xi)(1+\eta)(1-\zeta) \\ + & \qquad\; + \mathbf{x}_5(1-\xi)(1-\eta)(1+\zeta) + + \mathbf{x}_6(1+\xi)(1-\eta)(1+\zeta) \\ + & \qquad\; + \mathbf{x}_7(1+\xi)(1+\eta)(1+\zeta) + + \mathbf{x}_8(1-\xi)(1+\eta)(1+\zeta)\quad]. +\end{aligned}\]

Next, we create a transfinite mapping function, $\mathbf{X}(\boldsymbol{\xi})$, for a hexahedron that has one or more curved faces. For this we assume that have a set of six interpolating polynomials $\{\Gamma_i\}_{i=1}^6$ that approximate the faces. The interpolating polynomial for any curved faces is provided by the information in a HOHQMesh Abaqus mesh file or is constructed on the fly via a bi-linear interpolation routine for any linear faces. Explicitly, these six face interpolation polynomials depend on the computational coordinates $\boldsymbol{\xi}$ as follows

\[ \begin{aligned} + \Gamma_1(\xi, \zeta), \quad && \quad \Gamma_3(\xi, \eta), \quad && \quad \Gamma_4(\eta, \zeta),\\[0.1cm] + \Gamma_2(\xi, \zeta), \quad && \quad \Gamma_5(\xi, \eta), \quad && \quad \Gamma_6(\eta, \zeta). + \end{aligned}\]

To determine the form of the mapping we first create linear interpolations between two opposing faces, e.g., $\Gamma_3$ and $\Gamma_5$ and sum them together to have

\[\begin{aligned} + \boldsymbol\Sigma(\boldsymbol{\xi}) &= \frac{1}{2}[\quad\,(1-\xi)\Gamma_6(\eta,\zeta) + (1+\xi)\Gamma_4(\eta,\zeta) \\[-0.15cm] + &\qquad\;+ (1-\eta)\Gamma_1(\xi,\zeta) + (1+\eta)\Gamma_2(\xi,\zeta) \\%[-0.15cm] + &\qquad\; +(1-\zeta)\Gamma_3(\xi,\eta) + (1+\zeta)\Gamma_5(\xi,\eta)\quad]. +\end{aligned}\]

Unfortunately, the linear interpolations $\boldsymbol\Sigma(\boldsymbol{\xi})$ no longer match at the faces, e.g., evaluating at $\eta = -1$ we have

\[\boldsymbol\Sigma(\xi,-1,\zeta) = \Gamma_1(\xi,\zeta) + \frac{1}{2}[\;(1-\xi)\Gamma_6(-1,\zeta) + (1+\xi)\Gamma_4(-1,\zeta) + +(1-\zeta)\Gamma_3(\xi,-1) + (1+\zeta)\Gamma_5(\xi,-1)\;],\]

which is the desired face $\Gamma_1(\xi,\zeta)$ plus four edge error terms. Analogous edge error terms occur at the other faces evaluating $\boldsymbol\Sigma(\boldsymbol{\xi})$ at $\eta=1$, $\xi=\pm 1$, and $\zeta=\pm 1$. In order to match the faces, we subtract a linear interpolant in the $\xi$, $\eta$, and $\zeta$ directions of the edge error terms, e.g., the terms in braces in the above equation. So, continuing the example above, the correction term to be subtracted for face $\Gamma_1$ to match would be

\[\left(\frac{1-\eta}{2}\right) \bigg[ \frac{1}{2} [ \; (1-\xi)\Gamma_6(-1,\zeta) + (1+\xi)\Gamma_4(-1,\zeta)+(1-\zeta)\Gamma_3(\xi,-1) + + (1+\zeta)\Gamma_5(\xi,-1)\;] \bigg].\]

For clarity, and to allow an easier comparison to the implementation, we introduce auxiliary notation for the 12 edge values present in the complete correction term. That is, for given values of $\xi$, $\eta$, and $\zeta$ we have

\[ \begin{aligned} + \texttt{edge}_{1} &= \Gamma_1(\xi, -1), \quad && \quad \texttt{edge}_{5} = \Gamma_2(\xi, -1), \quad & \quad \texttt{edge}_{9} &= \Gamma_6(\eta, -1),\\[0.1cm] + \texttt{edge}_{2} &= \Gamma_1(1, \zeta), \quad && \quad\texttt{edge}_{6} = \Gamma_2(1, \zeta), \quad & \quad \texttt{edge}_{10} &= \Gamma_4(\eta, -1),\\[0.1cm] + \texttt{edge}_{3} &= \Gamma_1(\xi, 1), \quad && \quad \texttt{edge}_{7} = \Gamma_2(\xi, 1), \quad & \quad \texttt{edge}_{11} &= \Gamma_4(\eta, 1),\\[0.1cm] + \texttt{edge}_{4} &= \Gamma_1(-1, \zeta), \quad && \quad \texttt{edge}_{8} = \Gamma_2(-1, \zeta), \quad & \quad \texttt{edge}_{12} &= \Gamma_6(\eta, 1). + \end{aligned}\]

With this notation for the edge terms (and after some algebraic manipulation) we write the complete edge correction term, $\mathcal{C}_{\texttt{edge}}(\boldsymbol{\xi})$, as

\[\begin{aligned} +\mathcal{C}_{\texttt{edge}}(\boldsymbol{\xi}) &= \frac{1}{4}[\quad\, (1-\eta)(1-\zeta)\texttt{edge}_{1}\\[-0.15cm] + & \qquad\; + (1+\xi)(1-\eta)\texttt{edge}_{2} \\ + & \qquad\; + (1-\eta)(1+\zeta)\texttt{edge}_{3} \\ + & \qquad\; + (1-\xi)(1-\eta)\texttt{edge}_{4} \\ + & \qquad\; + (1+\eta)(1-\zeta)\texttt{edge}_{5} \\ + & \qquad\; + (1+\xi)(1+\eta)\texttt{edge}_{6} \\ + & \qquad\; + (1+\eta)(1+\zeta)\texttt{edge}_{7} \\ + & \qquad\; + (1-\xi)(1+\eta)\texttt{edge}_{8} \\ + & \qquad\; + (1-\xi)(1-\zeta)\texttt{edge}_{9} \\ + & \qquad\; + (1+\xi)(1-\zeta)\texttt{edge}_{10} \\ + & \qquad\; + (1+\xi)(1+\zeta)\texttt{edge}_{11} \\ + & \qquad\; + (1-\xi)(1+\zeta)\texttt{edge}_{12}\quad]. +\end{aligned}\]

However, subtracting the edge correction terms $\mathcal{C}_{\texttt{edge}}(\boldsymbol{\xi})$ from $\boldsymbol\Sigma(\boldsymbol{\xi})$ removes the interior element contributions twice. Thus, to complete the construction of the transfinite mapping $\mathbf{X}(\boldsymbol{\xi})$ we add the transfinite map of the straight sided hexahedral element to find

\[\mathbf{X}(\boldsymbol{\xi}) = \boldsymbol\Sigma(\boldsymbol{\xi}) + - \mathcal{C}_{\texttt{edge}}(\boldsymbol{\xi}) + + \mathbf{X}_{linear}(\boldsymbol{\xi}).\]

Construction from standard Abaqus

Also for a mesh in standard Abaqus format there are no qualitative changes when going from 2D to 3D. The most notable difference is that boundaries are formed in 3D by faces defined by four nodes while in 2D boundaries are edges consisting of two elements. A simple mesh file, which is used also in examples/p4est_3d_dgsem/elixir_euler_free_stream_boundaries.jl, is given below:

*Heading
+<SOMETHING DIFFERENT FROM "File created by HOHQMesh">
+*NODE
+1, -2, 0, 0
+2, -1, 0, 0
+3, -1, 1, 0
+4, -2, 1, 0
+5, -2, 0, 1
+6, -1, 0, 1
+7, -1, 1, 1
+8, -2, 1, 1
+9, -1.75, 1, 0
+10, -1.5, 1, 0
+11, -1.25, 1, 0
+12, -1, 0.75000000000035, 0
+13, -1, 0.50000000000206, 0
+14, -1, 0.25000000000104, 0
+15, -1.25, 0, 0
+16, -1.5, 0, 0
+17, -1.75, 0, 0
+18, -2, 0.24999999999941, 0
+19, -2, 0.49999999999869, 0
+20, -2, 0.74999999999934, 0
+21, -1.75, 0, 1
+22, -1.5, 0, 1
+23, -1.25, 0, 1
+24, -1, 0.24999999999941, 1
+25, -1, 0.49999999999869, 1
+26, -1, 0.74999999999934, 1
+27, -1.25, 1, 1
+28, -1.5, 1, 1
+29, -1.75, 1, 1
+30, -2, 0.75000000000035, 1
+31, -2, 0.50000000000206, 1
+32, -2, 0.25000000000104, 1
+33, -2, 0, 0.24999999999941
+34, -2, 0, 0.49999999999869
+35, -2, 0, 0.74999999999934
+36, -2, 1, 0.24999999999941
+37, -2, 1, 0.49999999999869
+38, -2, 1, 0.74999999999934
+39, -1, 0, 0.24999999999941
+40, -1, 0, 0.49999999999869
+41, -1, 0, 0.74999999999934
+42, -1, 1, 0.24999999999941
+43, -1, 1, 0.49999999999869
+44, -1, 1, 0.74999999999934
+45, -1.25, 0.25000000000063, 0
+46, -1.25, 0.50000000000122, 0
+47, -1.25, 0.7500000000001, 0
+48, -1.5, 0.25000000000023, 0
+49, -1.5, 0.50000000000038, 0
+50, -1.5, 0.74999999999984, 0
+51, -1.75, 0.24999999999982, 0
+52, -1.75, 0.49999999999953, 0
+53, -1.75, 0.74999999999959, 0
+54, -1.75, 0.25000000000063, 1
+55, -1.75, 0.50000000000122, 1
+56, -1.75, 0.7500000000001, 1
+57, -1.5, 0.25000000000023, 1
+58, -1.5, 0.50000000000038, 1
+59, -1.5, 0.74999999999984, 1
+60, -1.25, 0.24999999999982, 1
+61, -1.25, 0.49999999999953, 1
+62, -1.25, 0.74999999999959, 1
+63, -2, 0.24999999999982, 0.24999999999941
+64, -2, 0.49999999999953, 0.24999999999941
+65, -2, 0.74999999999959, 0.24999999999941
+66, -2, 0.25000000000023, 0.49999999999869
+67, -2, 0.50000000000038, 0.49999999999869
+68, -2, 0.74999999999984, 0.49999999999869
+69, -2, 0.25000000000063, 0.74999999999934
+70, -2, 0.50000000000122, 0.74999999999934
+71, -2, 0.7500000000001, 0.74999999999934
+72, -1.25, 1, 0.74999999999934
+73, -1.25, 1, 0.49999999999869
+74, -1.25, 1, 0.24999999999941
+75, -1.5, 1, 0.74999999999934
+76, -1.5, 1, 0.49999999999869
+77, -1.5, 1, 0.24999999999941
+78, -1.75, 1, 0.74999999999934
+79, -1.75, 1, 0.49999999999869
+80, -1.75, 1, 0.24999999999941
+81, -1, 0.25000000000063, 0.24999999999941
+82, -1, 0.50000000000122, 0.24999999999941
+83, -1, 0.7500000000001, 0.24999999999941
+84, -1, 0.25000000000023, 0.49999999999869
+85, -1, 0.50000000000038, 0.49999999999869
+86, -1, 0.74999999999984, 0.49999999999869
+87, -1, 0.24999999999982, 0.74999999999934
+88, -1, 0.49999999999953, 0.74999999999934
+89, -1, 0.74999999999959, 0.74999999999934
+90, -1.75, 0, 0.74999999999934
+91, -1.75, 0, 0.49999999999869
+92, -1.75, 0, 0.24999999999941
+93, -1.5, 0, 0.74999999999934
+94, -1.5, 0, 0.49999999999869
+95, -1.5, 0, 0.24999999999941
+96, -1.25, 0, 0.74999999999934
+97, -1.25, 0, 0.49999999999869
+98, -1.25, 0, 0.24999999999941
+99, -1.75, 0.25000000000043, 0.74999999999934
+100, -1.75, 0.25000000000023, 0.49999999999869
+101, -1.75, 0.25000000000002, 0.24999999999941
+102, -1.75, 0.5000000000008, 0.74999999999934
+103, -1.75, 0.50000000000038, 0.49999999999869
+104, -1.75, 0.49999999999995, 0.24999999999941
+105, -1.75, 0.74999999999997, 0.74999999999934
+106, -1.75, 0.74999999999984, 0.49999999999869
+107, -1.75, 0.74999999999972, 0.24999999999941
+108, -1.5, 0.25000000000023, 0.74999999999934
+109, -1.5, 0.25000000000023, 0.49999999999869
+110, -1.5, 0.25000000000023, 0.24999999999941
+111, -1.5, 0.50000000000038, 0.74999999999934
+112, -1.5, 0.50000000000038, 0.49999999999869
+113, -1.5, 0.50000000000038, 0.24999999999941
+114, -1.5, 0.74999999999984, 0.74999999999934
+115, -1.5, 0.74999999999984, 0.49999999999869
+116, -1.5, 0.74999999999984, 0.24999999999941
+117, -1.25, 0.25000000000002, 0.74999999999934
+118, -1.25, 0.25000000000023, 0.49999999999869
+119, -1.25, 0.25000000000043, 0.24999999999941
+120, -1.25, 0.49999999999995, 0.74999999999934
+121, -1.25, 0.50000000000038, 0.49999999999869
+122, -1.25, 0.5000000000008, 0.24999999999941
+123, -1.25, 0.74999999999972, 0.74999999999934
+124, -1.25, 0.74999999999984, 0.49999999999869
+125, -1.25, 0.74999999999997, 0.24999999999941
+******* E L E M E N T S *************
+*ELEMENT, type=C3D8, ELSET=Volume1
+153, 54, 21, 5, 32, 99, 90, 35, 69
+154, 99, 90, 35, 69, 100, 91, 34, 66
+155, 100, 91, 34, 66, 101, 92, 33, 63
+156, 101, 92, 33, 63, 51, 17, 1, 18
+157, 55, 54, 32, 31, 102, 99, 69, 70
+158, 102, 99, 69, 70, 103, 100, 66, 67
+159, 103, 100, 66, 67, 104, 101, 63, 64
+160, 104, 101, 63, 64, 52, 51, 18, 19
+161, 56, 55, 31, 30, 105, 102, 70, 71
+162, 105, 102, 70, 71, 106, 103, 67, 68
+163, 106, 103, 67, 68, 107, 104, 64, 65
+164, 107, 104, 64, 65, 53, 52, 19, 20
+165, 29, 56, 30, 8, 78, 105, 71, 38
+166, 78, 105, 71, 38, 79, 106, 68, 37
+167, 79, 106, 68, 37, 80, 107, 65, 36
+168, 80, 107, 65, 36, 9, 53, 20, 4
+169, 57, 22, 21, 54, 108, 93, 90, 99
+170, 108, 93, 90, 99, 109, 94, 91, 100
+171, 109, 94, 91, 100, 110, 95, 92, 101
+172, 110, 95, 92, 101, 48, 16, 17, 51
+173, 58, 57, 54, 55, 111, 108, 99, 102
+174, 111, 108, 99, 102, 112, 109, 100, 103
+175, 112, 109, 100, 103, 113, 110, 101, 104
+176, 113, 110, 101, 104, 49, 48, 51, 52
+177, 59, 58, 55, 56, 114, 111, 102, 105
+178, 114, 111, 102, 105, 115, 112, 103, 106
+179, 115, 112, 103, 106, 116, 113, 104, 107
+180, 116, 113, 104, 107, 50, 49, 52, 53
+181, 28, 59, 56, 29, 75, 114, 105, 78
+182, 75, 114, 105, 78, 76, 115, 106, 79
+183, 76, 115, 106, 79, 77, 116, 107, 80
+184, 77, 116, 107, 80, 10, 50, 53, 9
+185, 60, 23, 22, 57, 117, 96, 93, 108
+186, 117, 96, 93, 108, 118, 97, 94, 109
+187, 118, 97, 94, 109, 119, 98, 95, 110
+188, 119, 98, 95, 110, 45, 15, 16, 48
+189, 61, 60, 57, 58, 120, 117, 108, 111
+190, 120, 117, 108, 111, 121, 118, 109, 112
+191, 121, 118, 109, 112, 122, 119, 110, 113
+192, 122, 119, 110, 113, 46, 45, 48, 49
+193, 62, 61, 58, 59, 123, 120, 111, 114
+194, 123, 120, 111, 114, 124, 121, 112, 115
+195, 124, 121, 112, 115, 125, 122, 113, 116
+196, 125, 122, 113, 116, 47, 46, 49, 50
+197, 27, 62, 59, 28, 72, 123, 114, 75
+198, 72, 123, 114, 75, 73, 124, 115, 76
+199, 73, 124, 115, 76, 74, 125, 116, 77
+200, 74, 125, 116, 77, 11, 47, 50, 10
+201, 24, 6, 23, 60, 87, 41, 96, 117
+202, 87, 41, 96, 117, 84, 40, 97, 118
+203, 84, 40, 97, 118, 81, 39, 98, 119
+204, 81, 39, 98, 119, 14, 2, 15, 45
+205, 25, 24, 60, 61, 88, 87, 117, 120
+206, 88, 87, 117, 120, 85, 84, 118, 121
+207, 85, 84, 118, 121, 82, 81, 119, 122
+208, 82, 81, 119, 122, 13, 14, 45, 46
+209, 26, 25, 61, 62, 89, 88, 120, 123
+210, 89, 88, 120, 123, 86, 85, 121, 124
+211, 86, 85, 121, 124, 83, 82, 122, 125
+212, 83, 82, 122, 125, 12, 13, 46, 47
+213, 7, 26, 62, 27, 44, 89, 123, 72
+214, 44, 89, 123, 72, 43, 86, 124, 73
+215, 43, 86, 124, 73, 42, 83, 125, 74
+216, 42, 83, 125, 74, 3, 12, 47, 11
+*NSET,NSET=PhysicalSurface1
+1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
+11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
+21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 
+31, 32, 33, 34, 35, 36, 37, 38, 45, 46, 
+47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
+57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
+67, 68, 69, 70, 71, 
+*NSET,NSET=PhysicalSurface2
+1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
+11, 12, 13, 14, 15, 16, 17, 21, 22, 23, 
+24, 25, 26, 27, 28, 29, 33, 34, 35, 36, 
+37, 38, 39, 40, 41, 42, 43, 44, 72, 73, 
+74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 
+84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 
+94, 95, 96, 97, 98, 
diff --git a/v0.8.7/meshes/structured_mesh/index.html b/v0.8.7/meshes/structured_mesh/index.html new file mode 100644 index 0000000000..1f8bb84957 --- /dev/null +++ b/v0.8.7/meshes/structured_mesh/index.html @@ -0,0 +1,2 @@ + +Structured mesh · Trixi.jl

Structured mesh

The StructuredMesh is a structured, curvilinear, conforming mesh type available for one-, two-, and three-dimensional simulations. An application of the StructuredMesh using a user-defined mapping is provided by one of the tutorials.

Due to its curvilinear nature, (numerical) fluxes need to implement methods dispatching on the normal::AbstractVector. Rotationally invariant equations such as the compressible Euler equations can use FluxRotated to wrap numerical fluxes implemented only for Cartesian meshes. This simplifies the re-use of existing functionality for the TreeMesh but is usually less efficient, cf. PR #550.

diff --git a/v0.8.7/meshes/tree_mesh/index.html b/v0.8.7/meshes/tree_mesh/index.html new file mode 100644 index 0000000000..0347b316d6 --- /dev/null +++ b/v0.8.7/meshes/tree_mesh/index.html @@ -0,0 +1,2 @@ + +Tree mesh · Trixi.jl

Tree mesh

The TreeMesh is a Cartesian, $h$-non-conforming mesh type used in many parts of Trixi.jl. Often, the support for this mesh type is developed best since it was the first mesh type in Trixi.jl, and it is available in one, two, and three space dimensions.

It is limited to hypercube domains (that is, lines in 1D, squares in 2D and cubes in 3D) but supports AMR via the AMRCallback. Due to its Cartesian nature, (numerical) fluxes need to implement methods dispatching on the orientation::Integer as described in the conventions.

diff --git a/v0.8.7/meshes/unstructured_quad_mesh/index.html b/v0.8.7/meshes/unstructured_quad_mesh/index.html new file mode 100644 index 0000000000..cca8a5eba4 --- /dev/null +++ b/v0.8.7/meshes/unstructured_quad_mesh/index.html @@ -0,0 +1,79 @@ + +Unstructured mesh · Trixi.jl

Unstructured quadrilateral mesh

The UnstructuredMesh2D is an unstructured, curvilinear, conforming mesh type in two space dimensions.

Due to its curvilinear nature, (numerical) fluxes need to implement methods dispatching on the normal::AbstractVector. Rotationally invariant equations such as the compressible Euler equations can use FluxRotated to wrap numerical fluxes implemented only for Cartesian meshes. This simplifies the re-use of existing functionality for the TreeMesh but is usually less efficient, cf. PR #550.

Next, we describe the conventions taken in the implementation for two-dimensional unstructured quadrilateral meshes. Principally, this relates to how a file with the extension .mesh encodes information about the numbering and orientation of elements in an unstructured quadrilateral mesh with possibly curved boundaries.

We use the following unstructured mesh with three elements for this discussion:

example-mesh

Further, a simulation using Trixi.jl on this example unstructured mesh is provided in examples/unstructured_2d_dgsem/elixir_euler_basic.jl.

Mesh file header

The first two lines of the mesh file lists the mesh file type as well as the total number of corners, surfaces, elements, and the polynomial degree that the mesh will use to represent any curved sides. For the example mesh these quantities are

ISM-V2
+    7    9    3    8

corresponding to seven corners, nine surfaces, and three elements. The mesh polynomial degree of eight is taken only for illustrative purposes. In practice, this mesh polynomial degree depends on the particular application for which the curved, unstructured mesh is required.

List of corner nodes

After these global counts that prescribe information about the mesh skeleton, the mesh file give a list of the physical (x,y) coordinates of all the corners. The corner nodes are listed in the order prescribed by mesh generator. Thus, for the example mesh this node list would be

 1.0    -1.0
+ 3.0    0.0
+ 1.0    1.0
+ 2.0    0.0
+ 0.0    0.0
+ 3.0    1.0
+ 3.0    -1.0

The corner nodes are internally referenced by their position in the list above. For example, here the node at (1.0, -1.0) would have node id 1, node id 2 would be at (3.0, 0.0) etc.

List of neighbor connectivity

After the corner list comes the neighbor connectivity along each surface in the mesh. This includes local indexing and orientation information necessary to compute the coupling between elements in the mesh. In 2D each surface is defined by connecting two nodes indexed as with the numbering above. We adopt the convention that node id 1 < node id 2.

Each surface will have two neighbors where the element on the left locally as one "walks" from node id 1 to node id 2 is taken to be the primary element and the element locally on the right is taken to be the secondary element. If, however, there is no secondary element index, then the surface lies along a physical boundary. In this case the only available element index is considered to be primary and the secondary index is set to zero.

The final two index numbers within the neighbor information list are used to identify the local surface within each element. The first local surface index (on the primary element) will always be positive whereas the second local surface index (on the primary element) can be positive or negative. If the second local surface index is positive, then the local coordinate systems in the primary element and secondary element match, i.e., the indexing on either side runs from 1:polydeg+1. However, if the local surface index of the secondary element is negative in the mesh file, then the coordinate system in the secondary element is flipped with respect to the primary element. Therefore, care must be taken in the implementation to ensure that the primary element indexing runs from 1:polydeg+1 whereas the secondary element indexing must run in reverse from polydeg+1:-1:1. Finally, if the secondary element index is zero, then so will be the local surface index because the surface is on a physical boundary. Also, there is no flipping of coordinate indexing required at the physical boundary because only the primary element's coordinate system exists.

Three examples: One along a physical boundary and two along interior surfaces.

Along edge {8} we connect node (2) to node (7) and are along a physical boundary in element 3 with the local surface index 1 and the neighbor information:

    2    7    3    0    1    0

Along edge {1} we connect node (2) to node (4) such that the primary element is 3 with local surface index 2 and the secondary element is 2 with local surface index 1. Furthermore, we see that coordinate system in the secondary element 2 is flipped with respect to the primary element's coordinate system such that the sign of the local surface index in the secondary element flips. This gives the following neighbor information:

    2    4    3    2    2    -1

Along edge {4} we connect node (1) to node (4) such that the primary element is 1 with local surface index 2 and the secondary element is 3 with local surface index 3. The coordinate systems in both elements match and no sign change is required on the local surface index in the secondary element:

    1    4    1    3    2    3

We collect the complete neighbor information for the example mesh above:

    2    4    3    2    2    -1
+    3    5    1    0    4    0
+    1    5    1    0    1    0
+    1    4    1    3    2    3
+    2    6    2    0    2    0
+    1    7    3    0    4    0
+    3    6    2    0    3    0
+    2    7    3    0    1    0
+    3    4    2    1    4    -3

List of elements

Each quadrilateral element in the unstructured mesh is dictated by four corner points with indexing taken from the numbering given by the corner list above. We connect a set of four corner points (starting from the bottom left) in an anti-clockwise fashion thus making the element right-handed indicated using the circular arrow in the figure above. In turn, this right-handedness defines the local surface indexing (i.e. the four local sides) and the local $(\xi, \eta)$ coordinate system. For example, the four corners for element 1 would be listed as

    5    1    4    3

The mesh file also encodes information for curved surfaces either interior to the domain (as surface {9} above) or along the physical boundaries. A set of check digits are included directly below the four corner indexes to indicate whether the local surface index (1, 2, 3, or 4) within the element is straight sided, 0, or is curved, 1. If the local surface is straight sided no additional information is necessary during the mesh file read in. But for any curved surfaces the mesh file provides (x,y) coordinate values in order to construct an interpolant of this surface with the mesh polynomial order at the Chebyshev-Gauss-Lobatto nodes. This list of (x,y) data will be given in the direction of the local coordinate system.

The last piece of information provided by the mesh file are labels for the different surfaces of an element. These labels are useful to set boundary conditions along physical surfaces. The labels can be short descriptive words. The label --- indicates an internal surface where no boundary condition is required.

As an example, the complete information for element 1 in the example mesh would be

    5    1    4    3
+    0    0    1    1
+ 1.000000000000000   1.000000000000000
+ 1.024948365654583   0.934461926834452
+ 1.116583018200151   0.777350964621867
+ 1.295753434047077   0.606254343587194
+ 1.537500000000000   0.462500000000000
+ 1.768263070247418   0.329729152118310
+ 1.920916981799849   0.185149035378133
+ 1.986035130050921   0.054554577460044
+ 2.000000000000000                 0.0
+               0.0                 0.0
+ 0.035513826946206   0.105291711848750
+ 0.148591270347399   0.317731556850611
+ 0.340010713990041   0.452219430075470
+ 0.575000000000000   0.462500000000000
+ 0.788022294598950   0.483764065630034
+ 0.926408729652601   0.644768443149389
+ 0.986453164464803   0.883724792445746
+ 1.000000000000000   1.000000000000000
+ Slant --- --- Bezier

where the curved boundary information is encoded "back to back". That is, the first nine (x,y) nodes in the list above correspond to the interior boundary curve along local side 3 in element 1 and the next nine (x,y) nodes denote the curved physical boundary named Bezier along local side 4.

We collect the complete set of element information for the example mesh

    5    1    4    3
+    0    0    1    1
+ 1.000000000000000   1.000000000000000
+ 1.024948365654583   0.934461926834452
+ 1.116583018200151   0.777350964621867
+ 1.295753434047077   0.606254343587194
+ 1.537500000000000   0.462500000000000
+ 1.768263070247418   0.329729152118310
+ 1.920916981799849   0.185149035378133
+ 1.986035130050921   0.054554577460044
+ 2.000000000000000                 0.0
+               0.0                 0.0
+ 0.035513826946206   0.105291711848750
+ 0.148591270347399   0.317731556850611
+ 0.340010713990041   0.452219430075470
+ 0.575000000000000   0.462500000000000
+ 0.788022294598950   0.483764065630034
+ 0.926408729652601   0.644768443149389
+ 0.986453164464803   0.883724792445746
+ 1.000000000000000   1.000000000000000
+ Slant --- --- Bezier
+    4    2    6    3
+    0    0    0    1
+ 2.000000000000000                 0.0
+ 1.986035130050921   0.054554577460044
+ 1.920916981799849   0.185149035378133
+ 1.768263070247418   0.329729152118310
+ 1.537500000000000   0.462500000000000
+ 1.295753434047077   0.606254343587194
+ 1.116583018200151   0.777350964621867
+ 1.024948365654583   0.934461926834452
+ 1.000000000000000   1.000000000000000
+ --- Right Top ---
+    7    2    4    1
+    0    0    0    0
+ Right --- --- Bottom

Trixi.jl on an unstructured quadrilateral mesh

We provide an example simulation on an unstructured quadrilateral mesh by executing

julia> trixi_include(default_example_unstructured())

Note this may download a copy of the mesh file described above for the three element unstructured mesh. This elixir provides the solution for the compressible Euler equations in two spatial dimensions for a smooth propagating wave solution. Below we provide the time evolution of the pressure wave for this example created with the Trixi2Vtk tool and visualized using ParaView.

+
diff --git a/v0.8.7/multi-physics_coupling/index.html b/v0.8.7/multi-physics_coupling/index.html new file mode 100644 index 0000000000..5d7e35c931 --- /dev/null +++ b/v0.8.7/multi-physics_coupling/index.html @@ -0,0 +1,2 @@ + +Coupling · Trixi.jl

Multi-physics coupling

A complex simulation can consist of different spatial domains in which different equations are being solved, different numerical methods being used or the grid structure is different. One example would be a fluid in a tank and an extended hot plate attached to it. We would then like to solve the Navier-Stokes equations in the fluid domain and the heat conduction equations in the plate. The coupling would happen at the interface through the exchange of thermal energy.

Converter coupling

It may happen that the two systems to be coupled do not share any variables, but share some of the physics. In such a situation, the same physics is just represented in a different form and with a different set of variables. This is the case, for instance assuming two domains, if there is a fluid system in one domain and a Vlasov system in the other domain. In that case we would have variables representing distribution functions of the Vlasov system on one side and variables representing the mechanical quantities, like density, of the fluid system. To translate the fields from one description to the other one needs to use converter functions. These functions need to be hand tailored by the user in the elixir file where each pair of coupled systems requires two coupling functions, one for each direction.

In the general case, we have a system $A$ with $m$ variables $u_{A,i}, \: i = 1, \dots, m$ and another system $B$ with $n$ variables $u_{B,j}, \: j = 1, \dots, n$. We then define two coupling functions, one that transforms $u_A$ into $u_B$ and one that goes the other way.

In their minimal form they take the position vector $x$, state vector $u$ and the equations of the two coupled systems and return the transformed variables. By passing the equations we can make use of their parameters, if they are required. Examples can be seen in examples/structured_2d_dgsem/elixir_advection_coupled.jl.

GlmSpeedCallback for coupled MHD simulations

When simulating an MHD system and the GlmSpeedCallback is required, we need to specify for which semidiscretization we need the GLM speed updated. This can be done with an additional parameter called semi_indices, which is a tuple containing the semidiscretization indices for all systems that require the GLM speed updated.

An example elixir can be found at examples/structured_2d_dgsem/elixir_mhd_coupled.jl.

Warning about binary compatibility

Currently the coordinate values on the nodes can differ by machine precision when simulating the mesh and when splitting the mesh in multiple domains. This is an issue coming from the coordinate interpolation on the nodes. As a result, running a simulation in a single system and in two coupled domains may result in a difference of the order of the machine precision. While this is not an issue for most practical problems, it is best to keep this in mind when comparing test runs.

diff --git a/v0.8.7/objects.inv b/v0.8.7/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..6522138983ab8a2c1e0da1aa590db1c8ef6823ba GIT binary patch literal 16296 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/overview/index.html b/v0.8.7/overview/index.html new file mode 100644 index 0000000000..343be5009c --- /dev/null +++ b/v0.8.7/overview/index.html @@ -0,0 +1,2 @@ + +Overview · Trixi.jl

Overview of the structure of Trixi.jl

Trixi.jl is designed as a library of components for discretizations of hyperbolic conservation laws. Thus, it is not a monolithic PDE solver that is configured at runtime via parameter files, as it is often found in classical numerical simulation codes. Instead, each simulation is configured by pure Julia code. Many examples of such simulation setups, called elixirs in Trixi.jl, are provided in the examples/ folder.

Trixi.jl uses the method of lines, i.e., the full space-time discretization is separated into two steps; the spatial semidiscretization is performed at first and the resulting ODE system is solved numerically using a suitable time integration method. Thus, the main ingredients of an elixir designed to solve a PDE numerically are the spatial semidiscretization and the time integration scheme.

Semidiscretizations

Semidiscretizations are high-level descriptions of spatial discretizations specialized for certain PDEs. Trixi.jl's main focus is on hyperbolic conservation laws represented in a SemidiscretizationHyperbolic. Such semidiscretizations are usually named semi in Trixi.jl

semidiscretization_overview

The basic building blocks of a semidiscretization are

  • a mesh describing the geometry of the domain
  • a set of equations describing the physical model
  • a solver describing the numerical approach

In addition, a semidiscretization bundles initial and boundary conditions, and possible source terms. These different ingredients of a semidiscretization can be configured individually and combined together. When a semidiscretization is constructed, it will create an internal cache, i.e., a collection of setup-specific data structures, that is usually passed to all lower level functions.

Due to Trixi.jl's modular nature using Julia's multiple dispatch features, new ingredients can be created specifically for a certain combination of other ingredients. For example, a new mesh type can be created and implemented at first only for a specific solver. Thus, there is no need to consider all possible combinations of meshes, equations, and solvers when implementing new features. This allows rapid prototyping of new ideas and is one of the main design goals behind Trixi.jl. Below is a brief overview of the availability of different features on different mesh types.

FeatureTreeMeshStructuredMeshUnstructuredMesh2DP4estMeshDGMultiMeshFurther reading
Spatial dimension1D, 2D, 3D1D, 2D, 3D2D2D, 3D1D, 2D, 3D
CoordinatesCartesiancurvilinearcurvilinearcurvilinearcurvilinear
Connectivityh-nonconformingconformingconformingh-nonconformingconforming
Element typeline, square, cubeline, quadᵃ, hexᵃquadᵃquadᵃ, hexᵃsimplex, quadᵃ, hexᵃ
Adaptive mesh refinementAMRCallback
Solver typeDGSEMDGSEMDGSEMDGSEMDGMulti
Domainhypercubemapped hypercubearbitraryarbitraryarbitrary
Weak formVolumeIntegralWeakForm
Flux differencingVolumeIntegralFluxDifferencing
Shock capturingVolumeIntegralShockCapturingHG
Nonconservative equationse.g., GLM MHD or shallow water equations
Parabolic termse.g., CompressibleNavierStokesDiffusion2D

ᵃ: quad = quadrilateral, hex = hexahedron

Note that except for TreeMesh all meshes are of curvilinear type, which means that a (unit) vector normal to the interface (normal_direction) needs to be supplied to the numerical flux function. You can check the reference if a certain numerical flux is implemented with a normal_direction or if currently only the Cartesian version (for TreeMesh) exists. In this case, you can still use this flux on curvilinear meshes by rotating it, see FluxRotated.

Time integration methods

Trixi.jl is compatible with the SciML ecosystem for ordinary differential equations. In particular, a spatial semidiscretization can be wrapped in an ODE problem using semidiscretize, which returns an ODEProblem. This ODEProblem is a wrapper of Trixi.rhs!(du_ode, u_ode, semi, t), which gets called in ODE solvers. Further information can be found in the section on time integration methods.

Next steps

We explicitly encourage people interested in Trixi.jl to have a look at the examples/ bundled with Trixi.jl to get an impression of what is possible and the general look and feel of Trixi.jl. Before doing that, it is usually good to get an idea of how to visualize numerical results.

If you like learning by doing, looking at the tutorials and trying to mix your own elixirs based thereon is probably a good next step. Otherwise, you can further dig into the documentation by looking at Trixi.jl's basic building blocks.

diff --git a/v0.8.7/parallelization/index.html b/v0.8.7/parallelization/index.html new file mode 100644 index 0000000000..1075f67ff8 --- /dev/null +++ b/v0.8.7/parallelization/index.html @@ -0,0 +1,47 @@ + +Parallelization · Trixi.jl

Parallelization

Shared-memory parallelization with threads

Many compute-intensive loops in Trixi.jl are parallelized using the multi-threading support provided by Julia. You can recognize those loops by the @threaded macro prefixed to them, e.g.,

@threaded for element in eachelement(dg, cache)
+  ...
+end

This will statically assign an equal iteration count to each available thread.

To use multi-threading, you need to tell Julia at startup how many threads you want to use by either setting the environment variable JULIA_NUM_THREADS or by providing the -t/--threads command line argument. For example, to start Julia with four threads, start Julia with

julia --threads=4

If both the environment variable and the command line argument are specified at the same time, the latter takes precedence.

If you use time integration methods from OrdinaryDiffEq.jl and want to use multiple threads therein, you need to set the keyword argument thread=OrdinaryDiffEq.True() of the algorithms, as described in the section on time integration methods.

Warning

Not everything is parallelized yet and there are likely opportunities to improve scalability. Multi-threading isn't considered part of the public API of Trixi.jl yet.

Distributed computing with MPI

In addition to the shared memory parallelization with multi-threading, Trixi.jl supports distributed parallelism via MPI.jl, which leverages the Message Passing Interface (MPI). MPI.jl comes with its own MPI library binaries such that there is no need to install MPI yourself. However, it is also possible to instead use an existing MPI installation, which is recommended if you are running MPI programs on a cluster or supercomputer (see the MPI.jl docs to find out how to select the employed MPI library). Additional notes on how to use a system-provided MPI installation with Trixi.jl can be found in the following subsection.

Work in progress

MPI-based parallelization is work in progress and not finished yet. Nothing related to MPI is part of the official API of Trixi.jl yet.

Using a system-provided MPI installation

When using Trixi.jl with a system-provided MPI backend, the underlying p4est, t8code and HDF5 libraries need to be compiled with the same MPI installation. If you want to use p4est (via the P4estMesh) or t8code (via the T8codeMesh) from Trixi.jl, you also need to use system-provided p4est or t8code installations (for notes on how to install p4est and t8code see, e.g., here and here, use the configure option --enable-mpi). Otherwise, there will be warnings that no preference is set for P4est.jl and T8code.jl that can be ignored if you do not use these libraries from Trixi.jl. Note that t8code already comes with a p4est installation, so it suffices to install t8code. In order to use system-provided p4est and t8code installations, P4est.jl and T8code.jl need to be configured to use the custom installations. Follow the steps described here and here for the configuration. The paths that point to libp4est.so (and potentially to libsc.so) need to be the same for P4est.jl and T8code.jl. This could, e.g., be libp4est.so that usually can be found in lib/ or local/lib/ in the installation directory of t8code. The preferences for HDF5.jl always need to be set, even if you do not want to use HDF5 from Trixi.jl, see also issue #1079 in HDF5.jl. To set the preferences for HDF5.jl, follow the instructions described here.

In total, in your active Julia project you should have a LocalPreferences.toml file with sections [MPIPreferences], [T8code] (only needed if T8codeMesh is used), [P4est] (only needed if P4estMesh is used), and [HDF5] as well as an entry MPIPreferences in your Project.toml to use a custom MPI installation. A LocalPreferences.toml file created as described above might look something like the following:

[HDF5]
+libhdf5 = "/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so"
+libhdf5_hl = "/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so"
+
+[HDF5_jll]
+libhdf5_hl_path = "/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so"
+libhdf5_path = "/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so"
+
+[MPIPreferences]
+__clear__ = ["preloads_env_switch"]
+_format = "1.0"
+abi = "OpenMPI"
+binary = "system"
+cclibs = []
+libmpi = "/lib/x86_64-linux-gnu/libmpi.so"
+mpiexec = "mpiexec"
+preloads = []
+
+[P4est]
+libp4est = "/home/mschlott/hackathon/libtrixi/t8code/install/lib/libp4est.so"
+libsc = "/home/mschlott/hackathon/libtrixi/t8code/install/lib/libsc.so"
+
+[T8code]
+libp4est = "/home/mschlott/hackathon/libtrixi/t8code/install/lib/libp4est.so"
+libsc = "/home/mschlott/hackathon/libtrixi/t8code/install/lib/libsc.so"
+libt8 = "/home/mschlott/hackathon/libtrixi/t8code/install/lib/libt8.so"

This file is created with the following sequence of commands:

julia> using MPIPreferences
+julia> MPIPreferences.use_system_binary()

Restart the Julia REPL

julia> using P4est
+julia> P4est.set_library_p4est!("/home/mschlott/hackathon/libtrixi/t8code/install/lib/libp4est.so")
+julia> P4est.set_library_sc!("/home/mschlott/hackathon/libtrixi/t8code/install/lib/libsc.so")
+julia> using T8code
+julia> T8code.set_libraries_path!("/home/mschlott/hackathon/libtrixi/t8code/install/lib/")
+julia> using HDF5
+julia> HDF5.API.set_libraries!("/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so", "/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so")

After the preferences are set, restart the Julia REPL again.

Usage

To start Trixi.jl in parallel with MPI, there are three options:

  1. Run from the REPL with mpiexec(): You can start a parallel execution directly from the REPL by executing

    julia> using MPI
    +
    +julia> mpiexec() do cmd
    +         run(`$cmd -n 3 $(Base.julia_cmd()) --threads=1 --project=@. -e 'using Trixi; trixi_include(default_example())'`)
    +       end

    The parameter -n 3 specifies that Trixi.jl should run with three processes (or ranks in MPI parlance) and should be adapted to your available computing resources and problem size. The $(Base.julia_cmd()) argument ensures that Julia is executed in parallel with the same optimization level etc. as you used for the REPL; if this is unnecessary or undesired, you can also just use julia. Further, if you are not running Trixi.jl from a local clone but have installed it as a package, you need to omit the --project=@..

  2. Run from the command line with mpiexecjl: Alternatively, you can use the mpiexecjl script provided by MPI.jl, which allows you to start Trixi.jl in parallel directly from the command line. As a preparation, you need to install the script once by running

    julia> using MPI
    +
    +julia> MPI.install_mpiexecjl(destdir="/somewhere/in/your/PATH")

    Then, to execute Trixi.jl in parallel, execute the following command from your command line:

    mpiexecjl -n 3 julia --threads=1 --project=@. -e 'using Trixi; trixi_include(default_example())'
  3. Run interactively with tmpi (Linux/MacOS only): If you are on a Linux/macOS system, you have a third option which lets you run Julia in parallel interactively from the REPL. This comes in handy especially during development, as in contrast to the first two options, it allows to reuse the compilation cache and thus facilitates much faster startup times after the first execution. It requires tmux and the OpenMPI library to be installed before, both of which are usually available through a package manager. Once you have installed both tools, you need to configure MPI.jl to use the OpenMPI for your system, which is explained here. Then, you can download and install the tmpi script by executing

    curl https://raw.githubusercontent.com/Azrael3000/tmpi/master/tmpi -o /somewhere/in/your/PATH/tmpi

    Finally, you can start and control multiple Julia REPLs simultaneously by running

    tmpi 3 julia --threads=1 --project=@.

    This will start Julia inside tmux three times and multiplexes all commands you enter in one REPL to all other REPLs (try for yourself to understand what it means). If you have no prior experience with tmux, handling the REPL this way feels slightly weird in the beginning. However, there is a lot of documentation for tmux available and once you get the hang of it, developing Trixi.jl in parallel becomes much smoother this way. Some helpful commands are the following. To close a single pane you can press Ctrl+b and then x followed by y to confirm. To quit the whole session you press Ctrl+b followed by :kill-session. Often you would like to scroll up. You can do that by pressing Ctrl+b and then [, which allows you to use the arrow keys to scroll up and down. To leave the scroll mode you press q. Switching between panes can be done by Ctrl+b followed by o. As of March 2022, newer versions of tmpi also support mpich, which is the default backend of MPI.jl (via MPICH_Jll.jl). To use this setup, you need to install mpiexecjl as described in the documentation of MPI.jl and make it available as mpirun, e.g., via a symlink of the form

    ln -s ~/.julia/bin/mpiexecjl /somewhere/in/your/path/mpirun

    (assuming default installations).

Hybrid parallelism

It is possible to combine MPI with shared memory parallelism via threads by starting Julia with more than one thread, e.g. by passing the command line argument julia --threads=2 instead of julia --threads=1 used in the examples above. In that case, you should make sure that your system supports the number of processes/threads that you try to start.

Performance

For information on how to evaluate the parallel performance of Trixi.jl, please have a look at the Performance metrics of the AnalysisCallback section, specifically at the descriptions of the performance index (PID).

Using error-based step size control with MPI

If you use error-based step size control (see also the section on error-based adaptive step sizes) together with MPI you need to pass internalnorm=ode_norm and you should pass unstable_check=ode_unstable_check to OrdinaryDiffEq's solve, which are both included in ode_default_options.

Using parallel input and output

Trixi.jl allows parallel I/O using MPI by leveraging parallel HDF5.jl. On most systems, this is enabled by default. Additionally, you can also use a local installation of the HDF5 library (with MPI support). For this, you first need to use a system-provided MPI library, see also here and you need to tell HDF5.jl to use this library. To do so with HDF5.jl v0.17 and newer, set the preferences libhdf5 and libhdf5_hl to the local paths of the libraries libhdf5 and libhdf5_hl, which can be done by

julia> using Preferences, UUIDs
+julia> set_preferences!(
+           UUID("f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f"), # UUID of HDF5.jl
+           "libhdf5" => "/path/to/your/libhdf5.so",
+           "libhdf5_hl" => "/path/to/your/libhdf5_hl.so", force = true)

Alternatively, with HDF5.jl v0.17.1 or higher you can use

julia> using HDF5
+julia> HDF5.API.set_libraries!("/path/to/your/libhdf5.so", "/path/to/your/libhdf5_hl.so")

For more information see also the documentation of HDF5.jl. In total, you should have a file called LocalPreferences.toml in the project directory that contains a section [MPIPreferences], a section [HDF5] with entries libhdf5 and libhdf5_hl, a section [P4est] with the entry libp4est as well as a section [T8code] with the entries libt8, libp4est and libsc. If you use HDF5.jl v0.16 or older, instead of setting the preferences for HDF5.jl, you need to set the environment variable JULIA_HDF5_PATH to the path, where the HDF5 binaries are located and then call ]build HDF5 from Julia.

If HDF5 is not MPI-enabled, Trixi.jl will fall back on a less efficient I/O mechanism. In that case, all disk I/O is performed only on rank zero and data is distributed to/gathered from the other ranks using regular MPI communication.

diff --git a/v0.8.7/performance/index.html b/v0.8.7/performance/index.html new file mode 100644 index 0000000000..5da9e95911 --- /dev/null +++ b/v0.8.7/performance/index.html @@ -0,0 +1,57 @@ + +Performance · Trixi.jl

Performance

Trixi.jl is designed to balance performance and readability. Since Julia provides a lot of zero-cost abstractions, it is often possible to optimize both goals simultaneously.

The usual development workflow in Julia is

  1. Make it work.
  2. Make it nice.
  3. Make it fast.

To achieve the third step, you should be familiar with (at least) the section on performance tips in the Julia manual. Here, we just list some important aspects you should consider when developing Trixi.jl.

  • Consider using @views/view(...) when using array slices, except on the left-side of an assignment (further details).
  • Functions are essentially for free, since they are usually automatically inlined where it makes sense (using @inline can be used as an additional hint to the compiler) (further details).
  • Function barriers can improve performance due to type stability (further details).
  • Look for type instabilities using @code_warntype. Consider using @descend from Cthulhu.jl to investigate deeper call chains.

Manual benchmarking

If you modify some internal parts of Trixi.jl, you should check the impact on performance. Hence, you should at least investigate the performance roughly by comparing the reported timings of several elixirs. Deeper investigations and micro-benchmarks should usually use BenchmarkTools.jl. For example, the following steps were used to benchmark the changes introduced in PR #256.

  1. git checkout e7ebf3846b3fd62ee1d0042e130afb50d7fe8e48 (new version)

  2. Start julia --threads=1 --check-bounds=no.

  3. Execute the following code in the REPL to benchmark the rhs! call at the final state.

    julia> using BenchmarkTools, Revise; using Trixi
    +
    +julia> # nowadays "examples/tree_2d_dgsem/elixir_euler_sedov_blast_wave.jl"
    +       trixi_include("examples/2d/elixir_euler_sedov_blast_wave.jl")
    +
    +julia> du_test = copy(sol.u[end]); u_test = copy(sol.u[end]);
    +
    +julia> @benchmark Trixi.rhs!(
    +          $(du_test),
    +          $(u_test),
    +          $(semi),
    +          $(sol.t[end]))
    +BenchmarkTools.Trial:
    + memory estimate:  10.48 KiB
    + allocs estimate:  67
    + --------------
    + minimum time:     4.510 ms (0.00% GC)
    + median time:      4.646 ms (0.00% GC)
    + mean time:        4.699 ms (0.00% GC)
    + maximum time:     7.183 ms (0.00% GC)
    + --------------
    + samples:          1065
    + evals/sample:     1
    +
    +shell> git checkout 222241ff54f8a4ca9876cc1fc25ae262416a4ea0
    +
    +julia> # nowadays "examples/tree_2d_dgsem/elixir_euler_sedov_blast_wave.jl"
    +       trixi_include("examples/2d/elixir_euler_sedov_blast_wave.jl")
    +
    +julia> @benchmark Trixi.rhs!(
    +          $(du_test),
    +          $(u_test),
    +          $(semi),
    +          $(sol.t[end]))
    +BenchmarkTools.Trial:
    + memory estimate:  10.36 KiB
    + allocs estimate:  67
    + --------------
    + minimum time:     4.500 ms (0.00% GC)
    + median time:      4.635 ms (0.00% GC)
    + mean time:        4.676 ms (0.00% GC)
    + maximum time:     5.880 ms (0.00% GC)
    + --------------
    + samples:          1070
    + evals/sample:     1

    Run the @benchmark ... commands multiple times to see whether there are any significant fluctuations. Note that the elixir name has changed since PR #256. Nowadays, the relevant elixir is examples/tree_2d_dgsem/elixir_euler_sedov_blast_wave.jl.

Follow these steps for both commits you want to compare. The relevant benchmark results you should typically be looking at are the median and mean values of the runtime and the memory/allocs estimate. In this example, the differences of the runtimes are of the order of the fluctuations one gets when running the benchmarks multiple times. Since the memory/allocs are (roughly) the same, there doesn't seem to be a significant performance regression here.

You can also make it more detailed by benchmarking only, e.g., the calculation of the volume terms, but whether that's necessary depends on the modifications you made and their (potential) impact.

Some more detailed description of manual profiling and benchmarking as well as resulting performance improvements of Trixi.jl are given in the following blog posts.

Automated benchmarking

We use PkgBenchmark.jl to provide a standard set of benchmarks for Trixi.jl. The relevant benchmark script is benchmark/benchmarks.jl. To benchmark the changes made in a PR, please proceed as follows:

  1. Check out the latest main branch of your Trixi.jl development repository.
  2. Check out the latest development branch of your PR.
  3. Change your working directory to the benchmark directory of Trixi.jl.
  4. Execute julia run_benchmarks.jl.

This will take some hours to complete and requires at least 8 GiB of RAM. When everything is finished, some output files will be created in the benchmark directory of Trixi.jl.

Warning

Please note that the benchmark scripts use --check-bounds=no at the moment. Thus, they will not work in any useful way for Julia v1.10 (and newer?), see Julia issue #50985.

You can also run a standard set of benchmarks manually via

julia> using PkgBenchmark, Trixi
+
+julia> results = benchmarkpkg(Trixi, BenchmarkConfig(juliacmd=`$(Base.julia_cmd()) --check-bounds=no --threads=1`))
+
+julia> export_markdown(pkgdir(Trixi, "benchmark", "single_benchmark.md"), results)

This will save a markdown file with a summary of the benchmark results similar to this example. Note that this will take quite some time. Additional options are described in the docs of PkgBenchmark.jl. A particularly useful option is to specify a BenchmarkConfig including Julia command line options affecting the performance such as disabling bounds-checking and setting the number of threads.

A useful feature when developing Trixi.jl is to compare the performance of Trixi.jl's current state vs. the main branch. This can be achieved by executing

julia> using PkgBenchmark, Trixi
+
+julia> results = judge(Trixi,
+             BenchmarkConfig(juliacmd=`$(Base.julia_cmd()) --check-bounds=no --threads=1`), # target
+             BenchmarkConfig(juliacmd=`$(Base.julia_cmd()) --check-bounds=no --threads=1`, id="main") # baseline
+       )
+
+julia> export_markdown(pkgdir(Trixi, "benchmark", "results.md"), results)

By default, the target is the current state of the repository. Remember that you need to be in a clean state (commit or stash your changes) to run this successfully. You can also run this comparison and an additional one using two threads via

julia> include("benchmark/run_benchmarks.jl")

Then, markdown files including the results are saved in benchmark/. This example result was obtained using a GitHub action for the PR #535. Note that GitHub actions run on in the cloud in a virtual machine. Hence, we do not really have control over it and performance results must be taken with a grain of salt. Nevertheless, significant runtime differences and differences of memory allocations should be robust indicators of performance changes.

Runtime performance vs. latency aka using @nospecialize selectively

Usually, Julia will compile specialized versions of each method, using as much information from the types of function arguments as possible (based on some heuristics). The compiler will generate code that is as efficient as comparable code written in a low-level language such as C or Fortran. However, there are cases where the runtime performance does not really matter but the time needed to compile specializations becomes significant. This is related to latency or the time-to-first-plot problem, well-known in the Julia community. In such a case, it can be useful to remove some burden from the compiler by avoiding specialization on every possible argument types using the macro @nospecialize. A prime example of such a case is pretty printing of structs in the Julia REPL, see the associated PR for further discussions.

As a rule of thumb:

  • Do not use @nospecialize in performance-critical parts, in particular not for methods involved in computing Trixi.rhs!.
  • Consider using @nospecialize for methods like custom implementations of Base.show.

Performance metrics of the AnalysisCallback

The AnalysisCallback computes two performance indicators that you can use to evaluate the serial and parallel performance of Trixi.jl. They represent measured run times that are normalized by the number of rhs! evaluations and the number of degrees of freedom of the problem setup. The normalization ensures that we can compare different measurements for each type of indicator independent of the number of time steps or mesh size. All indicators have in common that they are still in units of time, thus lower is better for each of them.

Here, the term "degrees of freedom" (DOFs) refers to the number of independent state vectors that are used to represent the numerical solution. For example, if you use a DGSEM-type scheme in 2D on a mesh with 8 elements and with 5-by-5 Gauss-Lobatto nodes in each element (i.e., a polynomial degree of 4), the total number of DOFs would be

\[n_\text{DOFs,DGSEM} = \{\text{number of elements}\} \cdot \{\text{number of nodes per element}\} = 8 \cdot (5 \cdot 5) = 200.\]

In contrast, for a finite volume-type scheme on a mesh with 8 elements, the total number of DOFs would be (independent of the number of spatial dimensions)

\[n_\text{DOFs,FV} = \{\text{number of elements}\} = 8,\]

since for standard finite volume methods you store a single state vector in each element. Note that we specifically count the number of state vectors and not the number of state variables for the DOFs. That is, in the previous example $n_\text{DOFs,FV}$ is equal to 8 independent of whether this is a compressible Euler setup with 5 state variables or a linear scalar advection setup with one state variable.

For each indicator, the measurements are always since the last invocation of the AnalysisCallback. That is, if the analysis callback is called multiple times, the indicators are repeatedly computed and can thus also be used to track the performance over the course of a longer simulation, e.g., to analyze setups with varying performance characteristics. Note that the time spent in the AnalysisCallback itself is always excluded, i.e., the performance measurements are not distorted by potentially expensive solution analysis computations. All other parts of a Trixi.jl simulation are included, however, thus make sure that you disable everything you do not want to be measured (such as I/O callbacks, visualization etc.).

Performance indicators and adaptive mesh refinement

Currently it is not possible to compute meaningful performance indicators for a simulation with arbitrary adaptive mesh refinement, since this would require to explicitly keep track of the number of DOF updates due to the mesh size changing repeatedly. The only way to do this at the moment is by setting the analysis interval to the same value as the AMR interval.

Local, rhs!-only indicator

The local, rhs!-only indicator is computed as

\[\text{time/DOF/rhs!} = \frac{t_\text{\texttt{rhs!}}}{n_\text{DOFs,local} \cdot n_\text{calls,\texttt{rhs!}}},\]

where $t_\text{\texttt{rhs!}}$ is the accumulated time spent in rhs!, $n_\text{DOFs,local}$ is the local number of DOFs (i.e., on the current MPI rank; if doing a serial run, you can just think of this as the number of DOFs), and $n_\text{calls,\texttt{rhs!}}$ is the number of times the rhs! function has been evaluated. Note that for this indicator, we measure only the time spent in rhs!, i.e., by definition all computations outside of rhs! - specifically all other callbacks and the time integration method - are not taken into account.

The local, rhs!-only indicator is usually most useful if you do serial measurements and are interested in the performance of the implementation of your core numerical methods (e.g., when doing performance tuning).

Performance index (PID)

The performance index (PID) is computed as

\[\text{PID} = \frac{t_\text{wall} \cdot n_\text{ranks,MPI}}{n_\text{DOFs,global} \cdot n_\text{calls,\texttt{rhs!}}},\]

where $t_\text{wall}$ is the walltime since the last call to the AnalysisCallback, $n_\text{ranks,MPI}$ is the number of MPI ranks used, $n_\text{DOFs,global}$ is the global number of DOFs (i.e., the sum of DOFs over all MPI ranks; if doing a serial run, you can just think of this as the number of DOFs), and $n_\text{calls,\texttt{rhs!}}$ is the number of times the rhs! function has been evaluated since the last call to the AnalysisCallback. The PID measures everything except the time spent in the AnalysisCallback itself - specifically, all other callbacks and the time integration method itself are included.

The PID is usually most useful if you would like to compare the parallel performance of your code to its serial performance. Specifically, it allows you to evaluate the parallelization overhead of your code by giving you a measure of the resources that are necessary to solve a given simulation setup. In a sense, it mimics the "core hours" metric that is often used by supercomputer centers to measure how many resources a particular compute job requires. It can thus be seen as a proxy for "energy used" and, as an extension, "monetary cost".

Initialization overhead in measurements

When using one of the integration schemes from OrdinaryDiffEq.jl, their implementation will initialize some OrdinaryDiffEq.jl-specific information during the first time step. Among other things, one additional call to rhs! is performed. Therefore, make sure that for performance measurements using the PID either the number of timesteps or the workload per rhs! call is large enough to make the initialization overhead negligible. Note that the extra call to rhs! is properly accounted for in both the number of calls and the measured time, so you do not need to worry about it being expensive. If you want a perfect timing result, you need to set the analysis interval such that the AnalysisCallback is invoked at least once during the course of the simulation and discard the first PID value.

diff --git a/v0.8.7/reference-trixi/index.html b/v0.8.7/reference-trixi/index.html new file mode 100644 index 0000000000..f9aa8632b7 --- /dev/null +++ b/v0.8.7/reference-trixi/index.html @@ -0,0 +1,644 @@ + +Trixi.jl · Trixi.jl

Trixi.jl API

Trixi.TrixiModule
Trixi

Trixi.jl is a numerical simulation framework for hyperbolic conservation laws. A key objective for the framework is to be useful to both scientists and students. Therefore, next to having an extensible design with a fast implementation, Trixi.jl is focused on being easy to use for new or inexperienced users, including the installation and postprocessing procedures.

To get started, run your first simulation with Trixi.jl using

trixi_include(default_example())

See also: trixi-framework/Trixi.jl

source
Trixi.AMRCallbackType
AMRCallback(semi, controller [,adaptor=AdaptorAMR(semi)];
+            interval,
+            adapt_initial_condition=true,
+            adapt_initial_condition_only_refine=true,
+            dynamic_load_balancing=true)

Performs adaptive mesh refinement (AMR) every interval time steps for a given semidiscretization semi using the chosen controller.

source
Trixi.AbstractEquationsType
AbstractEquations{NDIMS, NVARS}

An abstract supertype of specific equations such as the compressible Euler equations. The type parameters encode the number of spatial dimensions (NDIMS) and the number of primary variables (NVARS) of the physics model.

source
Trixi.AbstractMeshType
AbstractMesh{NDIMS}

An abstract supertype of specific mesh types such as TreeMesh or StructuredMesh. The type parameters encode the number of spatial dimensions (NDIMS).

source
Trixi.AcousticPerturbationEquations2DType
AcousticPerturbationEquations2D(v_mean_global, c_mean_global, rho_mean_global)

Acoustic perturbation equations (APE) in two space dimensions. The equations are given by

\[\begin{aligned} + \frac{\partial\mathbf{v'}}{\partial t} + \nabla (\bar{\mathbf{v}}\cdot\mathbf{v'}) + + \nabla\left( \frac{\bar{c}^2 \tilde{p}'}{\bar{\rho}} \right) &= 0 \\ + \frac{\partial \tilde{p}'}{\partial t} + + \nabla\cdot (\bar{\rho} \mathbf{v'} + \bar{\mathbf{v}} \tilde{p}') &= 0. +\end{aligned}\]

The bar $\bar{(\cdot)}$ indicates time-averaged quantities. The unknowns of the APE are the perturbed velocities $\mathbf{v'} = (v_1', v_2')^T$ and the scaled perturbed pressure $\tilde{p}' = \frac{p'}{\bar{c}^2}$, where $p'$ denotes the perturbed pressure and the perturbed variables are defined by $\phi' = \phi - \bar{\phi}$.

In addition to the unknowns, Trixi.jl currently stores the mean values in the state vector, i.e. the state vector used internally is given by

\[\mathbf{u} = + \begin{pmatrix} + v_1' \\ v_2' \\ \tilde{p}' \\ \bar{v}_1 \\ \bar{v}_2 \\ \bar{c} \\ \bar{\rho} + \end{pmatrix}.\]

This affects the implementation and use of these equations in various ways:

  • The flux values corresponding to the mean values must be zero.
  • The mean values have to be considered when defining initial conditions, boundary conditions or source terms.
  • AnalysisCallback analyzes these variables too.
  • Trixi.jl's visualization tools will visualize the mean values by default.

The constructor accepts a 2-tuple v_mean_global and scalars c_mean_global and rho_mean_global which can be used to make the definition of initial conditions for problems with constant mean flow more flexible. These values are ignored if the mean values are defined internally in an initial condition.

The equations are based on the APE-4 system introduced in the following paper:

source
Trixi.AdiabaticType
struct Adiabatic

Used to create a no-slip boundary condition with BoundaryConditionNavierStokesWall. The field boundary_value_normal_flux_function should be a function with signature boundary_value_normal_flux_function(x, t, equations) and return a scalar value for the normal heat flux at point x and time t.

source
Trixi.AliveCallbackType
AliveCallback(analysis_interval=0, alive_interval=analysis_interval÷10)

Inexpensive callback showing that a simulation is still running by printing some information such as the current time to the screen every alive_interval time steps. If analysis_interval ≂̸ 0, the output is omitted every analysis_interval time steps.

source
Trixi.AnalysisCallbackType
AnalysisCallback(semi; interval=0,
+                        save_analysis=false,
+                        output_directory="out",
+                        analysis_filename="analysis.dat",
+                        extra_analysis_errors=Symbol[],
+                        extra_analysis_integrals=())

Analyze a numerical solution every interval time steps and print the results to the screen. If save_analysis, the results are also saved in joinpath(output_directory, analysis_filename).

Additional errors can be computed, e.g. by passing extra_analysis_errors = (:l2_error_primitive, :linf_error_primitive) or extra_analysis_errors = (:conservation_error,).

If you want to omit the computation (to safe compute-time) of the default_analysis_errors, specify analysis_errors = Symbol[]. Note: default_analysis_errors are :l2_error and :linf_error for all equations. If you want to compute extra_analysis_errors such as :conservation_error solely, i.e., without :l2_error, :linf_error you need to specify analysis_errors = [:conservation_error] instead of extra_analysis_errors = [:conservation_error].

Further scalar functions func in extra_analysis_integrals are applied to the numerical solution and integrated over the computational domain. Some examples for this are entropy, energy_kinetic, energy_internal, and energy_total. You can also write your own function with the same signature as the examples listed above and pass it via extra_analysis_integrals. See the developer comments about Trixi.analyze, Trixi.pretty_form_utf, and Trixi.pretty_form_ascii for further information on how to create custom analysis quantities.

In addition, the analysis callback records and outputs a number of quantities that are useful for evaluating the computational performance, such as the total runtime, the performance index (time/DOF/rhs!), the time spent in garbage collection (GC), or the current memory usage (alloc'd memory).

source
Trixi.AnalysisCallbackCoupledType
AnalysisCallbackCoupled(semi, callbacks...)

Combine multiple analysis callbacks for coupled simulations with a SemidiscretizationCoupled. For each coupled system, an indididual AnalysisCallback must be created and passed to the AnalysisCallbackCoupled in order, i.e., in the same sequence as the indidvidual semidiscretizations are stored in the SemidiscretizationCoupled.

Experimental code

This is an experimental feature and can change any time.

source
Trixi.AnalysisSurfaceIntegralType
AnalysisSurfaceIntegral{Variable, NBoundaries}(semi,
+                                               boundary_symbols::NTuple{NBoundaries, Symbol},
+                                               variable)

This struct is used to compute the surface integral of a quantity of interest variable alongside the boundary/boundaries associated with particular name(s) given in boundary_symbol or boundary_symbols. For instance, this can be used to compute the lift LiftCoefficientPressure or drag coefficient DragCoefficientPressure of e.g. an airfoil with the boundary name :Airfoil in 2D.

  • semi::Semidiscretization: Passed in to retrieve boundary condition information
  • boundary_symbols::NTuple{NBoundaries, Symbol}: Name(s) of the boundary/boundaries where the quantity of interest is computed
  • variable::Variable: Quantity of interest, like lift or drag
source
Trixi.AveragingCallbackType
AveragingCallback(semi::SemidiscretizationHyperbolic, tspan; output_directory="out",
+                  filename="averaging.h5")
Experimental code

This callback is experimental and may change in any future release.

A callback that averages the flow field described by semi which must be a semidiscretization of the compressible Euler equations in two dimensions. The callback records the mean velocity, mean speed of sound, mean density, and mean vorticity for each node over the time interval given by tspan and stores the results in an HDF5 file filename in the directory output_directory. Note that this callback does not support adaptive mesh refinement (AMRCallback).

source
Trixi.BoundaryConditionCoupledType
BoundaryConditionCoupled(other_semi_index, indices, uEltype, coupling_converter)

Boundary condition to glue two meshes together. Solution values at the boundary of another mesh will be used as boundary values. This requires the use of SemidiscretizationCoupled. The other mesh is specified by other_semi_index, which is the index of the mesh in the tuple of semidiscretizations.

Note that the elements and nodes of the two meshes at the coupled boundary must coincide. This is currently only implemented for StructuredMesh.

Arguments

  • other_semi_index: the index in SemidiscretizationCoupled of the semidiscretization from which the values are copied
  • indices::Tuple: node/cell indices at the boundary of the mesh in the other semidiscretization. See examples below.
  • uEltype::Type: element type of solution
  • coupling_converter::CouplingConverter: function to call for converting the solution state of one system to the other system

Examples

# Connect the left boundary of mesh 2 to our boundary such that our positive
+# boundary direction will match the positive y direction of the other boundary
+BoundaryConditionCoupled(2, (:begin, :i), Float64, fun)
+
+# Connect the same two boundaries oppositely oriented
+BoundaryConditionCoupled(2, (:begin, :i_backwards), Float64, fun)
+
+# Using this as y_neg boundary will connect `our_cells[i, 1, j]` to `other_cells[j, end-i, end]`
+BoundaryConditionCoupled(2, (:j, :i_backwards, :end), Float64, fun)
Experimental code

This is an experimental feature and can change any time.

source
Trixi.BoundaryConditionDirichletType
BoundaryConditionDirichlet(boundary_value_function)

Create a Dirichlet boundary condition that uses the function boundary_value_function to specify the values at the boundary. This can be used to create a boundary condition that specifies exact boundary values by passing the exact solution of the equation. The passed boundary value function will be called with the same arguments as an initial condition function is called, i.e., as

boundary_value_function(x, t, equations)

where x specifies the coordinates, t is the current time, and equation is the corresponding system of equations.

Examples

julia> BoundaryConditionDirichlet(initial_condition_convergence_test)
source
Trixi.BoundaryConditionNavierStokesWallType
struct BoundaryConditionNavierStokesWall

Creates a wall-type boundary conditions for the compressible Navier-Stokes equations. The fields boundary_condition_velocity and boundary_condition_heat_flux are intended to be boundary condition types such as the NoSlip velocity boundary condition and the Adiabatic or Isothermal heat boundary condition.

source
Trixi.BoundaryConditionNeumannType
BoundaryConditionNeumann(boundary_normal_flux_function)

Similar to BoundaryConditionDirichlet, but creates a Neumann boundary condition for parabolic equations that uses the function boundary_normal_flux_function to specify the values of the normal flux at the boundary. The passed boundary value function will be called with the same arguments as an initial condition function is called, i.e., as

boundary_normal_flux_function(x, t, equations)

where x specifies the coordinates, t is the current time, and equation is the corresponding system of equations.

source
Trixi.BoundsCheckCallbackType
BoundsCheckCallback(; output_directory="out", save_errors=false, interval=1)

Subcell limiting techniques with SubcellLimiterIDP are constructed to adhere certain local or global bounds. To make sure that these bounds are actually met, this callback calculates the maximum deviation from the bounds. The maximum deviation per applied bound is printed to the screen at the end of the simulation. For more insights, when setting save_errors=true the occurring errors are exported every interval time steps during the simulation. Then, the maximum deviations since the last export are saved in "output_directory/deviations.txt". The BoundsCheckCallback has to be applied as a stage callback for the SSPRK time integration scheme.

Note

For SubcellLimiterIDP, the solution is corrected in the a posteriori correction stage SubcellLimiterIDPCorrection. So, to check the final solution, this bounds check callback must be called after the correction stage.

source
Trixi.CarpenterKennedy2N54Type
CarpenterKennedy2N54()

The following structures and methods provide a minimal implementation of the low-storage explicit Runge-Kutta method of

Carpenter, Kennedy (1994) Fourth order 2N storage RK schemes, Solution 3

using the same interface as OrdinaryDiffEq.jl.

source
Trixi.CompressibleEulerEquations1DType
CompressibleEulerEquations1D(gamma)

The compressible Euler equations

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho v_1 \\ \rho e +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} +\rho v_1 \\ \rho v_1^2 + p \\ (\rho e +p) v_1 +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 +\end{pmatrix}\]

for an ideal gas with ratio of specific heats gamma in one space dimension. Here, $\rho$ is the density, $v_1$ the velocity, $e$ the specific total energy rather than specific internal energy, and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho v_1^2 \right)\]

the pressure.

source
Trixi.CompressibleEulerEquations2DType
CompressibleEulerEquations2D(gamma)

The compressible Euler equations

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho v_1 \\ \rho v_2 \\ \rho e +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} + \rho v_1 \\ \rho v_1^2 + p \\ \rho v_1 v_2 \\ (\rho e +p) v_1 +\end{pmatrix} ++ +\frac{\partial}{\partial y} +\begin{pmatrix} +\rho v_2 \\ \rho v_1 v_2 \\ \rho v_2^2 + p \\ (\rho e +p) v_2 +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 \\ 0 +\end{pmatrix}\]

for an ideal gas with ratio of specific heats gamma in two space dimensions. Here, $\rho$ is the density, $v_1$, $v_2$ the velocities, $e$ the specific total energy rather than specific internal energy, and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2+v_2^2) \right)\]

the pressure.

source
Trixi.CompressibleEulerEquations3DType
CompressibleEulerEquations3D(gamma)

The compressible Euler equations

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho v_1 \\ \rho v_2 \\ \rho v_3 \\ \rho e +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} + \rho v_1 \\ \rho v_1^2 + p \\ \rho v_1 v_2 \\ \rho v_1 v_3 \\ ( \rho e +p) v_1 +\end{pmatrix} ++ +\frac{\partial}{\partial y} +\begin{pmatrix} +\rho v_2 \\ \rho v_1 v_2 \\ \rho v_2^2 + p \\ \rho v_1 v_3 \\ ( \rho e +p) v_2 +\end{pmatrix} ++ +\frac{\partial}{\partial z} +\begin{pmatrix} +\rho v_3 \\ \rho v_1 v_3 \\ \rho v_2 v_3 \\ \rho v_3^2 + p \\ ( \rho e +p) v_3 +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 \\ 0 \\ 0 +\end{pmatrix}\]

for an ideal gas with ratio of specific heats gamma in three space dimensions. Here, $\rho$ is the density, $v_1$, $v_2$, $v_3$ the velocities, $e$ the specific total energy rather than specific internal energy, and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2+v_2^2+v_3^2) \right)\]

the pressure.

source
Trixi.CompressibleEulerEquationsQuasi1DType
CompressibleEulerEquationsQuasi1D(gamma)

The quasi-1d compressible Euler equations (see Chan et al. DOI: 10.48550/arXiv.2307.12089 for details)

\[\frac{\partial}{\partial t} +\begin{pmatrix} +a \rho \\ a \rho v_1 \\ a e +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} +a \rho v_1 \\ a \rho v_1^2 \\ a v_1 (e +p) +\end{pmatrix} ++ +a \frac{\partial}{\partial x} +\begin{pmatrix} +0 \\ p \\ 0 +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 +\end{pmatrix}\]

for an ideal gas with ratio of specific heats gamma in one space dimension. Here, $\rho$ is the density, $v_1$ the velocity, $e$ the specific total energy rather than specific internal energy, $a$ the (possibly) variable nozzle width, and

\[p = (\gamma - 1) \left( e - \frac{1}{2} \rho v_1^2 \right)\]

the pressure.

The nozzle width function $a(x)$ is set inside the initial condition routine for a particular problem setup. To test the conservative form of the compressible Euler equations one can set the nozzle width variable $a$ to one.

In addition to the unknowns, Trixi.jl currently stores the nozzle width values at the approximation points despite being fixed in time. This affects the implementation and use of these equations in various ways:

  • The flux values corresponding to the nozzle width must be zero.
  • The nozzle width values must be included when defining initial conditions, boundary conditions or source terms.
  • AnalysisCallback analyzes this variable.
  • Trixi.jl's visualization tools will visualize the nozzle width by default.
source
Trixi.CompressibleEulerMulticomponentEquations1DType
CompressibleEulerMulticomponentEquations1D(; gammas, gas_constants)

Multicomponent version of the compressible Euler equations

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho v_1 \\ \rho e \\ \rho_1 \\ \rho_2 \\ \vdots \\ \rho_{n} +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} +\rho v_1^2 + p \\ (\rho e +p) v_1 \\ \rho_1 v_1 \\ \rho_2 v_1 \\ \vdots \\ \rho_{n} v_1 +\end{pmatrix} + += +\begin{pmatrix} +0 \\ 0 \\ 0 \\ 0 \\ \vdots \\ 0 +\end{pmatrix}\]

for calorically perfect gas in one space dimension. Here, $\rho_i$ is the density of component $i$, $\rho=\sum_{i=1}^n\rho_i$ the sum of the individual $\rho_i$, $v_1$ the velocity, $e$ the specific total energy rather than specific internal energy, and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho v_1^2 \right)\]

the pressure,

\[\gamma=\frac{\sum_{i=1}^n\rho_i C_{v,i}\gamma_i}{\sum_{i=1}^n\rho_i C_{v,i}}\]

total heat capacity ratio, $\gamma_i$ heat capacity ratio of component $i$,

\[C_{v,i}=\frac{R}{\gamma_i-1}\]

specific heat capacity at constant volume of component $i$.

In case of more than one component, the specific heat ratios gammas and the gas constants gas_constants should be passed as tuples, e.g., gammas=(1.4, 1.667).

The remaining variables like the specific heats at constant volume cv or the specific heats at constant pressure cp are then calculated considering a calorically perfect gas.

source
Trixi.CompressibleEulerMulticomponentEquations2DType
CompressibleEulerMulticomponentEquations2D(; gammas, gas_constants)

Multicomponent version of the compressible Euler equations

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho v_1 \\ \rho v_2 \\ \rho e \\ \rho_1 \\ \rho_2 \\ \vdots \\ \rho_{n} +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} +\rho v_1^2 + p \\ \rho v_1 v_2 \\ ( \rho e +p) v_1 \\ \rho_1 v_1 \\ \rho_2 v_1 \\ \vdots \\ \rho_{n} v_1 +\end{pmatrix} ++ +\frac{\partial}{\partial y} +\begin{pmatrix} +\rho v_1 v_2 \\ \rho v_2^2 + p \\ ( \rho e +p) v_2 \\ \rho_1 v_2 \\ \rho_2 v_2 \\ \vdots \\ \rho_{n} v_2 +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 \\ 0 \\ 0 \\ \vdots \\ 0 +\end{pmatrix}\]

for calorically perfect gas in two space dimensions. Here, $\rho_i$ is the density of component $i$, $\rho=\sum_{i=1}^n\rho_i$ the sum of the individual $\rho_i$, $v_1$, $v_2$ the velocities, $e$ the specific total energy rather than specific internal energy, and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2 + v_2^2) \right)\]

the pressure,

\[\gamma=\frac{\sum_{i=1}^n\rho_i C_{v,i}\gamma_i}{\sum_{i=1}^n\rho_i C_{v,i}}\]

total heat capacity ratio, $\gamma_i$ heat capacity ratio of component $i$,

\[C_{v,i}=\frac{R}{\gamma_i-1}\]

specific heat capacity at constant volume of component $i$.

In case of more than one component, the specific heat ratios gammas and the gas constants gas_constants in [kJ/(kg*K)] should be passed as tuples, e.g., gammas=(1.4, 1.667).

The remaining variables like the specific heats at constant volume cv or the specific heats at constant pressure cp are then calculated considering a calorically perfect gas.

source
Trixi.CompressibleNavierStokesDiffusion1DType
CompressibleNavierStokesDiffusion1D(equations; mu, Pr,
+                                    gradient_variables=GradientVariablesPrimitive())

Contains the diffusion (i.e. parabolic) terms applied to mass, momenta, and total energy together with the advective terms from the CompressibleEulerEquations1D.

  • equations: instance of the CompressibleEulerEquations1D
  • mu: dynamic viscosity,
  • Pr: Prandtl number,
  • gradient_variables: which variables the gradients are taken with respect to. Defaults to GradientVariablesPrimitive().

Fluid properties such as the dynamic viscosity $\mu$ can be provided in any consistent unit system, e.g., [$\mu$] = kg m⁻¹ s⁻¹. The viscosity $\mu$ may be a constant or a function of the current state, e.g., depending on temperature (Sutherland's law): $\mu = \mu(T)$. In the latter case, the function mu needs to have the signature mu(u, equations).

The particular form of the compressible Navier-Stokes implemented is

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho v \\ \rho e +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} + \rho v \\ \rho v^2 + p \\ (\rho e + p) v +\end{pmatrix} += +\frac{\partial}{\partial x} +\begin{pmatrix} +0 \\ \tau \\ \tau v - q +\end{pmatrix}\]

where the system is closed with the ideal gas assumption giving

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho v^2 \right)\]

as the pressure. The value of the adiabatic constant gamma is taken from the CompressibleEulerEquations1D. The terms on the right hand side of the system above are built from the viscous stress

\[\tau = \mu \frac{\partial}{\partial x} v\]

where the heat flux is

\[q = -\kappa \frac{\partial}{\partial x} \left(T\right),\quad T = \frac{p}{R\rho}\]

where $T$ is the temperature and $\kappa$ is the thermal conductivity for Fick's law. Under the assumption that the gas has a constant Prandtl number, the thermal conductivity is

\[\kappa = \frac{\gamma \mu R}{(\gamma - 1)\textrm{Pr}}.\]

From this combination of temperature $T$ and thermal conductivity $\kappa$ we see that the gas constant R cancels and the heat flux becomes

\[q = -\kappa \frac{\partial}{\partial x} \left(T\right) = -\frac{\gamma \mu}{(\gamma - 1)\textrm{Pr}} \frac{\partial}{\partial x} \left(\frac{p}{\rho}\right)\]

which is the form implemented below in the flux function.

In one spatial dimensions we require gradients for two quantities, e.g., primitive quantities

\[\frac{\partial}{\partial x} v,\, \frac{\partial}{\partial x} T\]

or the entropy variables

\[\frac{\partial}{\partial x} w_2,\, \frac{\partial}{\partial x} w_3\]

where

\[w_2 = \frac{\rho v1}{p},\, w_3 = -\frac{\rho}{p}\]

source
Trixi.CompressibleNavierStokesDiffusion2DType
CompressibleNavierStokesDiffusion2D(equations; mu, Pr,
+                                    gradient_variables=GradientVariablesPrimitive())

Contains the diffusion (i.e. parabolic) terms applied to mass, momenta, and total energy together with the advective terms from the CompressibleEulerEquations2D.

  • equations: instance of the CompressibleEulerEquations2D
  • mu: dynamic viscosity,
  • Pr: Prandtl number,
  • gradient_variables: which variables the gradients are taken with respect to. Defaults to GradientVariablesPrimitive().

Fluid properties such as the dynamic viscosity $\mu$ can be provided in any consistent unit system, e.g., [$\mu$] = kg m⁻¹ s⁻¹. The viscosity $\mu$ may be a constant or a function of the current state, e.g., depending on temperature (Sutherland's law): $\mu = \mu(T)$. In the latter case, the function mu needs to have the signature mu(u, equations).

The particular form of the compressible Navier-Stokes implemented is

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho \mathbf{v} \\ \rho e +\end{pmatrix} ++ +\nabla \cdot +\begin{pmatrix} + \rho \mathbf{v} \\ \rho \mathbf{v}\mathbf{v}^T + p \underline{I} \\ (\rho e + p) \mathbf{v} +\end{pmatrix} += +\nabla \cdot +\begin{pmatrix} +0 \\ \underline{\tau} \\ \underline{\tau}\mathbf{v} - \mathbf{q} +\end{pmatrix}\]

where the system is closed with the ideal gas assumption giving

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2+v_2^2) \right)\]

as the pressure. The value of the adiabatic constant gamma is taken from the CompressibleEulerEquations2D. The terms on the right hand side of the system above are built from the viscous stress tensor

\[\underline{\tau} = \mu \left(\nabla\mathbf{v} + \left(\nabla\mathbf{v}\right)^T\right) - \frac{2}{3} \mu \left(\nabla\cdot\mathbf{v}\right)\underline{I}\]

where $\underline{I}$ is the $2\times 2$ identity matrix and the heat flux is

\[\mathbf{q} = -\kappa\nabla\left(T\right),\quad T = \frac{p}{R\rho}\]

where $T$ is the temperature and $\kappa$ is the thermal conductivity for Fick's law. Under the assumption that the gas has a constant Prandtl number, the thermal conductivity is

\[\kappa = \frac{\gamma \mu R}{(\gamma - 1)\textrm{Pr}}.\]

From this combination of temperature $T$ and thermal conductivity $\kappa$ we see that the gas constant R cancels and the heat flux becomes

\[\mathbf{q} = -\kappa\nabla\left(T\right) = -\frac{\gamma \mu}{(\gamma - 1)\textrm{Pr}}\nabla\left(\frac{p}{\rho}\right)\]

which is the form implemented below in the flux function.

In two spatial dimensions we require gradients for three quantities, e.g., primitive quantities

\[\nabla v_1,\, \nabla v_2,\, \nabla T\]

or the entropy variables

\[\nabla w_2,\, \nabla w_3,\, \nabla w_4\]

where

\[w_2 = \frac{\rho v_1}{p},\, w_3 = \frac{\rho v_2}{p},\, w_4 = -\frac{\rho}{p}\]

source
Trixi.CompressibleNavierStokesDiffusion3DType
CompressibleNavierStokesDiffusion3D(equations; mu, Pr,
+                                    gradient_variables=GradientVariablesPrimitive())

Contains the diffusion (i.e. parabolic) terms applied to mass, momenta, and total energy together with the advective terms from the CompressibleEulerEquations3D.

  • equations: instance of the CompressibleEulerEquations3D
  • mu: dynamic viscosity,
  • Pr: Prandtl number,
  • gradient_variables: which variables the gradients are taken with respect to. Defaults to GradientVariablesPrimitive().

Fluid properties such as the dynamic viscosity $\mu$ can be provided in any consistent unit system, e.g., [$\mu$] = kg m⁻¹ s⁻¹. The viscosity $\mu$ may be a constant or a function of the current state, e.g., depending on temperature (Sutherland's law): $\mu = \mu(T)$. In the latter case, the function mu needs to have the signature mu(u, equations).

The particular form of the compressible Navier-Stokes implemented is

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho \mathbf{v} \\ \rho e +\end{pmatrix} ++ +\nabla \cdot +\begin{pmatrix} + \rho \mathbf{v} \\ \rho \mathbf{v}\mathbf{v}^T + p \underline{I} \\ (\rho e + p) \mathbf{v} +\end{pmatrix} += +\nabla \cdot +\begin{pmatrix} +0 \\ \underline{\tau} \\ \underline{\tau}\mathbf{v} - \mathbf{q} +\end{pmatrix}\]

where the system is closed with the ideal gas assumption giving

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2+v_2^2+v_3^2) \right)\]

as the pressure. The value of the adiabatic constant gamma is taken from the CompressibleEulerEquations2D. The terms on the right hand side of the system above are built from the viscous stress tensor

\[\underline{\tau} = \mu \left(\nabla\mathbf{v} + \left(\nabla\mathbf{v}\right)^T\right) - \frac{2}{3} \mu \left(\nabla\cdot\mathbf{v}\right)\underline{I}\]

where $\underline{I}$ is the $3\times 3$ identity matrix and the heat flux is

\[\mathbf{q} = -\kappa\nabla\left(T\right),\quad T = \frac{p}{R\rho}\]

where $T$ is the temperature and $\kappa$ is the thermal conductivity for Fick's law. Under the assumption that the gas has a constant Prandtl number, the thermal conductivity is

\[\kappa = \frac{\gamma \mu R}{(\gamma - 1)\textrm{Pr}}.\]

From this combination of temperature $T$ and thermal conductivity $\kappa$ we see that the gas constant R cancels and the heat flux becomes

\[\mathbf{q} = -\kappa\nabla\left(T\right) = -\frac{\gamma \mu}{(\gamma - 1)\textrm{Pr}}\nabla\left(\frac{p}{\rho}\right)\]

which is the form implemented below in the flux function.

In two spatial dimensions we require gradients for three quantities, e.g., primitive quantities

\[\nabla v_1,\, \nabla v_2,\, \nabla v_3,\, \nabla T\]

or the entropy variables

\[\nabla w_2,\, \nabla w_3,\, \nabla w_4\, \nabla w_5\]

where

\[w_2 = \frac{\rho v_1}{p},\, w_3 = \frac{\rho v_2}{p},\, w_4 = \frac{\rho v_3}{p},\, w_5 = -\frac{\rho}{p}\]

source
Trixi.ControllerThreeLevelType
ControllerThreeLevel(semi, indicator; base_level=1,
+                                      med_level=base_level, med_threshold=0.0,
+                                      max_level=base_level, max_threshold=1.0)

An AMR controller based on three levels (in descending order of precedence):

  • set the target level to max_level if indicator > max_threshold
  • set the target level to med_level if indicator > med_threshold; if med_level < 0, set the target level to the current level
  • set the target level to base_level otherwise
source
Trixi.ControllerThreeLevelCombinedType
ControllerThreeLevelCombined(semi, indicator_primary, indicator_secondary;
+                             base_level=1,
+                             med_level=base_level, med_threshold=0.0,
+                             max_level=base_level, max_threshold=1.0,
+                             max_threshold_secondary=1.0)

An AMR controller based on three levels (in descending order of precedence):

  • set the target level to max_level if indicator_primary > max_threshold
  • set the target level to med_level if indicator_primary > med_threshold; if med_level < 0, set the target level to the current level
  • set the target level to base_level otherwise

If indicator_secondary >= max_threshold_secondary, set the target level to max_level.

source
Trixi.DGMultiMethod
DGMulti(approximation_type::AbstractDerivativeOperator;
+        element_type::AbstractElemShape,
+        surface_flux=flux_central,
+        surface_integral=SurfaceIntegralWeakForm(surface_flux),
+        volume_integral=VolumeIntegralWeakForm(),
+        kwargs...)

Create a summation by parts (SBP) discretization on the given element_type using a tensor product structure based on the 1D SBP derivative operator passed as approximation_type.

For more info, see the documentations of StartUpDG.jl and SummationByPartsOperators.jl.

source
Trixi.DGMultiMethod
DGMulti(; polydeg::Integer,
+          element_type::AbstractElemShape,
+          approximation_type=Polynomial(),
+          surface_flux=flux_central,
+          surface_integral=SurfaceIntegralWeakForm(surface_flux),
+          volume_integral=VolumeIntegralWeakForm(),
+          RefElemData_kwargs...)

Create a discontinuous Galerkin method which uses

  • approximations of polynomial degree polydeg
  • element type element_type (Tri(), Quad(), Tet(), and Hex() currently supported)

Optional:

  • approximation_type (default is Polynomial(); SBP() also supported for Tri(), Quad(), and Hex() element types).
  • RefElemData_kwargs are additional keyword arguments for RefElemData, such as quad_rule_vol. For more info, see the StartUpDG.jl docs.
source
Trixi.DGMultiMeshType
DGMultiMesh{NDIMS, ...}

DGMultiMesh describes a mesh type which wraps StartUpDG.MeshData and boundary_faces in a dispatchable type. This is intended to store geometric data and connectivities for any type of mesh (Cartesian, affine, curved, structured/unstructured).

source
Trixi.DGMultiMeshMethod
DGMultiMesh(dg::DGMulti{2, Tri}, triangulateIO, boundary_dict::Dict{Symbol, Int})
  • dg::DGMulti contains information associated with to the reference element (e.g., quadrature, basis evaluation, differentiation, etc).
  • triangulateIO is a TriangulateIO mesh representation
  • boundary_dict is a Dict{Symbol, Int} which associates each integer TriangulateIO boundary tag with a Symbol.
source
Trixi.DGMultiMeshMethod
DGMultiMesh(dg::DGMulti)

Constructs a single-element DGMultiMesh for a single periodic element given a DGMulti with approximation_type set to a periodic (finite difference) SBP operator from SummationByPartsOperators.jl.

source
Trixi.DGMultiMeshMethod
DGMultiMesh(dg::DGMulti{NDIMS}, vertex_coordinates, EToV;
+            is_on_boundary=nothing,
+            periodicity=ntuple(_->false, NDIMS)) where {NDIMS}
  • dg::DGMulti contains information associated with to the reference element (e.g., quadrature, basis evaluation, differentiation, etc).
  • vertex_coordinates is a tuple of vectors containing x,y,... components of the vertex coordinates
  • EToV is a 2D array containing element-to-vertex connectivities for each element
  • is_on_boundary specifies boundary using a Dict{Symbol, <:Function}
  • periodicity is a tuple of booleans specifying if the domain is periodic true/false in the (x,y,z) direction.
source
Trixi.DGMultiMeshMethod
DGMultiMesh(dg::DGMulti{NDIMS}, cells_per_dimension, mapping;
+            is_on_boundary=nothing,
+            periodicity=ntuple(_ -> false, NDIMS), kwargs...) where {NDIMS}

Constructs a Curved() DGMultiMesh with element type dg.basis.element_type.

  • mapping is a function which maps from a reference [-1, 1]^NDIMS domain to a mapped domain, e.g., xy = mapping(x, y) in 2D.
  • is_on_boundary specifies boundary using a Dict{Symbol, <:Function}
  • periodicity is a tuple of Bools specifying periodicity = true/false in the (x,y,z) direction.
source
Trixi.DGMultiMeshMethod
DGMultiMesh(dg::DGMulti, cells_per_dimension;
+            coordinates_min=(-1.0, -1.0), coordinates_max=(1.0, 1.0),
+            is_on_boundary=nothing,
+            periodicity=ntuple(_ -> false, NDIMS))

Constructs a Cartesian DGMultiMesh with element type dg.basis.element_type. The domain is the tensor product of the intervals [coordinates_min[i], coordinates_max[i]].

  • is_on_boundary specifies boundary using a Dict{Symbol, <:Function}
  • periodicity is a tuple of Bools specifying periodicity = true/false in the (x,y,z) direction.
source
Trixi.DGMultiMeshMethod
DGMultiMesh(dg::DGMulti, filename::String)
  • dg::DGMulti contains information associated with the reference element (e.g., quadrature, basis evaluation, differentiation, etc).
  • filename is a path specifying a .mesh file generated by HOHQMesh.
source
Trixi.DGSEMType
DGSEM(; RealT=Float64, polydeg::Integer,
+        surface_flux=flux_central,
+        surface_integral=SurfaceIntegralWeakForm(surface_flux),
+        volume_integral=VolumeIntegralWeakForm(),
+        mortar=MortarL2(basis))

Create a discontinuous Galerkin spectral element method (DGSEM) using a LobattoLegendreBasis with polynomials of degree polydeg.

source
Trixi.DissipationLocalLaxFriedrichsType
DissipationLocalLaxFriedrichs(max_abs_speed=max_abs_speed_naive)

Create a local Lax-Friedrichs dissipation operator where the maximum absolute wave speed is estimated as max_abs_speed(u_ll, u_rr, orientation_or_normal_direction, equations), defaulting to max_abs_speed_naive.

source
Trixi.DragCoefficientPressureMethod
DragCoefficientPressure(aoa, rhoinf, uinf, linf)

Compute the drag coefficient

\[C_{D,p} \coloneqq \frac{\oint_{\partial \Omega} p \boldsymbol n \cdot \psi_D \, \mathrm{d} S} + {0.5 \rho_{\infty} U_{\infty}^2 L_{\infty}}\]

based on the pressure distribution along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.

  • aoa::Real: Angle of attack in radians (for airfoils etc.)
  • rhoinf::Real: Free-stream density
  • uinf::Real: Free-stream velocity
  • linf::Real: Reference length of geometry (e.g. airfoil chord length)
source
Trixi.DragCoefficientShearStressMethod
DragCoefficientShearStress(aoa, rhoinf, uinf, linf)

Compute the drag coefficient

\[C_{D,f} \coloneqq \frac{\oint_{\partial \Omega} \boldsymbol \tau_w \cdot \psi_D \, \mathrm{d} S} + {0.5 \rho_{\infty} U_{\infty}^2 L_{\infty}}\]

based on the wall shear stress vector $\tau_w$ along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.

  • aoa::Real: Angle of attack in radians (for airfoils etc.)
  • rhoinf::Real: Free-stream density
  • uinf::Real: Free-stream velocity
  • linf::Real: Reference length of geometry (e.g. airfoil chord length)
source
Trixi.EulerAcousticsCouplingCallbackType
EulerAcousticsCouplingCallback
Experimental code

This callback is experimental and may change in any future release.

A callback that couples the acoustic perturbation equations and compressible Euler equations. Must be used in conjunction with SemidiscretizationEulerAcoustics. This callback manages the flow solver - which is always one time step ahead of the acoustics solver - and calculates the acoustic source term after each time step. The linearized Lamb vector is used as the source term, i.e.

\[\mathbf{s} = -(\mathbf{\omega'} \times \bar{\mathbf{v}} + + \bar{\mathbf{\omega}} \times \mathbf{v'}),\]

where $\mathbf{v}$ denotes the velocity, $\mathbf{\omega}$ denotes the vorticity, the bar $\bar{(\cdot)}$ indicates time-averaged quantities (see AveragingCallback) and prime $(\cdot)'$ denotes perturbed quantities defined by $\phi' = \phi - \bar{\phi}$. Note that the perturbed quantities here are based entirely on the pure flow solution and should not be confused with the state variables of the acoustic perturbation equations.

In addition, this callback manages the time step size for both solvers and initializes the mean values of the acoustic perturbation equations using results obtained with the AveragingCallback.

source
Trixi.EulerAcousticsCouplingCallbackMethod
EulerAcousticsCouplingCallback(ode_euler, averaging_file::AbstractString, alg,
+                               cfl_acoustics::Real, cfl_euler::Real; kwargs...)
Experimental code

This callback is experimental and may change in any future release.

Creates an EulerAcousticsCouplingCallback based on the pure flow ODEProblem given by ode_euler. Creates an integrator using the time integration method alg and the keyword arguments to solve ode_euler (consult the OrdinaryDiffEq documentation for further information). Manages the step size for both solvers by using the minimum of the maximum step size obtained with CFL numbers cfl_acoustics for the acoustics solver and cfl_euler for and flow solver, respectively. The mean values for the acoustic perturbation equations are read from averaging_file (see AveragingCallback).

source
Trixi.EulerAcousticsCouplingCallbackMethod
EulerAcousticsCouplingCallback(ode_euler,
+                               averaging_callback::DiscreteCallback{<:Any, <:AveragingCallback},
+                               alg, cfl_acoustics::Real, cfl_euler::Real; kwargs...)
Experimental code

This callback is experimental and may change in any future release.

Creates an EulerAcousticsCouplingCallback based on the pure flow ODEProblem given by ode_euler. Creates an integrator using the time integration method alg and the keyword arguments to solve ode_euler (consult the OrdinaryDiffEq documentation for further information). Manages the step size for both solvers by using the minimum of the maximum step size obtained with CFL numbers cfl_acoustics for the acoustics solver and cfl_euler for and flow solver, respectively. The mean values for the acoustic perturbation equations are read from averaging_callback (see AveragingCallback).

source
Trixi.FDSBPType
FDSBP(D_SBP; surface_integral, volume_integral)

Specialization of DG methods that uses general summation by parts (SBP) operators from SummationByPartsOperators.jl. In particular, this includes classical finite difference (FD) SBP methods. These methods have the same structure as classical DG methods - local operations on elements with connectivity through interfaces without imposing any continuity constraints.

D_SBP is an SBP derivative operator from SummationByPartsOperators.jl. The other arguments have the same meaning as in DG or DGSEM.

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

source
Trixi.FluxHLLType
FluxHLL(min_max_speed=min_max_speed_davis)

Create an HLL (Harten, Lax, van Leer) numerical flux where the minimum and maximum wave speeds are estimated as λ_min, λ_max = min_max_speed(u_ll, u_rr, orientation_or_normal_direction, equations), defaulting to min_max_speed_davis. Original paper:

  • Amiram Harten, Peter D. Lax, Bram van Leer (1983) On Upstream Differencing and Godunov-Type Schemes for Hyperbolic Conservation Laws DOI: 10.1137/1025002
source
Trixi.FluxHydrostaticReconstructionType
FluxHydrostaticReconstruction(numerical_flux, hydrostatic_reconstruction)
Experimental code

This numerical flux is experimental and may change in any future release.

Allow for some kind of hydrostatic reconstruction of the solution state prior to the surface flux computation. This is a particular strategy to ensure that the method remains well-balanced for the shallow water equations, see ShallowWaterEquations1D or ShallowWaterEquations2D.

For example, the hydrostatic reconstruction from Audusse et al. is implemented in one and two spatial dimensions, see hydrostatic_reconstruction_audusse_etal or the original paper

  • Emmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090

Other hydrostatic reconstruction techniques are available, particularly to handle wet / dry fronts. A good overview of the development and application of hydrostatic reconstruction can be found in

  • Guoxian Chen and Sebastian Noelle A unified surface-gradient and hydrostatic reconstruction scheme for the shallow water equations (2021) RWTH Aachen preprint
  • Andreas Buttinger-Kreuzhuber, Zsolt Horváth, Sebastian Noelle, Günter Blöschl and Jürgen Waser (2019) A fast second-order shallow water scheme on two-dimensional structured grids over abrupt topography DOI: 10.1016/j.advwatres.2019.03.010
source
Trixi.FluxLMARSType
FluxLMARS(c)(u_ll, u_rr, orientation_or_normal_direction,
+             equations::CompressibleEulerEquations2D)

Low Mach number approximate Riemann solver (LMARS) for atmospheric flows using an estimate c of the speed of sound.

References:

  • Xi Chen et al. (2013) A Control-Volume Model of the Compressible Euler Equations with a Vertical Lagrangian Coordinate DOI: 10.1175/MWR-D-12-00129.1
source
Trixi.FluxLMARSMethod
FluxLMARS(c)(u_ll, u_rr, orientation_or_normal_direction,
+             equations::CompressibleEulerEquations3D)

Low Mach number approximate Riemann solver (LMARS) for atmospheric flows using an estimate c of the speed of sound.

References:

  • Xi Chen et al. (2013) A Control-Volume Model of the Compressible Euler Equations with a Vertical Lagrangian Coordinate DOI: 10.1175/MWR-D-12-00129.1
source
Trixi.FluxPlusDissipationType
FluxPlusDissipation(numerical_flux, dissipation)

Combine a numerical_flux with a dissipation operator to create a new numerical flux.

source
Trixi.FluxRotatedType
FluxRotated(numerical_flux)

Compute a numerical_flux flux in direction of a normal vector by rotating the solution, computing the numerical flux in x-direction, and rotating the calculated flux back.

Requires a rotationally invariant equation with equation-specific functions rotate_to_x and rotate_from_x.

source
Trixi.FluxUpwindType
FluxUpwind(splitting)

A numerical flux f(u_left, u_right) = f⁺(u_left) + f⁻(u_right) based on flux vector splitting.

The SurfaceIntegralUpwind with a given splitting is equivalent to the SurfaceIntegralStrongForm with FluxUpwind(splitting) as numerical flux (up to floating point differences). Note, that SurfaceIntegralUpwind is only available on TreeMesh.

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

source
Trixi.GlmSpeedCallbackType
GlmSpeedCallback(; glm_scale=0.5, cfl, semi_indices=())

Update the divergence cleaning wave speed c_h according to the time step computed in StepsizeCallback for the ideal GLM-MHD equations. The cfl number should be set to the same value as for the time step size calculation. The glm_scale ensures that the GLM wave speed is lower than the fastest physical waves in the MHD solution and should thus be set to a value within the interval [0,1]. Note that glm_scale = 0 deactivates the divergence cleaning.

In case of coupled semidiscretizations, specify for which semi_index, i.e. index of the semidiscretization, the divergence cleaning should be applied. See also SemidiscretizationCoupled. Note: SemidiscretizationCoupled and all related features are considered experimental and may change at any time.

source
Trixi.GradientVariablesPrimitiveType

GradientVariablesPrimitive and GradientVariablesEntropy are gradient variable type parameters for CompressibleNavierStokesDiffusion1D. By default, the gradient variables are set to be GradientVariablesPrimitive. Specifying GradientVariablesEntropy instead uses the entropy variable formulation from

  • Hughes, Mallet, Franca (1986) A new finite element formulation for computational fluid dynamics: I. Symmetric forms of the compressible Euler and Navier-Stokes equations and the second law of thermodynamics. https://doi.org/10.1016/0045-7825(86)90127-1

Under GradientVariablesEntropy, the Navier-Stokes discretization is provably entropy stable.

source
Trixi.HypDiffN3Erk3Sstar52Type
HypDiffN3Erk3Sstar52()

Five stage, second-order accurate explicit Runge-Kutta scheme with stability region optimized for the hyperbolic diffusion equation with LLF flux and polynomials of degree polydeg=3.

source
Trixi.HyperbolicDiffusionEquations1DType
HyperbolicDiffusionEquations1D

The linear hyperbolic diffusion equations in one space dimension. A description of this system can be found in Sec. 2.5 of the book

Further analysis can be found in the paper

source
Trixi.IdealGlmMhdEquations1DType
IdealGlmMhdEquations1D(gamma)

The ideal compressible GLM-MHD equations for an ideal gas with ratio of specific heats gamma in one space dimension.

Note

There is no divergence cleaning variable psi because the divergence-free constraint is satisfied trivially in one spatial dimension.

source
Trixi.IdealGlmMhdEquations2DType
IdealGlmMhdEquations2D(gamma)

The ideal compressible GLM-MHD equations for an ideal gas with ratio of specific heats gamma in two space dimensions.

source
Trixi.IdealGlmMhdEquations3DType
IdealGlmMhdEquations3D(gamma)

The ideal compressible GLM-MHD equations for an ideal gas with ratio of specific heats gamma in three space dimensions.

source
Trixi.IndicatorHennemannGassnerType
IndicatorHennemannGassner(equations::AbstractEquations, basis;
+                          alpha_max=0.5,
+                          alpha_min=0.001,
+                          alpha_smooth=true,
+                          variable)
+IndicatorHennemannGassner(semi::AbstractSemidiscretization;
+                          alpha_max=0.5,
+                          alpha_min=0.001,
+                          alpha_smooth=true,
+                          variable)

Indicator used for shock-capturing (when passing the equations and the basis) or adaptive mesh refinement (AMR, when passing the semi).

See also VolumeIntegralShockCapturingHG.

References

  • Hennemann, Gassner (2020) "A provably entropy stable subcell shock capturing approach for high order split form DG" arXiv: 2008.12044
source
Trixi.IndicatorLöhnerType
IndicatorLöhner (equivalent to IndicatorLoehner)
+
+IndicatorLöhner(equations::AbstractEquations, basis;
+                f_wave=0.2, variable)
+IndicatorLöhner(semi::AbstractSemidiscretization;
+                f_wave=0.2, variable)

AMR indicator adapted from a FEM indicator by Löhner (1987), also used in the FLASH code as standard AMR indicator. The indicator estimates a weighted second derivative of a specified variable locally.

When constructed to be used for AMR, pass the semi. Pass the equations, and basis if this indicator should be used for shock capturing.

References

source
Trixi.IndicatorMaxType
IndicatorMax(equations::AbstractEquations, basis; variable)
+IndicatorMax(semi::AbstractSemidiscretization; variable)

A simple indicator returning the maximum of variable in an element. When constructed to be used for AMR, pass the semi. Pass the equations, and basis if this indicator should be used for shock capturing.

source
Trixi.IsothermalType
struct Isothermal

Used to create a no-slip boundary condition with BoundaryConditionNavierStokesWall. The field boundary_value_function should be a function with signature boundary_value_function(x, t, equations) and return a scalar value for the temperature at point x and time t.

source
Trixi.LaplaceDiffusion1DType
LaplaceDiffusion1D(diffusivity, equations)

LaplaceDiffusion1D represents a scalar diffusion term $\nabla \cdot (\kappa\nabla u))$ with diffusivity $\kappa$ applied to each solution component defined by equations.

source
Trixi.LaplaceDiffusion2DType
LaplaceDiffusion2D(diffusivity, equations)

LaplaceDiffusion2D represents a scalar diffusion term $\nabla \cdot (\kappa\nabla u))$ with diffusivity $\kappa$ applied to each solution component defined by equations.

source
Trixi.LaplaceDiffusion3DType
LaplaceDiffusion3D(diffusivity, equations)

LaplaceDiffusion3D represents a scalar diffusion term $\nabla \cdot (\kappa\nabla u))$ with diffusivity $\kappa$ applied to each solution component defined by equations.

source
Trixi.LatticeBoltzmannEquations2DType
LatticeBoltzmannEquations2D(; Ma, Re, collision_op=collision_bgk,
+                           c=1, L=1, rho0=1, u0=nothing, nu=nothing)

The Lattice-Boltzmann equations

\[\partial_t u_\alpha + v_{\alpha,1} \partial_1 u_\alpha + v_{\alpha,2} \partial_2 u_\alpha = 0\]

in two space dimensions for the D2Q9 scheme.

The characteristic Mach number and Reynolds numbers are specified as Ma and Re. By the default, the collision operator collision_op is set to the BGK model. c, L, and rho0 specify the mean thermal molecular velocity, the characteristic length, and the reference density, respectively. They can usually be left to the default values. If desired, instead of the Mach number, one can set the macroscopic reference velocity u0 directly (Ma needs to be set to nothing in this case). Likewise, instead of the Reynolds number one can specify the kinematic viscosity nu directly (in this case, Re needs to be set to nothing).

The nine discrete velocity directions of the D2Q9 scheme are sorted as follows [4]:

  6     2     5       y
+    ┌───┼───┐         │
+    │       │         │
+  3 ┼   9   ┼ 1        ──── x
+    │       │        ╱
+    └───┼───┘       ╱
+  7     4     8    z

Note that usually the velocities are numbered from 0 to 8, where 0 corresponds to the zero velocity. Due to Julia using 1-based indexing, here we use indices from 1 to 9, where 1 through 8 correspond to the velocity directions in [4] and 9 is the zero velocity.

The corresponding opposite directions are:

  • 1 ←→ 3
  • 2 ←→ 4
  • 3 ←→ 1
  • 4 ←→ 2
  • 5 ←→ 7
  • 6 ←→ 8
  • 7 ←→ 5
  • 8 ←→ 6
  • 9 ←→ 9

The main sources for the base implementation were

  1. Misun Min, Taehun Lee, A spectral-element discontinuous Galerkin lattice Boltzmann method for nearly incompressible flows, J Comput Phys 230(1), 2011 doi:10.1016/j.jcp.2010.09.024
  2. Karsten Golly, Anwendung der Lattice-Boltzmann Discontinuous Galerkin Spectral Element Method (LB-DGSEM) auf laminare und turbulente nahezu inkompressible Strömungen im dreidimensionalen Raum, Master Thesis, University of Cologne, 2018.
  3. Dieter Hänel, Molekulare Gasdynamik, Springer-Verlag Berlin Heidelberg, 2004 doi:10.1007/3-540-35047-0
  4. Dieter Krüger et al., The Lattice Boltzmann Method, Springer International Publishing, 2017 doi:10.1007/978-3-319-44649-3
source
Trixi.LatticeBoltzmannEquations3DType
LatticeBoltzmannEquations3D(; Ma, Re, collision_op=collision_bgk,
+                           c=1, L=1, rho0=1, u0=nothing, nu=nothing)

The Lattice-Boltzmann equations

\[\partial_t u_\alpha + v_{\alpha,1} \partial_1 u_\alpha + v_{\alpha,2} \partial_2 u_\alpha + v_{\alpha,3} \partial_3 u_\alpha = 0\]

in three space dimensions for the D3Q27 scheme.

The characteristic Mach number and Reynolds numbers are specified as Ma and Re. By the default, the collision operator collision_op is set to the BGK model. c, L, and rho0 specify the mean thermal molecular velocity, the characteristic length, and the reference density, respectively. They can usually be left to the default values. If desired, instead of the Mach number, one can set the macroscopic reference velocity u0 directly (Ma needs to be set to nothing in this case). Likewise, instead of the Reynolds number one can specify the kinematic viscosity nu directly (in this case, Re needs to be set to nothing).

The twenty-seven discrete velocity directions of the D3Q27 scheme are sorted as follows [4]:

  • plane at z = -1:
      24    17     21       y
    +     ┌───┼───┐          │
    +     │       │          │
    +  10 ┼   6   ┼ 15        ──── x
    +     │       │         ╱
    +     └───┼───┘        ╱
    +  20    12     26    z
  • plane at z = 0:
      14     3     7        y
    +     ┌───┼───┐          │
    +     │       │          │
    +   2 ┼  27   ┼ 1         ──── x
    +     │       │         ╱
    +     └───┼───┘        ╱
    +   8     4     13    z
  • plane at z = +1:
      25    11     19       y
    +     ┌───┼───┐          │
    +     │       │          │
    +  16 ┼   5   ┼ 9         ──── x
    +     │       │         ╱
    +     └───┼───┘        ╱
    +  22    18     23    z

Note that usually the velocities are numbered from 0 to 26, where 0 corresponds to the zero velocity. Due to Julia using 1-based indexing, here we use indices from 1 to 27, where 1 through 26 correspond to the velocity directions in [4] and 27 is the zero velocity.

The corresponding opposite directions are:

  • 1 ←→ 2
  • 2 ←→ 1
  • 3 ←→ 4
  • 4 ←→ 3
  • 5 ←→ 6
  • 6 ←→ 5
  • 7 ←→ 8
  • 8 ←→ 7
  • 9 ←→ 10
  • 10 ←→ 9
  • 11 ←→ 12
  • 12 ←→ 11
  • 13 ←→ 14
  • 14 ←→ 13
  • 15 ←→ 16
  • 16 ←→ 15
  • 17 ←→ 18
  • 18 ←→ 17
  • 19 ←→ 20
  • 20 ←→ 19
  • 21 ←→ 22
  • 22 ←→ 21
  • 23 ←→ 24
  • 24 ←→ 23
  • 25 ←→ 26
  • 26 ←→ 25
  • 27 ←→ 27

The main sources for the base implementation were

  1. Misun Min, Taehun Lee, A spectral-element discontinuous Galerkin lattice Boltzmann method for nearly incompressible flows, J Comput Phys 230(1), 2011 doi:10.1016/j.jcp.2010.09.024
  2. Karsten Golly, Anwendung der Lattice-Boltzmann Discontinuous Galerkin Spectral Element Method (LB-DGSEM) auf laminare und turbulente nahezu inkompressible Strömungen im dreidimensionalen Raum, Master Thesis, University of Cologne, 2018.
  3. Dieter Hänel, Molekulare Gasdynamik, Springer-Verlag Berlin Heidelberg, 2004 doi:10.1007/3-540-35047-0
  4. Dieter Krüger et al., The Lattice Boltzmann Method, Springer International Publishing, 2017 doi:10.1007/978-3-319-44649-3
source
Trixi.LiftCoefficientPressureMethod
LiftCoefficientPressure(aoa, rhoinf, uinf, linf)

Compute the lift coefficient

\[C_{L,p} \coloneqq \frac{\oint_{\partial \Omega} p \boldsymbol n \cdot \psi_L \, \mathrm{d} S} + {0.5 \rho_{\infty} U_{\infty}^2 L_{\infty}}\]

based on the pressure distribution along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.

  • aoa::Real: Angle of attack in radians (for airfoils etc.)
  • rhoinf::Real: Free-stream density
  • uinf::Real: Free-stream velocity
  • linf::Real: Reference length of geometry (e.g. airfoil chord length)
source
Trixi.LiftCoefficientShearStressMethod
LiftCoefficientShearStress(aoa, rhoinf, uinf, linf)

Compute the lift coefficient

\[C_{L,f} \coloneqq \frac{\oint_{\partial \Omega} \boldsymbol \tau_w \cdot \psi_L \, \mathrm{d} S} + {0.5 \rho_{\infty} U_{\infty}^2 L_{\infty}}\]

based on the wall shear stress vector $\tau_w$ along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.

  • aoa::Real: Angle of attack in radians (for airfoils etc.)
  • rhoinf::Real: Free-stream density
  • uinf::Real: Free-stream velocity
  • linf::Real: Reference length of geometry (e.g. airfoil chord length)
source
Trixi.LinearScalarAdvectionEquation2DType
LinearScalarAdvectionEquation2D

The linear scalar advection equation

\[\partial_t u + a_1 \partial_1 u + a_2 \partial_2 u = 0\]

in two space dimensions with constant velocity a.

source
Trixi.LinearScalarAdvectionEquation3DType
LinearScalarAdvectionEquation3D

The linear scalar advection equation

\[\partial_t u + a_1 \partial_1 u + a_2 \partial_2 u + a_3 \partial_3 u = 0\]

in three space dimensions with constant velocity a.

source
Trixi.LinearizedEulerEquations1DType
LinearizedEulerEquations1D(v_mean_global, c_mean_global, rho_mean_global)

Linearized Euler equations in one space dimension. The equations are given by

\[\partial_t +\begin{pmatrix} + \rho' \\ v_1' \\ p' +\end{pmatrix} ++ +\partial_x +\begin{pmatrix} + \bar{\rho} v_1' + \bar{v_1} \rho ' \\ \bar{v_1} v_1' + \frac{p'}{\bar{\rho}} \\ \bar{v_1} p' + c^2 \bar{\rho} v_1' +\end{pmatrix} += +\begin{pmatrix} + 0 \\ 0 \\ 0 +\end{pmatrix}\]

The bar $\bar{(\cdot)}$ indicates uniform mean flow variables and $c$ is the speed of sound. The unknowns are the perturbation quantities of the acoustic velocity $v_1'$, the pressure $p'$ and the density $\rho'$.

source
Trixi.LinearizedEulerEquations2DType
LinearizedEulerEquations2D(v_mean_global, c_mean_global, rho_mean_global)

Linearized Euler equations in two space dimensions. The equations are given by

\[\partial_t +\begin{pmatrix} + \rho' \\ v_1' \\ v_2' \\ p' +\end{pmatrix} ++ +\partial_x +\begin{pmatrix} + \bar{\rho} v_1' + \bar{v_1} \rho ' \\ \bar{v_1} v_1' + \frac{p'}{\bar{\rho}} \\ \bar{v_1} v_2' \\ \bar{v_1} p' + c^2 \bar{\rho} v_1' +\end{pmatrix} ++ +\partial_y +\begin{pmatrix} + \bar{\rho} v_2' + \bar{v_2} \rho ' \\ \bar{v_2} v_1' \\ \bar{v_2} v_2' + \frac{p'}{\bar{\rho}} \\ \bar{v_2} p' + c^2 \bar{\rho} v_2' +\end{pmatrix} += +\begin{pmatrix} + 0 \\ 0 \\ 0 \\ 0 +\end{pmatrix}\]

The bar $\bar{(\cdot)}$ indicates uniform mean flow variables and $c$ is the speed of sound. The unknowns are the acoustic velocities $v' = (v_1', v_2')$, the pressure $p'$ and the density $\rho'$.

source
Trixi.LinearizedEulerEquations3DType
LinearizedEulerEquations3D(v_mean_global, c_mean_global, rho_mean_global)

Linearized Euler equations in three space dimensions. The equations are given by

\[\partial_t +\begin{pmatrix} + \rho' \\ v_1' \\ v_2' \\ v_3' \\ p' +\end{pmatrix} ++ +\partial_x +\begin{pmatrix} + \bar{\rho} v_1' + \bar{v_1} \rho ' \\ + \bar{v_1} v_1' + \frac{p'}{\bar{\rho}} \\ + \bar{v_1} v_2' \\ + \bar{v_1} v_3' \\ + \bar{v_1} p' + c^2 \bar{\rho} v_1' +\end{pmatrix} ++ +\partial_y +\begin{pmatrix} + \bar{\rho} v_2' + \bar{v_2} \rho ' \\ + \bar{v_2} v_1' \\ + \bar{v_2} v_2' + \frac{p'}{\bar{\rho}} \\ + \bar{v_2} v_3' \\ + \bar{v_2} p' + c^2 \bar{\rho} v_2' +\end{pmatrix} ++ +\partial_z +\begin{pmatrix} + \bar{\rho} v_3' + \bar{v_3} \rho ' \\ + \bar{v_3} v_1' \\ + \bar{v_3} v_2' \\ + \bar{v_3} v_3' + \frac{p'}{\bar{\rho}} \\ + \bar{v_3} p' + c^2 \bar{\rho} v_3' +\end{pmatrix} += +\begin{pmatrix} + 0 \\ 0 \\ 0 \\ 0 \\ 0 +\end{pmatrix}\]

The bar $\bar{(\cdot)}$ indicates uniform mean flow variables and $c$ is the speed of sound. The unknowns are the acoustic velocities $v' = (v_1', v_2, v_3')$, the pressure $p'$ and the density $\rho'$.

source
Trixi.LobattoLegendreBasisType
LobattoLegendreBasis([RealT=Float64,] polydeg::Integer)

Create a nodal Lobatto-Legendre basis for polynomials of degree polydeg.

For the special case polydeg=0 the DG method reduces to a finite volume method. Therefore, this function sets the center point of the cell as single node. This exceptional case is currently only supported for TreeMesh!

source
Trixi.MaxwellEquations1DType
MaxwellEquations1D(c = 299_792_458.0)

The Maxwell equations of electro dynamics

\[\frac{\partial}{\partial t} +\begin{pmatrix} +E \\ B +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} +c^2 B \\ E +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 +\end{pmatrix}\]

in one dimension with speed of light c = 299792458 m/s (in vacuum). In one dimension the Maxwell equations reduce to a wave equation. The orthogonal magnetic (e.g.B_y) and electric field (E_z) propagate as waves through the domain in x-direction. For reference, see

  • e.g. p.15 of Numerical Methods for Conservation Laws: From Analysis to Algorithms https://doi.org/10.1137/1.9781611975109

  • or equation (1) in https://inria.hal.science/hal-01720293/document

source
Trixi.NoSlipType
struct NoSlip

Use to create a no-slip boundary condition with BoundaryConditionNavierStokesWall. The field boundary_value_function should be a function with signature boundary_value_function(x, t, equations) and should return a SVector{NDIMS} whose entries are the velocity vector at a point x and time t.

source
Trixi.NonConservativeLocalType
NonConservativeLocal()

Struct used for multiple dispatch on non-conservative flux functions in the format of "local * symmetric". When the argument nonconservative_type is of type NonConservativeLocal, the function returns the local part of the non-conservative term.

source
Trixi.NonConservativeSymmetricType
NonConservativeSymmetric()

Struct used for multiple dispatch on non-conservative flux functions in the format of "local * symmetric". When the argument nonconservative_type is of type NonConservativeSymmetric, the function returns the symmetric part of the non-conservative term.

source
Trixi.P4estMeshType
P4estMesh{NDIMS} <: AbstractMesh{NDIMS}

An unstructured curved mesh based on trees that uses the C library p4est to manage trees and mesh refinement.

source
Trixi.P4estMeshMethod
P4estMesh(trees_per_dimension; polydeg,
+          mapping=nothing, faces=nothing, coordinates_min=nothing, coordinates_max=nothing,
+          RealT=Float64, initial_refinement_level=0, periodicity=true, unsaved_changes=true,
+          p4est_partition_allow_for_coarsening=true)

Create a structured curved P4estMesh of the specified size.

There are three ways to map the mesh to the physical domain.

  1. Define a mapping that maps the hypercube [-1, 1]^n.
  2. Specify a Tuple faces of functions that parametrize each face.
  3. Create a rectangular mesh by specifying coordinates_min and coordinates_max.

Non-periodic boundaries will be called :x_neg, :x_pos, :y_neg, :y_pos, :z_neg, :z_pos.

Arguments

  • trees_per_dimension::NTupleE{NDIMS, Int}: the number of trees in each dimension.
  • polydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.
  • mapping: a function of NDIMS variables to describe the mapping that transforms the reference mesh ([-1, 1]^n) to the physical domain. Use only one of mapping, faces and coordinates_min/coordinates_max.
  • faces::NTuple{2*NDIMS}: a tuple of 2 * NDIMS functions that describe the faces of the domain. Each function must take NDIMS-1 arguments. faces[1] describes the face onto which the face in negative x-direction of the unit hypercube is mapped. The face in positive x-direction of the unit hypercube will be mapped onto the face described by faces[2]. faces[3:4] describe the faces in positive and negative y-direction respectively (in 2D and 3D). faces[5:6] describe the faces in positive and negative z-direction respectively (in 3D). Use only one of mapping, faces and coordinates_min/coordinates_max.
  • coordinates_min: vector or tuple of the coordinates of the corner in the negative direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.
  • coordinates_max: vector or tuple of the coordinates of the corner in the positive direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.
  • RealT::Type: the type that should be used for coordinates.
  • initial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.
  • periodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.
  • unsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.
  • p4est_partition_allow_for_coarsening::Bool: Must be true when using AMR to make mesh adaptivity independent of domain partitioning. Should be false for static meshes to permit more fine-grained partitioning.
source
Trixi.P4estMeshMethod
P4estMesh{NDIMS}(meshfile::String;
+                 mapping=nothing, polydeg=1, RealT=Float64,
+                 initial_refinement_level=0, unsaved_changes=true,
+                 p4est_partition_allow_for_coarsening=true,
+                 boundary_symbols = nothing)

Main mesh constructor for the P4estMesh that imports an unstructured, conforming mesh from an Abaqus mesh file (.inp). Each element of the conforming mesh parsed from the meshfile is created as a p4est tree datatype.

To create a curved unstructured mesh P4estMesh two strategies are available:

  • p4est_mesh_from_hohqmesh_abaqus: High-order, curved boundary information created by HOHQMesh.jl is available in the meshfile. The mesh polynomial degree polydeg of the boundaries is provided from the meshfile. The computation of the mapped tree coordinates is done with transfinite interpolation with linear blending similar to UnstructuredMesh2D. Boundary name information is also parsed from the meshfile such that different boundary conditions can be set at each named boundary on a given tree.
  • p4est_mesh_from_standard_abaqus: By default, with mapping=nothing and polydeg=1, this creates a straight-sided from the information parsed from the meshfile. If a mapping function is specified then it computes the mapped tree coordinates via polynomial interpolants with degree polydeg. The mesh created by this function will only have one boundary :all if boundary_symbols is not specified. If boundary_symbols is specified the mesh file will be parsed for nodesets defining the boundary nodes from which boundary edges (2D) and faces (3D) will be assigned.

Note that the mapping and polydeg keyword arguments are only used by the p4est_mesh_from_standard_abaqus function. The p4est_mesh_from_hohqmesh_abaqus function obtains the mesh polydeg directly from the meshfile and constructs the transfinite mapping internally.

The particular strategy is selected according to the header present in the meshfile where the constructor checks whether or not the meshfile was created with HOHQMesh.jl. If the Abaqus file header is not present in the meshfile then the P4estMesh is created with the function p4est_mesh_from_standard_abaqus.

The default keyword argument initial_refinement_level=0 corresponds to a forest where the number of trees is the same as the number of elements in the original meshfile. Increasing the initial_refinement_level allows one to uniformly refine the base mesh given in the meshfile to create a forest with more trees before the simulation begins. For example, if a two-dimensional base mesh contains 25 elements then setting initial_refinement_level=1 creates an initial forest of 2^2 * 25 = 100 trees.

Arguments

  • meshfile::String: an uncurved Abaqus mesh file that can be imported by p4est.
  • mapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: the type that should be used for coordinates.
  • initial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.
  • unsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.
  • p4est_partition_allow_for_coarsening::Bool: Must be true when using AMR to make mesh adaptivity independent of domain partitioning. Should be false for static meshes to permit more fine-grained partitioning.
  • boundary_symbols::Vector{Symbol}: A vector of symbols that correspond to the boundary names in the meshfile. If nothing is passed then all boundaries are named :all.
source
Trixi.PairedExplicitRK2Type
PairedExplicitRK2(num_stages, base_path_monomial_coeffs::AbstractString,
+                  bS = 1.0, cS = 0.5)
+PairedExplicitRK2(num_stages, tspan, semi::AbstractSemidiscretization;
+                  verbose = false, bS = 1.0, cS = 0.5)
+PairedExplicitRK2(num_stages, tspan, eig_vals::Vector{ComplexF64};
+                  verbose = false, bS = 1.0, cS = 0.5)
+Parameters:
+- `num_stages` (`Int`): Number of stages in the PERK method.
+- `base_path_monomial_coeffs` (`AbstractString`): Path to a file containing 
+  monomial coefficients of the stability polynomial of PERK method.
+  The coefficients should be stored in a text file at `joinpath(base_path_monomial_coeffs, "gamma_$(num_stages).txt")` and separated by line breaks.
+- `tspan`: Time span of the simulation.
+- `semi` (`AbstractSemidiscretization`): Semidiscretization setup.
+-  `eig_vals` (`Vector{ComplexF64}`): Eigenvalues of the Jacobian of the right-hand side (rhs) of the ODEProblem after the
+  equation has been semidiscretized.
+- `verbose` (`Bool`, optional): Verbosity flag, default is false.
+- `bS` (`Float64`, optional): Value of b in the Butcher tableau at b_s, when 
+  s is the number of stages, default is 1.0.
+- `cS` (`Float64`, optional): Value of c in the Butcher tableau at c_s, when
+  s is the number of stages, default is 0.5.

The following structures and methods provide a minimal implementation of the second-order paired explicit Runge-Kutta (PERK) method optimized for a certain simulation setup (PDE, IC & BC, Riemann Solver, DG Solver).

source
Trixi.PerformanceCounterType
PerformanceCounter()

A PerformanceCounter can be used to track the runtime performance of some calls. Add a new runtime measurement via put!(counter, runtime) and get the averaged runtime of all measurements added so far via take!(counter), resetting the counter.

source
Trixi.PerformanceCounterListType
PerformanceCounterList{N}()

A PerformanceCounterList{N} can be used to track the runtime performance of calls to multiple functions, adding them up. Add a new runtime measurement via put!(counter.counters[i], runtime) and get the averaged runtime of all measurements added so far via take!(counter), resetting the counter.

source
Trixi.PlotData1DType
PlotData1D

Holds all relevant data for creating 1D plots of multiple solution variables and to visualize the mesh.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.PlotData1DMethod
PlotData1D(u, semi [or mesh, equations, solver, cache];
+           solution_variables=nothing, nvisnodes=nothing)

Create a new PlotData1D object that can be used for visualizing 1D DGSEM solution data array u with Plots.jl. All relevant geometrical information is extracted from the semidiscretization semi. By default, the primitive variables (if existent) or the conservative variables (otherwise) from the solution are used for plotting. This can be changed by passing an appropriate conversion function to solution_variables.

nvisnodes specifies the number of visualization nodes to be used. If it is nothing, twice the number of solution DG nodes are used for visualization, and if set to 0, exactly the number of nodes in the DG elements are used.

When visualizing data from a two-dimensional simulation, a 1D slice is extracted for plotting. slice specifies the axis along which the slice is extracted and may be :x, or :y. The slice position is specified by a point that lies on it, which defaults to (0.0, 0.0). Both of these values are ignored when visualizing 1D data. This applies analogously to three-dimensional simulations, where slice may be :xy, :xz, or :yz.

Another way to visualize 2D/3D data is by creating a plot along a given curve. This is done with the keyword argument curve. It can be set to a list of 2D/3D points which define the curve. When using curve any other input from slice or point will be ignored.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.PlotData1DMethod
PlotData1D(sol; kwargs...)

Create a PlotData1D object from a solution object created by either OrdinaryDiffEq.solve! (which returns a SciMLBase.ODESolution) or Trixi.jl's own solve! (which returns a TimeIntegratorSolution).

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.PlotData2DCartesianType
PlotData2D

Holds all relevant data for creating 2D plots of multiple solution variables and to visualize the mesh.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.PolytropicEulerEquations2DType
PolytropicEulerEquations2D(gamma, kappa)

The polytropic Euler equations

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho v_1 \\ \rho v_2 +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} + \rho v_1 \\ \rho v_1^2 + \kappa\rho^\gamma \\ \rho v_1 v_2 +\end{pmatrix} ++ +\frac{\partial}{\partial y} +\begin{pmatrix} +\rho v_2 \\ \rho v_1 v_2 \\ \rho v_2^2 + \kappa\rho^\gamma +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 +\end{pmatrix}\]

for an ideal gas with ratio of specific heats gamma in two space dimensions. Here, $\rho$ is the density and $v_1$ andv_2 the velocities and

\[p = \kappa\rho^\gamma\]

the pressure, which we replaced using this relation.

source
Trixi.PositivityPreservingLimiterZhangShuType
PositivityPreservingLimiterZhangShu(; threshold, variables)

The fully-discrete positivity-preserving limiter of

  • Zhang, Shu (2011) Maximum-principle-satisfying and positivity-preserving high-order schemes for conservation laws: survey and new developments doi: 10.1098/rspa.2011.0153

The limiter is applied to all scalar variables in their given order using the associated thresholds to determine the minimal acceptable values. The order of the variables is important and might have a strong influence on the robustness.

source
Trixi.SaveRestartCallbackType
SaveRestartCallback(; interval=0,
+                      save_final_restart=true,
+                      output_directory="out")

Save the current numerical solution in a restart file every interval time steps.

source
Trixi.SaveSolutionCallbackType
SaveSolutionCallback(; interval::Integer=0,
+                       dt=nothing,
+                       save_initial_solution=true,
+                       save_final_solution=true,
+                       output_directory="out",
+                       solution_variables=cons2prim)

Save the current numerical solution in regular intervals. Either pass interval to save every interval time steps or pass dt to save in intervals of dt in terms of integration time by adding additional (shortened) time steps where necessary (note that this may change the solution). solution_variables can be any callable that converts the conservative variables at a single point to a set of solution variables. The first parameter passed to solution_variables will be the set of conservative variables and the second parameter is the equation struct.

source
Trixi.SemidiscretizationCoupledType
SemidiscretizationCoupled

A struct used to bundle multiple semidiscretizations. semidiscretize will return an ODEProblem that synchronizes time steps between the semidiscretizations. Each call of rhs! will call rhs! for each semidiscretization individually. The semidiscretizations can be coupled by gluing meshes together using BoundaryConditionCoupled.

Experimental code

This is an experimental feature and can change any time.

source
Trixi.SemidiscretizationEulerAcousticsType
SemidiscretizationEulerAcoustics(semi_acoustics::SemiAcoustics, semi_euler::SemiEuler;
+                                 source_region=x->true, weights=x->1.0)
Experimental code

This semidiscretization is experimental and may change in any future release.

Construct a semidiscretization of the acoustic perturbation equations that is coupled with the compressible Euler equations via source terms for the perturbed velocity. Both semidiscretizations have to use the same mesh and solvers with a shared basis. The coupling region is described by a function source_region that maps the coordinates of a single node to true or false depending on whether the point lies within the coupling region or not. A weighting function weights that maps coordinates to weights is applied to the acoustic source terms. Note that this semidiscretization should be used in conjunction with EulerAcousticsCouplingCallback and only works in two dimensions.

source
Trixi.SemidiscretizationEulerGravityType
SemidiscretizationEulerGravity

A struct containing everything needed to describe a spatial semidiscretization of a the compressible Euler equations with self-gravity, reformulating the Poisson equation for the gravitational potential as steady-state problem of the hyperblic diffusion equations.

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) "A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics" arXiv: 2008.10593
source
Trixi.SemidiscretizationHyperbolicMethod
SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;
+                             source_terms=nothing,
+                             boundary_conditions=boundary_condition_periodic,
+                             RealT=real(solver),
+                             uEltype=RealT,
+                             initial_cache=NamedTuple())

Construct a semidiscretization of a hyperbolic PDE.

source
Trixi.SemidiscretizationHyperbolicParabolicMethod
SemidiscretizationHyperbolicParabolic(mesh, both_equations, initial_condition, solver;
+                                      solver_parabolic=default_parabolic_solver(),
+                                      source_terms=nothing,
+                                      both_boundary_conditions=(boundary_condition_periodic, boundary_condition_periodic),
+                                      RealT=real(solver),
+                                      uEltype=RealT,
+                                      both_initial_caches=(NamedTuple(), NamedTuple()))

Construct a semidiscretization of a hyperbolic-parabolic PDE.

source
Trixi.ShallowWaterEquations1DType
ShallowWaterEquations1D(; gravity, H0 = 0)

Shallow water equations (SWE) in one space dimension. The equations are given by

\[\begin{aligned} + \frac{\partial h}{\partial t} + \frac{\partial}{\partial x}(h v) &= 0 \\ + \frac{\partial}{\partial t}(h v) + \frac{\partial}{\partial x}\left(h v^2 + \frac{g}{2}h^2\right) + + g h \frac{\partial b}{\partial x} &= 0 +\end{aligned}\]

The unknown quantities of the SWE are the water height $h$ and the velocity $v$. The gravitational constant is denoted by g and the (possibly) variable bottom topography function $b(x)$. Conservative variable water height $h$ is measured from the bottom topography $b$, therefore one also defines the total water height as $H = h + b$.

The additional quantity $H_0$ is also available to store a reference value for the total water height that is useful to set initial conditions or test the "lake-at-rest" well-balancedness.

The bottom topography function $b(x)$ is set inside the initial condition routine for a particular problem setup. To test the conservative form of the SWE one can set the bottom topography variable b to zero.

In addition to the unknowns, Trixi.jl currently stores the bottom topography values at the approximation points despite being fixed in time. This is done for convenience of computing the bottom topography gradients on the fly during the approximation as well as computing auxiliary quantities like the total water height $H$ or the entropy variables. This affects the implementation and use of these equations in various ways:

  • The flux values corresponding to the bottom topography must be zero.
  • The bottom topography values must be included when defining initial conditions, boundary conditions or source terms.
  • AnalysisCallback analyzes this variable.
  • Trixi.jl's visualization tools will visualize the bottom topography by default.

References for the SWE are many but a good introduction is available in Chapter 13 of the book:

source
Trixi.ShallowWaterEquations2DType
ShallowWaterEquations2D(; gravity, H0 = 0)

Shallow water equations (SWE) in two space dimensions. The equations are given by

\[\begin{aligned} + \frac{\partial h}{\partial t} + \frac{\partial}{\partial x}(h v_1) + + \frac{\partial}{\partial y}(h v_2) &= 0 \\ + \frac{\partial}{\partial t}(h v_1) + \frac{\partial}{\partial x}\left(h v_1^2 + \frac{g}{2}h^2\right) + + \frac{\partial}{\partial y}(h v_1 v_2) + g h \frac{\partial b}{\partial x} &= 0 \\ + \frac{\partial}{\partial t}(h v_2) + \frac{\partial}{\partial x}(h v_1 v_2) + + \frac{\partial}{\partial y}\left(h v_2^2 + \frac{g}{2}h^2\right) + g h \frac{\partial b}{\partial y} &= 0. +\end{aligned}\]

The unknown quantities of the SWE are the water height $h$ and the velocities $\mathbf{v} = (v_1, v_2)^T$. The gravitational constant is denoted by g and the (possibly) variable bottom topography function $b(x,y)$. Conservative variable water height $h$ is measured from the bottom topography $b$, therefore one also defines the total water height as $H = h + b$.

The additional quantity $H_0$ is also available to store a reference value for the total water height that is useful to set initial conditions or test the "lake-at-rest" well-balancedness.

The bottom topography function $b(x,y)$ is set inside the initial condition routine for a particular problem setup. To test the conservative form of the SWE one can set the bottom topography variable b to zero.

In addition to the unknowns, Trixi.jl currently stores the bottom topography values at the approximation points despite being fixed in time. This is done for convenience of computing the bottom topography gradients on the fly during the approximation as well as computing auxiliary quantities like the total water height $H$ or the entropy variables. This affects the implementation and use of these equations in various ways:

  • The flux values corresponding to the bottom topography must be zero.
  • The bottom topography values must be included when defining initial conditions, boundary conditions or source terms.
  • AnalysisCallback analyzes this variable.
  • Trixi.jl's visualization tools will visualize the bottom topography by default.

References for the SWE are many but a good introduction is available in Chapter 13 of the book:

source
Trixi.ShallowWaterEquationsQuasi1DType
ShallowWaterEquationsQuasi1D(; gravity, H0 = 0, threshold_limiter = nothing threshold_wet = nothing)

The quasi-1D shallow water equations (SWE). The equations are given by

\[\begin{aligned} + \frac{\partial}{\partial t}(a h) + \frac{\partial}{\partial x}(a h v) &= 0 \\ + \frac{\partial}{\partial t}(a h v) + \frac{\partial}{\partial x}(a h v^2) + + g a h \frac{\partial}{\partial x}(h + b) &= 0 +\end{aligned}\]

The unknown quantities of the Quasi-1D SWE are the water height $h$ and the scaled velocity $v$. The gravitational constant is denoted by g, the (possibly) variable bottom topography function $b(x)$, and (possibly) variable channel width $a(x)$. The water height $h$ is measured from the bottom topography $b$, therefore one also defines the total water height as $H = h + b$.

The additional quantity $H_0$ is also available to store a reference value for the total water height that is useful to set initial conditions or test the "lake-at-rest" well-balancedness.

The bottom topography function $b(x)$ and channel width $a(x)$ are set inside the initial condition routine for a particular problem setup. To test the conservative form of the SWE one can set the bottom topography variable b to zero and $a$ to one.

In addition to the unknowns, Trixi.jl currently stores the bottom topography and channel width values at the approximation points despite being fixed in time. This is done for convenience of computing the bottom topography gradients on the fly during the approximation as well as computing auxiliary quantities like the total water height $H$ or the entropy variables. This affects the implementation and use of these equations in various ways:

  • The flux values corresponding to the bottom topography and channel width must be zero.
  • The bottom topography and channel width values must be included when defining initial conditions, boundary conditions or source terms.
  • AnalysisCallback analyzes this variable.
  • Trixi.jl's visualization tools will visualize the bottom topography and channel width by default.
source
Trixi.SimpleSSPRK33Type
SimpleSSPRK33(; stage_callbacks=())

The third-order SSP Runge-Kutta method of Shu and Osher.

References

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.StepsizeCallbackType
StepsizeCallback(; cfl=1.0)

Set the time step size according to a CFL condition with CFL number cfl if the time integration method isn't adaptive itself.

source
Trixi.StructuredMeshType
StructuredMesh{NDIMS} <: AbstractMesh{NDIMS}

A structured curved mesh.

Different numbers of cells per dimension are possible and arbitrary functions can be used as domain faces.

source
Trixi.StructuredMeshMethod
StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max; periodicity=true)

Create a StructuredMesh that represents a uncurved structured mesh with a rectangular domain.

Arguments

  • cells_per_dimension::NTuple{NDIMS, Int}: the number of cells in each dimension.
  • coordinates_min::NTuple{NDIMS, RealT}: coordinate of the corner in the negative direction of each dimension.
  • coordinates_max::NTuple{NDIMS, RealT}: coordinate of the corner in the positive direction of each dimension.
  • periodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.
source
Trixi.StructuredMeshMethod
StructuredMesh(cells_per_dimension, mapping; RealT=Float64, unsaved_changes=true, mapping_as_string=mapping2string(mapping, length(cells_per_dimension)))

Create a StructuredMesh of the given size and shape that uses RealT as coordinate type.

Arguments

  • cells_per_dimension::NTupleE{NDIMS, Int}: the number of cells in each dimension.
  • mapping: a function of NDIMS variables to describe the mapping, which transforms the reference mesh to the physical domain. If no mapping_as_string is defined, this function must be defined with the name mapping to allow for restarts. This will be changed in the future, see https://github.com/trixi-framework/Trixi.jl/issues/541.
  • RealT::Type: the type that should be used for coordinates.
  • periodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.
  • unsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.
  • mapping_as_string::String: the code that defines the mapping. If CodeTracking can't find the function definition, it can be passed directly here. The code string must define the mapping function with the name mapping. This will be changed in the future, see https://github.com/trixi-framework/Trixi.jl/issues/541.
source
Trixi.StructuredMeshMethod
StructuredMesh(cells_per_dimension, faces; RealT=Float64, unsaved_changes=true, faces_as_string=faces2string(faces))

Create a StructuredMesh of the given size and shape that uses RealT as coordinate type.

Arguments

  • cells_per_dimension::NTupleE{NDIMS, Int}: the number of cells in each dimension.
  • faces::NTuple{2*NDIMS}: a tuple of 2 * NDIMS functions that describe the faces of the domain. Each function must take NDIMS-1 arguments. faces[1] describes the face onto which the face in negative x-direction of the unit hypercube is mapped. The face in positive x-direction of the unit hypercube will be mapped onto the face described by faces[2]. faces[3:4] describe the faces in positive and negative y-direction respectively (in 2D and 3D). faces[5:6] describe the faces in positive and negative z-direction respectively (in 3D).
  • RealT::Type: the type that should be used for coordinates.
  • periodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.
source
Trixi.StructuredMeshViewMethod
StructuredMeshView(parent; indices_min, indices_max)

Create a StructuredMeshView on a StructuredMesh parent.

Arguments

  • parent: the parent StructuredMesh.
  • indices_min: starting indices of the parent mesh.
  • indices_max: ending indices of the parent mesh.
source
Trixi.SubcellLimiterIDPType
SubcellLimiterIDP(equations::AbstractEquations, basis;
+                  local_twosided_variables_cons = String[],
+                  positivity_variables_cons = String[],
+                  positivity_variables_nonlinear = [],
+                  positivity_correction_factor = 0.1,
+                  local_onesided_variables_nonlinear = [],
+                  max_iterations_newton = 10,
+                  newton_tolerances = (1.0e-12, 1.0e-14),
+                  gamma_constant_newton = 2 * ndims(equations))

Subcell invariant domain preserving (IDP) limiting used with VolumeIntegralSubcellLimiting including:

  • Local two-sided Zalesak-type limiting for conservative variables (local_twosided_variables_cons)
  • Positivity limiting for conservative variables (positivity_variables_cons) and nonlinear variables

(positivity_variables_nonlinear)

  • Local one-sided limiting for nonlinear variables, e.g. entropy_guermond_etal and entropy_math

with local_onesided_variables_nonlinear

To use these three limiting options use the following structure:

***Conservative variables*** to be limited are passed as a vector of strings, e.g. local_twosided_variables_cons = ["rho"] and positivity_variables_cons = ["rho"]. For ***nonlinear variables***, the wanted variable functions are passed within a vector: To ensure positivity use a plain vector including the desired variables, e.g. positivity_variables_nonlinear = [pressure]. For local one-sided limiting pass the variable function combined with the requested bound (min or max) as a tuple. For instance, to impose a lower local bound on the modified specific entropy by Guermond et al. use local_onesided_variables_nonlinear = [(Trixi.entropy_guermond_etal, min)].

The bounds are calculated using the low-order FV solution. The positivity limiter uses positivity_correction_factor such that u^new >= positivity_correction_factor * u^FV. Local and global limiting of nonlinear variables uses a Newton-bisection method with a maximum of max_iterations_newton iterations, relative and absolute tolerances of newton_tolerances and a provisional update constant gamma_constant_newton (gamma_constant_newton>=2*d, where d = #dimensions). See equation (20) of Pazner (2020) and equation (30) of Rueda-Ramírez et al. (2022).

Note

This limiter and the correction callback SubcellLimiterIDPCorrection only work together. Without the callback, no correction takes place, leading to a standard low-order FV scheme.

References

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.SubcellLimiterIDPCorrectionType
SubcellLimiterIDPCorrection()

Perform antidiffusive correction stage for the a posteriori IDP limiter SubcellLimiterIDP called with VolumeIntegralSubcellLimiting.

Note

This callback and the actual limiter SubcellLimiterIDP only work together. This is not a replacement but a necessary addition.

References

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.SurfaceIntegralWeakFormType
SurfaceIntegralWeakForm(surface_flux=flux_central)

The classical weak form surface integral type for DG methods as explained in standard textbooks.

See also VolumeIntegralWeakForm.

References

source
Trixi.T8codeMeshType
T8codeMesh{NDIMS} <: AbstractMesh{NDIMS}

An unstructured curved mesh based on trees that uses the C library 't8code' to manage trees and mesh refinement.

source
Trixi.T8codeMeshMethod
T8codeMesh(trees_per_dimension; polydeg, mapping=identity,
+           RealT=Float64, initial_refinement_level=0, periodicity=true)

Create a structured potentially curved 'T8codeMesh' of the specified size.

Non-periodic boundaries will be called ':xneg', ':xpos', ':yneg', ':ypos', ':zneg', ':zpos'.

Arguments

  • 'treesperdimension::NTupleE{NDIMS, Int}': the number of trees in each dimension.
  • 'polydeg::Integer': polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.
  • mapping: a function of NDIMS variables to describe the mapping that transforms the reference mesh ([-1, 1]^n) to the physical domain. Use only one of mapping, faces and coordinates_min/coordinates_max.
  • faces::NTuple{2*NDIMS}: a tuple of 2 * NDIMS functions that describe the faces of the domain. Each function must take NDIMS-1 arguments. faces[1] describes the face onto which the face in negative x-direction of the unit hypercube is mapped. The face in positive x-direction of the unit hypercube will be mapped onto the face described by faces[2]. faces[3:4] describe the faces in positive and negative y-direction respectively (in 2D and 3D). faces[5:6] describe the faces in positive and negative z-direction respectively (in 3D). Use only one of mapping, faces and coordinates_min/coordinates_max.
  • coordinates_min: vector or tuple of the coordinates of the corner in the negative direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.
  • coordinates_max: vector or tuple of the coordinates of the corner in the positive direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.
  • 'RealT::Type': the type that should be used for coordinates.
  • 'initialrefinementlevel::Integer': refine the mesh uniformly to this level before the simulation starts.
  • 'periodicity': either a 'Bool' deciding if all of the boundaries are periodic or an 'NTuple{NDIMS, Bool}' deciding for each dimension if the boundaries in this dimension are periodic.
source
Trixi.T8codeMeshMethod
T8codeMesh(conn::Ptr{p4est_connectivity}; kwargs...)

Main mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a p4est_connectivity data structure.

Arguments

  • conn::Ptr{p4est_connectivity}: Pointer to a P4est connectivity object.
  • mapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: the type that should be used for coordinates.
  • initial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.
source
Trixi.T8codeMeshMethod
T8codeMesh(conn::Ptr{p8est_connectivity}; kwargs...)

Main mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a p4est_connectivity data structure.

Arguments

  • conn::Ptr{p4est_connectivity}: Pointer to a P4est connectivity object.
  • mapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: the type that should be used for coordinates.
  • initial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.
source
Trixi.T8codeMeshMethod
T8codeMesh(cmesh::Ptr{t8_cmesh},
+           mapping=nothing, polydeg=1, RealT=Float64,
+           initial_refinement_level=0)

Main mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a t8_cmesh data structure.

Arguments

  • cmesh::Ptr{t8_cmesh}: Pointer to a cmesh object.
  • mapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: the type that should be used for coordinates.
  • initial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.
source
Trixi.T8codeMeshMethod
T8codeMesh(meshfile::String, NDIMS; kwargs...)

Main mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from either a Gmsh mesh file (.msh) or Abaqus mesh file (.inp) which is determined by the file extension.

Arguments

  • filepath::String: path to a Gmsh or Abaqus mesh file.
  • ndims: Mesh file dimension: 2 or 3.

Optional Keyword Arguments

  • mapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: The type that should be used for coordinates.
  • initial_refinement_level::Integer: Refine the mesh uniformly to this level before the simulation starts.
source
Trixi.T8codeMeshMethod
T8codeMesh{NDIMS, RealT}(forest, boundary_names; polydeg = 1, mapping = nothing)

Main mesh constructor for the T8codeMesh wrapping around a given t8code forest object. This constructor is typically called by other T8codeMesh constructors.

Arguments

  • forest: Pointer to a t8code forest.
  • boundary_names: List of boundary names.
  • polydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.
  • mapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
source
Trixi.T8codeMeshMethod
T8codeMesh(meshfile::AbaqusFile{NDIMS};
+           mapping=nothing, polydeg=1, RealT=Float64,
+           initial_refinement_level=0, unsaved_changes=true,
+           boundary_symbols = nothing)

Main mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from an Abaqus mesh file (.inp).

To create a curved unstructured T8codeMesh two strategies are available:

  • HOHQMesh Abaqus: High-order, curved boundary information created by HOHQMesh.jl is available in the meshfile. The mesh polynomial degree polydeg of the boundaries is provided from the meshfile. The computation of the mapped tree coordinates is done with transfinite interpolation with linear blending similar to UnstructuredMesh2D. Boundary name information is also parsed from the meshfile such that different boundary conditions can be set at each named boundary on a given tree.

  • Standard Abaqus: By default, with mapping=nothing and polydeg=1, this creates a straight-sided mesh from the information parsed from the meshfile. If a mapping function is specified then it computes the mapped tree coordinates via polynomial interpolants with degree polydeg. The mesh created by this function will only have one boundary :all if boundary_symbols is not specified. If boundary_symbols is specified the mesh file will be parsed for nodesets defining the boundary nodes from which boundary edges (2D) and faces (3D) will be assigned.

Note that the mapping and polydeg keyword arguments are only used by the HOHQMesh Abaqus option. The Standard Abaqus routine obtains the mesh polydeg directly from the meshfile and constructs the transfinite mapping internally.

The particular strategy is selected according to the header present in the meshfile where the constructor checks whether or not the meshfile was created with HOHQMesh.jl. If the Abaqus file header is not present in the meshfile then the T8codeMesh is created by Standard Abaqus.

The default keyword argument initial_refinement_level=0 corresponds to a forest where the number of trees is the same as the number of elements in the original meshfile. Increasing the initial_refinement_level allows one to uniformly refine the base mesh given in the meshfile to create a forest with more trees before the simulation begins. For example, if a two-dimensional base mesh contains 25 elements then setting initial_refinement_level=1 creates an initial forest of 2^2 * 25 = 100 trees.

Arguments

  • meshfile::AbaqusFile{NDIMS}: Abaqus mesh file object of dimension NDIMS and given path to the file.

Optional Keyword Arguments

  • mapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: The type that should be used for coordinates.
  • initial_refinement_level::Integer: Refine the mesh uniformly to this level before the simulation starts.
  • boundary_symbols::Vector{Symbol}: A vector of symbols that correspond to the boundary names in the meshfile. If nothing is passed then all boundaries are named :all.
source
Trixi.T8codeMeshMethod
T8codeMesh(meshfile::GmshFile{NDIMS}; kwargs...)

Main mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a Gmsh mesh file (.msh).

Arguments

  • meshfile::GmshFile{NDIMS}: Gmsh mesh file object of dimension NDIMS and give path to the file.

Optional Keyword Arguments

  • mapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.
  • polydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.
  • RealT::Type: The type that should be used for coordinates.
  • initial_refinement_level::Integer: Refine the mesh uniformly to this level before the simulation starts.
source
Trixi.TimeSeriesCallbackType
TimeSeriesCallback(semi, point_coordinates;
+                   interval=1, solution_variables=cons2cons,
+                   output_directory="out", filename="time_series.h5",
+                   RealT=real(solver), uEltype=eltype(cache.elements))

Create a callback that records point-wise data at points given in point_coordinates every interval time steps. The point coordinates are to be specified either as a vector of coordinate tuples or as a two-dimensional array where the first dimension is the point number and the second dimension is the coordinate dimension. By default, the conservative variables are recorded, but this can be controlled by passing a different conversion function to solution_variables.

After the last time step, the results are stored in an HDF5 file filename in directory output_directory.

The real data type RealT and data type for solution variables uEltype default to the respective types used in the solver and the cache.

Currently this callback is only implemented for TreeMesh and UnstructuredMesh2D.

source
Trixi.TrafficFlowLWREquations1DType
TrafficFlowLWREquations1D

The classic Lighthill-Witham Richards (LWR) model for 1D traffic flow. The car density is denoted by $u \in [0, 1]$ and the maximum possible speed (e.g. due to speed limits) is $v_{\text{max}}$.

\[\partial_t u + v_{\text{max}} \partial_1 [u (1 - u)] = 0\]

For more details see e.g. Section 11.1 of

  • Randall LeVeque (2002)

Finite Volume Methods for Hyperbolic Problems [DOI: 10.1017/CBO9780511791253]https://doi.org/10.1017/CBO9780511791253

source
Trixi.TreeMeshType
TreeMesh{NDIMS} <: AbstractMesh{NDIMS}

A Cartesian mesh based on trees of hypercubes to support adaptive mesh refinement.

source
Trixi.UnstructuredMesh2DType
UnstructuredMesh2D <: AbstractMesh{2}

An unstructured (possibly curved) quadrilateral mesh.

UnstructuredMesh2D(filename; RealT=Float64, periodicity=false)

All mesh information, neighbour coupling, and boundary curve information is read in from a mesh file filename.

source
Trixi.UnstructuredSortedBoundaryTypesType
UnstructuredSortedBoundaryTypes

General container to sort the boundary conditions by type and name for some unstructured meshes/solvers. It stores a set of global indices for each boundary condition type and name to expedite computation during the call to calc_boundary_flux!. The original dictionary form of the boundary conditions set by the user in the elixir file is also stored for printing.

source
Trixi.ViscousFormulationLocalDGType
ViscousFormulationLocalDG(penalty_parameter)

The local DG (LDG) flux from "The Local Discontinuous Galerkin Method for Time-Dependent Convection-Diffusion Systems" by Cockburn and Shu (1998).

Note that, since this implementation does not involve the parabolic "upwinding" vector, the LDG solver is equivalent to ViscousFormulationBassiRebay1 with an LDG-type penalization.

source
Trixi.VisualizationCallbackMethod
VisualizationCallback(; interval=0,
+                        solution_variables=cons2prim,
+                        variable_names=[],
+                        show_mesh=false,
+                        plot_data_creator=PlotData2D,
+                        plot_creator=show_plot,
+                        plot_arguments...)

Create a callback that visualizes results during a simulation, also known as in-situ visualization.

Experimental implementation

This is an experimental feature and may change in any future releases.

The interval specifies the number of time step iterations after which a new plot is generated. The available variables to plot are configured with the solution_variables parameter, which acts the same way as for the SaveSolutionCallback. The variables to be actually plotted can be selected by providing a single string or a list of strings to variable_names, and if show_mesh is true, an additional plot with the mesh will be generated.

To customize the generated figure, plot_data_creator allows to use different plot data types. With plot_creator you can further specify an own function to visualize results, which must support the same interface as the default implementation show_plot. All remaining keyword arguments are collected and passed as additional arguments to the plotting command.

source
Trixi.VolumeIntegralFluxDifferencingType
VolumeIntegralFluxDifferencing(volume_flux)

Volume integral type for DG methods based on SBP operators and flux differencing using a symmetric two-point volume_flux. This volume_flux needs to satisfy the interface of numerical fluxes in Trixi.jl.

References

source
Trixi.VolumeIntegralPureLGLFiniteVolumeType
VolumeIntegralPureLGLFiniteVolume(volume_flux_fv)

A volume integral that only uses the subcell finite volume schemes of the VolumeIntegralShockCapturingHG.

This gives a formally O(1)-accurate finite volume scheme on an LGL-type subcell mesh (LGL = Legendre-Gauss-Lobatto).

Experimental implementation

This is an experimental feature and may change in future releases.

References

  • Hennemann, Gassner (2020) "A provably entropy stable subcell shock capturing approach for high order split form DG" arXiv: 2008.12044
source
Trixi.VolumeIntegralShockCapturingHGType
VolumeIntegralShockCapturingHG(indicator; volume_flux_dg=flux_central,
+                                          volume_flux_fv=flux_lax_friedrichs)

Shock-capturing volume integral type for DG methods using a convex blending of the finite volume method with numerical flux volume_flux_fv and the VolumeIntegralFluxDifferencing with volume flux volume_flux_dg. The amount of blending is determined by the indicator, e.g., IndicatorHennemannGassner.

References

  • Hennemann, Gassner (2020) "A provably entropy stable subcell shock capturing approach for high order split form DG" arXiv: 2008.12044
source
Trixi.VolumeIntegralSubcellLimitingType
VolumeIntegralSubcellLimiting(limiter;
+                              volume_flux_dg, volume_flux_fv)

A subcell limiting volume integral type for DG methods based on subcell blending approaches with a low-order FV method. Used with limiter SubcellLimiterIDP.

Note

Subcell limiting methods are not fully functional on non-conforming meshes. This is mainly because the implementation assumes that low- and high-order schemes have the same surface terms, which is not guaranteed for non-conforming meshes. The low-order scheme with a high-order mortar is not invariant domain preserving.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.VolumeIntegralUpwindType
VolumeIntegralUpwind(splitting)

Specialized volume integral for finite difference summation-by-parts (FDSBP) solvers. Can be used together with the upwind SBP operators of Mattsson (2017) implemented in SummationByPartsOperators.jl. The splitting controls the discretization.

See also splitting_steger_warming, splitting_lax_friedrichs, splitting_vanleer_haenel.

References

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

source
Trixi.VolumeIntegralWeakFormType
VolumeIntegralWeakForm()

The classical weak form volume integral type for DG methods as explained in standard textbooks.

References

VolumeIntegralWeakForm() is only implemented for conserved terms as non-conservative terms should always be discretized in conjunction with a flux-splitting scheme, see VolumeIntegralFluxDifferencing. This treatment is required to achieve, e.g., entropy-stability or well-balancedness.

source
Base.getindexMethod
Base.getindex(pd::AbstractPlotData, variable_name)

Extract a single variable variable_name from pd for plotting with Plots.plot.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Base.resize!Method
resize!(c::AbstractContainer, new_length) -> AbstractContainer

Resize c to contain new_length elements. If new_length is smaller than the current container length, the first new_length elements will be retained. If new_length is larger, the new elements are invalidated.

source
PolynomialBases.compute_coefficientsMethod
compute_coefficients(func, t, semi::AbstractSemidiscretization)

Compute the discrete coefficients of the continuous function func at time t associated with the semidiscretization semi. For example, the discrete coefficients of func for a discontinuous Galerkin spectral element method (DGSEM) are the values of func at the Lobatto-Legendre nodes. Similarly, a classical finite difference method will use the values of func at the nodes of the grid assoociated with the semidiscretization semi.

For semidiscretizations semi associated with an initial condition, func can be omitted to use the given initial condition at time t.

source
PolynomialBases.integrateMethod
integrate(f, u, basis::LobattoLegendreBasis)

Map the function f to the coefficients u and integrate with respect to the quadrature rule given by basis.

source
PolynomialBases.integrateMethod
integrate([func=(u_node,equations)->u_node,] u_ode, semi::AbstractSemidiscretization; normalize=true)

Call func(u_node, equations) for each vector of nodal variables u_node in u_ode and integrate the result using a quadrature associated with the semidiscretization semi.

If normalize is true, the result is divided by the total volume of the computational domain.

source
SciMLBase.add_tstop!Method
add_tstop!(integrator::PairedExplicitRK2Integrator, t)

Add a time stop during the time integration process. This function is called after the periodic SaveSolutionCallback to specify the next stop to save the solution.

source
SciMLBase.add_tstop!Method
add_tstop!(integrator::SimpleIntegratorSSP, t)

Add a time stop during the time integration process. This function is called after the periodic SaveSolutionCallback to specify the next stop to save the solution.

source
SummationByPartsOperators.semidiscretizeMethod
semidiscretize(semi::SemidiscretizationHyperbolicParabolic, tspan)

Wrap the semidiscretization semi as a split ODE problem in the time interval tspan that can be passed to solve from the SciML ecosystem. The parabolic right-hand side is the first function of the split ODE problem and will be used by default by the implicit part of IMEX methods from the SciML ecosystem.

source
SummationByPartsOperators.semidiscretizeMethod
semidiscretize(semi::AbstractSemidiscretization, tspan, restart_file::AbstractString)

Wrap the semidiscretization semi as an ODE problem in the time interval tspan that can be passed to solve from the SciML ecosystem. The initial condition etc. is taken from the restart_file.

source
Trixi.DGMultiBasisMethod
DGMultiBasis(element_type, polydeg; approximation_type = Polynomial(), kwargs...)

Constructs a basis for DGMulti solvers. Returns a "StartUpDG.RefElemData" object. The kwargs arguments are additional keyword arguments for RefElemData, such as quad_rule_vol. These are the same as the RefElemData_kwargs used in DGMulti. For more info, see the StartUpDG.jl docs.

source
Trixi.P4estMeshCubedSphereMethod
P4estMeshCubedSphere(trees_per_face_dimension, layers, inner_radius, thickness;
+                     polydeg, RealT=Float64,
+                     initial_refinement_level=0, unsaved_changes=true,
+                     p4est_partition_allow_for_coarsening=true)

Build a "Cubed Sphere" mesh as P4estMesh with 6 * trees_per_face_dimension^2 * layers trees.

The mesh will have two boundaries, :inside and :outside.

Arguments

  • trees_per_face_dimension::Integer: the number of trees in the first two local dimensions of each face.
  • layers::Integer: the number of trees in the third local dimension of each face, i.e., the number of layers of the sphere.
  • inner_radius::Integer: the inner radius of the sphere.
  • thickness::Integer: the thickness of the sphere. The outer radius will be inner_radius + thickness.
  • polydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.
  • RealT::Type: the type that should be used for coordinates.
  • initial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.
  • unsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.
  • p4est_partition_allow_for_coarsening::Bool: Must be true when using AMR to make mesh adaptivity independent of domain partitioning. Should be false for static meshes to permit more fine-grained partitioning.
source
Trixi.PlotData2DMethod
PlotData2D(u, semi [or mesh, equations, solver, cache];
+           solution_variables=nothing,
+           grid_lines=true, max_supported_level=11, nvisnodes=nothing,
+           slice=:xy, point=(0.0, 0.0, 0.0))

Create a new PlotData2D object that can be used for visualizing 2D/3D DGSEM solution data array u with Plots.jl. All relevant geometrical information is extracted from the semidiscretization semi. By default, the primitive variables (if existent) or the conservative variables (otherwise) from the solution are used for plotting. This can be changed by passing an appropriate conversion function to solution_variables.

If grid_lines is true, also extract grid vertices for visualizing the mesh. The output resolution is indirectly set via max_supported_level: all data is interpolated to 2^max_supported_level uniformly distributed points in each spatial direction, also setting the maximum allowed refinement level in the solution. nvisnodes specifies the number of visualization nodes to be used. If it is nothing, twice the number of solution DG nodes are used for visualization, and if set to 0, exactly the number of nodes in the DG elements are used.

When visualizing data from a three-dimensional simulation, a 2D slice is extracted for plotting. slice specifies the plane that is being sliced and may be :xy, :xz, or :yz. The slice position is specified by a point that lies on it, which defaults to (0.0, 0.0, 0.0). Both of these values are ignored when visualizing 2D data.

Experimental implementation

This is an experimental feature and may change in future releases.

Examples

julia> using Trixi, Plots
+
+julia> trixi_include(default_example())
+[...]
+
+julia> pd = PlotData2D(sol)
+PlotData2D(...)
+
+julia> plot(pd) # To plot all available variables
+
+julia> plot(pd["scalar"]) # To plot only a single variable
+
+julia> plot!(getmesh(pd)) # To add grid lines to the plot
source
Trixi.PlotData2DMethod
PlotData2D(sol; kwargs...)

Create a PlotData2D object from a solution object created by either OrdinaryDiffEq.solve! (which returns a SciMLBase.ODESolution) or Trixi.jl's own solve! (which returns a TimeIntegratorSolution).

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.ScalarPlotData2DMethod
ScalarPlotData2D(u, semi::AbstractSemidiscretization; kwargs...)

Returns an PlotData2DTriangulated object which is used to visualize a single scalar field. u should be an array whose entries correspond to values of the scalar field at nodal points.

source
Trixi.SummaryCallbackFunction
SummaryCallback()

Create and return a callback that prints a human-readable summary of the simulation setup at the beginning of a simulation and then resets the timer. When the returned callback is executed directly, the current timer values are shown.

source
Trixi.adapt!Method
Trixi.adapt!(mesh::T8codeMesh, adapt_callback; kwargs...)

Adapt a T8codeMesh according to a user-defined adapt_callback.

Arguments

  • mesh::T8codeMesh: Initialized mesh object.

  • adapt_callback: A user-defined callback which tells the adaption routines if an element should be refined, coarsened or stay unchanged.

    The expected callback signature is as follows:

    `adapt_callback(forest, ltreeid, eclass_scheme, lelemntid, elements, is_family, user_data)`
    +  # Arguments
    +  - `forest`: Pointer to the analyzed forest.
    +  - `ltreeid`: Local index of the current tree where the analyzed elements are part of.
    +  - `eclass_scheme`: Element class of `elements`.
    +  - `lelemntid`: Local index of the first element in `elements`.
    +  - `elements`: Array of elements. If consecutive elements form a family
    +                they are passed together, otherwise `elements` consists of just one element.
    +  - `is_family`: Boolean signifying if `elements` represents a family or not.
    +  - `user_data`: Void pointer to some arbitrary user data. Default value is `C_NULL`.
    +  # Returns
    +    -1 : Coarsen family of elements.
    +     0 : Stay unchanged.
    +     1 : Refine element.
  • kwargs:

    • recursive = true: Adapt the forest recursively. If true the caller must ensure that the callback returns 0 for every analyzed element at some point to stop the recursion.
    • balance = true: Make sure the adapted forest is 2^(NDIMS-1):1 balanced.
    • partition = true: Partition the forest to redistribute elements evenly among MPI ranks.
    • ghost = true: Create a ghost layer for MPI data exchange.
    • user_data = C_NULL: Pointer to some arbitrary user-defined data.
source
Trixi.adapt_to_mesh_level!Method
adapt_to_mesh_level!(u_ode, semi, level)
+adapt_to_mesh_level!(sol::Trixi.TrixiODESolution, level)

Like adapt_to_mesh_level, but modifies the solution and parts of the semidiscretization (mesh and caches) in place.

source
Trixi.adapt_to_mesh_levelMethod
adapt_to_mesh_level(u_ode, semi, level)
+adapt_to_mesh_level(sol::Trixi.TrixiODESolution, level)

Use the regular adaptive mesh refinement routines to adaptively refine/coarsen the solution u_ode with semidiscretization semi towards a uniformly refined grid with refinement level level. The solution and semidiscretization are copied such that the original objects remain unaltered.

A convenience method accepts an ODE solution object, from which solution and semidiscretization are extracted as needed.

See also: adapt_to_mesh_level!

source
Trixi.balance!Method
Trixi.balance!(mesh::T8codeMesh)

Balance a T8codeMesh to ensure 2^(NDIMS-1):1 face neighbors.

source
Trixi.barycentric_weightsMethod
barycentric_weights(nodes)

Calculate the barycentric weights for a given node distribution, i.e.,

\[w_j = \frac{1}{ \prod_{k \neq j} \left( x_j - x_k \right ) }\]

For details, see (especially Section 3)

source
Trixi.boundary_condition_noslip_wallMethod
boundary_condition_noslip_wall(u_inner, orientation, direction, x, t,
+                               surface_flux_function,
+                               equations::LatticeBoltzmannEquations2D)

No-slip wall boundary condition using the bounce-back approach.

source
Trixi.boundary_condition_slip_wallMethod
boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,
+                             equations::AcousticPerturbationEquations2D)

Use an orthogonal projection of the perturbed velocities to zero out the normal velocity while retaining the possibility of a tangential velocity in the boundary state. Further details are available in the paper:

  • Marcus Bauer, Jürgen Dierke and Roland Ewert (2011) Application of a discontinuous Galerkin method to discretize acoustic perturbation equations DOI: 10.2514/1.J050333
source
Trixi.boundary_condition_slip_wallMethod
boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,
+                             equations::CompressibleEulerEquations2D)

Determine the boundary numerical surface flux for a slip wall condition. Imposes a zero normal velocity at the wall. Density is taken from the internal solution state and pressure is computed as an exact solution of a 1D Riemann problem. Further details about this boundary state are available in the paper:

  • J. J. W. van der Vegt and H. van der Ven (2002) Slip flow boundary conditions in discontinuous Galerkin discretizations of the Euler equations of gas dynamics PDF

Details about the 1D pressure Riemann solution can be found in Section 6.3.3 of the book

  • Eleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction 3rd edition DOI: 10.1007/b79761

Should be used together with UnstructuredMesh2D.

source
Trixi.boundary_condition_slip_wallMethod
boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,
+                             equations::CompressibleEulerEquations3D)

Determine the boundary numerical surface flux for a slip wall condition. Imposes a zero normal velocity at the wall. Density is taken from the internal solution state and pressure is computed as an exact solution of a 1D Riemann problem. Further details about this boundary state are available in the paper:

  • J. J. W. van der Vegt and H. van der Ven (2002) Slip flow boundary conditions in discontinuous Galerkin discretizations of the Euler equations of gas dynamics PDF

Details about the 1D pressure Riemann solution can be found in Section 6.3.3 of the book

  • Eleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction 3rd edition DOI: 10.1007/b79761
source
Trixi.boundary_condition_slip_wallMethod
boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,
+                             equations::ShallowWaterEquations2D)

Create a boundary state by reflecting the normal velocity component and keep the tangential velocity component unchanged. The boundary water height is taken from the internal value. For details see Section 9.2.5 of the book:

  • Eleuterio F. Toro (2001) Shock-Capturing Methods for Free-Surface Shallow Flows 1st edition ISBN 0471987662
source
Trixi.boundary_condition_slip_wallMethod
boundary_condition_slip_wall(u_inner, orientation, direction, x, t,
+                             surface_flux_function, equations::CompressibleEulerEquations1D)

Determine the boundary numerical surface flux for a slip wall condition. Imposes a zero normal velocity at the wall. Density is taken from the internal solution state and pressure is computed as an exact solution of a 1D Riemann problem. Further details about this boundary state are available in the paper:

  • J. J. W. van der Vegt and H. van der Ven (2002) Slip flow boundary conditions in discontinuous Galerkin discretizations of the Euler equations of gas dynamics PDF

    Should be used together with TreeMesh.

source
Trixi.boundary_condition_slip_wallMethod
boundary_condition_slip_wall(u_inner, orientation_or_normal, x, t, surface_flux_function,
+                              equations::ShallowWaterEquations1D)

Create a boundary state by reflecting the normal velocity component and keep the tangential velocity component unchanged. The boundary water height is taken from the internal value.

For details see Section 9.2.5 of the book:

  • Eleuterio F. Toro (2001) Shock-Capturing Methods for Free-Surface Shallow Flows 1st edition ISBN 0471987662
source
Trixi.boundary_condition_wallMethod
boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,
+                        equations::AcousticPerturbationEquations2D)

Boundary conditions for a solid wall.

source
Trixi.boundary_condition_wallMethod
boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,
+                            equations::LinearizedEulerEquations1D)

Boundary conditions for a solid wall.

source
Trixi.boundary_condition_wallMethod
boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,
+                            equations::LinearizedEulerEquations2D)

Boundary conditions for a solid wall.

source
Trixi.boundary_condition_wallMethod
boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,
+                            equations::LinearizedEulerEquations3D)

Boundary conditions for a solid wall.

source
Trixi.calc_error_normsMethod
calc_error_norms([func=(u_node,equations)->u_node,] u_ode, t, analyzer, semi::AbstractSemidiscretization, cache_analysis)

Calculate discrete L2 and L∞ error norms of func applied to each nodal variable u_node in u_ode. If no exact solution is available, "errors" are calculated using some reference state and can be useful for regression tests.

source
Trixi.calc_fast_wavespeed_roeMethod
calc_fast_wavespeed_roe(u_ll, u_rr, direction, equations::IdealGlmMhdEquations1D)

Compute the fast magnetoacoustic wave speed using Roe averages as given by

  • Cargo and Gallice (1997) Roe Matrices for Ideal MHD and Systematic Construction of Roe Matrices for Systems of Conservation Laws DOI: 10.1006/jcph.1997.5773
source
Trixi.calc_fast_wavespeed_roeMethod
calc_fast_wavespeed_roe(u_ll, u_rr, orientation_or_normal_direction, equations::IdealGlmMhdEquations2D)

Compute the fast magnetoacoustic wave speed using Roe averages as given by

  • Cargo and Gallice (1997) Roe Matrices for Ideal MHD and Systematic Construction of Roe Matrices for Systems of Conservation Laws DOI: 10.1006/jcph.1997.5773
source
Trixi.calc_fast_wavespeed_roeMethod
calc_fast_wavespeed_roe(u_ll, u_rr, orientation_or_normal_direction, equations::IdealGlmMhdEquations3D)

Compute the fast magnetoacoustic wave speed using Roe averages as given by

  • Cargo and Gallice (1997) Roe Matrices for Ideal MHD and Systematic Construction of Roe Matrices for Systems of Conservation Laws DOI: 10.1006/jcph.1997.5773
source
Trixi.calc_wavespeed_roeMethod
calc_wavespeed_roe(u_ll, u_rr, direction::Integer,
+                   equations::ShallowWaterEquations1D)

Calculate Roe-averaged velocity v_roe and wavespeed c_roe = sqrt{g * h_roe} See for instance equation (62) in

  • Paul A. Ullrich, Christiane Jablonowski, and Bram van Leer (2010) High-order finite-volume methods for the shallow-water equations on the sphere DOI: 10.1016/j.jcp.2010.04.044

Or equation (9.17) in this lecture notes.

source
Trixi.calc_wavespeed_roeMethod
calc_wavespeed_roe(u_ll, u_rr, direction::Integer,
+                   equations::ShallowWaterEquations2D)

Calculate Roe-averaged velocity v_roe and wavespeed c_roe = sqrt{g * h_roe} depending on direction. See for instance equation (62) in

  • Paul A. Ullrich, Christiane Jablonowski, and Bram van Leer (2010) High-order finite-volume methods for the shallow-water equations on the sphere DOI: 10.1016/j.jcp.2010.04.044

Or this slides, slides 8 and 9.

source
Trixi.collision_bgkMethod
collision_bgk(u, dt, equations::LatticeBoltzmannEquations2D)

Collision operator for the Bhatnagar, Gross, and Krook (BGK) model.

source
Trixi.collision_bgkMethod
collision_bgk(u, dt, equations::LatticeBoltzmannEquations3D)

Collision operator for the Bhatnagar, Gross, and Krook (BGK) model.

source
Trixi.cons2consMethod
cons2cons(u, equations)

Return the conserved variables u. While this function is as trivial as identity, it is also as useful.

source
Trixi.cons2entropyFunction
cons2entropy(u, equations)

Convert the conserved variables u to the entropy variables for a given set of equations with chosen standard entropy.

u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by entropy2cons.

source
Trixi.cons2primFunction
cons2prim(u, equations)

Convert the conserved variables u to the primitive variables for a given set of equations. u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by prim2cons.

source
Trixi.convergence_testMethod
convergence_test([mod::Module=Main,] elixir::AbstractString, iterations; kwargs...)

Run iterations Trixi.jl simulations using the setup given in elixir and compute the experimental order of convergence (EOC) in the $L^2$ and $L^\infty$ norm. In each iteration, the resolution of the respective mesh will be doubled. Additional keyword arguments kwargs... and the optional module mod are passed directly to trixi_include.

This function assumes that the spatial resolution is set via the keywords initial_refinement_level (an integer) or cells_per_dimension (a tuple of integers, one per spatial dimension).

source
Trixi.default_example_unstructuredMethod
default_example_unstructured()

Return the path to an example elixir that can be used to quickly see Trixi.jl in action on an UnstructuredMesh2D. This simulation is run on the example curved, unstructured mesh given in the Trixi.jl documentation regarding unstructured meshes.

source
Trixi.densityMethod
density(p::Real, equations::LatticeBoltzmannEquations2D)
+density(u, equations::LatticeBoltzmannEquations2D)

Calculate the macroscopic density from the pressure p or the particle distribution functions u.

source
Trixi.densityMethod
density(p::Real, equations::LatticeBoltzmannEquations3D)
+density(u, equations::LatticeBoltzmannEquations3D)

Calculate the macroscopic density from the pressure p or the particle distribution functions u.

source
Trixi.downloadMethod
Trixi.download(src_url, file_path)

Download a file from given src_url to given file_path if file_path is not already a file. This function just returns file_path. This is a small wrapper of Downloads.download(src_url, file_path) that avoids race conditions when multiple MPI ranks are used.

source
Trixi.dynamic_viscosityMethod
dynamic_viscosity(u, equations)

Wrapper for the dynamic viscosity that calls dynamic_viscosity(u, equations.mu, equations), which dispatches on the type of equations.mu. For constant equations.mu, i.e., equations.mu is of Real-type it is returned directly. In all other cases, equations.mu is assumed to be a function with arguments u and equations and is called with these arguments.

source
Trixi.each_dof_globalMethod
each_dof_global(mesh::DGMultiMesh, dg::DGMulti, other_args...)

Return an iterator over the indices that specify the location in relevant data structures for the degrees of freedom (DOF) in dg. In particular, not the DOFs themselves are returned.

source
Trixi.each_face_nodeMethod
each_face_node(mesh::DGMultiMesh, dg::DGMulti, other_args...)

Return an iterator over the indices that specify the location in relevant data structures for the face nodes in dg. In particular, not the face_nodes themselves are returned.

source
Trixi.each_face_node_globalMethod
each_face_node_global(mesh::DGMultiMesh, dg::DGMulti, other_args...)

Return an iterator over the indices that specify the location in relevant data structures for the face nodes in mesh. In particular, not the face nodes themselves are returned.

source
Trixi.each_quad_nodeMethod
each_quad_node(mesh::DGMultiMesh, dg::DGMulti, other_args...)

Return an iterator over the indices that specify the location in relevant data structures for the quadrature nodes in dg. In particular, not the quadrature nodes themselves are returned.

source
Trixi.each_quad_node_globalMethod
each_quad_node_global(mesh::DGMultiMesh, dg::DGMulti, other_args...)

Return an iterator over the indices that specify the location in relevant data structures for the global quadrature nodes in mesh. In particular, not the quadrature nodes themselves are returned.

source
Trixi.eachboundaryMethod
eachboundary(dg::DG, cache)

Return an iterator over the indices that specify the location in relevant data structures for the boundaries in cache. In particular, not the boundaries themselves are returned.

source
Trixi.eachcomponentMethod
eachcomponent(equations::AbstractCompressibleEulerMulticomponentEquations)

Return an iterator over the indices that specify the location in relevant data structures for the components in AbstractCompressibleEulerMulticomponentEquations. In particular, not the components themselves are returned.

source
Trixi.eachcomponentMethod
eachcomponent(equations::AbstractIdealGlmMhdMulticomponentEquations)

Return an iterator over the indices that specify the location in relevant data structures for the components in AbstractIdealGlmMhdMulticomponentEquations. In particular, not the components themselves are returned.

source
Trixi.eachdimMethod
eachdim(mesh)

Return an iterator over the indices that specify the location in relevant data structures for the dimensions in AbstractTree. In particular, not the dimensions themselves are returned.

source
Trixi.eachdirectionMethod
eachdirection(tree::AbstractTree)

Return an iterator over the indices that specify the location in relevant data structures for the directions in AbstractTree. In particular, not the directions themselves are returned.

source
Trixi.eachelementMethod
eachelement(dg::DG, cache)

Return an iterator over the indices that specify the location in relevant data structures for the elements in cache. In particular, not the elements themselves are returned.

source
Trixi.eachelementMethod
eachelement(mesh::DGMultiMesh, dg::DGMulti, other_args...)

Return an iterator over the indices that specify the location in relevant data structures for the elements in mesh. In particular, not the elements themselves are returned.

source
Trixi.eachelementMethod
eachelement(elements::ElementContainer1D)

Return an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.

source
Trixi.eachelementMethod
eachelement(elements::ElementContainer2D)

Return an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.

source
Trixi.eachelementMethod
eachelement(elements::ElementContainer3D)

Return an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.

source
Trixi.eachelementMethod
eachelement(elements::UnstructuredElementContainer2D)

Return an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.

source
Trixi.eachinterfaceMethod
eachinterface(dg::DG, cache)

Return an iterator over the indices that specify the location in relevant data structures for the interfaces in cache. In particular, not the interfaces themselves are returned.

source
Trixi.eachmortarMethod
eachmortar(dg::DG, cache)

Return an iterator over the indices that specify the location in relevant data structures for the mortars in cache. In particular, not the mortars themselves are returned.

source
Trixi.eachmpiinterfaceMethod
eachmpiinterface(dg::DG, cache)

Return an iterator over the indices that specify the location in relevant data structures for the MPI interfaces in cache. In particular, not the interfaces themselves are returned.

source
Trixi.eachmpimortarMethod
eachmpimortar(dg::DG, cache)

Return an iterator over the indices that specify the location in relevant data structures for the MPI mortars in cache. In particular, not the mortars themselves are returned.

source
Trixi.eachnodeMethod
eachnode(dg::DG)

Return an iterator over the indices that specify the location in relevant data structures for the nodes in dg. In particular, not the nodes themselves are returned.

source
Trixi.eachnodeMethod
eachnode(basis::LobattoLegendreBasis)

Return an iterator over the indices that specify the location in relevant data structures for the nodes in basis. In particular, not the nodes themselves are returned.

source
Trixi.eachnodeMethod
eachnode(analyzer::LobattoLegendreAnalyzer)

Return an iterator over the indices that specify the location in relevant data structures for the nodes in analyzer. In particular, not the nodes themselves are returned.

source
Trixi.eachvariableMethod
eachvariable(equations::AbstractEquations)

Return an iterator over the indices that specify the location in relevant data structures for the variables in equations. In particular, not the variables themselves are returned.

source
Trixi.energy_internalFunction
energy_internal(u, equations)

Return the internal energy of the conserved variables u for a given set of equations, e.g., the CompressibleEulerEquations2D.

u is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).

source
Trixi.energy_kineticFunction
energy_kinetic(u, equations)

Return the kinetic energy of the conserved variables u for a given set of equations, e.g., the CompressibleEulerEquations2D.

u is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).

source
Trixi.energy_totalFunction
energy_total(u, equations)

Return the total energy of the conserved variables u for a given set of equations, e.g., the CompressibleEulerEquations2D.

u is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).

source
Trixi.entropyFunction
entropy(u, equations)

Return the chosen entropy of the conserved variables u for a given set of equations.

u is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).

source
Trixi.entropy2consFunction
entropy2cons(w, equations)

Convert the entropy variables w based on a standard entropy to the conserved variables for a given set of equations. u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by cons2entropy.

source
Trixi.entropy_guermond_etalMethod
entropy_guermond_etal(u, equations::CompressibleEulerEquations2D)

Calculate the modified specific entropy of Guermond et al. (2019):

\[s_0 = p * \rho^{-\gamma} / (\gamma-1).\]

Note: This is not the "conventional" specific entropy $s = ln(p / \rho^\gamma)$.

  • Guermond at al. (2019) Invariant domain preserving discretization-independent schemes and convex limiting for hyperbolic systems. DOI: 10.1016/j.cma.2018.11.036
source
Trixi.equilibrium_distributionMethod
equilibrium_distribution(alpha, rho, v1, v2, v3, equations::LatticeBoltzmannEquations3D)

Calculate the local equilibrium distribution for the distribution function with index alpha and given the macroscopic state defined by rho, v1, v2, v3.

source
Trixi.equilibrium_distributionMethod
equilibrium_distribution(alpha, rho, v1, v2, equations::LatticeBoltzmannEquations2D)

Calculate the local equilibrium distribution for the distribution function with index alpha and given the macroscopic state defined by rho, v1, v2.

source
Trixi.examples_dirMethod
examples_dir()

Return the directory where the example files provided with Trixi.jl are located. If Trixi.jl is installed as a regular package (with ]add Trixi), these files are read-only and should not be modified. To find out which files are available, use, e.g., readdir:

Examples

readdir(examples_dir())
source
Trixi.fluxFunction
flux(u, orientation_or_normal, equations)

Given the conservative variables u, calculate the (physical) flux in Cartesian direction orientation::Integer or in arbitrary direction normal::AbstractVector for the corresponding set of governing equations. orientation is 1, 2, and 3 for the x-, y-, and z-directions, respectively.

source
Trixi.fluxMethod
flux(u, normal_direction::AbstractVector, equations::AbstractEquations{1})

Enables calling flux with a non-integer argument normal_direction for one-dimensional equations. Returns the value of flux(u, 1, equations) scaled by normal_direction[1].

source
Trixi.flux_centralMethod
flux_central(u_ll, u_rr, orientation_or_normal_direction, equations::AbstractEquations)

The classical central numerical flux f((u_ll) + f(u_rr)) / 2. When this flux is used as volume flux, the discretization is equivalent to the classical weak form DG method (except floating point errors).

source
Trixi.flux_chan_etalMethod

@inline function fluxchanetal(ull, urr, orientation::Integer, equations::CompressibleEulerEquationsQuasi1D)

Conservative (symmetric) part of the entropy conservative flux for quasi 1D compressible Euler equations split form. This flux is a generalization of flux_ranocha for CompressibleEulerEquations1D. Further details are available in the paper:

  • Jesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089
source
Trixi.flux_chan_etalMethod
flux_chan_etal(u_ll, u_rr, orientation,
+               equations::ShallowWaterEquationsQuasi1D)

Total energy conservative (mathematical entropy for quasi 1D shallow water equations) split form. When the bottom topography is nonzero this scheme will be well-balanced when used as a volume_flux. The surface_flux should still use, e.g., FluxPlusDissipation(flux_chan_etal, DissipationLocalLaxFriedrichs()).

Further details are available in the paper:

  • Jesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089
source
Trixi.flux_chandrashekarMethod
flux_chandrashekar(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)

Entropy conserving two-point flux by

  • Chandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations DOI: 10.4208/cicp.170712.010313a
source
Trixi.flux_chandrashekarMethod
flux_chandrashekar(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations2D)

Entropy conserving two-point flux by

  • Chandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations DOI: 10.4208/cicp.170712.010313a
source
Trixi.flux_chandrashekarMethod
flux_chandrashekar(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations3D)

Entropy conserving two-point flux by

  • Chandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations DOI: 10.4208/cicp.170712.010313a
source
Trixi.flux_chandrashekarMethod
flux_chandrashekar(u_ll, u_rr, orientation, equations::CompressibleEulerMulticomponentEquations1D)

Entropy conserving two-point flux by

  • Ayoub Gouasmi, Karthik Duraisamy (2020) "Formulation of Entropy-Stable schemes for the multicomponent compressible Euler equations" arXiv:1904.00972v3 [math.NA] 4 Feb 2020
source
Trixi.flux_chandrashekarMethod
flux_chandrashekar(u_ll, u_rr, orientation, equations::CompressibleEulerMulticomponentEquations2D)

Adaption of the entropy conserving two-point flux by

  • Ayoub Gouasmi, Karthik Duraisamy (2020) "Formulation of Entropy-Stable schemes for the multicomponent compressible Euler equations" arXiv:1904.00972v3 [math.NA] 4 Feb 2020
source
Trixi.flux_derigs_etalMethod
flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations1D)

Entropy conserving two-point flux by

  • Derigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations DOI: 10.1016/j.jcp.2018.03.002
source
Trixi.flux_derigs_etalMethod
flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations2D)

Entropy conserving two-point flux by

  • Derigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations DOI: 10.1016/j.jcp.2018.03.002
source
Trixi.flux_derigs_etalMethod
flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations3D)

Entropy conserving two-point flux by

  • Derigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations DOI: 10.1016/j.jcp.2018.03.002
source
Trixi.flux_derigs_etalMethod
flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations1D)

Entropy conserving two-point flux adapted by

  • Derigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations for multicomponent DOI: 10.1016/j.jcp.2018.03.002
source
Trixi.flux_derigs_etalMethod
flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdMulticomponentEquations2D)

Entropy conserving two-point flux adapted by

  • Derigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations for multicomponent DOI: 10.1016/j.jcp.2018.03.002
source
Trixi.flux_fjordholm_etalMethod
flux_fjordholm_etal(u_ll, u_rr, orientation,
+                    equations::ShallowWaterEquations1D)

Total energy conservative (mathematical entropy for shallow water equations). When the bottom topography is nonzero this should only be used as a surface flux otherwise the scheme will not be well-balanced. For well-balancedness in the volume flux use flux_wintermeyer_etal.

Details are available in Eq. (4.1) in the paper:

  • Ulrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042
source
Trixi.flux_fjordholm_etalMethod
flux_fjordholm_etal(u_ll, u_rr, orientation_or_normal_direction,
+                    equations::ShallowWaterEquations2D)

Total energy conservative (mathematical entropy for shallow water equations). When the bottom topography is nonzero this should only be used as a surface flux otherwise the scheme will not be well-balanced. For well-balancedness in the volume flux use flux_wintermeyer_etal.

Details are available in Eq. (4.1) in the paper:

  • Ulrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042
source
Trixi.flux_godunovMethod
flux_godunov(u_ll, u_rr, orientation_or_normal_direction,
+             equations::LinearizedEulerEquations2D)

An upwind flux for the linearized Euler equations based on diagonalization of the physical flux matrix. Given the physical flux $Au$, $A=T \Lambda T^{-1}$ with $\Lambda$ being a diagonal matrix that holds the eigenvalues of $A$, decompose $\Lambda = \Lambda^+ + \Lambda^-$ where $\Lambda^+$ and $\Lambda^-$ are diagonal matrices holding the positive and negative eigenvalues of $A$, respectively. Then for left and right states $u_L, u_R$, the numerical flux calculated by this function is given by $A^+ u_L + A^- u_R$ where $A^{\pm} = T \Lambda^{\pm} T^{-1}$.

The diagonalization of the flux matrix can be found in

source
Trixi.flux_hindenlang_gassnerMethod
flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,
+                        equations::IdealGlmMhdEquations1D)

Entropy conserving and kinetic energy preserving two-point flux of Hindenlang and Gassner (2019), extending flux_ranocha to the MHD equations.

References

  • Florian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications
  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig
  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_hindenlang_gassnerMethod
flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,
+                        equations::IdealGlmMhdEquations2D)

Entropy conserving and kinetic energy preserving two-point flux of Hindenlang and Gassner (2019), extending flux_ranocha to the MHD equations.

References

  • Florian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications
  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig
  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_hindenlang_gassnerMethod
flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,
+                        equations::IdealGlmMhdEquations3D)

Entropy conserving and kinetic energy preserving two-point flux of Hindenlang and Gassner (2019), extending flux_ranocha to the MHD equations.

References

  • Florian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications
  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig
  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_hindenlang_gassnerMethod
flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,
+                        equations::IdealGlmMhdMulticomponentEquations1D)

Adaption of the entropy conserving and kinetic energy preserving two-point flux of Hindenlang (2019), extending flux_ranocha to the MHD equations.

References

  • Florian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications
  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig
  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_hindenlang_gassnerMethod
flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,
+                        equations::IdealGlmMhdMulticomponentEquations2D)

Adaption of the entropy conserving and kinetic energy preserving two-point flux of Hindenlang (2019), extending flux_ranocha to the MHD equations.

References

  • Florian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications
  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig
  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_kennedy_gruberMethod
flux_kennedy_gruber(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)

Kinetic energy preserving two-point flux by

  • Kennedy and Gruber (2008) Reduced aliasing formulations of the convective terms within the Navier-Stokes equations for a compressible fluid DOI: 10.1016/j.jcp.2007.09.020
source
Trixi.flux_kennedy_gruberMethod
flux_kennedy_gruber(u_ll, u_rr, orientation_or_normal_direction,
+                    equations::CompressibleEulerEquations2D)

Kinetic energy preserving two-point flux by

  • Kennedy and Gruber (2008) Reduced aliasing formulations of the convective terms within the Navier-Stokes equations for a compressible fluid DOI: 10.1016/j.jcp.2007.09.020
source
Trixi.flux_kennedy_gruberMethod
flux_kennedy_gruber(u_ll, u_rr, orientation_or_normal_direction,
+                    equations::CompressibleEulerEquations3D)

Kinetic energy preserving two-point flux by

  • Kennedy and Gruber (2008) Reduced aliasing formulations of the convective terms within the Navier-Stokes equations for a compressible fluid DOI: 10.1016/j.jcp.2007.09.020
source
Trixi.flux_nonconservative_audusse_etalMethod
flux_nonconservative_audusse_etal(u_ll, u_rr, orientation::Integer,
+                                  equations::ShallowWaterEquations1D)

Non-symmetric two-point surface flux that discretizes the nonconservative (source) term. The discretization uses the hydrostatic_reconstruction_audusse_etal on the conservative variables.

This hydrostatic reconstruction ensures that the finite volume numerical fluxes remain well-balanced for discontinuous bottom topographies ShallowWaterEquations1D. Should be used together with FluxHydrostaticReconstruction and hydrostatic_reconstruction_audusse_etal in the surface flux to ensure consistency.

Further details on the hydrostatic reconstruction and its motivation can be found in

  • Emmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090
source
Trixi.flux_nonconservative_audusse_etalMethod
flux_nonconservative_audusse_etal(u_ll, u_rr, orientation::Integer,
+                                  equations::ShallowWaterEquations2D)
+flux_nonconservative_audusse_etal(u_ll, u_rr,
+                                  normal_direction_ll     ::AbstractVector,
+                                  normal_direction_average::AbstractVector,
+                                  equations::ShallowWaterEquations2D)

Non-symmetric two-point surface flux that discretizes the nonconservative (source) term. The discretization uses the hydrostatic_reconstruction_audusse_etal on the conservative variables.

This hydrostatic reconstruction ensures that the finite volume numerical fluxes remain well-balanced for discontinuous bottom topographies ShallowWaterEquations2D. Should be used together with FluxHydrostaticReconstruction and hydrostatic_reconstruction_audusse_etal in the surface flux to ensure consistency.

Further details for the hydrostatic reconstruction and its motivation can be found in

  • Emmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090
source
Trixi.flux_nonconservative_chan_etalMethod
flux_nonconservative_chan_etal(u_ll, u_rr, orientation::Integer,
+                               equations::CompressibleEulerEquationsQuasi1D)
+flux_nonconservative_chan_etal(u_ll, u_rr, normal_direction, 
+                               equations::CompressibleEulerEquationsQuasi1D)
+flux_nonconservative_chan_etal(u_ll, u_rr, normal_ll, normal_rr,
+                               equations::CompressibleEulerEquationsQuasi1D)

Non-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the pressure CompressibleEulerEquationsQuasi1D and the nozzle width.

Further details are available in the paper:

  • Jesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089
source
Trixi.flux_nonconservative_chan_etalMethod
flux_nonconservative_chan_etal(u_ll, u_rr, orientation::Integer,
+                               equations::ShallowWaterEquationsQuasi1D)
+flux_nonconservative_chan_etal(u_ll, u_rr, normal_direction::AbstractVector,
+                               equations::ShallowWaterEquationsQuasi1D)    
+flux_nonconservative_chan_etal(u_ll, u_rr, 
+                               normal_ll::AbstractVector, normal_rr::AbstractVector,
+                               equations::ShallowWaterEquationsQuasi1D)

Non-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the bottom topography ShallowWaterEquationsQuasi1D and the channel width.

Further details are available in the paper:

  • Jesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089
source
Trixi.flux_nonconservative_fjordholm_etalMethod
flux_nonconservative_fjordholm_etal(u_ll, u_rr, orientation::Integer,
+                                    equations::ShallowWaterEquations1D)

Non-symmetric two-point surface flux discretizing the nonconservative (source) term of that contains the gradient of the bottom topography ShallowWaterEquations1D.

This flux can be used together with flux_fjordholm_etal at interfaces to ensure entropy conservation and well-balancedness.

Further details for the original finite volume formulation are available in

  • Ulrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042

and for curvilinear 2D case in the paper:

  • Niklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036
source
Trixi.flux_nonconservative_fjordholm_etalMethod
flux_nonconservative_fjordholm_etal(u_ll, u_rr, orientation::Integer,
+                                    equations::ShallowWaterEquations2D)
+flux_nonconservative_fjordholm_etal(u_ll, u_rr,
+                                    normal_direction_ll     ::AbstractVector,
+                                    normal_direction_average::AbstractVector,
+                                    equations::ShallowWaterEquations2D)

Non-symmetric two-point surface flux discretizing the nonconservative (source) term of that contains the gradient of the bottom topography ShallowWaterEquations2D.

This flux can be used together with flux_fjordholm_etal at interfaces to ensure entropy conservation and well-balancedness.

Further details for the original finite volume formulation are available in

  • Ulrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042

and for curvilinear 2D case in the paper:

  • Niklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036
source
Trixi.flux_nonconservative_powellMethod
flux_nonconservative_powell(u_ll, u_rr, orientation::Integer,
+                            equations::IdealGlmMhdEquations2D)
+flux_nonconservative_powell(u_ll, u_rr,
+                            normal_direction_ll     ::AbstractVector,
+                            normal_direction_average::AbstractVector,
+                            equations::IdealGlmMhdEquations2D)

Non-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdEquations2D.

On curvilinear meshes, this nonconservative flux depends on both the contravariant vector (normal direction) at the current node and the averaged one. This is different from numerical fluxes used to discretize conservative terms.

References

  • Marvin Bohm, Andrew R.Winters, Gregor J. Gassner, Dominik Derigs, Florian Hindenlang, Joachim Saur An entropy stable nodal discontinuous Galerkin method for the resistive MHD equations. Part I: Theory and numerical verification DOI: 10.1016/j.jcp.2018.06.027
source
Trixi.flux_nonconservative_powellMethod
flux_nonconservative_powell(u_ll, u_rr, orientation::Integer,
+                            equations::IdealGlmMhdEquations3D)
+flux_nonconservative_powell(u_ll, u_rr,
+                            normal_direction_ll     ::AbstractVector,
+                            normal_direction_average::AbstractVector,
+                            equations::IdealGlmMhdEquations3D)

Non-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdEquations3D.

On curvilinear meshes, this nonconservative flux depends on both the contravariant vector (normal direction) at the current node and the averaged one. This is different from numerical fluxes used to discretize conservative terms.

References

  • Marvin Bohm, Andrew R.Winters, Gregor J. Gassner, Dominik Derigs, Florian Hindenlang, Joachim Saur An entropy stable nodal discontinuous Galerkin method for the resistive MHD equations. Part I: Theory and numerical verification DOI: 10.1016/j.jcp.2018.06.027
source
Trixi.flux_nonconservative_powellMethod
flux_nonconservative_powell(u_ll, u_rr, orientation::Integer,
+                            equations::IdealGlmMhdMulticomponentEquations2D)

Non-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdMulticomponentEquations2D.

References

  • Marvin Bohm, Andrew R.Winters, Gregor J. Gassner, Dominik Derigs, Florian Hindenlang, Joachim Saur An entropy stable nodal discontinuous Galerkin method for the resistive MHD equations. Part I: Theory and numerical verification DOI: 10.1016/j.jcp.2018.06.027
source
Trixi.flux_nonconservative_powell_local_symmetricMethod
flux_nonconservative_powell_local_symmetric(u_ll, orientation::Integer,
+                                            equations::IdealGlmMhdEquations2D,
+                                            nonconservative_type::NonConservativeSymmetric,
+                                            nonconservative_term::Integer)

Symmetric part of the Powell and GLM non-conservative terms. Needed for the calculation of the non-conservative staggered "fluxes" for subcell limiting. See, e.g.,

  • Rueda-Ramírez, Gassner (2023). A Flux-Differencing Formula for Split-Form Summation By Parts Discretizations of Non-Conservative Systems. https://arxiv.org/pdf/2211.14009.pdf.

This function is used to compute the subcell fluxes in dg2dsubcell_limiters.jl.

source
Trixi.flux_nonconservative_powell_local_symmetricMethod
flux_nonconservative_powell_local_symmetric(u_ll, u_rr,
+                                            orientation::Integer,
+                                            equations::IdealGlmMhdEquations2D)

Non-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdEquations2D.

This implementation uses a non-conservative term that can be written as the product of local and symmetric parts. It is equivalent to the non-conservative flux of Bohm et al. (flux_nonconservative_powell) for conforming meshes but it yields different results on non-conforming meshes(!).

The two other flux functions with the same name return either the local or symmetric portion of the non-conservative flux based on the type of the nonconservativetype argument, employing multiple dispatch. They are used to compute the subcell fluxes in dg2dsubcelllimiters.jl.

References

  • Rueda-Ramírez, Gassner (2023). A Flux-Differencing Formula for Split-Form Summation By Parts Discretizations of Non-Conservative Systems. https://arxiv.org/pdf/2211.14009.pdf.
source
Trixi.flux_nonconservative_powell_local_symmetricMethod
flux_nonconservative_powell_local_symmetric(u_ll, orientation::Integer,
+                                            equations::IdealGlmMhdEquations2D,
+                                            nonconservative_type::NonConservativeLocal,
+                                            nonconservative_term::Integer)

Local part of the Powell and GLM non-conservative terms. Needed for the calculation of the non-conservative staggered "fluxes" for subcell limiting. See, e.g.,

  • Rueda-Ramírez, Gassner (2023). A Flux-Differencing Formula for Split-Form Summation By Parts Discretizations of Non-Conservative Systems. https://arxiv.org/pdf/2211.14009.pdf.

This function is used to compute the subcell fluxes in dg2dsubcell_limiters.jl.

source
Trixi.flux_nonconservative_wintermeyer_etalMethod
flux_nonconservative_wintermeyer_etal(u_ll, u_rr, orientation::Integer,
+                                      equations::ShallowWaterEquations1D)

Non-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the bottom topography ShallowWaterEquations1D.

Gives entropy conservation and well-balancedness on both the volume and surface when combined with flux_wintermeyer_etal.

Further details are available in the papers:

  • Niklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036
  • Patrick Ersing, Andrew R. Winters (2023) An entropy stable discontinuous Galerkin method for the two-layer shallow water equations on curvilinear meshes DOI: 10.48550/arXiv.2306.12699
source
Trixi.flux_nonconservative_wintermeyer_etalMethod
flux_nonconservative_wintermeyer_etal(u_ll, u_rr, orientation::Integer,
+                                      equations::ShallowWaterEquations2D)
+flux_nonconservative_wintermeyer_etal(u_ll, u_rr,
+                                      normal_direction_ll     ::AbstractVector,
+                                      normal_direction_average::AbstractVector,
+                                      equations::ShallowWaterEquations2D)

Non-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the bottom topography ShallowWaterEquations2D.

For the surface_flux either flux_wintermeyer_etal or flux_fjordholm_etal can be used to ensure well-balancedness and entropy conservation.

Further details are available in the papers:

  • Niklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036
  • Patrick Ersing, Andrew R. Winters (2023) An entropy stable discontinuous Galerkin method for the two-layer shallow water equations on curvilinear meshes DOI: 10.48550/arXiv.2306.12699
source
Trixi.flux_ranochaMethod
flux_ranocha(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations1D)

Entropy conserving and kinetic energy preserving two-point flux by

  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig

See also

  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_ranochaMethod
flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,
+             equations::CompressibleEulerEquations2D)

Entropy conserving and kinetic energy preserving two-point flux by

  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig

See also

  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_ranochaMethod
flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,
+             equations::CompressibleEulerEquations3D)

Entropy conserving and kinetic energy preserving two-point flux by

  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig

See also

  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_ranochaMethod
flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,
+             equations::CompressibleEulerMulticomponentEquations1D)

Adaption of the entropy conserving and kinetic energy preserving two-point flux by

  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig

See also

  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_ranochaMethod
flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,
+             equations::CompressibleEulerMulticomponentEquations2D)

Adaption of the entropy conserving and kinetic energy preserving two-point flux by

  • Hendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig

See also

  • Hendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018
source
Trixi.flux_shima_etalMethod
flux_shima_etal(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)

This flux is is a modification of the original kinetic energy preserving two-point flux by

  • Yuichi Kuya, Kosuke Totani and Soshi Kawai (2018) Kinetic energy and entropy preserving schemes for compressible flows by split convective forms DOI: 10.1016/j.jcp.2018.08.058

The modification is in the energy flux to guarantee pressure equilibrium and was developed by

  • Nao Shima, Yuichi Kuya, Yoshiharu Tamaki, Soshi Kawai (JCP 2020) Preventing spurious pressure oscillations in split convective form discretizations for compressible flows DOI: 10.1016/j.jcp.2020.110060
source
Trixi.flux_shima_etalMethod
flux_shima_etal(u_ll, u_rr, orientation_or_normal_direction,
+                equations::CompressibleEulerEquations2D)

This flux is is a modification of the original kinetic energy preserving two-point flux by

  • Yuichi Kuya, Kosuke Totani and Soshi Kawai (2018) Kinetic energy and entropy preserving schemes for compressible flows by split convective forms DOI: 10.1016/j.jcp.2018.08.058

The modification is in the energy flux to guarantee pressure equilibrium and was developed by

  • Nao Shima, Yuichi Kuya, Yoshiharu Tamaki, Soshi Kawai (JCP 2020) Preventing spurious pressure oscillations in split convective form discretizations for compressible flows DOI: 10.1016/j.jcp.2020.110060
source
Trixi.flux_shima_etalMethod
flux_shima_etal(u_ll, u_rr, orientation_or_normal_direction,
+                equations::CompressibleEulerEquations3D)

This flux is is a modification of the original kinetic energy preserving two-point flux by

  • Yuichi Kuya, Kosuke Totani and Soshi Kawai (2018) Kinetic energy and entropy preserving schemes for compressible flows by split convective forms DOI: 10.1016/j.jcp.2018.08.058

The modification is in the energy flux to guarantee pressure equilibrium and was developed by

  • Nao Shima, Yuichi Kuya, Yoshiharu Tamaki, Soshi Kawai (JCP 2020) Preventing spurious pressure oscillations in split convective form discretizations for compressible flows DOI: 10.1016/j.jcp.2020.110060
source
Trixi.flux_wintermeyer_etalMethod
flux_wintermeyer_etal(u_ll, u_rr, orientation,
+                      equations::ShallowWaterEquations1D)

Total energy conservative (mathematical entropy for shallow water equations) split form. When the bottom topography is nonzero this scheme will be well-balanced when used as a volume_flux. For the surface_flux either flux_wintermeyer_etal or flux_fjordholm_etal can be used to ensure well-balancedness and entropy conservation.

Further details are available in Theorem 1 of the paper:

  • Niklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036
source
Trixi.flux_wintermeyer_etalMethod
flux_wintermeyer_etal(u_ll, u_rr, orientation_or_normal_direction,
+                      equations::ShallowWaterEquations2D)

Total energy conservative (mathematical entropy for shallow water equations) split form. When the bottom topography is nonzero this scheme will be well-balanced when used as a volume_flux. For the surface_flux either flux_wintermeyer_etal or flux_fjordholm_etal can be used to ensure well-balancedness and entropy conservation.

Further details are available in Theorem 1 of the paper:

  • Niklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036
source
Trixi.flux_winters_etalMethod
flux_winters_etal(u_ll, u_rr, orientation_or_normal_direction,
+                  equations::PolytropicEulerEquations2D)

Entropy conserving two-point flux for isothermal or polytropic gases. Requires a special weighted Stolarsky mean for the evaluation of the density denoted here as stolarsky_mean. Note, for isothermal gases where gamma = 1 this stolarsky_mean becomes the ln_mean.

For details see Section 3.2 of the following reference

  • Andrew R. Winters, Christof Czernik, Moritz B. Schily & Gregor J. Gassner (2020) Entropy stable numerical approximations for the isothermal and polytropic Euler equations DOI: 10.1007/s10543-019-00789-w
source
Trixi.gauss_nodes_weightsMethod
gauss_nodes_weights(n_nodes::Integer)

Computes nodes $x_j$ and weights $w_j$ for the Gauss-Legendre quadrature. This implements algorithm 23 "LegendreGaussNodesAndWeights" from the book

  • David A. Kopriva, (2009). Implementing spectral methods for partial differential equations: Algorithms for scientists and engineers. DOI:10.1007/978-90-481-2261-5
source
Trixi.get_boundary_outer_stateMethod
get_boundary_outer_state(boundary_condition::BoundaryConditionDirichlet,
+                         cache, t, equations, dg, indices...)

For subcell limiting, the calculation of local bounds for non-periodic domains require the boundary outer state. This function returns the boundary value at time t and for node with spatial indices indices.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.get_nameMethod
get_name(x)

Returns a name of x ready for pretty printing. By default, return string(y) if x isa Val{y} and return string(x) otherwise.

Examples

julia> Trixi.get_name("test")
+"test"
+
+julia> Trixi.get_name(Val(:test))
+"test"
source
Trixi.get_nameMethod
get_name(equations::AbstractEquations)

Returns the canonical, human-readable name for the given system of equations.

Examples

julia> Trixi.get_name(CompressibleEulerEquations1D(1.4))
+"CompressibleEulerEquations1D"
source
Trixi.getmeshMethod
getmesh(pd::AbstractPlotData)

Extract grid lines from pd for plotting with Plots.plot.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.global_mean_varsMethod
global_mean_vars(equations::AcousticPerturbationEquations2D)

Returns the global mean variables stored in equations. This makes it easier to define flexible initial conditions for problems with constant mean flow.

source
Trixi.have_nonconservative_termsMethod
have_nonconservative_terms(equations)

Trait function determining whether equations represent a conservation law with or without nonconservative terms. Classical conservation laws such as the CompressibleEulerEquations2D do not have nonconservative terms. The ShallowWaterEquations2D with non-constant bottom topography are an example of equations with nonconservative terms. The return value will be True() or False() to allow dispatching on the return type.

source
Trixi.hydrostatic_reconstruction_audusse_etalMethod
hydrostatic_reconstruction_audusse_etal(u_ll, u_rr, orientation::Integer,
+                                        equations::ShallowWaterEquations1D)

A particular type of hydrostatic reconstruction on the water height to guarantee well-balancedness for a general bottom topography ShallowWaterEquations1D. The reconstructed solution states u_ll_star and u_rr_star variables are then used to evaluate the surface numerical flux at the interface. Use in combination with the generic numerical flux routine FluxHydrostaticReconstruction.

Further details on this hydrostatic reconstruction and its motivation can be found in

  • Emmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090
source
Trixi.hydrostatic_reconstruction_audusse_etalMethod
hydrostatic_reconstruction_audusse_etal(u_ll, u_rr, orientation_or_normal_direction,
+                                        equations::ShallowWaterEquations2D)

A particular type of hydrostatic reconstruction on the water height to guarantee well-balancedness for a general bottom topography ShallowWaterEquations2D. The reconstructed solution states u_ll_star and u_rr_star variables are used to evaluate the surface numerical flux at the interface. Use in combination with the generic numerical flux routine FluxHydrostaticReconstruction.

Further details for the hydrostatic reconstruction and its motivation can be found in

  • Emmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090
source
Trixi.init_mpiMethod
init_mpi()

Initialize MPI by calling MPI.Initialized(). The function will check if MPI is already initialized and if yes, do nothing, thus it is safe to call it multiple times.

source
Trixi.init_p4estMethod
init_p4est()

Initialize p4est by calling p4est_init and setting the log level to SC_LP_ERROR. This function will check if p4est is already initialized and if yes, do nothing, thus it is safe to call it multiple times.

source
Trixi.init_t8codeMethod
init_t8code()

Initialize t8code by calling sc_init, p4est_init, and t8_init while setting the log level to SC_LP_ERROR. This function will check if t8code is already initialized and if yes, do nothing, thus it is safe to call it multiple times.

source
Trixi.initial_condition_constantMethod
initial_condition_constant(x, t, equations::AcousticPerturbationEquations2D)

A constant initial condition where the state variables are zero and the mean flow is constant. Uses the global mean values from equations.

source
Trixi.initial_condition_density_waveMethod
initial_condition_density_wave(x, t, equations::CompressibleEulerEquations1D)

A sine wave in the density with constant velocity and pressure; reduces the compressible Euler equations to the linear advection equations. This setup is the test case for stability of EC fluxes from paper

  • Gregor J. Gassner, Magnus Svärd, Florian J. Hindenlang (2020) Stability issues of entropy-stable and/or split-form high-order schemes arXiv: 2007.09026

with the following parameters

  • domain [-1, 1]
  • mesh = 4x4
  • polydeg = 5
source
Trixi.initial_condition_density_waveMethod
initial_condition_density_wave(x, t, equations::CompressibleEulerEquations2D)

A sine wave in the density with constant velocity and pressure; reduces the compressible Euler equations to the linear advection equations. This setup is the test case for stability of EC fluxes from paper

  • Gregor J. Gassner, Magnus Svärd, Florian J. Hindenlang (2020) Stability issues of entropy-stable and/or split-form high-order schemes arXiv: 2007.09026

with the following parameters

  • domain [-1, 1]
  • mesh = 4x4
  • polydeg = 5
source
Trixi.initial_condition_eoc_test_coupled_euler_gravityMethod
initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::CompressibleEulerEquations1D)

One dimensional variant of the setup used for convergence tests of the Euler equations with self-gravity from

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593
Note

There is no additional source term necessary for the manufactured solution in one spatial dimension. Thus, source_terms_eoc_test_coupled_euler_gravity is not present there.

source
Trixi.initial_condition_eoc_test_coupled_euler_gravityMethod
initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::CompressibleEulerEquations2D)

Setup used for convergence tests of the Euler equations with self-gravity used in

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593

in combination with source_terms_eoc_test_coupled_euler_gravity or source_terms_eoc_test_euler.

source
Trixi.initial_condition_eoc_test_coupled_euler_gravityMethod
initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::CompressibleEulerEquations3D)

Setup used for convergence tests of the Euler equations with self-gravity used in

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593

in combination with source_terms_eoc_test_coupled_euler_gravity or source_terms_eoc_test_euler.

source
Trixi.initial_condition_gaussMethod
initial_condition_gauss(x, t, equations::AcousticPerturbationEquations2D)

A Gaussian pulse in a constant mean flow. Uses the global mean values from equations.

source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations1D)

A weak blast wave taken from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations2D)

A weak blast wave taken from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations3D)

A weak blast wave taken from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerMulticomponentEquations1D)

A for multicomponent adapted weak blast wave adapted to multicomponent and taken from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerMulticomponentEquations2D)

A for multicomponent adapted weak blast wave taken from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdEquations1D)

A weak blast wave adapted from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdEquations2D)

A weak blast wave adapted from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdEquations3D)

A weak blast wave adapted from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdMulticomponentEquations1D)

A weak blast wave adapted from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdMulticomponentEquations2D)

A weak blast wave adapted from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::PolytropicEulerEquations2D)

A weak blast wave adapted from

  • Sebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044
source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::ShallowWaterEquations1D)

A weak blast wave discontinuity useful for testing, e.g., total energy conservation. Note for the shallow water equations to the total energy acts as a mathematical entropy function.

source
Trixi.initial_condition_weak_blast_waveMethod
initial_condition_weak_blast_wave(x, t, equations::ShallowWaterEquations2D)

A weak blast wave discontinuity useful for testing, e.g., total energy conservation. Note for the shallow water equations to the total energy acts as a mathematical entropy function.

source
Trixi.integrate_via_indicesMethod
integrate_via_indices(func, u_ode, semi::AbstractSemidiscretization, args...; normalize=true)

Call func(u, i..., element, equations, solver, args...) for all nodal indices i..., element and integrate the result using a quadrature associated with the semidiscretization semi.

If normalize is true, the result is divided by the total volume of the computational domain.

source
Trixi.inv_ln_meanMethod
inv_ln_mean(x, y)

Compute the inverse 1 / ln_mean(x, y) of the logarithmic mean ln_mean.

This function may be used to increase performance where the inverse of the logarithmic mean is needed, by replacing a (slow) division by a (fast) multiplication.

source
Trixi.jacobian_ad_forwardMethod
jacobian_ad_forward(semi::AbstractSemidiscretization;
+                    t0=zero(real(semi)),
+                    u0_ode=compute_coefficients(t0, semi))

Uses the right-hand side operator of the semidiscretization semi and forward mode automatic differentiation to compute the Jacobian J of the semidiscretization semi at state u0_ode.

source
Trixi.jacobian_fdMethod
jacobian_fd(semi::AbstractSemidiscretization;
+            t0=zero(real(semi)),
+            u0_ode=compute_coefficients(t0, semi))

Uses the right-hand side operator of the semidiscretization semi and simple second order finite difference to compute the Jacobian J of the semidiscretization semi at state u0_ode.

source
Trixi.lagrange_interpolating_polynomialsMethod
lagrange_interpolating_polynomials(x, nodes, wbary)

Calculate Lagrange polynomials for a given node distribution with associated barycentric weights wbary at a given point x on the reference interval $[-1, 1]$.

This returns all $l_j(x)$, i.e., the Lagrange polynomials for each node $x_j$. Thus, to obtain the interpolating polynomial $p(x)$ at $x$, one has to multiply the Lagrange polynomials with the nodal values $u_j$ and sum them up: $p(x) = \sum_{j=1}^{n} u_j l_j(x)$.

For details, see e.g. Section 2 of

source
Trixi.legendre_polynomial_and_derivativeMethod
legendre_polynomial_and_derivative(N::Int, x::Real)

Computes the Legendre polynomial of degree N and its derivative at x. This implements algorithm 22 "LegendrePolynomialAndDerivative" from the book

  • David A. Kopriva, (2009). Implementing spectral methods for partial differential equations: Algorithms for scientists and engineers. DOI:10.1007/978-90-481-2261-5
source
Trixi.linear_structureMethod
linear_structure(semi::AbstractSemidiscretization;
+                 t0=zero(real(semi)))

Wraps the right-hand side operator of the semidiscretization semi at time t0 as an affine-linear operator given by a linear operator A and a vector b.

source
Trixi.ln_meanMethod
ln_mean(x, y)

Compute the logarithmic mean

ln_mean(x, y) = (y - x) / (log(y) - log(x)) = (y - x) / log(y / x)

Problem: The formula above has a removable singularity at x == y. Thus, some care must be taken to implement it correctly without problems or loss of accuracy when x ≈ y. Here, we use the approach proposed by Ismail and Roe (2009). Set ξ = y / x. Then, we have

(y - x) / log(y / x) = (x + y) / log(ξ) * (ξ - 1) / (ξ + 1)

Set f = (ξ - 1) / (ξ + 1) = (y - x) / (x + y). Then, we use the expansion

log(ξ) = 2 * f * (1 + f^2 / 3 + f^4 / 5 + f^6 / 7) + O(ξ^9)

Inserting the first few terms of this expansion yields

(y - x) / log(ξ) ≈ (x + y) * f / (2 * f * (1 + f^2 / 3 + f^4 / 5 + f^6 / 7))
+                 = (x + y) / (2 + 2/3 * f^2 + 2/5 * f^4 + 2/7 * f^6)

Since divisions are usually more expensive on modern hardware than multiplications (Agner Fog), we try to avoid computing two divisions. Thus, we use

f^2 = (y - x)^2 / (x + y)^2
+    = (x * (x - 2 * y) + y * y) / (x * (x + 2 * y) + y * y)

Given ε = 1.0e-4, we use the following algorithm.

if f^2 < ε
+  # use the expansion above
+else
+  # use the direct formula (y - x) / log(y / x)
+end

References

source
Trixi.load_adaptive_time_integrator!Method
load_adaptive_time_integrator!(integrator, restart_file::AbstractString)

Load the context information for time integrators with error-based step size control saved in a restart_file.

source
Trixi.load_dtMethod
load_dt(restart_file::AbstractString)

Load the time step size (dt in OrdinaryDiffEq.jl) saved in a restart_file.

source
Trixi.load_meshMethod
load_mesh(restart_file::AbstractString; n_cells_max)

Load the mesh from the restart_file.

source
Trixi.load_timeMethod
load_time(restart_file::AbstractString)

Load the time saved in a restart_file.

source
Trixi.load_timestep!Method
load_timestep!(integrator, restart_file::AbstractString)

Load the time step number saved in a restart_file and assign it to both the time step number and and the number of accepted steps (iter and stats.naccept in OrdinaryDiffEq.jl, respectively) in integrator.

source
Trixi.load_timestepMethod
load_timestep(restart_file::AbstractString)

Load the time step number (iter in OrdinaryDiffEq.jl) saved in a restart_file.

source
Trixi.maxMethod
max(x, y, ...)

Return the maximum of the arguments. See also the maximum function to take the maximum element from a collection.

This version in Trixi.jl is semantically equivalent to Base.max but may be implemented differently. In particular, it may avoid potentially expensive checks necessary in the presence of NaNs (or signed zeros).

Examples

julia> max(2, 5, 1)
+5
source
Trixi.max_abs_speed_naiveFunction
max_abs_speed_naive(u_ll, u_rr, orientation::Integer,   equations)
+max_abs_speed_naive(u_ll, u_rr, normal_direction::AbstractVector, equations)

Simple and fast estimate of the maximal wave speed of the Riemann problem with left and right states u_ll, u_rr, based only on the local wave speeds associated to u_ll and u_rr.

For non-integer arguments normal_direction in one dimension, max_abs_speed_naive returns abs(normal_direction[1]) * max_abs_speed_naive(u_ll, u_rr, 1, equations).

source
Trixi.minMethod
min(x, y, ...)

Return the minimum of the arguments. See also the minimum function to take the minimum element from a collection.

This version in Trixi.jl is semantically equivalent to Base.min but may be implemented differently. In particular, it may avoid potentially expensive checks necessary in the presence of NaNs (or signed zeros).

Examples

julia> min(2, 5, 1)
+1
source
Trixi.min_max_speed_davisFunction
min_max_speed_davis(u_ll, u_rr, orientation::Integer, equations)
+min_max_speed_davis(u_ll, u_rr, normal_direction::AbstractVector, equations)

Simple and fast estimates of the minimal and maximal wave speed of the Riemann problem with left and right states u_ll, u_rr, usually based only on the local wave speeds associated to u_ll and u_rr.

See eq. (10.38) from

  • Eleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction DOI: 10.1007/b79761

See also FluxHLL, min_max_speed_naive, min_max_speed_einfeldt.

source
Trixi.min_max_speed_einfeldtFunction
min_max_speed_einfeldt(u_ll, u_rr, orientation::Integer, equations)
+min_max_speed_einfeldt(u_ll, u_rr, normal_direction::AbstractVector, equations)

More advanced mininmal and maximal wave speed computation based on

originally developed for the compressible Euler equations. A compact representation can be found in this lecture notes, eq. (9.28).

See also FluxHLL, min_max_speed_naive, min_max_speed_davis.

source
Trixi.min_max_speed_einfeldtMethod
min_max_speed_einfeldt(u_ll, u_rr, normal_direction, equations::CompressibleEulerEquations2D)

Computes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.

source
Trixi.min_max_speed_einfeldtMethod
min_max_speed_einfeldt(u_ll, u_rr, normal_direction, equations::CompressibleEulerEquations3D)

Computes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.

source
Trixi.min_max_speed_einfeldtMethod
min_max_speed_einfeldt(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)

Computes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.

Original publication:

Compactly summarized:

  • Siddhartha Mishra, Ulrik Skre Fjordholm and Rémi Abgrall Numerical methods for conservation laws and related equations. Link
source
Trixi.min_max_speed_einfeldtMethod
min_max_speed_einfeldt(u_ll, u_rr, orientation, equations::CompressibleEulerEquations2D)

Computes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.

source
Trixi.min_max_speed_einfeldtMethod
min_max_speed_einfeldt(u_ll, u_rr, orientation, equations::CompressibleEulerEquations3D)

Computes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.

source
Trixi.min_max_speed_naiveFunction
min_max_speed_naive(u_ll, u_rr, orientation::Integer, equations)
+min_max_speed_naive(u_ll, u_rr, normal_direction::AbstractVector, equations)

Simple and fast estimate(!) of the minimal and maximal wave speed of the Riemann problem with left and right states u_ll, u_rr, usually based only on the local wave speeds associated to u_ll and u_rr. Slightly more diffusive than min_max_speed_davis.

  • Amiram Harten, Peter D. Lax, Bram van Leer (1983) On Upstream Differencing and Godunov-Type Schemes for Hyperbolic Conservation Laws DOI: 10.1137/1025002

See eq. (10.37) from

  • Eleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction DOI: 10.1007/b79761

See also FluxHLL, min_max_speed_davis, min_max_speed_einfeldt.

source
Trixi.modify_dt_for_tstops!Method
modify_dt_for_tstops!(integrator::PairedExplicitRK)

Modify the time-step size to match the time stops specified in integrator.opts.tstops. To avoid adding OrdinaryDiffEq to Trixi's dependencies, this routine is a copy of https://github.com/SciML/OrdinaryDiffEq.jl/blob/d76335281c540ee5a6d1bd8bb634713e004f62ee/src/integrators/integrator_utils.jl#L38-L54

source
Trixi.modify_dt_for_tstops!Method
modify_dt_for_tstops!(integrator::SimpleIntegratorSSP)

Modify the time-step size to match the time stops specified in integrator.opts.tstops. To avoid adding OrdinaryDiffEq to Trixi's dependencies, this routine is a copy of https://github.com/SciML/OrdinaryDiffEq.jl/blob/d76335281c540ee5a6d1bd8bb634713e004f62ee/src/integrators/integrator_utils.jl#L38-L54

source
Trixi.multiply_dimensionwiseMethod
multiply_dimensionwise(matrix::AbstractMatrix, data_in::AbstractArray{<:Any, NDIMS+1})

Multiply the array data_in by matrix in each coordinate direction, where data_in is assumed to have the first coordinate for the number of variables and the remaining coordinates are multiplied by matrix.

source
Trixi.n_nonconservative_termsFunction
n_nonconservative_terms(equations)

Number of nonconservative terms in the form local * symmetric for a particular equation. This function needs to be specialized only if equations with nonconservative terms are combined with certain solvers (e.g., subcell limiting).

source
Trixi.ndofsMethod
ndofs(semi::AbstractSemidiscretization)

Return the number of degrees of freedom associated with each scalar variable.

source
Trixi.ndofsglobalMethod
ndofsglobal(semi::SemidiscretizationCoupled)

Return the global number of degrees of freedom associated with each scalar variable across all MPI ranks, and summed up over all coupled systems. This is the same as ndofs for simulations running in serial or parallelized via threads. It will in general be different for simulations running in parallel with MPI.

source
Trixi.ndofsglobalMethod
ndofsglobal(semi::AbstractSemidiscretization)

Return the global number of degrees of freedom associated with each scalar variable across all MPI ranks. This is the same as ndofs for simulations running in serial or parallelized via threads. It will in general be different for simulations running in parallel with MPI.

source
Trixi.negative_partMethod
negative_part(x)

Return x if x is negative, else zero. In other words, return (x - abs(x)) / 2 for real numbers x.

source
Trixi.ode_default_optionsMethod
ode_default_options()

Return the default options for OrdinaryDiffEq's solve. Pass ode_default_options()... to solve to only return the solution at the final time and enable MPI aware error-based step size control, whenever MPI is used. For example, use solve(ode, alg; ode_default_options()...).

source
Trixi.ode_normMethod
ode_norm(u, t)

Implementation of the weighted L2 norm of Hairer and Wanner used for error-based step size control in OrdinaryDiffEq.jl. This function is aware of MPI and uses global MPI communication when running in parallel.

You must pass this function as a keyword argument internalnorm=ode_norm to OrdinaryDiffEq.jl's solve when using error-based step size control with MPI parallel execution of Trixi.jl.

See the "Advanced Adaptive Stepsize Control" section of the documentation.

source
Trixi.ode_unstable_checkMethod
ode_unstable_check(dt, u, semi, t)

Implementation of the basic check for instability used in OrdinaryDiffEq.jl. Instead of checking something like any(isnan, u), this function just checks isnan(dt). This helps when using MPI parallelization, since no additional global communication is required and all ranks will return the same result.

You should pass this function as a keyword argument unstable_check=ode_unstable_check to OrdinaryDiffEq.jl's solve when using error-based step size control with MPI parallel execution of Trixi.jl.

See the "Miscellaneous" section of the documentation.

source
Trixi.partition!Method
Trixi.partition!(mesh::T8codeMesh)

Partition a T8codeMesh in order to redistribute elements evenly among MPI ranks.

Arguments

  • mesh::T8codeMesh: Initialized mesh object.
source
Trixi.partition!Method
partition!(mesh::ParallelTreeMesh, allow_coarsening=true)

Partition mesh using a static domain decomposition algorithm based on leaf cell count and tree structure. If allow_coarsening is true, the algorithm will keep leaf cells together on one rank when needed for local coarsening (i.e. when all children of a cell are leaves).

source
Trixi.positive_partMethod
positive_part(x)

Return x if x is positive, else zero. In other words, return (x + abs(x)) / 2 for real numbers x.

source
Trixi.pressureMethod
pressure(rho::Real, equations::LatticeBoltzmannEquations2D)
+pressure(u, equations::LatticeBoltzmannEquations2D)

Calculate the macroscopic pressure from the density rho or the particle distribution functions u.

source
Trixi.pressureMethod
pressure(rho::Real, equations::LatticeBoltzmannEquations3D)
+pressure(u, equations::LatticeBoltzmannEquations3D)

Calculate the macroscopic pressure from the density rho or the particle distribution functions u.

source
Trixi.prim2consFunction
prim2cons(u, equations)

Convert the primitive variables u to the conserved variables for a given set of equations. u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by cons2prim.

source
Trixi.rotate_from_xFunction
rotate_from_x(u, normal, equations)

Apply the rotation that maps the x-axis onto normal to the convservative variables u. This is used by FluxRotated to calculate the numerical flux of rotationally invariant equations in arbitrary normal directions.

See also: rotate_to_x

source
Trixi.rotate_to_xFunction
rotate_to_x(u, normal, equations)

Apply the rotation that maps normal onto the x-axis to the convservative variables u. This is used by FluxRotated to calculate the numerical flux of rotationally invariant equations in arbitrary normal directions.

See also: rotate_from_x

source
Trixi.save_plotMethod
save_plot(plot_data, variable_names;
+          show_mesh=true, plot_arguments=Dict{Symbol,Any}(),
+          time=nothing, timestep=nothing)

Visualize the plot data object provided in plot_data and save result as a PNG file in the out directory, plotting only the variables in variable_names and, optionally, the mesh (if show_mesh is true). Additionally, plot_arguments will be unpacked and passed as keyword arguments to the Plots.plot command.

The timestep is used in the filename. time is currently unused by this function.

Experimental implementation

This is an experimental feature and may change in future releases.

See also: VisualizationCallback, show_plot

source
Trixi.set_log_type!Method
Trixi.set_log_type!(type; force = true)

Set the type of the (natural) log function to be used in Trixi.jl. The default is "sqrt_Trixi_NaN" which returns NaN for negative arguments instead of throwing an error. Alternatively, you can set type to "sqrt_Base" to use the Julia built-in sqrt function which provides a stack-trace of the error which might come in handy when debugging code.

source
Trixi.set_polyester!Method
Trixi.set_polyester!(toggle::Bool; force = true)

Toggle the usage of Polyester.jl for multithreading. By default, Polyester.jl is enabled, but it can be useful for performance comparisons to switch to the Julia core backend.

This does not fully disable Polyester.jl, buy only its use as part of Trixi.jl's @threaded macro.

source
Trixi.set_sqrt_type!Method
Trixi.set_sqrt_type!(type; force = true)

Set the type of the square root function to be used in Trixi.jl. The default is "sqrt_Trixi_NaN" which returns NaN for negative arguments instead of throwing an error. Alternatively, you can set type to "sqrt_Base" to use the Julia built-in sqrt function which provides a stack-trace of the error which might come in handy when debugging code.

source
Trixi.show_plotMethod
show_plot(plot_data, variable_names;
+          show_mesh=true, plot_arguments=Dict{Symbol,Any}(),
+          time=nothing, timestep=nothing)

Visualize the plot data object provided in plot_data and display result, plotting only the variables in variable_names and, optionally, the mesh (if show_mesh is true). Additionally, plot_arguments will be unpacked and passed as keyword arguments to the Plots.plot command.

This function is the default plot_creator argument for the VisualizationCallback. time and timestep are currently unused by this function.

Experimental implementation

This is an experimental feature and may change in future releases.

See also: VisualizationCallback, save_plot

source
Trixi.solveFunction
solve(ode, alg; dt, callbacks, kwargs...)

The following structures and methods provide the infrastructure for SSP Runge-Kutta methods of type SimpleAlgorithmSSP.

Experimental implementation

This is an experimental feature and may change in future releases.

source
Trixi.source_terms_convergence_testMethod
source_terms_convergence_test(u, x, t, equations::ShallowWaterEquations1D)

Source terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).

This manufactured solution source term is specifically designed for the bottom topography function b(x) = 2.0 + 0.5 * sinpi(sqrt(2.0) * x[1]) as defined in initial_condition_convergence_test.

source
Trixi.source_terms_convergence_testMethod
source_terms_convergence_test(u, x, t, equations::ShallowWaterEquations2D)

Source terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).

This manufactured solution source term is specifically designed for the bottom topography function b(x,y) = 2 + 0.5 * sinpi(sqrt(2) * x) + 0.5 * sinpi(sqrt(2) * y) as defined in initial_condition_convergence_test.

source
Trixi.source_terms_convergence_testMethod
source_terms_convergence_test(u, x, t, equations::ShallowWaterEquationsQuasi1D)

Source terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).

This manufactured solution source term is specifically designed for the bottom topography function b(x) = 0.2 - 0.05 * sinpi(sqrt(2) * x[1]) and channel width 'a(x)= 1 + 0.1 * cospi(sqrt(2) * x[1])' as defined in initial_condition_convergence_test.

source
Trixi.source_terms_eoc_test_coupled_euler_gravityMethod
source_terms_eoc_test_coupled_euler_gravity(u, x, t, equations::CompressibleEulerEquations2D)

Setup used for convergence tests of the Euler equations with self-gravity used in

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593

in combination with initial_condition_eoc_test_coupled_euler_gravity.

source
Trixi.source_terms_eoc_test_coupled_euler_gravityMethod
source_terms_eoc_test_coupled_euler_gravity(u, x, t, equations::CompressibleEulerEquations3D)

Setup used for convergence tests of the Euler equations with self-gravity used in

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593

in combination with initial_condition_eoc_test_coupled_euler_gravity.

source
Trixi.source_terms_eoc_test_eulerMethod
source_terms_eoc_test_euler(u, x, t, equations::CompressibleEulerEquations3D)

Setup used for convergence tests of the Euler equations with self-gravity used in

  • Michael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593

in combination with initial_condition_eoc_test_coupled_euler_gravity.

Note

This method is to be used for testing pure Euler simulations with analytic self-gravity. If you intend to do coupled Euler-gravity simulations, you need to use source_terms_eoc_test_coupled_euler_gravity instead.

source
Trixi.source_terms_harmonicMethod
source_terms_harmonic(u, x, t, equations::HyperbolicDiffusionEquations1D)

Source term that only includes the forcing from the hyperbolic diffusion system.

source
Trixi.source_terms_harmonicMethod
source_terms_harmonic(u, x, t, equations::HyperbolicDiffusionEquations2D)

Source term that only includes the forcing from the hyperbolic diffusion system.

source
Trixi.source_terms_harmonicMethod
source_terms_harmonic(u, x, t, equations::HyperbolicDiffusionEquations3D)

Source term that only includes the forcing from the hyperbolic diffusion system.

source
Trixi.splitting_coirier_vanleerMethod
splitting_coirier_vanleer(u, orientation::Integer,
+                          equations::CompressibleEulerEquations1D)
+splitting_coirier_vanleer(u, which::Union{Val{:minus}, Val{:plus}}
+                          orientation::Integer,
+                          equations::CompressibleEulerEquations1D)

Splitting of the compressible Euler flux from Coirier and van Leer. The splitting has correction terms in the pressure splitting as well as the mass and energy flux components. The motivation for these corrections are to handle flows at the low Mach number limit.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

  • William Coirier and Bram van Leer (1991) Numerical flux formulas for the Euler and Navier-Stokes equations. II - Progress in flux-vector splitting DOI: 10.2514/6.1991-1566
source
Trixi.splitting_drikakis_tsangarisMethod
splitting_drikakis_tsangaris(u, orientation_or_normal_direction,
+                             equations::CompressibleEulerEquations2D)
+splitting_drikakis_tsangaris(u, which::Union{Val{:minus}, Val{:plus}}
+                             orientation_or_normal_direction,
+                             equations::CompressibleEulerEquations2D)

Improved variant of the Steger-Warming flux vector splitting splitting_steger_warming for generalized coordinates. This splitting also reformulates the energy flux as in Hänel et al. to obtain conservation of the total temperature for inviscid flows.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

  • D. Drikakis and S. Tsangaris (1993) On the solution of the compressible Navier-Stokes equations using improved flux vector splitting methods DOI: 10.1016/0307-904X(93)90054-K
  • D. Hänel, R. Schwane and G. Seider (1987) On the accuracy of upwind schemes for the solution of the Navier-Stokes equations DOI: 10.2514/6.1987-1105
source
Trixi.splitting_lax_friedrichsMethod
splitting_lax_friedrichs(u, orientation_or_normal_direction,
+                         equations::CompressibleEulerEquations2D)
+splitting_lax_friedrichs(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation_or_normal_direction,
+                         equations::CompressibleEulerEquations2D)

Naive local Lax-Friedrichs style flux splitting of the form f⁺ = 0.5 (f + λ u) and f⁻ = 0.5 (f - λ u) similar to a flux splitting one would apply, e.g., to Burgers' equation.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

source
Trixi.splitting_lax_friedrichsMethod
splitting_lax_friedrichs(u, orientation::Integer,
+                         equations::InviscidBurgersEquation1D)
+splitting_lax_friedrichs(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation::Integer,
+                         equations::InviscidBurgersEquation1D)

Naive local Lax-Friedrichs style flux splitting of the form f⁺ = 0.5 (f + λ u) and f⁻ = 0.5 (f - λ u) where λ = abs(u).

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

source
Trixi.splitting_lax_friedrichsMethod
splitting_lax_friedrichs(u, orientation::Integer,
+                         equations::LinearScalarAdvectionEquation1D)
+splitting_lax_friedrichs(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation::Integer,
+                         equations::LinearScalarAdvectionEquation1D)

Naive local Lax-Friedrichs style flux splitting of the form f⁺ = 0.5 (f + λ u) and f⁻ = 0.5 (f - λ u) where λ is the absolute value of the advection velocity.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

source
Trixi.splitting_steger_warmingMethod
splitting_steger_warming(u, orientation::Integer,
+                         equations::CompressibleEulerEquations1D)
+splitting_steger_warming(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation::Integer,
+                         equations::CompressibleEulerEquations1D)

Splitting of the compressible Euler flux of Steger and Warming.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

  • Joseph L. Steger and R. F. Warming (1979) Flux Vector Splitting of the Inviscid Gasdynamic Equations With Application to Finite Difference Methods NASA Technical Memorandum
source
Trixi.splitting_steger_warmingMethod
splitting_steger_warming(u, orientation::Integer,
+                         equations::CompressibleEulerEquations2D)
+splitting_steger_warming(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation::Integer,
+                         equations::CompressibleEulerEquations2D)

Splitting of the compressible Euler flux of Steger and Warming. For curvilinear coordinates use the improved Steger-Warming-type splitting splitting_drikakis_tsangaris.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

  • Joseph L. Steger and R. F. Warming (1979) Flux Vector Splitting of the Inviscid Gasdynamic Equations With Application to Finite Difference Methods NASA Technical Memorandum
source
Trixi.splitting_steger_warmingMethod
splitting_steger_warming(u, orientation::Integer,
+                         equations::CompressibleEulerEquations3D)
+splitting_steger_warming(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation::Integer,
+                         equations::CompressibleEulerEquations3D)

Splitting of the compressible Euler flux of Steger and Warming.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

  • Joseph L. Steger and R. F. Warming (1979) Flux Vector Splitting of the Inviscid Gasdynamic Equations With Application to Finite Difference Methods NASA Technical Memorandum
source
Trixi.splitting_vanleer_haenelMethod
splitting_vanleer_haenel(u, orientation_or_normal_direction,
+                         equations::CompressibleEulerEquations2D)
+splitting_vanleer_haenel(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation_or_normal_direction,
+                         equations::CompressibleEulerEquations2D)

Splitting of the compressible Euler flux from van Leer. This splitting further contains a reformulation due to Hänel et al. where the energy flux uses the enthalpy. The pressure splitting is independent from the splitting of the convective terms. As such there are many pressure splittings suggested across the literature. We implement the 'p4' variant suggested by Liou and Steffen as it proved the most robust in practice. For details on the curvilinear variant of this flux vector splitting see Anderson et al.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

  • Bram van Leer (1982) Flux-Vector Splitting for the Euler Equation DOI: 10.1007/978-3-642-60543-7_5
  • D. Hänel, R. Schwane and G. Seider (1987) On the accuracy of upwind schemes for the solution of the Navier-Stokes equations DOI: 10.2514/6.1987-1105
  • Meng-Sing Liou and Chris J. Steffen, Jr. (1991) High-Order Polynomial Expansions (HOPE) for Flux-Vector Splitting NASA Technical Memorandum
  • W. Kyle Anderson, James L. Thomas, and Bram van Leer (1986) Comparison of Finite Volume Flux Vector Splittings for the Euler Equations DOI: 10.2514/3.9465
source
Trixi.splitting_vanleer_haenelMethod
splitting_vanleer_haenel(u, orientation::Integer,
+                         equations::CompressibleEulerEquations1D)
+splitting_vanleer_haenel(u, which::Union{Val{:minus}, Val{:plus}}
+                         orientation::Integer,
+                         equations::CompressibleEulerEquations1D)

Splitting of the compressible Euler flux from van Leer. This splitting further contains a reformulation due to Hänel et al. where the energy flux uses the enthalpy. The pressure splitting is independent from the splitting of the convective terms. As such there are many pressure splittings suggested across the literature. We implement the 'p4' variant suggested by Liou and Steffen as it proved the most robust in practice.

Returns a tuple of the fluxes "minus" (associated with waves going into the negative axis direction) and "plus" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().

Experimental implementation (upwind SBP)

This is an experimental feature and may change in future releases.

References

source
Trixi.stolarsky_meanMethod
stolarsky_mean(x, y, gamma)

Compute an instance of a weighted Stolarsky mean of the form

stolarsky_mean(x, y, gamma) = (gamma - 1)/gamma * (y^gamma - x^gamma) / (y^(gamma-1) - x^(gamma-1))

where gamma > 1.

Problem: The formula above has a removable singularity at x == y. Thus, some care must be taken to implement it correctly without problems or loss of accuracy when x ≈ y. Here, we use the approach proposed by Winters et al. (2020). Set f = (y - x) / (y + x) and g = gamma (for compact notation). Then, we use the expansions

((1+f)^g - (1-f)^g) / g = 2*f + (g-1)(g-2)/3 * f^3 + (g-1)(g-2)(g-3)(g-4)/60 * f^5 + O(f^7)

and

((1+f)^(g-1) - (1-f)^(g-1)) / (g-1) = 2*f + (g-2)(g-3)/3 * f^3 + (g-2)(g-3)(g-4)(g-5)/60 * f^5 + O(f^7)

Inserting the first few terms of these expansions and performing polynomial long division we find that

stolarsky_mean(x, y, gamma) ≈ (y + x) / 2 * (1 + (g-2)/3 * f^2 - (g+1)(g-2)(g-3)/45 * f^4 + (g+1)(g-2)(g-3)(2g(g-2)-9)/945 * f^6)

Since divisions are usually more expensive on modern hardware than multiplications (Agner Fog), we try to avoid computing two divisions. Thus, we use

f^2 = (y - x)^2 / (x + y)^2
+    = (x * (x - 2 * y) + y * y) / (x * (x + 2 * y) + y * y)

Given ε = 1.0e-4, we use the following algorithm.

if f^2 < ε
+  # use the expansion above
+else
+  # use the direct formula (gamma - 1)/gamma * (y^gamma - x^gamma) / (y^(gamma-1) - x^(gamma-1))
+end

References

source
Trixi.totalgammaMethod
totalgamma(u, equations::CompressibleEulerMulticomponentEquations1D)

Function that calculates the total gamma out of all partial gammas using the partial density fractions as well as the partial specific heats at constant volume.

source
Trixi.totalgammaMethod
totalgamma(u, equations::CompressibleEulerMulticomponentEquations2D)

Function that calculates the total gamma out of all partial gammas using the partial density fractions as well as the partial specific heats at constant volume.

source
Trixi.varnamesFunction
varnames(conversion_function, equations)

Return the list of variable names when applying conversion_function to the conserved variables associated to equations. This function is mainly used internally to determine output to screen and for IO, e.g., for the AnalysisCallback and the SaveSolutionCallback. Common choices of the conversion_function are cons2cons and cons2prim.

source
Trixi.velocityMethod
velocity(u, orientation, equations::LatticeBoltzmannEquations2D)

Calculate the macroscopic velocity for the given orientation (1 -> x, 2 -> y) from the particle distribution functions u.

source
Trixi.velocityMethod
velocity(u, orientation, equations::LatticeBoltzmannEquations3D)

Calculate the macroscopic velocity for the given orientation (1 -> x, 2 -> y, 3 -> z) from the particle distribution functions u.

source
Trixi.velocityMethod
velocity(u, equations::LatticeBoltzmannEquations2D)

Calculate the macroscopic velocity vector from the particle distribution functions u.

source
Trixi.velocityMethod
velocity(u, equations::LatticeBoltzmannEquations3D)

Calculate the macroscopic velocity vector from the particle distribution functions u.

source
Trixi.@autoinfiltrateMacro
@autoinfiltrate
+@autoinfiltrate condition::Bool

Invoke the @infiltrate macro of the package Infiltrator.jl to create a breakpoint for ad-hoc interactive debugging in the REPL. If the optional argument condition is given, the breakpoint is only enabled if condition evaluates to true.

As opposed to using Infiltrator.@infiltrate directly, this macro does not require Infiltrator.jl to be added as a dependency to Trixi.jl. As a bonus, the macro will also attempt to load the Infiltrator module if it has not yet been loaded manually.

Note: For this macro to work, the Infiltrator.jl package needs to be installed in your current Julia environment stack.

See also: Infiltrator.jl

Internal use only

Please note that this macro is intended for internal use only. It is not part of the public API of Trixi.jl, and it thus can altered (or be removed) at any time without it being considered a breaking change.

source
Trixi.@threadedMacro
@threaded for ... end

Semantically the same as Threads.@threads when iterating over a AbstractUnitRange but without guarantee that the underlying implementation uses Threads.@threads or works for more general for loops. In particular, there may be an additional check whether only one thread is used to reduce the overhead of serial execution or the underlying threading capabilities might be provided by other packages such as Polyester.jl.

Warn

This macro does not necessarily work for general for loops. For example, it does not necessarily support general iterables such as eachline(filename).

Some discussion can be found at https://discourse.julialang.org/t/overhead-of-threads-threads/53964 and https://discourse.julialang.org/t/threads-threads-with-one-thread-how-to-remove-the-overhead/58435.

source
diff --git a/v0.8.7/reference-trixi2vtk/index.html b/v0.8.7/reference-trixi2vtk/index.html new file mode 100644 index 0000000000..d14a35c30d --- /dev/null +++ b/v0.8.7/reference-trixi2vtk/index.html @@ -0,0 +1,6 @@ + +Trixi2Vtk.jl · Trixi.jl

Trixi2Vtk.jl API

Trixi2Vtk.trixi2vtkMethod
trixi2vtk(filename::AbstractString...;
+          format=:vtu, verbose=false, hide_progress=false, pvd=nothing,
+          output_directory=".", nvisnodes=nothing, save_celldata=true,
+          reinterpolate=true, data_is_uniform=false)

Convert Trixi-generated output files to VTK files (VTU or VTI).

Arguments

  • filename: One or more Trixi solution/restart/mesh files to convert to a VTK file. Filenames support file globbing, e.g., "solution*" to match all files starting with solution.
  • format: Output format for solution/restart files. Can be 'vtu' or 'vti'.
  • verbose: Set to true to enable verbose output.
  • hide_progress: Hide progress bar (will be hidden automatically if verbose is true).
  • pvd: Use this filename to store PVD file (instead of auto-detecting name). Note that only the name will be used (directory and file extension are ignored).
  • output_directory: Output directory where generated files are stored.
  • nvisnodes: Number of visualization nodes per element. (default: number of DG nodes for StructuredMesh or UnstructuredMesh2D, twice the number of DG nodes for TreeMesh). A value of 0 (zero) uses the number of nodes in the DG elements.
  • save_celldata: Boolean value to determine if cell-based data should be saved. (default: true)
  • reinterpolate: Boolean value to determine if data should be reinterpolated onto uniform points. When false the raw data at the compute nodes is copied into the appropriate format. (default: true)
  • data_is_uniform: Boolean to indicate if the data to be converted is from a finite difference method on a uniform grid of points. (default: false)

Examples

julia> trixi2vtk("out/solution_000*.h5")
+[...]
source
diff --git a/v0.8.7/reference-trixibase/index.html b/v0.8.7/reference-trixibase/index.html new file mode 100644 index 0000000000..acb41145cd --- /dev/null +++ b/v0.8.7/reference-trixibase/index.html @@ -0,0 +1,10 @@ + +TrixiBase.jl · Trixi.jl

TrixiBase.jl API

TrixiBase.trixi_includeMethod
trixi_include([mod::Module=Main,] elixir::AbstractString; kwargs...)

include the file elixir and evaluate its content in the global scope of module mod. You can override specific assignments in elixir by supplying keyword arguments. Its basic purpose is to make it easier to modify some parameters while running simulations from the REPL. Additionally, this is used in tests to reduce the computational burden for CI while still providing examples with sensible default values for users.

Before replacing assignments in elixir, the keyword argument maxiters is inserted into calls to solve with it's default value used in the SciML ecosystem for ODEs, see the "Miscellaneous" section of the documentation.

Examples

julia> using TrixiBase, Trixi
+
+julia> redirect_stdout(devnull) do
+         trixi_include(@__MODULE__, joinpath(examples_dir(), "tree_1d_dgsem", "elixir_advection_extended.jl"),
+                       tspan=(0.0, 0.1))
+         sol.t[end]
+       end
+[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.
+0.1
source
TrixiBase.@trixi_timeitMacro
@trixi_timeit timer() "some label" expression

Basically the same as a special case of @timeit_debug from TimerOutputs.jl, but without try ... finally ... end block. Thus, it's not exception-safe, but it also avoids some related performance problems. Since we do not use exception handling in Trixi.jl, that's not really an issue.

All @trixi_timeit timings can be disabled with disable_debug_timings. The timings should then be optimized away, allowing for truly zero-overhead.

See also disable_debug_timings, enable_debug_timings.

source
diff --git a/v0.8.7/restart/index.html b/v0.8.7/restart/index.html new file mode 100644 index 0000000000..6690b3faf7 --- /dev/null +++ b/v0.8.7/restart/index.html @@ -0,0 +1,6 @@ + +Restart simulation · Trixi.jl

Restart simulation

You can continue running an already finished simulation by first preparing the simulation for the restart and then performing the restart. Here we suppose that in the first run your simulation stops at time 1.0 and then you want it to run further to time 2.0.

Prepare the simulation for a restart

In you original elixir you need to specify to write out restart files. Those will later be read for the restart of your simulation. This is done almost the same way as writing the snapshots using the SaveSolutionCallback callback. For the restart files it is called SaveRestartCallback:

save_restart = SaveRestartCallback(interval=100,
+                                   save_final_restart=true)

Make this part of your CallbackSet.

An example is examples/examples/structured_2d_dgsem/elixir_advection_extended.jl.

Perform the simulation restart

Since all of the information about the simulation can be obtained from the last snapshot, the restart can be done with relatively few lines in an extra elixir file. However, some might prefer to keep everything in one elixir and conditionals like if restart with a boolean variable restart that is user defined.

First we need to define from which file we want to restart, e.g.

restart_file = "restart_000000021.h5"
+restart_filename = joinpath("out", restart_file)

Then we load the mesh file:

mesh = load_mesh(restart_filename)

This is then needed for the semidiscretization:

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)

We then define a new time span for the simulation that takes as starting time the one form the snapshot:

tspan = (load_time(restart_filename), 2.0)

We now also take the last dt, so that our solver does not need to first find one to fulfill the CFL condition:

dt = load_dt(restart_filename)

The ODE that we will pass to the solver is now:

ode = semidiscretize(semi, tspan, restart_filename)

You should now define a SaveSolutionCallback similar to the original simulation, but with save_initial_solution=false, otherwise our initial snapshot will be overwritten. If you are using one file for the original simulation and the restart you can reuse your SaveSolutionCallback, but need to set

save_solution.condition.save_initial_solution = false

Before we compute the solution using OrdinaryDiffEq.jl we need to set the integrator and its time step number, e.g.:

integrator = init(ode, CarpenterKennedy2N54(williamson_condition=false),
+                  dt=dt, save_everystep=false, callback=callbacks);
+load_timestep!(integrator, restart_filename)

Now we can compute the solution:

sol = solve!(integrator)

An example is in examples/structured_2d_dgsem/elixir_advection_restart.jl.

diff --git a/v0.8.7/search_index.js b/v0.8.7/search_index.js new file mode 100644 index 0000000000..dbdb9ca726 --- /dev/null +++ b/v0.8.7/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"EditURL = \"../../literate/src/files/adaptive_mesh_refinement.jl\"","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#adaptive_mesh_refinement","page":"15 Adaptive mesh refinement","title":"15: Adaptive mesh refinement","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Adaptive mesh refinement (AMR) is a method of adapting the resolution of the numerical method to the solution features such as turbulent regions or shocks. In those critical regions of the domain, we want the simulation to use elements with smaller mesh sizes compared to other regions. This should be automatically and dynamically adapted during the run of the simulation.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#Implementation-in-Trixi.jl","page":"15 Adaptive mesh refinement","title":"Implementation in Trixi.jl","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"In Trixi.jl, AMR is possible for the mesh types TreeMesh and P4estMesh. Both meshes are organized in a tree structure and therefore, each element can be refined independently. In Trixi.jl, AMR is restricted to a 2:1 refinement ratio between neighbor elements. This means that the maximum resolution difference of neighboring elements is a factor of two.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"The implementation of AMR is divided into different steps. The basic refinement setting contains an indicator and a controller. These are added to the simulation by using an AMR callback.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#Indicators","page":"15 Adaptive mesh refinement","title":"Indicators","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"An indicator estimates the current accuracy of the numerical approximation. It indicates which regions of the domain need finer or coarser resolutions. In Trixi.jl, you can use for instance IndicatorLöhner and IndicatorHennemannGassner.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"IndicatorLöhner (also callable with IndicatorLoehner) is an interpretation and adaptation of a FEM indicator by Löhner (1987) and estimates a weighted second derivative of a specified variable locally.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_indicator = IndicatorLöhner(semi, variable=variable)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"All indicators have the parameter variable which is used to specify the variable for the indicator calculation. You can use for instance density, pressure or density_pressure for the compressible Euler equations. Moreover, you have the option to use simply the first conservation variable with first for any equations. This might be a good choice for a starting example.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"IndicatorHennemannGassner, also used as a shock-capturing indicator, was developed by Hennemann et al. (2021) and is explained in detail in the tutorial about shock-capturing. It can be constructed as follows.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_indicator = IndicatorHennemannGassner(semi,\n alpha_max=0.5,\n alpha_min=0.001,\n alpha_smooth=true,\n variable=variable)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Another indicator is the very basic IndicatorMax. It indicates the maximal value of a variable and is therefore mostly used for verification and testing. But it might be useful for the basic understanding of the implementation of indicators and AMR in Trixi.jl.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_indicator = IndicatorMax(semi, variable=variable)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#Controllers","page":"15 Adaptive mesh refinement","title":"Controllers","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"The spatial discretization into elements is tree-based for both AMR supporting mesh types TreeMesh and P4estMesh. Thus, the higher the level in the tree the higher the level of refinement. For instance, a mesh element of level 3 has double resolution in each direction compared to another element with level 2.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"To map specific indicator values to a desired level of refinement, Trixi.jl uses controllers. They are build in three levels: There is a base level of refinement base_level, which is the minimum allowed refinement level. Then, there is a medium level med_level, which corresponds to the initial level of refinement, for indicator values above the threshold med_threshold and equally, a maximal level max_level for values above max_threshold. This variant of controller is called ControllerThreeLevel in Trixi.jl.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_controller = ControllerThreeLevel(semi, amr_indicator;\n base_level=4,\n med_level=5, med_threshold=0.1,\n max_level=6, max_threshold=0.6)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"You can also set med_level=0 to use the current level as target, see the docstring of ControllerThreeLevel.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"An extension is ControllerThreeLevelCombined, which uses two different indicators. The primary indicator works the same as the single indicator for ControllerThreeLevel. The second indicator with its own maximum threshold adds the property, that the target level is set to max_level additionally if this indicator's value is greater than max_threshold_secondary. This is for instance used to assure that a shock has always the maximum refinement level.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_controller = ControllerThreeLevelCombined(semi, indicator_primary, indicator_secondary;\n base_level=2,\n med_level=6, med_threshold=0.0003,\n max_level=8, max_threshold=0.003,\n max_threshold_secondary=0.3)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"This controller is for instance used in elixir_euler_astro_jet_amr.jl.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#Callback","page":"15 Adaptive mesh refinement","title":"Callback","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"The AMR indicator and controller are added to the simulation through the callback AMRCallback. It contains a semidiscretization semi, the controller amr_controller and the parameters interval, adapt_initial_condition, and adapt_initial_condition_only_refine.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Adaptive mesh refinement will be performed every interval time steps. adapt_initial_condition indicates whether the initial condition already should be adapted before the first time step. And with adapt_initial_condition_only_refine=true the mesh is only refined at the beginning but not coarsened.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_callback = AMRCallback(semi, amr_controller,\n interval=5,\n adapt_initial_condition=true,\n adapt_initial_condition_only_refine=true)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#Exemplary-simulation","page":"15 Adaptive mesh refinement","title":"Exemplary simulation","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Here, we want to implement a simple AMR simulation of the 2D linear advection equation for a Gaussian pulse.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"using OrdinaryDiffEq\nusing Trixi\n\nadvection_velocity = (0.2, -0.7)\nequations = LinearScalarAdvectionEquation2D(advection_velocity)\n\ninitial_condition = initial_condition_gauss\nsolver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n\ncoordinates_min = (-5.0, -5.0)\ncoordinates_max = ( 5.0, 5.0)\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=4,\n n_cells_max=30_000)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n\n\ntspan = (0.0, 10.0)\node = semidiscretize(semi, tspan);\nnothing #hide","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"For the best understanding about indicators and controllers, we use the simple AMR indicator IndicatorMax. As described before, it returns the maximal value of the specified variable (here the only conserved variable). Therefore, regions with a high maximum are refined. This is not really useful numerical application, but a nice demonstration example.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_indicator = IndicatorMax(semi, variable=first)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"These values are transferred to a refinement level with the ControllerThreeLevel, such that every element with maximal value greater than 0.1 is refined once and elements with maximum above 0.6 are refined twice.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"amr_controller = ControllerThreeLevel(semi, amr_indicator,\n base_level=4,\n med_level=5, med_threshold=0.1,\n max_level=6, max_threshold=0.6)\n\namr_callback = AMRCallback(semi, amr_controller,\n interval=5,\n adapt_initial_condition=true,\n adapt_initial_condition_only_refine=true)\n\nstepsize_callback = StepsizeCallback(cfl=0.9)\n\ncallbacks = CallbackSet(amr_callback, stepsize_callback);\nnothing #hide","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Running the simulation.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n save_everystep=false, callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"We plot the solution and add the refined mesh at the end of the simulation.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"using Plots\npd = PlotData2D(sol)\nplot(pd)\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#More-examples","page":"15 Adaptive mesh refinement","title":"More examples","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Trixi.jl provides many elixirs using AMR. We want to give some examples for different mesh types:","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"elixir_euler_blast_wave_amr.jl for TreeMesh and P4estMesh\nelixir_euler_kelvin_helmholtz_instability_amr.jl for TreeMesh\nelixir_euler_double_mach_amr.jl for P4estMesh","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Animations of more interesting and complicated AMR simulations can be found below and on Trixi.jl's youtube channel \"Trixi Framework\".","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"First, we give a purely hyperbolic simulation of a Sedov blast wave with self-gravity. This simulation uses the mesh type TreeMesh as we did and the AMR indicator IndicatorHennemannGassner.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":" \n
","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Source: Trixi.jl's YouTube channel Trixi Framework","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"The next example is a numerical simulation of an ideal MHD rotor on an unstructured AMR mesh. The used mesh type is a P4estMesh.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":" \n
","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"Source: Trixi.jl's YouTube channel Trixi Framework","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"For more information, please have a look at the respective links.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/#Package-versions","page":"15 Adaptive mesh refinement","title":"Package versions","text":"","category":"section"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"","category":"page"},{"location":"tutorials/adaptive_mesh_refinement/","page":"15 Adaptive mesh refinement","title":"15 Adaptive mesh refinement","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"EditURL = \"../../literate/src/files/structured_mesh_mapping.jl\"","category":"page"},{"location":"tutorials/structured_mesh_mapping/#structured_mesh_mapping","page":"16 Structured mesh with curvilinear mapping","title":"16: Structured mesh with curvilinear mapping","text":"","category":"section"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Here, we want to introduce another mesh type of Trixi.jl. More precisely, this tutorial is about the curved mesh type StructuredMesh supporting curved meshes.","category":"page"},{"location":"tutorials/structured_mesh_mapping/#Creating-a-curved-mesh","page":"16 Structured mesh with curvilinear mapping","title":"Creating a curved mesh","text":"","category":"section"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"There are two basic options to define a curved StructuredMesh in Trixi.jl. You can implement curves for the domain boundaries, or alternatively, set up directly the complete transformation mapping. We now present one short example each.","category":"page"},{"location":"tutorials/structured_mesh_mapping/#Mesh-defined-by-domain-boundary-curves","page":"16 Structured mesh with curvilinear mapping","title":"Mesh defined by domain boundary curves","text":"","category":"section"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Both examples are based on a semdiscretization of the 2D compressible Euler equations.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"using OrdinaryDiffEq\nusing Trixi\n\nequations = CompressibleEulerEquations2D(1.4)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"We start with a pressure perturbation at (xs, 0.0) as initial condition.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"function initial_condition_pressure_perturbation(x, t, equations::CompressibleEulerEquations2D)\n xs = 1.5 # location of the initial disturbance on the x axis\n w = 1/8 # half width\n p = exp(-log(2) * ((x[1]-xs)^2 + x[2]^2)/w^2) + 1.0\n v1 = 0.0\n v2 = 0.0\n rho = 1.0\n\n return prim2cons(SVector(rho, v1, v2, p), equations)\nend\ninitial_condition = initial_condition_pressure_perturbation","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Initialize every boundary as a boundary_condition_slip_wall.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"boundary_conditions = boundary_condition_slip_wall","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"The approximation setup is an entropy-stable split-form DG method with polydeg=4. We are using the two fluxes flux_ranocha and flux_lax_friedrichs.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"solver = DGSEM(polydeg=4, surface_flux=flux_lax_friedrichs,\n volume_integral=VolumeIntegralFluxDifferencing(flux_ranocha))","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"We want to define a circular cylinder as physical domain. It contains an inner semicircle with radius r0 and an outer semicircle of radius r1.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"(Image: )","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"The domain boundary curves with curve parameter in -11 are sorted as shown in the sketch. They always are orientated from negative to positive coordinate, such that the corners have to fit like this f_1(+1) = f_4(-1), f_3(+1) = f_2(-1), etc.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"In our case we can define the domain boundary curves as follows:","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"r0 = 0.5 # inner radius\nr1 = 5.0 # outer radius\nf1(xi) = SVector( r0 + 0.5 * (r1 - r0) * (xi + 1), 0.0) # right line\nf2(xi) = SVector(-r0 - 0.5 * (r1 - r0) * (xi + 1), 0.0) # left line\nf3(eta) = SVector(r0 * cos(0.5 * pi * (eta + 1)), r0 * sin(0.5 * pi * (eta + 1))) # inner circle\nf4(eta) = SVector(r1 * cos(0.5 * pi * (eta + 1)), r1 * sin(0.5 * pi * (eta + 1))) # outer circle","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"We create a curved mesh with 16 x 16 elements. The defined domain boundary curves are passed as a tuple.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"cells_per_dimension = (16, 16)\nmesh = StructuredMesh(cells_per_dimension, (f1, f2, f3, f4), periodicity=false)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Then, we define the simulation with endtime T=3 with semi, ode and callbacks.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n boundary_conditions=boundary_conditions)\n\ntspan = (0.0, 3.0)\node = semidiscretize(semi, tspan)\n\nanalysis_interval = 100\nanalysis_callback = AnalysisCallback(semi, interval=analysis_interval)\n\nalive_callback = AliveCallback(analysis_interval=analysis_interval)\n\nstepsize_callback = StepsizeCallback(cfl=0.9)\n\ncallbacks = CallbackSet(analysis_callback,\n alive_callback,\n stepsize_callback);\nnothing #hide","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Running the simulation","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n save_everystep=false, callback=callbacks);\n\nusing Plots\nplot(sol)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"pd = PlotData2D(sol)\nplot(pd[\"p\"])\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/structured_mesh_mapping/#Mesh-directly-defined-by-the-transformation-mapping","page":"16 Structured mesh with curvilinear mapping","title":"Mesh directly defined by the transformation mapping","text":"","category":"section"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"As mentioned before, you can also define the domain for a StructuredMesh by directly setting up a transformation mapping. Here, we want to present a nice mapping, which is often used to test free-stream preservation. Exact free-stream preservation is a crucial property of any numerical method on curvilinear grids. The mapping is a reduced 2D version of the mapping described in Rueda-Ramírez et al. (2021), p.18.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"using OrdinaryDiffEq\nusing Trixi\n\nequations = CompressibleEulerEquations2D(1.4)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"As mentioned, this mapping is used for testing free-stream preservation. So, we use a constant initial condition.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"initial_condition = initial_condition_constant\n\nsolver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"We define the transformation mapping with variables in -1 1 as described in Rueda-Ramírez et al. (2021), p.18 (reduced to 2D):","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"function mapping(xi_, eta_)\n # Transform input variables between -1 and 1 onto [0,3]\n xi = 1.5 * xi_ + 1.5\n eta = 1.5 * eta_ + 1.5\n\n y = eta + 3/8 * (cos(1.5 * pi * (2 * xi - 3)/3) *\n cos(0.5 * pi * (2 * eta - 3)/3))\n\n x = xi + 3/8 * (cos(0.5 * pi * (2 * xi - 3)/3) *\n cos(2 * pi * (2 * y - 3)/3))\n\n return SVector(x, y)\nend","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Instead of a tuple of boundary functions, the mesh now has the mapping as its parameter.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"cells_per_dimension = (16, 16)\nmesh = StructuredMesh(cells_per_dimension, mapping)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n\ntspan = (0.0, 1.0)\node = semidiscretize(semi, tspan)\n\nanalysis_callback = AnalysisCallback(semi, interval=250)\n\nstepsize_callback = StepsizeCallback(cfl=0.8)\n\ncallbacks = CallbackSet(analysis_callback,\n stepsize_callback)\n\nsol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n save_everystep=false, callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Now, we want to verify the free-stream preservation property and plot the mesh. For the verification, we calculate the absolute difference of the first conservation variable density u[1] and 1.0. To plot this error and the mesh, we are using the visualization feature ScalarPlotData2D, explained in visualization.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"error_density = let u = Trixi.wrap_array(sol.u[end], semi)\n abs.(u[1, :, :, :] .- 1.0) # density, x, y, elements\nend\npd = ScalarPlotData2D(error_density, semi)\n\nusing Plots\nplot(pd, title=\"Error in density\")\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"We observe that the errors in the variable density are at the level of machine accuracy. Moreover, the plot shows the mesh structure resulting from our transformation mapping.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"Of course, you can also use other mappings as for instance shifts by (x y)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"mapping(xi, eta) = SVector(xi + x, eta + y)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"or rotations with a rotation matrix T","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"mapping(xi, eta) = T * SVector(xi, eta).","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"For more curved mesh mappings, please have a look at some elixirs for StructuredMesh. For another curved mesh type, there is a tutorial about Trixi.jl's unstructured mesh type [UnstructuredMesh2D] and its use of the High-Order Hex-Quad Mesh (HOHQMesh) generator, created and developed by David Kopriva.","category":"page"},{"location":"tutorials/structured_mesh_mapping/#Package-versions","page":"16 Structured mesh with curvilinear mapping","title":"Package versions","text":"","category":"section"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"","category":"page"},{"location":"tutorials/structured_mesh_mapping/","page":"16 Structured mesh with curvilinear mapping","title":"16 Structured mesh with curvilinear mapping","text":"This page was generated using Literate.jl.","category":"page"},{"location":"github-git/#GitHub-and-Git","page":"GitHub & Git","title":"GitHub & Git","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"This page contains information on how to use GitHub and Git when developing Trixi.jl.","category":"page"},{"location":"github-git/#Development-workflow","page":"GitHub & Git","title":"Development workflow","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"For adding modifications to Trixi.jl, we generally follow these steps:","category":"page"},{"location":"github-git/#Create-an-issue-(optional)","page":"GitHub & Git","title":"Create an issue (optional)","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"In many cases it makes sense to start by creating an issue on GitHub. For example, if the implementation approach for a new feature is not yet clear or if there should be a discussion about the desired outcome, it is good practice to first get a consensus on what is the expected result of this modification. A GitHub issue is the place to lead this discussion, as it preserves it in the project and - together with the actual code changes - allows in the future to revisit the reasons for a particular choice of implementation or feature.","category":"page"},{"location":"github-git/#Create-a-branch-and-*immediately*-create-a-pull-request","page":"GitHub & Git","title":"Create a branch and immediately create a pull request","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"All feature development, bug fixes etc. should be developed in a branch and not directly on main. If you do not have write access to the main repository on GitHub, first create a fork of the Trixi.jl repository and clone the fork to your machine. Then, create a branch locally by executing git checkout -b yourbranch, push it to the repository, and create a pull request (PR).","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"If you have already cloned Trixi.jl from the main repo to your local machine, you can also work in that clone. You just need to add your fork as additional remote repository and push your new branch there.","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"git remote add myfork git@github.com:YOUR_NAME/Trixi.jl.git\n# get latest main from the main repo\ngit checkout main\ngit pull\n# create a new branch for a cool new feature, bug fix, ...\ngit checkout -b YOUR_BRANCH_NAME\n# do some work and push it to your fork\ngit push -u myfork\n# go to https://github.com/trixi-framework/Trixi.jl/pull\n# and create a PR from your new branch","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"info: Why using pull requests?\nImmediately creating a PR for your branch has the benefit that all code discussions can now be held directly next to the corresponding code. Also, the PR allows to easily compare your branch to the upstream branch (usually main) to see what you have changed. Moreover, tests will run automatically.","category":"page"},{"location":"github-git/#Make-changes","page":"GitHub & Git","title":"Make changes","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"With a branch and PR in place, you can now write your code and commit it to your branch. If you request feedback from someone else, make sure to push your branch to the repository such that the others can easily review your changes or dive in and change something themselves.","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"warning: Avoid committing unwanted files\nWhen you use git add . or similar catch-all versions, make sure you do not accidentally commit unwanted files (e.g., Trixi.jl output files, images or videos etc.). If it happens anyways, you can undo the last commit (also multiple times) by running git reset HEAD~ (see also Undo last commit). However, this strategy only works if you have not yet pushed your changes. If you did push your changes, please talk to one of the core developers on how to proceed.","category":"page"},{"location":"github-git/#Keep-your-branch-in-sync-with-main","page":"GitHub & Git","title":"Keep your branch in sync with main","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"For larger features with longer-living branches, it may make sense to synchronize your branch with the current main, e.g., if there was a bug fix in main that is relevant for you. In this case, perform the following steps to merge the current main to your branch:","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Commit all your local changes to your branch and push it. This allows you to delete your clone in case you make a mistake and need to abort the merge.\nExecute git fetch to get the latest changes from the repository.\nMake sure you are in the correct branch by checking the output of git status or by running git checkout yourbranch.\nMerge main using git merge main. If there were no conflicts, hooray!, you are done. Otherwise you need to resolve your merge conflicts and commit the changes afterwards. A good guide for resolving merge conflicts can be found here.","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"In general, always use git merge and not git rebase to get the latest changes from main. It is less error-prone and does not create problems on branches that are worked on collaboratively.","category":"page"},{"location":"github-git/#Prepare-for-review","page":"GitHub & Git","title":"Prepare for review","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"If you feel like your branch is ready to be merged to main, prepare it for review. That is, you should","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"merge the current main to your branch\nrun tests if available, but at least ensure that you did not accidentally change the results for one of the existing example elixirs\nproperly comment your code\ndelete old/unused code, especially commented lines (unless they contain helpful code, in which case you should add a comment on why you keep this around)\nremove debug statements\nadd a elixir_xxx.jl that uses your feature (only relevant for new features)\nmake sure your code formatting adheres to the Style guide\ndescribe changes in NEWS.md if appropriate","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"After you are confident that your branch is cleaned up properly, commit all changes and push them to the repository.","category":"page"},{"location":"github-git/#Get-reviewed","page":"GitHub & Git","title":"Get reviewed","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Ask one of the core developers to review your code. Sometimes this will be done directly, either face-to-face or via a video call. Other times a review will be conducted asynchronously, with the reviewer leaving comments and annotations. In some cases it will be necessary to do multiple rounds of reviews, especially if there are larger changes to be added. Just commit and push your changes to your branch, and the corresponding pull request will be updated automatically.","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Please note that a review has nothing to do with the lack of experience of the person developing changes: We try to review all code before it gets added to main, even from the most experienced developers. This is good practice and helps to keep the error rate low while ensuring that the code is developed in a consistent fashion. Furthermore, do not take criticism of your code personally - we just try to keep Trixi.jl as accessible and easy to use for everyone.","category":"page"},{"location":"github-git/#Merge-branch","page":"GitHub & Git","title":"Merge branch","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Once your branch is reviewed and declared ready for merging by the reviewer, make sure that all the latest changes have been pushed. Then, one of the developers will merge your PR. If you are one of the developers, you can also go to the pull request page on GitHub and and click on Merge pull request. Voilà, you are done! Your branch will have been merged to main and the source branch will have been deleted in the GitHub repository (if you are not working in your own fork).","category":"page"},{"location":"github-git/#Update-your-working-copy","page":"GitHub & Git","title":"Update your working copy","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Once you have merged your branch by accepting the PR on GitHub, you should clean up your local working copy of the repository by performing the following steps:","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Update your clone by running git fetch.\nCheck out main using git checkout main.\nDelete merged branch locally with git branch -d yourbranch.\nRemove local references to deleted remote branch by executing git remote prune origin.","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"You can now proceed with your next changes by starting again at the top.","category":"page"},{"location":"github-git/#Using-Git","page":"GitHub & Git","title":"Using Git","text":"","category":"section"},{"location":"github-git/#Resources-for-learning-Git","page":"GitHub & Git","title":"Resources for learning Git","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Here are a few resources for learning do use Git that at least one of us found helpful in the past (roughly ordered from novice to advanced to expert):","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Git Handbook by GitHub\nLearn Git Branching","category":"page"},{"location":"github-git/#Tips-and-tricks","page":"GitHub & Git","title":"Tips and tricks","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"This is an unordered collection of different tips and tricks that can be helpful while working with Git. As usual, your mileage might vary.","category":"page"},{"location":"github-git/#Undo-last-commit","page":"GitHub & Git","title":"Undo last commit","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"If you made a mistake in your last commit, e.g., by committing an unwanted file, you can undo the latest commit by running","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"git reset HEAD~","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"This only works if you have not yet pushed your branch to the GitHub repository. In this case, please talk to one of the core developers on how to proceed. Especially when you accidentally committed a large file (image, or video), please let us know as fast as possible, since the effort to fix the repository grows considerably over time.","category":"page"},{"location":"github-git/#Remove-large-file-from-repository","page":"GitHub & Git","title":"Remove large file from repository","text":"","category":"section"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"If a large file was accidentally committed and pushed to the Trixi.jl repository, please talk to one of the core developers as soon as possible so that they can fix it.","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"danger: Large files\nYou should never try to fix this yourself, as it potentially disrupts/destroys the work of others!","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Based on the instructions found here and here, the following steps need to be taken (as documented for GitLab in issue #33):","category":"page"},{"location":"github-git/","page":"GitHub & Git","title":"GitHub & Git","text":"Tell everyone to commit and push their changes to the repository.\nFix the branch in which the file was committed by removing it and committing the removal. This is especially important on main.\nPerform the following steps to clean up the Git repository:\ncd /tmp\n\n# Download bfg-1.13.0.jar from https://rtyley.github.io/bfg-repo-cleaner/\n\n# Get fresh clone of repo (so you can throw it away in case there is a problem)\ngit clone --mirror git@github.com:trixi-framework/Trixi.jl.git\n\n# Clean up repo of all files larger than 10M\njava -jar bfg-1.13.0.jar --strip-blobs-bigger-than 10M Trixi.jl.git\n\n# Enter repo\ncd Trixi.jl.git\n\n# Clean up reflog and force aggressive garbage collection\ngit reflog expire --expire=now --all && git gc --prune=now --aggressive\n\n# Push changes\ngit push\n\n# Delete clone\nrm -rf Trixi.jl.git\nTell everyone to clean up their local working copies by performing the following steps (also do this yourself):\n# Enter repo\ncd Trixi.jl\n\n# Get current changes\ngit fetch\n\n# Check out the fixed branch\ngit checkout branchname\n\n# IMPORTANT: Do a rebase instead of a pull!\ngit rebase\n\n# Clean reflog and force garbage collection\ngit reflog expire --expire=now --all && git gc --prune=now --aggressive\nIMPORTANT: You need to do a git rebase instead of a git pull when updating the fixed branch.","category":"page"},{"location":"testing/#Testing","page":"Testing","title":"Testing","text":"","category":"section"},{"location":"testing/","page":"Testing","title":"Testing","text":"During the development of Trixi.jl, we rely on continuous testing to ensure that modifications or new features do not break existing functionality or add other errors. In the main Trixi.jl repository (and the repositories for the visualization tool Trixi2Vtk), this is facilitated by GitHub Actions, which allows to run tests automatically upon certain events. When, how, and what is tested by GitHub Actions is controlled by the workflow file .github/workflows/ci.yml. In Trixi.jl and its related repositories, tests are triggered by","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"each git push to main and\neach git push to any pull request.","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"Besides checking functionality, we also analyse the Test coverage to ensure that we do not miss important parts during testing.","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"note: Test and coverage requirements\nBefore merging a pull request (PR) to main, we require thatthe code passes all functional tests\ncode coverage does not decrease.","category":"page"},{"location":"testing/#Testing-setup","page":"Testing","title":"Testing setup","text":"","category":"section"},{"location":"testing/","page":"Testing","title":"Testing","text":"The entry point for all testing is the file test/runtests.jl, which is run by the automated tests and which can be triggered manually by executing","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"julia> using Pkg; Pkg.test(\"Trixi\")","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"in the REPL. Since there already exist many tests, we have split them up into multiple files in the test directory to allow for faster testing of individual parts of the code. Thus in addition to performing all tests, you can also just include one of the files named test_xxx.jl to run only a specific subset, e.g.,","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"julia> # Run all 2D tests on the P4estMesh\n include(joinpath(\"test\", \"test_p4est_2d.jl\"))\n\njulia> # Run all 1D tests for the Euler equations on the TreeMesh\n include(joinpath(\"test\", \"test_tree_1d_euler.jl\"))","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"For the automated tests with GitHub Actions, we run multiple jobs in parallel to reduce the waiting time until all tests are finished. You can see the different components that are run as jobs by looking at the TRIXI_TEST variable in test/runtests.jl.","category":"page"},{"location":"testing/#Adding-new-tests","page":"Testing","title":"Adding new tests","text":"","category":"section"},{"location":"testing/","page":"Testing","title":"Testing","text":"We use Julia's built-in unit testing capabilities to configure tests. In general, newly added code must be covered by at least one test, and all new elixirs added to the examples/ directory must be used at least once during testing. New tests should be added to the corresponding test/test_xxx.jl file, e.g., a test involving the 3D linear advection equation on the TreeMesh would go into test/test_tree_3d_advection.jl. Please study one of the existing tests and stay consistent to the current style when creating new tests.","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"Since we want to test as much as possible, we have a lot of tests and frequently create new ones. Naturally, this increases the time to wait for all tests to pass with each novel feature added to Trixi.jl. Therefore, new tests should be as short as reasonably possible, i.e., without being too insensitive to pick up changes or errors in the code.","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"When you add new tests, please check whether all CI jobs still take approximately the same time. If the job where you added new tests takes much longer than everything else, please consider moving some tests from one job to another (or report this incident and ask the main developers for help).","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"note: Test duration\nAs a general rule, tests should last no more than 10 seconds when run with a single thread and after compilation (i.e., excluding the first run).","category":"page"},{"location":"testing/#Test-coverage","page":"Testing","title":"Test coverage","text":"","category":"section"},{"location":"testing/","page":"Testing","title":"Testing","text":"In addition to ensuring that the code produces the expected results, the automated tests also record the code coverage. The resulting coverage reports, i.e., which lines of code were executed by at least one test and are thus considered \"covered\" by testing, are automatically uploaded to Coveralls for easy analysis. Typically, you see a number of Coveralls results at the bottom of each pull request: One for each parallel job (see Testing setup), which can usually be ignored since they only cover parts of the code by definition, and a cumulative coverage result named coverage/coveralls. The \"Details\" link takes you to a detailed report on which lines of code are covered by tests, which ones are missed, and especially which new lines the pull requests adds to Trixi.jl's code base that are not yet covered by testing.","category":"page"},{"location":"testing/","page":"Testing","title":"Testing","text":"note: Coverage requirements\nIn general, we require pull requests to not decrease the overall test coverage percentage in main, with a hard lower bound of 97%.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/trixi-framework/Trixi.jl/blob/main/NEWS.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Trixi.jl follows the interpretation of semantic versioning (semver) used in the Julia ecosystem. Notable changes will be documented in this file for human readability.","category":"page"},{"location":"changelog/#Changes-when-updating-to-v0.8-from-v0.7.x","page":"Changelog","title":"Changes when updating to v0.8 from v0.7.x","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/#Changed","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The specification of boundary names on which AnalysisSurfaceIntegrals are computed (such as drag and lift coefficients) has changed from Symbol and Vector{Symbol} to NTuple{Symbol}. Thus, for one boundary the syntax changes from :boundary to (:boundary,) and for Vectors [:boundary1, :boundary2] to (:boundary1, :boundary2) (#1959).\nThe names of output files like the one created from the SaveSolutionCallback have changed from %06d to %09d to allow longer-running simulations (#1996).","category":"page"},{"location":"changelog/#Deprecated","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/#Removed","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/#Changes-in-the-v0.7-lifecycle","page":"Changelog","title":"Changes in the v0.7 lifecycle","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Implementation of TimeSeriesCallback for curvilinear meshes on UnstructuredMesh2D and extension to 1D and 3D on TreeMesh (#1855, #1873).\nImplementation of 1D Linearized Euler Equations (#1867).\nNew analysis callback for 2D P4estMesh to compute integrated quantities along a boundary surface, e.g., pressure lift and drag coefficients (#1812).\nOptional tuple parameter for GlmSpeedCallback called semi_indices to specify for which semidiscretization of a SemidiscretizationCoupled we need to update the GLM speed (#1835).\nSubcell local one-sided limiting support for nonlinear variables in 2D for TreeMesh (#1792).\nNew time integrator PairedExplicitRK2, implementing the second-order paired explicit Runge-Kutta method with Convex.jl and ECOS.jl (#1908)\nAdd subcell limiting support for StructuredMesh (#1946).","category":"page"},{"location":"changelog/#Changes-when-updating-to-v0.7-from-v0.6.x","page":"Changelog","title":"Changes when updating to v0.7 from v0.6.x","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/#Changed-2","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The default wave speed estimate used within flux_hll is now min_max_speed_davis instead of min_max_speed_naive.","category":"page"},{"location":"changelog/#Deprecated-2","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/#Removed-2","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Some specialized shallow water specific features are no longer available directly in Trixi.jl, but are moved to a dedicated repository: TrixiShallowWater.jl. This includes all features related to wetting and drying, as well as the ShallowWaterTwoLayerEquations1D and ShallowWaterTwoLayerEquations2D. However, the basic shallow water equations are still part of Trixi.jl. We'll also be updating the TrixiShallowWater.jl documentation with instructions on how to use these relocated features in the future.","category":"page"},{"location":"changelog/#Changes-in-the-v0.6-lifecycle","page":"Changelog","title":"Changes in the v0.6 lifecycle","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"AMR for hyperbolic-parabolic equations on 3D P4estMesh\nflux_hllc on non-cartesian meshes for CompressibleEulerEquations{2,3}D\nDifferent boundary conditions for quad/hex meshes in Abaqus format, even if not generated by HOHQMesh, can now be digested by Trixi in 2D and 3D.\nSubcell (positivity) limiting support for nonlinear variables in 2D for TreeMesh\nAdded Lighthill-Whitham-Richards (LWR) traffic model","category":"page"},{"location":"changelog/#Changes-when-updating-to-v0.6-from-v0.5.x","page":"Changelog","title":"Changes when updating to v0.6 from v0.5.x","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"AMR for hyperbolic-parabolic equations on 2D P4estMesh","category":"page"},{"location":"changelog/#Changed-3","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The wave speed estimates for flux_hll, FluxHLL() are now consistent across equations. In particular, the functions min_max_speed_naive, min_max_speed_einfeldt are now conceptually identical across equations. Users, who have been using flux_hll for MHD have now to use flux_hlle in order to use the Einfeldt wave speed estimate.\nParabolic diffusion terms are now officially supported and not marked as experimental anymore.","category":"page"},{"location":"changelog/#Deprecated-3","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/#Removed-3","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The neural network-based shock indicators have been migrated to a new repository TrixiSmartShockFinder.jl. To continue using the indicators, you will need to use both Trixi.jl and TrixiSmartShockFinder.jl, as explained in the latter packages' README.md.","category":"page"},{"location":"changelog/#Changes-in-the-v0.5-lifecycle","page":"Changelog","title":"Changes in the v0.5 lifecycle","text":"","category":"section"},{"location":"changelog/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Experimental support for 3D parabolic diffusion terms has been added.\nNon-uniform TreeMesh available for hyperbolic-parabolic equations.\nCapability to set truly discontinuous initial conditions in 1D.\nWetting and drying feature and examples for 1D and 2D shallow water equations\nImplementation of the polytropic Euler equations in 2D\nImplementation of the quasi-1D shallow water and compressible Euler equations\nSubcell (positivity and local min/max) limiting support for conservative variables in 2D for TreeMesh\nAMR for hyperbolic-parabolic equations on 2D/3D TreeMesh\nAdded GradientVariables type parameter to AbstractEquationsParabolic","category":"page"},{"location":"changelog/#Changed-4","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The required Julia version is updated to v1.8 in Trixi.jl v0.5.13.","category":"page"},{"location":"changelog/#Deprecated-4","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The macro @unpack (re-exported originally from UnPack.jl) is deprecated and will be removed. Consider using Julia's standard destructuring syntax (; a, b) = stuff instead of @unpack a, b = stuff.\nThe constructor DGMultiMesh(dg; cells_per_dimension, kwargs...) is deprecated and will be removed. The new constructor DGMultiMesh(dg, cells_per_dimension; kwargs...) does not have cells_per_dimesion as a keyword argument.","category":"page"},{"location":"changelog/#Removed-4","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Migrate neural network-based shock indicators to a new repository TrixiSmartShockFinder.jl.","category":"page"},{"location":"changelog/#Changes-when-updating-to-v0.5-from-v0.4.x","page":"Changelog","title":"Changes when updating to v0.5 from v0.4.x","text":"","category":"section"},{"location":"changelog/#Added-7","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/#Changed-5","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Compile-time boolean indicators have been changed from Val{true}/Val{false} to Trixi.True/Trixi.False. This affects user code only if new equations with nonconservative terms are created. Change Trixi.has_nonconservative_terms(::YourEquations) = Val{true}() to Trixi.has_nonconservative_terms(::YourEquations) = Trixi.True().\nThe (non-exported) DGSEM function split_form_kernel! has been renamed to flux_differencing_kernel!\nTrixi.jl updated its dependency P4est.jl from v0.3 to v0.4. The new bindings of the C library p4est have been generated using Clang.jl instead of CBinding.jl v0.9. This affects only user code that is interacting directly with p4est, e.g., because custom refinement functions have been passed to p4est. Please consult the NEWS.md of P4est.jl for further information.","category":"page"},{"location":"changelog/#Deprecated-5","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The signature of the DGMultiMesh constructors has changed - the dg::DGMulti argument now comes first.\nThe undocumented and unused DGMultiMesh(triangulateIO, rd::RefElemData{2, Tri}, boundary_dict::Dict{Symbol, Int}) constructor was removed.","category":"page"},{"location":"changelog/#Removed-5","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Everything deprecated in Trixi.jl v0.4.x has been removed.","category":"page"},{"location":"changelog/#Changes-in-the-v0.4-lifecycle","page":"Changelog","title":"Changes in the v0.4 lifecycle","text":"","category":"section"},{"location":"changelog/#Added-8","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Implementation of linearized Euler equations in 2D\nExperimental support for upwind finite difference summation by parts (FDSBP) has been added in Trixi.jl v0.4.55. The first implementation requires a TreeMesh and comes with several examples in the examples_dir() of Trixi.jl.\nExperimental support for 2D parabolic diffusion terms has been added.\nLaplaceDiffusion2D and CompressibleNavierStokesDiffusion2D can be used to add\ndiffusion to systems. LaplaceDiffusion2D can be used to add scalar diffusion to each equation of a system, while CompressibleNavierStokesDiffusion2D can be used to add Navier-Stokes diffusion to CompressibleEulerEquations2D.\nParabolic boundary conditions can be imposed as well. For LaplaceDiffusion2D, both\nDirichlet and Neumann conditions are supported. For CompressibleNavierStokesDiffusion2D, viscous no-slip velocity boundary conditions are supported, along with adiabatic and isothermal temperature boundary conditions. See the boundary condition container BoundaryConditionNavierStokesWall and boundary condition types NoSlip, Adiabatic, and Isothermal for more information.\nCompressibleNavierStokesDiffusion2D can utilize both primitive variables (which are not\nguaranteed to provably dissipate entropy) and entropy variables (which provably dissipate entropy at the semi-discrete level).\nPlease check the examples directory for further information about the supported setups. Further documentation will be added later.\nNumerical fluxes flux_shima_etal_turbo and flux_ranocha_turbo that are equivalent to their non-_turbo counterparts but may enable specialized methods making use of SIMD instructions to increase runtime efficiency\nSupport for (periodic and non-periodic) SBP operators of SummationByPartsOperators.jl as approximation type in DGMulti solvers\nInitial support for MPI-based parallel simulations using non-conforming meshes of type P4estMesh in 2D and 3D including adaptive mesh refinement","category":"page"},{"location":"changelog/#Removed-6","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The VertexMappedMesh type is removed in favor of the DGMultiMesh type. The VertexMappedMesh constructor is deprecated.","category":"page"},{"location":"changelog/#Changed-6","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The required Julia version is updated to v1.7.\nThe isentropic vortex setups contained a bug that was fixed in Trixi.jl v0.4.54. Moreover, the setup was made a bit more challenging. See https://github.com/trixi-framework/Trixi.jl/issues/1269 for further information.","category":"page"},{"location":"changelog/#Deprecated-6","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The DGMultiMesh constructor which uses a rd::RefElemData argument is deprecated in favor of the constructor which uses a dg::DGMulti argument instead.","category":"page"},{"location":"changelog/#Changes-when-updating-to-v0.4-from-v0.3.x","page":"Changelog","title":"Changes when updating to v0.4 from v0.3.x","text":"","category":"section"},{"location":"changelog/#Added-9","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Experimental support for artificial neural network-based indicators for shock capturing and adaptive mesh refinement (#632)\nExperimental support for direct-hybrid aeroacoustics simulations (#712)\nImplementation of shallow water equations in 2D\nExperimental support for interactive visualization with Makie.jl","category":"page"},{"location":"changelog/#Changed-7","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Implementation of acoustic perturbation equations now uses the conservative form, i.e. the perturbed pressure p_prime has been replaced with p_prime_scaled = p_prime / c_mean^2.\nRemoved the experimental BoundaryConditionWall and instead directly compute slip wall boundary condition flux term using the function boundary_condition_slip_wall.\nRenamed advectionvelocity in LinearScalarAdvectionEquation to advection_velocity.\nThe signature of indicators used for adaptive mesh refinement (AMR) and shock capturing changed to generalize them to curved meshes.","category":"page"},{"location":"changelog/#Deprecated-7","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/#Removed-7","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Many initial/boundary conditions and source terms for typical setups were moved from Trixi/src to the example elixirs Trixi/examples. Thus, they are no longer available when using Trixi, e.g., the initial condition for the Kelvin Helmholtz instability.\nFeatures deprecated in v0.3 were removed.","category":"page"},{"location":"changelog/#Changes-in-the-v0.3-lifecycle","page":"Changelog","title":"Changes in the v0.3 lifecycle","text":"","category":"section"},{"location":"changelog/#Added-10","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Support for automatic differentiation, e.g. jacobian_ad_forward\nIn-situ visualization and post hoc visualization with Plots.jl\nNew systems of equations\nmulticomponent compressible Euler and MHD equations\nacoustic perturbation equations\nLattice-Boltzmann equations\nComposable FluxPlusDissipation and FluxLaxFriedrichs(), FluxHLL() with adaptable wave speed estimates were added in #493\nNew structured, curvilinear, conforming mesh type StructuredMesh\nNew unstructured, curvilinear, conforming mesh type UnstructuredMesh2D in 2D\nNew unstructured, curvilinear, adaptive (non-conforming) mesh type P4estMesh in 2D and 3D\nExperimental support for finite difference (FD) summation-by-parts (SBP) methods via SummationByPartsOperators.jl\nNew support for modal DG and SBP-DG methods on triangular and tetrahedral meshes via StartUpDG.jl","category":"page"},{"location":"changelog/#Changed-8","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations2D) and flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations3D) were actually using the logic of flux_godunov. Thus, they were renamed accordingly in #493. This is considered a bugfix (released in Trixi.jl v0.3.22).\nThe required Julia version is updated to v1.6.","category":"page"},{"location":"changelog/#Deprecated-8","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"calcflux → flux (#463)\nflux_upwind → flux_godunov\nflux_hindenlang → flux_hindenlang_gassner\nProviding the keyword argument solution_variables of SaveSolutionCallback as Symbol is deprecated in favor of using functions like cons2cons and cons2prim\nvarnames_cons(equations) → varnames(cons2cons, equations)\nvarnames_prim(equations) → varnames(cons2prim, equations)\nThe old interface for nonconservative terms is deprecated. In particular, passing only a single two-point numerical flux for nonconservative is deprecated. The new interface is described in a tutorial. Now, a tuple of two numerical fluxes of the form (conservative_flux, nonconservative_flux) needs to be passed for nonconservative equations, see #657.","category":"page"},{"location":"changelog/#Removed-8","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"authors/#Authors","page":"Authors","title":"Authors","text":"","category":"section"},{"location":"authors/","page":"Authors","title":"Authors","text":"Trixi.jl's development is coordinated by a group of principal developers, who are also its main contributors and who can be contacted in case of questions about Trixi.jl. In addition, there are contributors who have provided substantial additions or modifications. Together, these two groups form \"The Trixi.jl Authors\" as mentioned under License.","category":"page"},{"location":"authors/#Principal-Developers","page":"Authors","title":"Principal Developers","text":"","category":"section"},{"location":"authors/","page":"Authors","title":"Authors","text":"Michael Schlottke-Lakemper, University of Augsburg, Germany\nGregor Gassner, University of Cologne, Germany\nHendrik Ranocha, Johannes Gutenberg University Mainz, Germany\nAndrew Winters, Linköping University, Sweden\nJesse Chan, Rice University, US","category":"page"},{"location":"authors/#Contributors","page":"Authors","title":"Contributors","text":"","category":"section"},{"location":"authors/","page":"Authors","title":"Authors","text":"The following people contributed major additions or modifications to Trixi.jl and are listed in alphabetical order:","category":"page"},{"location":"authors/","page":"Authors","title":"Authors","text":"Maximilian D. Bertrand\nBenjamin Bolm\nSimon Candelaresi\nJesse Chan\nLars Christmann\nChristof Czernik\nDaniel Doehring\nPatrick Ersing\nErik Faulhaber\nGregor Gassner\nLucas Gemein\nSven Goldberg\nJoshua Lampert\nJulia Odenthal\nSigrun Ortleb\nHendrik Ranocha\nWarisa Roongaraya\nAndrés M. Rueda-Ramírez\nFelipe Santillan\nMichael Schlottke-Lakemper\nToskan Theine\nAndrew Winters\nHuiyu Xie","category":"page"},{"location":"license/#License","page":"License","title":"License","text":"","category":"section"},{"location":"license/","page":"License","title":"License","text":"MIT LicenseCopyright (c) 2020-present The Trixi.jl Authors (see Authors)Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","category":"page"},{"location":"restart/#restart","page":"Restart simulation","title":"Restart simulation","text":"","category":"section"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"You can continue running an already finished simulation by first preparing the simulation for the restart and then performing the restart. Here we suppose that in the first run your simulation stops at time 1.0 and then you want it to run further to time 2.0.","category":"page"},{"location":"restart/#restart_preparation","page":"Restart simulation","title":"Prepare the simulation for a restart","text":"","category":"section"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"In you original elixir you need to specify to write out restart files. Those will later be read for the restart of your simulation. This is done almost the same way as writing the snapshots using the SaveSolutionCallback callback. For the restart files it is called SaveRestartCallback:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"save_restart = SaveRestartCallback(interval=100,\n save_final_restart=true)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"Make this part of your CallbackSet.","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"An example is examples/examples/structured_2d_dgsem/elixir_advection_extended.jl.","category":"page"},{"location":"restart/#restart_perform","page":"Restart simulation","title":"Perform the simulation restart","text":"","category":"section"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"Since all of the information about the simulation can be obtained from the last snapshot, the restart can be done with relatively few lines in an extra elixir file. However, some might prefer to keep everything in one elixir and conditionals like if restart with a boolean variable restart that is user defined.","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"First we need to define from which file we want to restart, e.g.","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"restart_file = \"restart_000000021.h5\"\nrestart_filename = joinpath(\"out\", restart_file)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"Then we load the mesh file:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"mesh = load_mesh(restart_filename)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"This is then needed for the semidiscretization:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"We then define a new time span for the simulation that takes as starting time the one form the snapshot:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"tspan = (load_time(restart_filename), 2.0)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"We now also take the last dt, so that our solver does not need to first find one to fulfill the CFL condition:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"dt = load_dt(restart_filename)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"The ODE that we will pass to the solver is now:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"ode = semidiscretize(semi, tspan, restart_filename)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"You should now define a SaveSolutionCallback similar to the original simulation, but with save_initial_solution=false, otherwise our initial snapshot will be overwritten. If you are using one file for the original simulation and the restart you can reuse your SaveSolutionCallback, but need to set","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"save_solution.condition.save_initial_solution = false","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"Before we compute the solution using OrdinaryDiffEq.jl we need to set the integrator and its time step number, e.g.:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"integrator = init(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt=dt, save_everystep=false, callback=callbacks);\nload_timestep!(integrator, restart_filename)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"Now we can compute the solution:","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"sol = solve!(integrator)","category":"page"},{"location":"restart/","page":"Restart simulation","title":"Restart simulation","text":"An example is in examples/structured_2d_dgsem/elixir_advection_restart.jl.","category":"page"},{"location":"meshes/structured_mesh/#Structured-mesh","page":"Structured mesh","title":"Structured mesh","text":"","category":"section"},{"location":"meshes/structured_mesh/","page":"Structured mesh","title":"Structured mesh","text":"The StructuredMesh is a structured, curvilinear, conforming mesh type available for one-, two-, and three-dimensional simulations. An application of the StructuredMesh using a user-defined mapping is provided by one of the tutorials.","category":"page"},{"location":"meshes/structured_mesh/","page":"Structured mesh","title":"Structured mesh","text":"Due to its curvilinear nature, (numerical) fluxes need to implement methods dispatching on the normal::AbstractVector. Rotationally invariant equations such as the compressible Euler equations can use FluxRotated to wrap numerical fluxes implemented only for Cartesian meshes. This simplifies the re-use of existing functionality for the TreeMesh but is usually less efficient, cf. PR #550.","category":"page"},{"location":"development/#Development","page":"Development","title":"Development","text":"","category":"section"},{"location":"development/#interactive-use-of-julia","page":"Development","title":"Interactive use of Julia","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"When a Julia program is executed, Julia first loads and parses all code. Then, the just-in-time compiler has to compile all functions at their first use, which incurs an overhead each time a program is run. For proper packages and commands executed in the REPL (= \"return-eval-print loop\", which is what the Julia community calls the interactive command-line prompt that opens when executing julia without any files as arguments), however, the previously compiled functions are cached. Therefore, Trixi.jl should generally always be used interactively from the REPL without closing Julia during development, as it allows much faster turnaround times.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"If you naively run Trixi.jl from the REPL, you will not be able to change your Trixi.jl source files and then run the changed code without restarting the REPL, which destroys any potential benefits from caching. However, restarting Julia can be avoided by using the Revise.jl package, which tracks changed files and re-loads them automatically. Therefore, it is highly recommended to first install Revise with the following command in Julia: To enter the package REPL mode, press ] in the standard Julia REPL mode. Then, execute","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"(@v1.9) pkg> add Revise","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Now you are able to run Trixi.jl from the REPL, change Trixi.jl code between runs, and enjoy the advantages of the compilation cache! Before you start using Revise regularly, please be aware of some of the Pitfalls when using Revise.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Another recommended package for working from the REPL is OhMyREPL.jl. It can be installed by running","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"(@v1.9) pkg> add OhMyREPL","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"and adds syntax highlighting, bracket highlighting, and other helpful improvements for using Julia interactively. To automatically use OhMyREPL when starting the REPL, follow the instructions given in the official documentation.","category":"page"},{"location":"development/#Running-Trixi.jl-interactively-in-the-global-environment","page":"Development","title":"Running Trixi.jl interactively in the global environment","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"If you've installed Trixi.jl and Revise in your default environment, begin by executing:","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"This will start the Julia REPL. Then, run","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia> using Revise; using Trixi","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"You can run a simulation by executing","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia> trixi_include(default_example())","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Together, all of these commands can take some time, roughly half a minute on a modern workstation. Most of the time is spent on compilation of Julia code etc. If you execute the last command again in the same REPL, it will finish within a few milliseconds (maybe ~45 on a modern workstation). This demonstrates the second reason for using the REPL: the compilation cache. That is, those parts of the code that do not change between two Trixi.jl runs do not need to be recompiled and thus execute much faster after the first run.","category":"page"},{"location":"development/#Manually-starting-Trixi.jl-in-the-local-environment","page":"Development","title":"Manually starting Trixi.jl in the local environment","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"If you followed the installation instructions for developers, execute Julia with the project directory set to the run directory of the program/tool you want to use. For example, to run Trixi.jl this way, you need to start the REPL with","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia --project=path/to/Trixi.jl/run","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"and execute","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia> using Revise; using Trixi","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"to load Revise and Trixi.jl. You can then proceed with the usual commands and run Trixi.jl as in the example above. The --project flag is required such that Julia can properly load Trixi.jl and all dependencies if Trixi.jl is not installed in the global environment. The same procedure also applies should you opt to install the postprocessing tool Trixi2Vtk manually such that you can modify their implementations.","category":"page"},{"location":"development/#Pitfalls-when-using-Revise","page":"Development","title":"Pitfalls when using Revise","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"While Revise is a great help for developing Julia code, there are a few situations to watch out for when using Revise. The following list of potential issues is based on personal experiences of the Trixi.jl developers and probably incomplete. Further information on limitations and possible issues with Revise can be found in the official documentation.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"tip: If in doubt, restart the REPL\nOftentimes, it is possible to recover from issues with Revise by fixing the offending code. Sometimes, however, this is not possible or you might have troubles finding out what exactly caused the problems. Therefore, in these cases, or if in doubt, restart the REPL to get a fresh start.","category":"page"},{"location":"development/#Syntax-errors-are-easy-to-miss","page":"Development","title":"Syntax errors are easy to miss","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Revise does not stop on syntax errors, e.g., when you accidentally write a[i) instead of a[i]. In this case, Revise reports an error but continues to use the old version of your files! This is especially dangerous for syntax errors, as they are detected while Revise reloads changed code, which happens in the beginning of a new execution. Thus, the syntax error message quickly disappears from the terminal once Trixi.jl starts writing output to the screen and you might not even have noticed that an error occurred at all.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Therefore, when you are deep in a coding/debugging session and wonder why your code modifications do not seem to have any effect, scroll up in your terminal to check if you missed earlier syntax errors, or - if in doubt - restart your REPL.","category":"page"},{"location":"development/#Files-are-not-tracked-after-changing-branches","page":"Development","title":"Files are not tracked after changing branches","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Sometimes, Revise stops tracking files when changing the Git branch. That is, modifications to Trixi.jl's source files will not be reloaded by Revise and thus have no effect of a currently running REPL session. This issue is particularly annoying for a developer, since it does not come with any warning! Therefore, it is good practice to always restart the REPL after changing branches.","category":"page"},{"location":"development/#Changes-to-type-definitions-are-not-allowed","page":"Development","title":"Changes to type definitions are not allowed","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Revise cannot handle changes to type definitions, e.g., when modifying the fields in a struct. In this case, Revise reports an error and refuses to run your code unless you undo the modifications. Once you undo the changes, Revise will usually continue to work as expected again. However, if you want to keep your type modifications, you need to restart the REPL.","category":"page"},{"location":"development/#Using-the-Julia-REPL-effectively","page":"Development","title":"Using the Julia REPL effectively","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"The Julia manual is an excellent resource to learn Julia. Here, we list some helpful commands than can increase your productivity in the Julia REPL.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Use the REPL help mode entered by typing ?.\njulia> using Trixi\n\nhelp?> trixi_include\nsearch: trixi_include\n\n trixi_include([mod::Module=Main,] elixir::AbstractString; kwargs...)\n\n include the file elixir and evaluate its content in the global scope of module mod. You can override specific\n assignments in elixir by supplying keyword arguments. It's basic purpose is to make it easier to modify some\n parameters while running Trixi.jl from the REPL. Additionally, this is used in tests to reduce the computational\n burden for CI while still providing examples with sensible default values for users.\n\n Examples\n ≡≡≡≡≡≡≡≡≡≡\n\n julia> trixi_include(@__MODULE__, default_example(), tspan=(0.0, 0.1))\n [...]\n\n julia> sol.t[end]\n 0.1\nYou can copy and paste REPL history including julia> prompts into the REPL.\nUse tab completion in the REPL, both for names of functions/types/variables and for function arguments.\njulia> flux_ranocha( # and TAB\nflux_ranocha(u_ll, u_rr, orientation::Integer, equations::CompressibleEulerEquations1D) in Trixi at ~/.julia/dev/Trixi/src/equations/compressible_euler_1d.jl:390\nflux_ranocha(u_ll, u_rr, orientation::Integer, equations::CompressibleEulerEquations2D) in Trixi at ~/.julia/dev/Trixi/src/equations/compressible_euler_2d.jl:839\n[...]\nUse methodswith to discover methods associated to a given type etc.\njulia> methodswith(CompressibleEulerEquations2D)\n[1] initial_condition_convergence_test(x, t, equations::CompressibleEulerEquations2D) in Trixi at ~/.julia/dev/Trixi/src/equations/compressible_euler_2d.jl:51\n[...]\nUse @which (or @edit) for method calls.\njulia> @which trixi_include(default_example())\ntrixi_include(elixir::AbstractString; kwargs...) in Trixi at ~/.julia/dev/Trixi/src/auxiliary/special_elixirs.jl:36\nUse apropos to search through the documentation and docstrings.\njulia> apropos(\"MHD\")\nTrixi.IdealGlmMhdEquations3D\nTrixi.IdealGlmMhdMulticomponentEquations2D\nTrixi.calc_fast_wavespeed_roe\nTrixi.IdealGlmMhdEquations1D\nTrixi.initial_condition_constant\nTrixi.flux_nonconservative_powell\nTrixi.GlmSpeedCallback\nTrixi.flux_derigs_etal\nTrixi.flux_hindenlang_gassner\nTrixi.initial_condition_convergence_test\nTrixi.min_max_speed_naive\nTrixi.IdealGlmMhdEquations2D\nTrixi.IdealGlmMhdMulticomponentEquations1D\n[...]","category":"page"},{"location":"development/#Text-editors","page":"Development","title":"Text editors","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"When writing code, the choice of text editor can have a significant impact on productivity and developer satisfaction. While using the default text editor of the operating system has its own benefits (specifically the lack of an explicit installation procure), usually it makes sense to switch to a more programming-friendly tool. In the following, a few of the many options are listed and discussed:","category":"page"},{"location":"development/#VS-Code","page":"Development","title":"VS Code","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Visual Studio Code is a modern open source editor with good support for Julia. While Juno had some better support in the past, the developers of Juno and the Julia VS Code plugin are joining forces and concentrating on VS Code since support of Atom has been suspended. Basically, all comments on Juno below also apply to VS Code.","category":"page"},{"location":"development/#Juno","page":"Development","title":"Juno","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"If you are new to programming or do not have a preference for a text editor yet, Juno is a good choice for developing Julia code. It is based on Atom, a sophisticated and widely used editor for software developers, and is enhanced with several Julia-specific features. Furthermore and especially helpful for novice programmers, it has a MATLAB-like appearance with easy and interactive access to the current variables, the help system, and a debugger.","category":"page"},{"location":"development/#Vim-or-Emacs","page":"Development","title":"Vim or Emacs","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Vim and Emacs are both very popular editors that work great with Julia. One of their advantages is that they are text editors without a GUI and as such are available for almost any operating system. They also are preinstalled on virtually all Unix-like systems. However, Vim and Emacs come with their own, steep learning curve if they have never been used before. Therefore, if in doubt, it is probably easier to get started with a classic GUI-based text editor (like Juno). If you decide to use Vim or Emacs, make sure that you install the corresponding Vim plugin julia-vim or Emacs major mode julia-emacs.","category":"page"},{"location":"development/#Debugging","page":"Development","title":"Debugging","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Julia offers several options for debugging. A classical debugger is available with the Debugger.jl package or in the Julia extension for VS Code. However, it can be quite slow and, at the time of writing (January 2023), currently does not work properly with Trixi.jl. The Infiltrator.jl package on the other hand does not offer all features of a full debugger, but is a fast and simple tool that allows users to set breakpoints to open a local REPL session and access the call stack and variables.","category":"page"},{"location":"development/#Infiltrator","page":"Development","title":"Infiltrator","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"The Infiltrator package provides fast, interactive breakpoints using the @infiltrate command, which drops the user into a local REPL session. From there, it is possible to access local variables, see the call stack, and execute statements.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"The package can be installed in the Julia REPL by executing","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"(@v1.9) pkg> add Infiltrator","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"To load the package in the Julia REPL execute","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia> using Infiltrator","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Breakpoints can be set by adding a line with the @infiltrate macro at the respective position in the code. Use Revise if you want to set and delete breakpoints in your package without having to restart Julia.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"note: Use `@autoinfiltrate` when debugging Trixi.jl\nWhen running Julia inside a package environment, e.g., inside the source code of Trixi.jl itself, the @infiltrate macro only works if Infiltrator has been added to the package dependencies. To avoid this, you can use the (non-exported) @autoinfiltrate macro in Trixi.jl, which only requires Infiltrator.jl to be available in the current environment stack and will auto-load it for you.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Triggering the breakpoint starts a REPL session where it is possible to interact with the current local scope. Possible commands are:","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"@locals: Print the local variables.\n@exfiltrate: Save the local variables to a global storage, which can be accessed with the safehouse variable outside the Infiltrator session.\n@trace: Print the current stack trace.\nExecute other arbitrary statements\n?: Print a help list with all options","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"To finish a debugging session, either use @continue to continue and eventually stop at the next breakpoint or @exit to skip further breakpoints. After the code has finished, local variables saved with @exfiltrate can be accessed in the REPL using the safehouse variable.","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"Limitations of using Infiltrator.jl are that local variables cannot be changed, and that it is not possible to step into further calls or access other function scopes.","category":"page"},{"location":"development/#Releasing-a-new-version-of-Trixi.jl,-Trixi2Vtk","page":"Development","title":"Releasing a new version of Trixi.jl, Trixi2Vtk","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Check whether everything is okay, tests pass etc.\nSet the new version number in Project.toml according to the Julian version of semver. Commit and push.\nComment @JuliaRegistrator register on the commit setting the version number.\nJuliaRegistrator will create a PR with the new version in the General registry. Wait for it to be merged.\nIncrement the version number in Project.toml again with suffix -pre. For example, if you have released version v0.2.0, use v0.2.1-pre as new version number.\nWhen a new version of Trixi.jl was released, check whether the [compat] entries in test/Project.toml in Trixi2Vtk should be updated. When a new version of Trixi2Vtk was released, check whether the [compat] entries in docs/Project.toml in Trixi.jl should be updated.\nThese entries will also be checked regularly by CompatHelper (once a day). Hence, if everything was released correctly, you should only need to do these checks manually if new minor versions with changes in the docs of Trixi2Vtk were released but no new version of Trixi.jl was released afterwards.","category":"page"},{"location":"development/#Preview-of-the-documentation","page":"Development","title":"Preview of the documentation","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"You can build the documentation of Trixi.jl locally by running","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'\njulia --project=docs --color=yes docs/make.jl","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"from the Trixi.jl main directory. Then, you can look at the html files generated in docs/build. For PRs triggered from branches inside the Trixi.jl main repository previews of the new documentation are generated at https://trixi-framework.github.io/Trixi.jl/previews/PRXXX, where XXX is the number of the PR. This does not work for PRs from forks for security reasons (since anyone could otherwise push arbitrary stuff to the Trixi.jl website, including malicious code).","category":"page"},{"location":"development/#trixi2vtk-dev","page":"Development","title":"Developing Trixi2Vtk","text":"","category":"section"},{"location":"development/","page":"Development","title":"Development","text":"Trixi2Vtk has Trixi.jl as dependency and uses Trixi.jl's implementation to, e.g., load mesh files. When developing Trixi2Vtk, one may want to change functions in Trixi.jl to allow them to be reused in Trixi2Vtk. To use a locally modified Trixi.jl clone instead of a Trixi.jl release, one can tell Pkg to use the local source code of Trixi.jl instead of a registered version by running","category":"page"},{"location":"development/","page":"Development","title":"Development","text":"(@v1.9) pkg> develop path/to/Trixi.jl","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"EditURL = \"../../../literate/src/files/first_steps/create_first_setup.jl\"","category":"page"},{"location":"tutorials/first_steps/create_first_setup/#create_first_setup","page":"1.2 Create your first setup","title":"1.2: First steps in Trixi.jl: Create your first setup","text":"","category":"section"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"In this part of the introductory guide, we will create a first Trixi.jl setup as an extension of elixir_advection_basic.jl. Since Trixi.jl has a common basic structure for the setups, you can create your own by extending and modifying the following example.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Let's consider the linear advection equation for a state u = u(x y t) on the two-dimensional spatial domain -1 1 times -1 1 with a source term","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"fracpartialpartial tu + fracpartialpartial x (02 u) - fracpartialpartial y (07 u) = - 2 e^-t\nsinbigl(2 pi (x - t) bigr) sinbigl(2 pi (y - t) bigr)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"with the initial condition","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"u(x y 0) = sinbigl(pi x bigr) sinbigl(pi y bigr)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"and periodic boundary conditions.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The first step is to create and open a file with the .jl extension. You can do this with your favorite text editor (if you do not have one, we recommend VS Code). In this file, you will create your setup. The file can then be executed in Julia using, for example, trixi_include(). Alternatively, you can execute each line of the following code one by one in the Julia REPL. This will generate useful output for nearly every command and improve your comprehension of the process.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"To be able to use functionalities of Trixi.jl, you always need to load Trixi.jl itself and the OrdinaryDiffEq.jl package.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"using Trixi\nusing OrdinaryDiffEq","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The next thing to do is to choose an equation that is suitable for your problem. To see all the currently implemented equations, take a look at src/equations. If you are interested in adding a new physics model that has not yet been implemented in Trixi.jl, take a look at the tutorials Adding a new scalar conservation law or Adding a non-conservative equation.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The linear scalar advection equation in two spatial dimensions","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"fracpartialpartial tu + fracpartialpartial x (a_1 u) + fracpartialpartial y (a_2 u) = 0","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"is already implemented in Trixi.jl as LinearScalarAdvectionEquation2D, for which we need to define a two-dimensional parameter advection_velocity describing the parameters a_1 and a_2. Appropriate for our problem is (0.2, -0.7).","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"advection_velocity = (0.2, -0.7)\nequations = LinearScalarAdvectionEquation2D(advection_velocity)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"To solve our problem numerically using Trixi.jl, we have to discretize the spatial domain, for which we set up a mesh. One of the most used meshes in Trixi.jl is the TreeMesh. The spatial domain used is -1 1 times -1 1. We set an initial number of elements in the mesh using initial_refinement_level, which describes the initial number of hierarchical refinements. In this simple case, the total number of elements is 2^initial_refinement_level throughout the simulation. The variable n_cells_max is used to limit the number of elements in the mesh, which cannot be exceeded when using adaptive mesh refinement.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"All minimum and all maximum coordinates must be combined into Tuples.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"coordinates_min = (-1.0, -1.0)\ncoordinates_max = ( 1.0, 1.0)\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level = 4,\n n_cells_max = 30_000)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"To approximate the solution of the defined model, we create a DGSEM solver. The solution in each of the recently defined mesh elements will be approximated by a polynomial of degree polydeg. For more information about discontinuous Galerkin methods, check out the Introduction to DG methods tutorial. By default, in the weak formulation DGSEM initializes the surface flux as flux_central and uses the physical flux for the volume integral.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"solver = DGSEM(polydeg=3)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now we need to define an initial condition for our problem. All the already implemented initial conditions for LinearScalarAdvectionEquation2D can be found in src/equations/linear_scalar_advection_2d.jl. If you want to use, for example, a Gaussian pulse, it can be used as follows:","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"initial_conditions = initial_condition_gauss","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"But to show you how an arbitrary initial condition can be implemented in a way suitable for Trixi.jl, we define our own initial conditions.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"u(x y 0) = sinbigl(pi x bigr) sinbigl(pi y bigr)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The initial conditions function must take spatial coordinates, time and equation as arguments and returns an initial condition as a statically sized vector SVector. Following the same structure, you can define your own initial conditions. The time variable t can be unused in the initial condition, but might also be used to describe an analytical solution if known. If you use the initial condition as analytical solution, you can analyze your numerical solution by computing the error, see also the section about analyzing the solution.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"function initial_condition_sinpi(x, t, equations::LinearScalarAdvectionEquation2D)\n u = sinpi(x[1]) * sinpi(x[2])\n return SVector(u)\nend\ninitial_condition = initial_condition_sinpi","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The next step is to define a function of the source term corresponding to our problem.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"f(u x y t) = - 2 e^-t sinbigl(2 pi (x - t) bigr) sinbigl(2 pi (y - t) bigr)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"This function must take the state variable, the spatial coordinates, the time and the equation itself as arguments and returns the source term as a static vector SVector.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"function source_term_exp_sinpi(u, x, t, equations::LinearScalarAdvectionEquation2D)\n u = - 2 * exp(-t) * sinpi(2*(x[1] - t)) * sinpi(2*(x[2] - t))\n return SVector(u)\nend","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now we collect all the information that is necessary to define a spatial discretization,","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;\n source_terms = source_term_exp_sinpi)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"which leaves us with an ODE problem in time with a span from 0.0 to 1.0. This approach is commonly referred to as the method of lines.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"tspan = (0.0, 1.0)\node = semidiscretize(semi, tspan)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"At this point, our problem is defined. We will use the solve function defined in OrdinaryDiffEq.jl to get the solution. OrdinaryDiffEq.jl gives us the ability to customize the solver using callbacks without actually modifying it. Trixi.jl already has some implemented Callbacks. The most widely used callbacks in Trixi.jl are step control callbacks that are activated at the end of each time step to perform some actions, e.g. to print statistics. We will show you how to use some of the common callbacks.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"To print a summary of the simulation setup at the beginning and to reset timers to zero, we use the SummaryCallback.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"summary_callback = SummaryCallback()","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"We also want to analyze the current state of the solution in regular intervals. The AnalysisCallback outputs some useful statistical information during the simulation every interval time steps.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"analysis_callback = AnalysisCallback(semi, interval = 20)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"To indicate that a simulation is still running, we utilize the inexpensive AliveCallback to periodically print information to the screen, such as the current time, every alive_interval time steps.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"alive_callback = AliveCallback(alive_interval = 10)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"It is also possible to control the time step size using the StepsizeCallback if the time integration method isn't adaptive itself. To get more details, look at CFL based step size control.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"stepsize_callback = StepsizeCallback(cfl = 0.9)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"To save the current solution in regular intervals we use the SaveSolutionCallback. We would like to save the initial and final solutions as well. The data will be saved as HDF5 files located in the out folder. Afterwards it is possible to visualize a solution from saved files using Trixi2Vtk.jl and ParaView, which is described below in the section Visualize the solution.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"save_solution = SaveSolutionCallback(interval = 20,\n save_initial_solution = true,\n save_final_solution = true)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Alternatively, we have the option to print solution files at fixed time intervals.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"save_solution = SaveSolutionCallback(dt = 0.1,\n save_initial_solution = true,\n save_final_solution = true)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Another useful callback is the SaveRestartCallback. It saves information for restarting in regular intervals. We are interested in saving a restart file for the final solution as well. To perform a restart, you need to configure the restart setup in a special way, which is described in the section Restart simulation.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"save_restart = SaveRestartCallback(interval = 100, save_final_restart = true)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Create a CallbackSet to collect all callbacks so that they can be passed to the solve function.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback, stepsize_callback,\n save_solution, save_restart);\nnothing #hide","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The last step is to choose the time integration method. OrdinaryDiffEq.jl defines a wide range of ODE solvers, including the three-stage, third-order strong stability preserving Runge-Kutta method SSPRK33. We will pass the ODE problem, the ODE solver and the callbacks to the solve function. Also, to use StepsizeCallback, we must explicitly specify the initial trial time step dt, the selected value is not important, because it will be overwritten by the StepsizeCallback. And there is no need to save every step of the solution, as we are only interested the output provided by our callback SaveSolutionCallback.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"sol = solve(ode, SSPRK33(); dt = 1.0, save_everystep = false, callback = callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Finally, we print the timer summary.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"summary_callback()","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now you can plot the solution as shown below, analyze it and improve the stability, accuracy or efficiency of your setup.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/#Visualize-the-solution","page":"1.2 Create your first setup","title":"Visualize the solution","text":"","category":"section"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"In the previous part of the tutorial, we calculated the final solution of the given problem, now we want to visualize it. A more detailed explanation of visualization methods can be found in the section Visualization.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/#Using-Plots.jl","page":"1.2 Create your first setup","title":"Using Plots.jl","text":"","category":"section"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"The first option is to use the Plots.jl package directly after calculations, when the solution is saved in the sol variable.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"using Plots","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"As was shown in the Getting started section, you can plot all variables from the system of equations by executing the following.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"plot(sol)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Alternatively, you can configure the plot more precisely. Trixi.jl provides a special data type, PlotData2D, to extract the visualization data from the solution.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"pd = PlotData2D(sol);\nnothing #hide","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"You can plot specific variables from the system of equations by referring to their names. To obtain the names of all variables, execute the following.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"@show pd.variable_names;\nnothing #hide","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Plot the variable named \"scalar\" (which is the name of the variable for the linear advection equation in Trixi.jl).","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"plot(pd[\"scalar\"])","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Mesh extraction is possible using the getmesh function. Plots.jl has the plot! function that allows you to modify an already built graph.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"plot!(getmesh(pd))","category":"page"},{"location":"tutorials/first_steps/create_first_setup/#Using-Trixi2Vtk.jl","page":"1.2 Create your first setup","title":"Using Trixi2Vtk.jl","text":"","category":"section"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Another way to visualize a solution is to extract it from a saved HDF5 file. After we used the solve function with SaveSolutionCallback there is a file with the final solution. It is located in the out folder and is named as follows: solution_index.h5. The index is the final time step of the solution that is padded to 6 digits with zeros from the beginning. With Trixi2Vtk you can convert the HDF5 output file generated by Trixi.jl into a VTK/VTU files. VTK/VTU are specialized formats designed to store structured data required for visualization purposes. This can be used in visualization tools such as ParaView or VisIt to plot the solution.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"If you haven't added Trixi2Vtk.jl to your project yet, you can add it as follows.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"import Pkg\nPkg.add([\"Trixi2Vtk\"])","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now we load the Trixi2Vtk.jl package and convert the file out/solution_000000032.h5 with the final solution using the trixi2vtk function saving the resulting file in the out folder.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"using Trixi2Vtk\ntrixi2vtk(joinpath(\"out\", \"solution_000000032.h5\"), output_directory=\"out\")","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now two files solution_000000032.vtu and solution_000000032_celldata.vtu have been generated in the out folder. The first one contains all the information for visualizing the solution, the second one contains all the cell-based or discretization-based information.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now let's visualize the solution from the generated files in ParaView. Follow this short instruction to get the visualization.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Download, install and open ParaView.\nPress Ctrl+O and select the generated files solution_000000032.vtu and solution_000000032_celldata.vtu from the out folder.\nIn the upper-left corner in the Pipeline Browser window, left-click on the eye-icon near solution_000000032.vtu.\nIn the lower-left corner in the Properties window, change the Coloring from Solid Color to scalar. This already generates the visualization of the final solution.\nNow let's add the mesh to the visualization. In the upper-left corner in the Pipeline Browser window, left-click on the eye-icon near solution_000000032_celldata.vtu.\nIn the lower-left corner in the Properties window, change the Representation from Surface to Wireframe. Then a white grid should appear on the visualization.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Now, if you followed the instructions exactly, you should get a similar image as shown in the section Using Plots.jl:","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"(Image: paraview_trixi2vtk_example)","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"After completing this tutorial you are able to set up your own simulations with Trixi.jl. If you have an interest in contributing to Trixi.jl as a developer, refer to the third part of the introduction titled Changing Trixi.jl itself.","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"Sys.rm(\"out\"; recursive=true, force=true) #hide","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"","category":"page"},{"location":"tutorials/first_steps/create_first_setup/","page":"1.2 Create your first setup","title":"1.2 Create your first setup","text":"This page was generated using Literate.jl.","category":"page"},{"location":"visualization/#visualization","page":"Visualization","title":"Visualization","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"There are two possible approaches to visualize results from Trixi.jl: either directly from the REPL using Plots.jl or with ParaView/VisIt by postprocessing Trixi.jl's output files with Trixi2Vtk.","category":"page"},{"location":"visualization/#Plots.jl","page":"Visualization","title":"Plots.jl [experimental]","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"By far the easiest and most convenient plotting approach is to use the powerful Plots.jl package to directly visualize Trixi.jl's results from the REPL. In the following, you will find more information on a number of topics for how to use Plots.jl together with Trixi.jl:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Getting started\nCustomizing plot results via a PlotData2D object\nPlotting a 3D solution as a 2D plot\nCreating a 1D plot\nPlotting a 2D or 3D solutions as a 1D plot\nVisualizing results during a simulation","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"note: Note\nPlotting via Plots.jl is still considered an experimental feature and might change in any future releases.","category":"page"},{"location":"visualization/#getting-started-plots-jl","page":"Visualization","title":"Getting started","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"After running a simulation with Trixi.jl in the REPL, load the Plots package with","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> using Plots","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"To visualize the solution, execute","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(sol)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Here we assume that sol holds the return value of the solve(...) method (with type SciMLBase.ODESolution), which is the default variable name when you use one of the example elixirs. This will generate a grid layout with one subplot for each solution variable, convenient for getting an overview of the current solution:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: plot-sol)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"You can save the resulting file as a PNG image file by calling savefig(...) with an output file name that ends in .png, e.g.,","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> savefig(\"solution-overview.png\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"In Trixi.jl, two plot types are available: 2D heatmap plots and 1D line plots. If you use plot(sol), Trixi.jl will automatically choose the plot type that fits the dimensions of the sol input: 2D/3D data will be visualized as a heatmap, 1D data as a line plot. For more fine-grained control over what to plot, you can create such an object yourself, which can either be a PlotData2D or a PlotData1D object. For further details on both of these see below:","category":"page"},{"location":"visualization/#Customizing-plot-results-via-a-PlotData2D-object","page":"Visualization","title":"Customizing plot results via a PlotData2D object","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"For more fine-grained control over what to plot, first create a PlotData2D object by executing","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData2D(sol)\njulia> pd = PlotData2D(u, semi)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"where u is an array containing the solution and semi is the semidiscretization. For example, if PlotData2D(sol.u[2], semi) is specified, this will create a PlotData2D instance from the 2nd saved time-step. If PlotData2D(sol(0.5), semi) is specified, it will construct a PlotData2D instance using OrdinaryDiffEq.jl's interpolation to evaluate the solution at time t=0.5.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This takes the results generated by Trixi.jl and stores them in a data format that can be understood by the Plots package, and pd holds all data relevant for plotting sol. You can pass variable names as strings to pd using a dictionary-like syntax, e.g.,","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(pd[\"rho\"])","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This will create a single 2D heatmap plot of the variable rho:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: plot-rho)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"The default plot type and style can be overridden by passing any additional arguments that are understood by the Plots package. For example, to change the color scheme and add names to the axes, modify the previous command to","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(pd[\"rho\"], seriescolor = :heat, xguide=\"x\", yguide=\"y\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"to yield","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: plot-rho-modified)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"For more details on the various format options for plot, please consult the Plots documentation.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"In addition, you can plot the mesh lines on top of the solution variables by calling the getmesh(...) function on the PlotData2D object","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot!(getmesh(pd)) # here we use `plot!` with an `!` to add to the previous plot","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"which modifies the previous plot to","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: plot-rho-modified-mesh)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"By default, PlotData2D will convert the conserved variables to primitive variables, but this can be changed by passing an appropriate conversion function in the solution_variables keyword argument, similar to the behavior of the SaveSolutionCallback:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData2D(sol; solution_variables=cons2cons) # Plot conservative variables","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"There are several other keyword arguments that influence how the solution data is processed for visualization with the Plots package. A detailed explanation can be found in the docstring of the PlotData2D constructor.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Another way to change the appearance of a plot is to convert the solution to a uniformly refined mesh before plotting. This can be helpful, e.g., when trying different settings for a simulation with adaptive mesh refinement, where one would like to ignore the mesh changes when comparing solutions. This is achieved with adapt_to_mesh_level, which uses the mesh adaptation routines to adapt the solution to a uniform grid. For example, the AMR solution from above could be preprocessed with","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData2D(adapt_to_mesh_level(sol, 4)...)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"When plotted together with the mesh, this will yield the following visualization:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: plot-rho-uniform-mesh)","category":"page"},{"location":"visualization/#Plotting-a-user-defined-scalar-field","page":"Visualization","title":"Plotting a user-defined scalar field","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"To plot a scalar quantity, one can call plot(ScalarPlotData2D(u, semi)), where u is an array of nodal values of the scalar field to plot. The layout of u should match the layout of the x and y nodal coordinates of the respective solver. For example, after running trixi_include(joinpath(\"examples\", \"unstructured_2d_dgsem\", \"elixir_euler_wall_bc.jl\")), the following can be used to plot the function f(x, y) = x * y:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"x = view(semi.cache.elements.node_coordinates, 1, :, :, :)\ny = view(semi.cache.elements.node_coordinates, 2, :, :, :)\nplot(ScalarPlotData2D(x .* y, semi))","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This produces the following plot:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: scalar-plotting-example)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This routine can be used to visualize scalar quantities which depend on the solution, such as the norm of a velocity vector or two-dimensional vorticity. For example, we can visualize vorticity for a compressible version of the Brown-Minion vortex problem:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> using Trixi, Plots\n\njulia> redirect_stdout(devnull) do\n # runs the elixir without any output from callbacks etc.\n trixi_include(@__MODULE__,\n joinpath(examples_dir(), \"dgmulti_2d\", \"elixir_euler_brown_minion_vortex.jl\"))\n end\n[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.\n\njulia> function compute_vorticity(velocity, mesh, equations::CompressibleEulerEquations2D,\n dg::DGMulti, cache)\n rd = dg.basis\n md = mesh.md\n @unpack Dr, Ds = rd\n @unpack rxJ, sxJ, ryJ, syJ, J = md\n v1, v2 = velocity\n dv1dy = ryJ .* (Dr * v1) + syJ .* (Ds * v1)\n dv2dx = rxJ .* (Dr * v2) + sxJ .* (Ds * v2)\n return dv2dx - dv1dy\n end;\n\njulia> compute_vorticity(velocity, semi) =\n compute_vorticity(velocity, Trixi.mesh_equations_solver_cache(semi)...);\n\njulia> function get_velocity(sol)\n rho, rhou, rhov, E = StructArrays.components(sol.u[end])\n v1 = rhou ./ rho\n v2 = rhov ./ rho\n return v1, v2\n end;\n\njulia> vorticity = compute_vorticity(get_velocity(sol), semi);\n\njulia> plot(ScalarPlotData2D(vorticity, semi;\n variable_name = \"Vorticity at t = $(sol.prob.tspan[end])\"))\nPlot{Plots.GRBackend() n=1}","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This produces the following plot of vorticity.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: vorticity-example)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Since the mesh is fairly coarse, we observe numerical artifacts due to the low resolution. These errors vanish under mesh refinement; for example, doubling the mesh resolution by running","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi_include(joinpath(examples_dir(), \"dgmulti_2d\", \"elixir_euler_BM_vortex.jl\"), cells_per_dimension = 32)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"yields the following plot of vorticity:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: vorticity-example-refined)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"note: Note\nWhen visualizing a scalar field, the plotted solution is reinterpolated using a high order polynomial approximation. Thus, small discrepancies may be observed when the underlying data is highly non-smooth or under-resolved.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"ScalarPlotData2D objects can also be used with Makie through iplot. For example, the following code plots two surfaces:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> using Trixi, CairoMakie\n\njulia> redirect_stdout(devnull) do\n # runs the elixir without any output from callbacks etc.\n trixi_include(@__MODULE__,\n joinpath(examples_dir(), \"unstructured_2d_dgsem\", \"elixir_euler_wall_bc.jl\"))\n end\n[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.\n\njulia> x = view(semi.cache.elements.node_coordinates, 1, :, :, :); # extracts the node x coordinates\n\njulia> y = view(semi.cache.elements.node_coordinates, 2, :, :, :); # extracts the node y coordinates\n\njulia> fig_ax_plt = iplot(ScalarPlotData2D((@. 1 - .25*(x^2 + y^2)), semi), plot_mesh=true, colormap=:viridis);\n\njulia> fig_ax_plt2 = iplot!(fig_ax_plt, ScalarPlotData2D((@. .125*(x+y)), semi), plot_mesh=true, colormap=:blues)\nFigureAxisPlot()","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This creates the following plot:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: ScalarPlotData2D_example)","category":"page"},{"location":"visualization/#Plotting-a-3D-solution-as-a-2D-plot","page":"Visualization","title":"Plotting a 3D solution as a 2D plot","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"It is possible to plot 2D slices from 3D simulation data using the TreeMesh with the same commands as above:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(sol) # `sol` is from a 3D simulation","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"By default, plotting sol or creating a PlotData2D object from a 3D simulation will create a 2D slice of the solution in the xy-plane. You can customize this behavior by explicitly creating a PlotData2D object and passing appropriate keyword arguments:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"slice specifies the plane which is being sliced and can be :xy, :xz, or :yz (default: :xy)\npoint specifies a three-dimensional point. The sliced plane is then created such that it lies on the point (default: (0.0, 0.0, 0.0)).","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"All other attributes for PlotData2D objects apply here as well.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"For example, to plot the velocity field orthogonal to the yz-plane at different x-axis locations, you can execute","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi_include(joinpath(examples_dir(), \"tree_3d_dgsem\", \"elixir_euler_taylor_green_vortex.jl\"), tspan=(0.0, 1.0))\n[...]\n\njulia> plots = []\nAny[]\n\njulia> for x in range(0, stop=pi/2, length=6)\n pd = PlotData2D(sol, slice=:yz, point=(x, 0.0, 0.0))\n push!(plots, plot(pd[\"v1\"], clims=(-1,1), title=\"x = \"*string(round(x, digits=2))))\n end\n\njulia> plot(plots..., layout=(2, 3), size=(750,350))","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"which results in a 2x3 grid of slices of the yz-plane:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: plot-v1-0.0-to-0.5pi)","category":"page"},{"location":"visualization/#Creating-a-1D-plot","page":"Visualization","title":"Creating a 1D plot","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"When plotting a 1D solution with","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(sol) # `sol` is from a 1D simulation","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Trixi.jl automatically creates a PlotData1D object and visualizes it as a line plot: (Image: 1d-plot)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"To customize your 1D plot, you can create a PlotData1D object manually as follows:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData1D(sol)\njulia> pd = PlotData1D(u, semi)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"The behavior is analogous to the PlotData2D behavior.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"In a very similar fashion to PlotData2D, you can customize your plot:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"plot(pd) creates the same plot as in plot(sol).\nplot(pd[\"rho\", \"p\"]) only plots specific variables. In this case rho and p.\nplot!(getmesh(pd)) adds mesh lines after creating a plot.\nAny attributes from Plots can be used, e.g., plot(pd, yguide=:temperature).\npd = PlotData1D(adapt_to_mesh_level(sol, 4)...) adapts the mesh before plotting (in this example to a mesh with refinement level 4).","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"You can also customize the PlotData1D object itself by passing attributes to the PlotData1D constructor:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"solution_variables specifies the variables to be plotted.\nnvisnodes sets the amount of nodes per element which the solution then is interpolated on.","category":"page"},{"location":"visualization/#Plotting-a-2D-or-3D-solutions-as-a-1D-plot","page":"Visualization","title":"Plotting a 2D or 3D solutions as a 1D plot","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"It is possible to extract a straight, axis-parallel line from a 2D or 3D solution and visualize it as a 1D plot. This is done by creating a PlotData1D object with a 2D/3D solution sol as input:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData1D(sol)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"The plot is then created with:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(pd)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"By default the x-axis is extracted, which can be changed with following attributes:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"slice specifies the axis which is being extracted and can be :x, :y or :z (:z is only for 3D input and default is :x)\npoint specifies a two or three dimensional point. The sliced axis is then created in such a way, that it lies on the point. (default: (0.0, 0.0) or (0.0, 0.0, 0.0))","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"All other attributes for PlotData1D objects apply here as well.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"In the following, is an example for a 2D simulation of the linear scalar advection equation. First, we have the regular 2D heatmap plot:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: 2d-plot-for-slice)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"From this, we can extract a line plot parallel to the y-axis going through the point (1.0, 0.0) with the following commands:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData1D(sol, slice=:y, point=(1.0, 0.0))\njulia> plot(pd)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: 1d-plot-for-slice)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This convenient method of slicing is limited to axis-parallel slices, but for 2D/3D solutions it is also possible to create a plot along any curve you want. To do so, you first need to create a list of 2D/3D points that define your curve. Then you can create a PlotData1D with the keyword argument curve set to your list.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Let's give an example of this with the basic advection equation from above by creating a plot along the circle marked in green:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: 2d-plot-along-circle)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"We can write a function like this, that outputs a list of points on a circle:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"function circle(radius, center, n_points)\n coordinates = zeros(2, n_points)\n for i in 1:n_points\n coordinates[:,i] = radius*[cospi(2*i/n_points), sinpi(2*i/n_points)] .+ center\n end\n return coordinates\nend","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Then create and plot a PlotData1D object along a circle with radius one, center at (1,1), and 100 points:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"pd = PlotData1D(sol, curve=circle(1.0, (1.0, 1.0), 100))\nplot(pd)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This gives you the following plot: (Image: 1d-plot-along-circle)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Creating a plot like this has its downsides. For one, it is unclear what to put on the abscissa of the plot. By default, the arc length of the given curve is used. Also, with this way of plotting you lose the ability to use a mesh plot from getmesh.","category":"page"},{"location":"visualization/#Visualizing-results-during-a-simulation","page":"Visualization","title":"Visualizing results during a simulation","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"To visualize solutions while a simulation is still running (also known as in-situ visualization), you can use the VisualizationCallback. It is created as a regular callback and accepts upon creation a number of keyword arguments that allow, e.g., to control the visualization interval, to specify the variables to plot, or to customize the plotting style.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"During the simulation, the visualization callback creates and displays visualizations of the current solution in regular intervals. This can be useful to, e.g., monitor the validity of a long-running simulation or for illustrative purposes. An example for how to create a VisualizationCallback can be found in examples/tree_2d_dgsem/elixir_advection_amr_visualization.jl:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"[...]\n\n# Enable in-situ visualization with a new plot generated every 20 time steps\n# and additional plotting options passed as keyword arguments\nvisualization = VisualizationCallback(interval=20; clims=(0,1))\n\n[...]","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"The resulting output of the referenced elixir can be seen in the embedded video below:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":" \n
","category":"page"},{"location":"visualization/#Trixi2Vtk","page":"Visualization","title":"Trixi2Vtk","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Trixi2Vtk converts Trixi.jl's .h5 output files to VTK files, which can be read by ParaView, VisIt, and other visualization tools. It automatically interpolates solution data from the original quadrature node locations to equidistant visualization nodes at a higher resolution, to make up for the loss of accuracy from going from a high-order polynomial representation to a piecewise constant representation in VTK.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"In the Julia REPL, first load the package Trixi2Vtk","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> using Trixi2Vtk","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"To process an HDF5 file generated by Trixi.jl, execute","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi2vtk(joinpath(\"out\", \"solution_000000000.h5\"), output_directory=\"out\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This will create two unstructured VTK files in the out subdirectory that can be opened with ParaView or VisIt: solution_000000000.vtu contains the discontinuous Galerkin solution data while solution_000000000_celldata.vtu holds any cell-based values such as the current AMR indicator or the cell refinement level.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: \"solution_000000000_scalar_mesh\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This allows you to generate VTK files for solution, restart and mesh files. By default, Trixi2Vtk generates .vtu (unstructured VTK) files for both cell/element data (e.g., cell ids, element ids) and node data (e.g., solution variables). This format visualizes each cell with the same number of nodes, independent of its size. Alternatively, you can provide format=:vti as a keyword argument to trixi2vtk, which causes Trixi2Vtk to generate .vti (image data VTK) files for the solution files, while still using .vtu files for cell-/element-based data. In .vti files, a uniform resolution is used throughout the entire domain, resulting in different number of visualization nodes for each element. This can be advantageous to create publication-quality images, but increases the file size.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"If you want to convert multiple solution/restart files at once, you can just supply multiple input files as the positional arguments to trixi2vtk, e.g.,","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi2vtk(\"out/solution_000000000.h5\", \"out/solution_000000040.h5\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"You may also use file globbing to select a range of files based on filename patterns, e.g.,","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi2vtk(\"out/solution_*.h5\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"to convert all solution files in the out/ directory or","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi2vtk(\"out/restart_00[0-9]000.h5\")","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"to convert every one-thousandth restart file (out/restart_000000000.h5, out/restart_001000.h5 etc.).","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"When multiple solution/restart files are provided, Trixi2Vtk will also generate a .pvd file, which allows ParaView to read all .vtu/.vti files at once and which uses the time attribute in solution/restart files to inform ParaView about the solution time. A comprehensive list of all possible arguments for trixi2vtk can be found in the Trixi2Vtk.jl API.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Further information regarding the development of Trixi2Vtk can be found in the development section.","category":"page"},{"location":"visualization/#Makie.jl","page":"Visualization","title":"Makie.jl [experimental]","text":"","category":"section"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"In addition to Plots.jl support, Trixi.jl includes visualization utilities through Makie.jl. Trixi.jl provides Makie-based visualization options both for heatmap-type plots (similar to the Plots.jl recipes) as well as for interactive surface plots. Support is currently limited to the UnstructuredMesh2D type.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"note: Note\nPlotting via Makie.jl is still considered an experimental feature and might change in any future releases.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"A Makie plot can be created as follows: after running a simulation with Trixi.jl in the REPL, load a Makie backend (for example, GLMakie or CairoMakie).","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> using GLMakie","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"To visualize the solution and mesh with a heatmap-type plot, simply run","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(sol)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"note: Note\nBoth Makie.jl and Plots.jl export plot, so if you load both libraries, you will have to specify which plot function to call via Plots.plot or Makie.plot.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"As with Plots.jl recipes, one can view individual solution components by creating a PlotData2D object and indexing into it with the desired variable name","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> pd = PlotData2D(sol)\njulia> plot(pd[\"rho\"])","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Unlike the Plots.jl recipe, mesh plotting is controlled using the keyword argument plot_mesh = false, e.g.,","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> plot(sol; plot_mesh=false)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"The plot command also returns figure and axis handles, which can be used to edit plot titles or labels:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> fig, axes = plot(sol)\njulia> axes[1,1].title = \"New title for subplot (1,1)\"","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Trixi.jl also supports interactive surface plots using iplot. After executing","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> trixi_include(joinpath(\"examples\", \"unstructured_2d_dgsem\", \"elixir_euler_wall_bc.jl\"))","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"we can run","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"julia> iplot(sol)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"This will open up an interactive visualization window:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: makie-example)","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"The plot can be rotated (click and hold), zoomed in and out (scroll up and down), and panned (hold right click and drag). Two toggle buttons control whether mesh lines are visible on top of and below the solution.","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"Both plot and iplot use colormap = :inferno by default. A different colormap can be selected by providing an appropriate keyword argument. For example, plot(sol, colormap=:blues) and iplot(sol, colormap=:blues) produce the following figures:","category":"page"},{"location":"visualization/","page":"Visualization","title":"Visualization","text":"(Image: makie-plot-example) (Image: makie-iplot-example)","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"EditURL = \"../../literate/src/files/adding_new_parabolic_terms.jl\"","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/#adding_new_parabolic_terms","page":"14 Adding new parabolic terms","title":"14: Adding new parabolic terms","text":"","category":"section"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"This demo illustrates the steps involved in adding new parabolic terms for the scalar advection equation. In particular, we will add an anisotropic diffusion. We begin by defining the hyperbolic (advection) part of the advection-diffusion equation.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"using OrdinaryDiffEq\nusing Trixi\n\n\nadvection_velocity = (1.0, 1.0)\nequations_hyperbolic = LinearScalarAdvectionEquation2D(advection_velocity);\nnothing #hide","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/#Define-a-new-parabolic-equation-type","page":"14 Adding new parabolic terms","title":"Define a new parabolic equation type","text":"","category":"section"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Next, we define a 2D parabolic diffusion term type. This is similar to LaplaceDiffusion2D except that the diffusivity field refers to a spatially constant diffusivity matrix now. Note that ConstantAnisotropicDiffusion2D has a field for equations_hyperbolic. It is useful to have information about the hyperbolic system available to the parabolic part so that we can reuse functions defined for hyperbolic equations (such as varnames).","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"The abstract type Trixi.AbstractEquationsParabolic has three parameters: NDIMS (the spatial dimension, e.g., 1D, 2D, or 3D), NVARS (the number of variables), and GradientVariable, which we set as GradientVariablesConservative. This indicates that the gradient should be taken with respect to the conservative variables (e.g., the same variables used in equations_hyperbolic). Users can also take the gradient with respect to a different set of variables; see, for example, the implementation of CompressibleNavierStokesDiffusion2D, which can utilize either \"primitive\" or \"entropy\" variables.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"struct ConstantAnisotropicDiffusion2D{E, T} <: Trixi.AbstractEquationsParabolic{2, 1, GradientVariablesConservative}\n diffusivity::T\n equations_hyperbolic::E\nend\n\nvarnames(variable_mapping, equations_parabolic::ConstantAnisotropicDiffusion2D) =\n varnames(variable_mapping, equations_parabolic.equations_hyperbolic)","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Next, we define the viscous flux function. We assume that the mixed hyperbolic-parabolic system is of the form","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"partial_t u(tx) + partial_x (f_1(u) - g_1(u nabla u))\n + partial_y (f_2(u) - g_2(u nabla u)) = 0","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"where f_1(u), f_2(u) are the hyperbolic fluxes and g_1(u nabla u), g_2(u nabla u) denote the viscous fluxes. For anisotropic diffusion, the viscous fluxes are the first and second components of the matrix-vector product involving diffusivity and the gradient vector.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Here, we specialize the flux to our new parabolic equation type ConstantAnisotropicDiffusion2D.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"function Trixi.flux(u, gradients, orientation::Integer, equations_parabolic::ConstantAnisotropicDiffusion2D)\n @unpack diffusivity = equations_parabolic\n dudx, dudy = gradients\n if orientation == 1\n return SVector(diffusivity[1, 1] * dudx + diffusivity[1, 2] * dudy)\n else # if orientation == 2\n return SVector(diffusivity[2, 1] * dudx + diffusivity[2, 2] * dudy)\n end\nend","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/#Defining-boundary-conditions","page":"14 Adding new parabolic terms","title":"Defining boundary conditions","text":"","category":"section"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Trixi.jl's implementation of parabolic terms discretizes both the gradient and divergence using weak formulation. In other words, we discretize the system","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"beginaligned\nbmq = nabla u \nbmsigma = beginpmatrix g_1(u bmq) g_2(u bmq) endpmatrix \ntextviscous contribution = nabla cdot bmsigma\nendaligned","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Boundary data must be specified for all spatial derivatives, e.g., for both the gradient equation bmq = nabla u and the divergence of the viscous flux nabla cdot bmsigma. We account for this by introducing internal Gradient and Divergence types which are used to dispatch on each type of boundary condition.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"As an example, let us introduce a Dirichlet boundary condition with constant boundary data.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"struct BoundaryConditionConstantDirichlet{T <: Real}\n boundary_value::T\nend","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"This boundary condition contains only the field boundary_value, which we assume to be some real-valued constant which we will impose as the Dirichlet data on the boundary.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Boundary conditions have generally been defined as \"callable structs\" (also known as \"functors\"). For each boundary condition, we need to specify the appropriate boundary data to return for both the Gradient and Divergence. Since the gradient is operating on the solution u, the boundary data should be the value of u, and we can directly impose Dirichlet data.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"@inline function (boundary_condition::BoundaryConditionConstantDirichlet)(flux_inner, u_inner, normal::AbstractVector,\n x, t, operator_type::Trixi.Gradient,\n equations_parabolic::ConstantAnisotropicDiffusion2D)\n return boundary_condition.boundary_value\nend","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"While the gradient acts on the solution u, the divergence acts on the viscous flux bmsigma. Thus, we have to supply boundary data for the Divergence operator that corresponds to bmsigma. However, we've already imposed boundary data on u for a Dirichlet boundary condition, and imposing boundary data for bmsigma might overconstrain our problem.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Thus, for the Divergence boundary data under a Dirichlet boundary condition, we simply return flux_inner, which is boundary data for bmsigma computed using the \"inner\" or interior solution. This way, we supply boundary data for the divergence operation without imposing any additional conditions.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"@inline function (boundary_condition::BoundaryConditionConstantDirichlet)(flux_inner, u_inner, normal::AbstractVector,\n x, t, operator_type::Trixi.Divergence,\n equations_parabolic::ConstantAnisotropicDiffusion2D)\n return flux_inner\nend","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/#A-note-on-the-choice-of-gradient-variables","page":"14 Adding new parabolic terms","title":"A note on the choice of gradient variables","text":"","category":"section"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"It is often simpler to transform the solution variables (and solution gradients) to another set of variables prior to computing the viscous fluxes (see CompressibleNavierStokesDiffusion2D for an example of this). If this is done, then the boundary condition for the Gradient operator should be modified accordingly as well.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/#Putting-things-together","page":"14 Adding new parabolic terms","title":"Putting things together","text":"","category":"section"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"Finally, we can instantiate our new parabolic equation type, define boundary conditions, and run a simulation. The specific anisotropic diffusion matrix we use produces more dissipation in the direction (1 -1) as an isotropic diffusion.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"For boundary conditions, we impose that u=1 on the left wall, u=2 on the bottom wall, and u = 0 on the outflow walls. The initial condition is taken to be u = 0. Note that we use BoundaryConditionConstantDirichlet only for the parabolic boundary conditions, since we have not defined its behavior for the hyperbolic part.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"using Trixi: SMatrix\ndiffusivity = 5.0e-2 * SMatrix{2, 2}([2 -1; -1 2])\nequations_parabolic = ConstantAnisotropicDiffusion2D(diffusivity, equations_hyperbolic);\n\nboundary_conditions_hyperbolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1.0)),\n y_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(2.0)),\n y_pos = boundary_condition_do_nothing,\n x_pos = boundary_condition_do_nothing)\n\nboundary_conditions_parabolic = (; x_neg = BoundaryConditionConstantDirichlet(1.0),\n y_neg = BoundaryConditionConstantDirichlet(2.0),\n y_pos = BoundaryConditionConstantDirichlet(0.0),\n x_pos = BoundaryConditionConstantDirichlet(0.0));\n\nsolver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\ncoordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))\ncoordinates_max = ( 1.0, 1.0) # maximum coordinates (max(x), max(y))\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=4,\n periodicity=false, n_cells_max=30_000) # set maximum capacity of tree data structure\n\ninitial_condition = (x, t, equations) -> SVector(0.0)\n\nsemi = SemidiscretizationHyperbolicParabolic(mesh,\n (equations_hyperbolic, equations_parabolic),\n initial_condition, solver;\n boundary_conditions=(boundary_conditions_hyperbolic,\n boundary_conditions_parabolic))\n\ntspan = (0.0, 2.0)\node = semidiscretize(semi, tspan)\ncallbacks = CallbackSet(SummaryCallback())\ntime_int_tol = 1.0e-6\nsol = solve(ode, RDPK3SpFSAL49(); abstol=time_int_tol, reltol=time_int_tol,\n ode_default_options()..., callback=callbacks);\n\nusing Plots\nplot(sol)","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/#Package-versions","page":"14 Adding new parabolic terms","title":"Package versions","text":"","category":"section"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"","category":"page"},{"location":"tutorials/adding_new_parabolic_terms/","page":"14 Adding new parabolic terms","title":"14 Adding new parabolic terms","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"EditURL = \"../../literate/src/files/p4est_from_gmsh.jl\"","category":"page"},{"location":"tutorials/p4est_from_gmsh/#p4est_from_gmsh","page":"18 P4est mesh from gmsh","title":"18: P4est mesh from gmsh","text":"","category":"section"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"Trixi.jl supports numerical approximations from structured and unstructured quadrilateral meshes with the P4estMesh mesh type.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"The purpose of this tutorial is to demonstrate how to use the P4estMesh functionality of Trixi.jl for existing meshes with straight-sided (bilinear) elements/cells. This begins by running and visualizing an available unstructured quadrilateral mesh example. Then, the tutorial will cover how to use existing meshes generated by gmsh or any other meshing software that can export to the Abaqus input .inp format.","category":"page"},{"location":"tutorials/p4est_from_gmsh/#Running-the-simulation-of-a-near-field-flow-around-an-airfoil","page":"18 P4est mesh from gmsh","title":"Running the simulation of a near-field flow around an airfoil","text":"","category":"section"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"Trixi.jl supports solving hyperbolic-parabolic problems on several mesh types. A somewhat complex example that employs the P4estMesh is the near-field simulation of a Mach 2 flow around the NACA6412 airfoil.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"using Trixi\nredirect_stdio(stdout=devnull, stderr=devnull) do # code that prints annoying stuff we don't want to see here #hide\ntrixi_include(joinpath(examples_dir(), \"p4est_2d_dgsem\", \"elixir_euler_NACA6412airfoil_mach2.jl\"), tspan=(0.0, 0.5))\nend #hide","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"Conveniently, we use the Plots package to have a first look at the results:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"using Plots\npd = PlotData2D(sol)\nplot(pd[\"rho\"])\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/p4est_from_gmsh/#Creating-a-mesh-using-gmsh","page":"18 P4est mesh from gmsh","title":"Creating a mesh using gmsh","text":"","category":"section"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"The creation of an unstructured quadrilateral mesh using gmsh is driven by a geometry file. There are plenty of possibilities for the user, see the documentation and tutorials.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"To begin, we provide a complete geometry file for the NACA6412 airfoil bounded by a rectangular box. After this we give a breakdown of the most important parts required for successful mesh generation that can later be used by the p4est library and Trixi.jl. We emphasize that this near-field mesh should only be used for instructive purposes and not for actual production runs.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"The associated NACA6412.geo file is given below:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":" // GMSH geometry script for a NACA 6412 airfoil with 11 degree angle of attack\n // in a box (near-field mesh).\n // see https://github.com/cfsengineering/GMSH-Airfoil-2D\n // for software to generate gmsh `.geo` geometry files for NACA airfoils.\n\n // outer bounding box\n Point(1) = {-1.25, -0.5, 0, 1.0};\n Point(2) = {1.25, -0.5, 0, 1.0};\n Point(3) = {1.25, 0.5, 0, 1.0};\n Point(4) = {-1.25, 0.5, 0, 1.0};\n\n // lines of the bounding box\n Line(1) = {1, 2};\n Line(2) = {2, 3};\n Line(3) = {3, 4};\n Line(4) = {4, 1};\n // outer box\n Line Loop(8) = {1, 2, 3, 4};\n\n // Settings\n // This value gives the global element size factor (lower -> finer mesh)\n Mesh.CharacteristicLengthFactor = 1.0 * 2^(-3);\n // Insist on quads instead of default triangles\n Mesh.RecombineAll = 1;\n // Violet instead of green base color for better visibility\n Mesh.ColorCarousel = 0;\n\n // points of the airfoil contour\n // Format: {x, y, z, DesiredCellSize}. See the documentation: https://gmsh.info/doc/texinfo/gmsh.html#Points\n // These concrete points are generated using the tool from https://github.com/cfsengineering/GMSH-Airfoil-2D\n Point(5) = {-0.4900332889206208, 0.09933466539753061, 0, 0.125};\n Point(6) = {-0.4900274857651495, 0.1021542752054094, 0, 0.125};\n Point(7) = {-0.4894921489729144, 0.1049830248247787, 0, 0.125};\n Point(8) = {-0.4884253336670712, 0.1078191282319664, 0, 0.125};\n Point(9) = {-0.4868257975566199, 0.1106599068424483, 0, 0.125};\n Point(10) = {-0.4846930063965668, 0.1135018003016681, 0, 0.125};\n Point(11) = {-0.4820271400142729, 0.1163403835785654, 0, 0.125};\n Point(12) = {-0.4788290988083472, 0.1191703902233889, 0, 0.125};\n Point(13) = {-0.4751005105908123, 0.1219857416089041, 0, 0.125};\n Point(14) = {-0.4708437376101668, 0.1247795819332056, 0, 0.125};\n Point(15) = {-0.4660618835629463, 0.1275443187232316, 0, 0.125};\n Point(16) = {-0.4607588003749649, 0.1302716685409717, 0, 0.125};\n Point(17) = {-0.4549390945110529, 0.132952707559475, 0, 0.125};\n Point(18) = {-0.448608132554204, 0.1355779266432996, 0, 0.125};\n Point(19) = {-0.4417720457819508, 0.138137290538182, 0, 0.125};\n Point(20) = {-0.4344377334597768, 0.140620300747629, 0, 0.125};\n Point(21) = {-0.4266128645686593, 0.1430160616500159, 0, 0.125};\n Point(22) = {-0.4183058776865576, 0.1453133493887722, 0, 0.125};\n Point(23) = {-0.4095259787518715, 0.147500683050503, 0, 0.125};\n Point(24) = {-0.4002831364505879, 0.1495663976315875, 0, 0.125};\n Point(25) = {-0.3905880749878933, 0.1514987182830453, 0, 0.125};\n Point(26) = {-0.3804522640292948, 0.1532858353164163, 0, 0.125};\n Point(27) = {-0.3698879056254708, 0.1549159794501833, 0, 0.125};\n Point(28) = {-0.3589079179688306, 0.1563774967770029, 0, 0.125};\n Point(29) = {-0.3475259158676376, 0.1576589229368209, 0, 0.125};\n Point(30) = {-0.3357561878650377, 0.158749055989923, 0, 0.125};\n Point(31) = {-0.3236136699747923, 0.1596370274972017, 0, 0.125};\n Point(32) = {-0.3111139160522804, 0.1603123713324616, 0, 0.125};\n Point(33) = {-0.298273064867608, 0.160765089773461, 0, 0.125};\n Point(34) = {-0.2851078039966239, 0.1609857164445887, 0, 0.125};\n Point(35) = {-0.2716353306943914, 0.160965375714529, 0, 0.125};\n Point(36) = {-0.2578733099632437, 0.1606958381868515, 0, 0.125};\n Point(37) = {-0.2438398300730194, 0.1601695719599709, 0, 0.125};\n Point(38) = {-0.2295533558334121, 0.1593797893750759, 0, 0.125};\n Point(39) = {-0.2150326799566391, 0.1583204890160489, 0, 0.125};\n Point(40) = {-0.2002968728818922, 0.1569864927736143, 0, 0.125};\n Point(41) = {-0.18536523146042, 0.1553734778363979, 0, 0.125};\n Point(42) = {-0.1702572269208345, 0.1534780035235666, 0, 0.125};\n Point(43) = {-0.1549924525477129, 0.1512975329264932, 0, 0.125};\n Point(44) = {-0.1395905715122586, 0.1488304493795921, 0, 0.125};\n Point(45) = {-0.1240712652914332, 0.1460760678321895, 0, 0.125};\n Point(46) = {-0.1084541831014299, 0.1430346412430583, 0, 0.125};\n Point(47) = {-0.09275889275279087, 0.1397073621660917, 0, 0.125};\n Point(48) = {-0.07700483330818747, 0.1360963597385416, 0, 0.125};\n Point(49) = {-0.06151286635366404, 0.1323050298149023, 0, 0.125};\n Point(50) = {-0.04602933219022032, 0.1283521764905442, 0, 0.125};\n Point(51) = {-0.03051345534800332, 0.1242331665904082, 0, 0.125};\n Point(52) = {-0.01498163190522334, 0.1199540932779839, 0, 0.125};\n Point(53) = {0.0005498526140696458, 0.1155214539466913, 0, 0.125};\n Point(54) = {0.01606484191716884, 0.1109421303284033, 0, 0.125};\n Point(55) = {0.03154732664394777, 0.106223368423828, 0, 0.125};\n Point(56) = {0.0469814611314705, 0.1013727584299359, 0, 0.125};\n Point(57) = {0.06235157928986135, 0.09639821481480275, 0, 0.125};\n Point(58) = {0.07764220964363855, 0.09130795666388933, 0, 0.125};\n Point(59) = {0.09283808959671735, 0.08611048839446452, 0, 0.125};\n Point(60) = {0.1079241789809607, 0.08081458090718853, 0, 0.125};\n Point(61) = {0.1228856729475325, 0.07542925321638272, 0, 0.125};\n Point(62) = {0.1377080142575372, 0.06996375457378261, 0, 0.125};\n Point(63) = {0.1523769050236616, 0.06442754707512513, 0, 0.125};\n Point(64) = {0.1668783179480157, 0.05883028871526293, 0, 0.125};\n Point(65) = {0.1811985070933818, 0.05318181683604975, 0, 0.125};\n Point(66) = {0.1953240182159306, 0.04749213189240609, 0, 0.125};\n Point(67) = {0.2092416986775084, 0.04177138144606024, 0, 0.125};\n Point(68) = {0.2229387069452062, 0.03602984428372727, 0, 0.125};\n Point(69) = {0.2364025216754475, 0.03027791454712048, 0, 0.125};\n Point(70) = {0.2496209503696738, 0.02452608575629232, 0, 0.125};\n Point(71) = {0.2625821375791982, 0.01878493460541621, 0, 0.125};\n Point(72) = {0.2752745726282818, 0.01306510441121807, 0, 0.125};\n Point(73) = {0.28768709681727, 0.007377288098728577, 0, 0.125};\n Point(74) = {0.2998089100619555, 0.001732210616722449, 0, 0.125};\n Point(75) = {0.3116295769214332, -0.003859389314124759, 0, 0.125};\n Point(76) = {0.3231390319647309, -0.009386778203927332, 0, 0.125};\n Point(77) = {0.3343275844265582, -0.01483924761490708, 0, 0.125};\n Point(78) = {0.3451859221046181, -0.02020613485126957, 0, 0.125};\n Point(79) = {0.3557051144551212, -0.02547684454806881, 0, 0.125};\n Point(80) = {0.3658766148492779, -0.03064087116872238, 0, 0.125};\n Point(81) = {0.3756922619615632, -0.0356878223992288, 0, 0.125};\n Point(82) = {0.3851442802702071, -0.0406074434050937, 0, 0.125};\n Point(83) = {0.394225279661484, -0.04538964189492445, 0, 0.125};\n Point(84) = {0.4029282541416501, -0.05002451391298904, 0, 0.125};\n Point(85) = {0.4112465796735204, -0.05450237026215737, 0, 0.125};\n Point(86) = {0.4191740111683733, -0.05881376343890812, 0, 0.125};\n Point(87) = {0.4267046786777481, -0.06294951494382847, 0, 0.125};\n Point(88) = {0.4338330828434404, -0.06690074281456823, 0, 0.125};\n Point(89) = {0.4405540896772232, -0.07065888921378868, 0, 0.125};\n Point(90) = {0.4468629247542237, -0.07421574789251445, 0, 0.125};\n Point(91) = {0.4527551669150955, -0.0775634913396257, 0, 0.125};\n Point(92) = {0.4582267415819197, -0.08069469742118066, 0, 0.125};\n Point(93) = {0.4632739138007936, -0.08360237530891265, 0, 0.125};\n Point(94) = {0.4678932811302005, -0.08627999049569551, 0, 0.125};\n Point(95) = {0.4720817664982195, -0.08872148869699745, 0, 0.125};\n Point(96) = {0.4758366111533843, -0.09092131844134463, 0, 0.125};\n Point(97) = {0.4791553678333992, -0.09287445215953141, 0, 0.125};\n Point(98) = {0.4820358942729613, -0.09457640559161551, 0, 0.125};\n Point(99) = {0.4844763471666588, -0.09602325534252773, 0, 0.125};\n Point(100) = {0.4864751766953637, -0.09721165443119822, 0, 0.125};\n Point(101) = {0.4880311217148797, -0.09813884569428721, 0, 0.125};\n Point(102) = {0.4891432056939881, -0.09880267292366274, 0, 0.125};\n Point(103) = {0.4898107334756874, -0.09920158963645126, 0, 0.125};\n Point(104) = {0.4900332889206208, -0.09933466539753058, 0, 0.125};\n Point(105) = {0.4897824225031319, -0.09926905587549506, 0, 0.125};\n Point(106) = {0.4890301110661922, -0.09907236506934192, 0, 0.125};\n Point(107) = {0.4877772173496635, -0.09874500608402761, 0, 0.125};\n Point(108) = {0.48602517690576, -0.09828766683852558, 0, 0.125};\n Point(109) = {0.4837759946062035, -0.09770130916007558, 0, 0.125};\n Point(110) = {0.4810322398085871, -0.09698716747297723, 0, 0.125};\n Point(111) = {0.4777970402368822, -0.09614674703990023, 0, 0.125};\n Point(112) = {0.4740740746447117, -0.09518182170326678, 0, 0.125};\n Point(113) = {0.4698675643422793, -0.09409443106501386, 0, 0.125};\n Point(114) = {0.4651822636784212, -0.09288687703518478, 0, 0.125};\n Point(115) = {0.460023449577924, -0.09156171967354482, 0, 0.125};\n Point(116) = {0.4543969102408585, -0.09012177224394632, 0, 0.125};\n Point(117) = {0.4483089331151018, -0.08857009539864649, 0, 0.125};\n Point(118) = {0.4417662922553667, -0.08690999040934186, 0, 0.125};\n Point(119) = {0.4347762351819332, -0.0851449913634191, 0, 0.125};\n Point(120) = {0.4273464693498908, -0.08327885624791403, 0, 0.125};\n Point(121) = {0.419485148335155, -0.08131555684993674, 0, 0.125};\n Point(122) = {0.411200857836944, -0.07925926741086739, 0, 0.125};\n Point(123) = {0.4025026015879757, -0.07711435198240155, 0, 0.125};\n Point(124) = {0.3933997872536054, -0.07488535044544484, 0, 0.125};\n Point(125) = {0.3839022123897198, -0.07257696316779733, 0, 0.125};\n Point(126) = {0.3740200505167618, -0.07019403429336624, 0, 0.125};\n Point(127) = {0.3637638373540689, -0.06774153367408606, 0, 0.125};\n Point(128) = {0.3531444572451353, -0.06522453747557577, 0, 0.125};\n Point(129) = {0.3421731297908021, -0.06264820750853495, 0, 0.125};\n Point(130) = {0.3308613966940724, -0.06001776935966011, 0, 0.125};\n Point(131) = {0.3192211088076166, -0.05733848941811218, 0, 0.125};\n Point(132) = {0.3072644133633567, -0.05461565091590426, 0, 0.125};\n Point(133) = {0.2950037413531683, -0.05185452912263369, 0, 0.125};\n Point(134) = {0.2824517950208982, -0.04906036585632723, 0, 0.125};\n Point(135) = {0.2696215354188702, -0.04623834349241404, 0, 0.125};\n Point(136) = {0.2565261699769623, -0.04339355867155523, 0, 0.125};\n Point(137) = {0.2431791400293651, -0.04053099592384862, 0, 0.125};\n Point(138) = {0.2295941082432855, -0.03765550144139543, 0, 0.125};\n Point(139) = {0.2157849458952252, -0.03477175724299444, 0, 0.125};\n Point(140) = {0.2017657199439165, -0.03188425598348005, 0, 0.125};\n Point(141) = {0.187550679854507, -0.02899727666564914, 0, 0.125};\n Point(142) = {0.1731542441359161, -0.02611486151457043, 0, 0.125};\n Point(143) = {0.1585909865622793, -0.02324079427214604, 0, 0.125};\n Point(144) = {0.1438756220597465, -0.02037858016395433, 0, 0.125};\n Point(145) = {0.129022992251319, -0.0175314277805827, 0, 0.125};\n Point(146) = {0.1140480506645569, -0.01470223310184333, 0, 0.125};\n Point(147) = {0.09896584761949168, -0.01189356587453844, 0, 0.125};\n Point(148) = {0.08379151482656089, -0.009107658532933174, 0, 0.125};\n Point(149) = {0.06854024973648176, -0.006346397826038436, 0, 0.125};\n Point(150) = {0.05322729969528361, -0.003611319287478529, 0, 0.125};\n Point(151) = {0.03786794596792287, -0.00090360465249055, 0, 0.125};\n Point(152) = {0.0224774877026287, 0.00177591770710904, 0, 0.125};\n Point(153) = {0.007071225915134205, 0.004426769294862437, 0, 0.125};\n Point(154) = {-0.00833555242305456, 0.007048814950562587, 0, 0.125};\n Point(155) = {-0.02372759010533726, 0.009642253300220296, 0, 0.125};\n Point(156) = {-0.03908967513210498, 0.01220760427359278, 0, 0.125};\n Point(157) = {-0.05440665578848514, 0.01474569380579989, 0, 0.125};\n Point(158) = {-0.06966345527617318, 0.01725763587663899, 0, 0.125};\n Point(159) = {-0.08484508582421563, 0.01974481207672138, 0, 0.125};\n Point(160) = {-0.09987987792382108, 0.02219618763023203, 0, 0.125};\n Point(161) = {-0.1145078729404739, 0.02450371976411331, 0, 0.125};\n Point(162) = {-0.1290321771824579, 0.0267015185742735, 0, 0.125};\n Point(163) = {-0.143440065923266, 0.02879471001709845, 0, 0.125};\n Point(164) = {-0.1577189448447794, 0.03078883518202784, 0, 0.125};\n Point(165) = {-0.1718563428491159, 0.03268980457290044, 0, 0.125};\n Point(166) = {-0.1858399037768357, 0.03450385196323842, 0, 0.125};\n Point(167) = {-0.1996573773370766, 0.03623748825421298, 0, 0.125};\n Point(168) = {-0.2132966095779342, 0.03789745574015834, 0, 0.125};\n Point(169) = {-0.2267455332406906, 0.0394906831577609, 0, 0.125};\n Point(170) = {-0.2399921583489679, 0.04102424186233269, 0, 0.125};\n Point(171) = {-0.2530245633834605, 0.04250530343879837, 0, 0.125};\n Point(172) = {-0.2658308873846617, 0.04394109901707172, 0, 0.125};\n Point(173) = {-0.2783993233102972, 0.04533888052223981, 0, 0.125};\n Point(174) = {-0.2907181129514687, 0.04670588405019788, 0, 0.125};\n Point(175) = {-0.3027755436824813, 0.0480492955198111, 0, 0.125};\n Point(176) = {-0.3145599472847223, 0.04937621871394801, 0, 0.125};\n Point(177) = {-0.3260597010456697, 0.05069364578437131, 0, 0.125};\n Point(178) = {-0.337263231291058, 0.05200843025992359, 0, 0.125};\n Point(179) = {-0.3481590194623916, 0.05332726256406103, 0, 0.125};\n Point(180) = {-0.3587356108043638, 0.05465664801682354, 0, 0.125};\n Point(181) = {-0.3689816256782782, 0.0560028872679817, 0, 0.125};\n Point(182) = {-0.3788857734692287, 0.05737205908247899, 0, 0.125};\n Point(183) = {-0.3884368690074614, 0.05877000537646382, 0, 0.125};\n Point(184) = {-0.3976238513788748, 0.06020231838219783, 0, 0.125};\n Point(185) = {-0.40643580495675, 0.06167432980291591, 0, 0.125};\n Point(186) = {-0.4148619824472646, 0.06319110180426264, 0, 0.125};\n Point(187) = {-0.4228918297057104, 0.06475741967717524, 0, 0.125};\n Point(188) = {-0.43051501204915, 0.06637778599795482, 0, 0.125};\n Point(189) = {-0.4377214417649294, 0.06805641610468524, 0, 0.125};\n Point(190) = {-0.4445013064933708, 0.06979723470503821, 0, 0.125};\n Point(191) = {-0.4508450981473512, 0.07160387342876083, 0, 0.125};\n Point(192) = {-0.4567436420215075, 0.073479669138689, 0, 0.125};\n Point(193) = {-0.4621881257395756, 0.07542766281688272, 0, 0.125};\n Point(194) = {-0.4671701276898881, 0.07745059884734995, 0, 0.125};\n Point(195) = {-0.471681644606229, 0.07955092452372269, 0, 0.125};\n Point(196) = {-0.4757151179639407, 0.0817307896190848, 0, 0.125};\n Point(197) = {-0.4792634588791559, 0.0839920458658267, 0, 0.125};\n Point(198) = {-0.4823200712220043, 0.08633624620581726, 0, 0.125};\n Point(199) = {-0.4848788726822436, 0.08876464368523246, 0, 0.125};\n Point(200) = {-0.4869343135575803, 0.09127818988394577, 0, 0.125};\n Point(201) = {-0.4884813930704814, 0.09387753278635144, 0, 0.125};\n Point(202) = {-0.4895156730580155, 0.09656301401871749, 0, 0.125};\n\n // splines of the airfoil\n Spline(5) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104};\n Spline(6) = {104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,5};\n\n // airfoil\n Line Loop(9) = {5, 6};\n // complete domain\n Plane Surface(1) = {8, 9};\n\n // labeling of the boundary parts\n Physical Line(1) = {4}; // inflow\n Physical Line(2) = {2}; // outflow\n Physical Line(3) = {1, 3}; // airfoil\n Physical Line(4) = {5, 6}; // upper/lower wall\n Physical Surface(1) = {10};","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"From which we can construct a mesh like this: (Image: mesh_screenshot)","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"The first four points define the bounding box = (near-field) domain:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":" // outer bounding box\nPoint(1) = {-1.25, -0.5, 0, 1.0};\nPoint(2) = {1.25, -0.5, 0, 1.0};\nPoint(3) = {1.25, 0.5, 0, 1.0};\nPoint(4) = {-1.25, 0.5, 0, 1.0};","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"which is constructed from connecting the points in lines:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"// outer box\nLine(1) = {1, 2};\nLine(2) = {2, 3};\nLine(3) = {3, 4};\nLine(4) = {4, 1};\n// outer box\nLine Loop(8) = {1, 2, 3, 4};","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"This is followed by a couple (in principle optional) settings where the most important one is","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"// Insist on quads instead of default triangles\nMesh.RecombineAll = 1;","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"which forces gmsh to generate quadrilateral elements instead of the default triangles. This is strictly required to be able to use the mesh later with p4est, which supports only straight-sided quads, i.e., C2D4, CPS4, S4 in 2D and C3D in 3D. See for more details the (short) documentation on the interaction of p4est with .inp files. In principle, it should also be possible to use the recombine function of gmsh to convert the triangles to quads, but this is observed to be less robust than enforcing quads from the beginning.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"Then the airfoil is defined by a set of points:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"// points of the airfoil contour\n Point(5) = {-0.4900332889206208, 0.09933466539753061, 0, 0.125};\n Point(6) = {-0.4900274857651495, 0.1021542752054094, 0, 0.125};\n ...","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"which are connected by splines for the upper and lower part of the airfoil:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"// splines of the airfoil\n Spline(5) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\n ...\n 96,97,98,99,100,101,102,103,104};\n Spline(6) = {104,105,106,107,108,109,110,111,112,113,114,115,\n ...\n 200,201,202,5};","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"which are then connected to form a single line loop for easy physical group assignment:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"// airfoil\n Line Loop(9) = {5, 6};","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"At the end of the file the physical groups are defined:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"// labeling of the boundary parts\n Physical Line(1) = {4}; // Inflow. Label in Abaqus .inp file: PhysicalLine1\n Physical Line(2) = {2}; // Outflow. Label in Abaqus .inp file: PhysicalLine2\n Physical Line(3) = {1, 3}; // Upper and lower wall/farfield/... Label in Abaqus .inp file: PhysicalLine3\n Physical Line(4) = {5, 6}; // Airfoil. Label in Abaqus .inp file: PhysicalLine4","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"which are crucial for the correct assignment of boundary conditions in Trixi.jl. In particular, it is the responsibility of a user to keep track on the physical boundary names between the mesh generation and assignment of boundary condition functions in an elixir.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"After opening this file in gmsh, meshing the geometry and exporting to Abaqus .inp format, we can have a look at the input file:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"*Heading\n \n*NODE\n1, -1.25, -0.5, 0\n2, 1.25, -0.5, 0\n3, 1.25, 0.5, 0\n4, -1.25, 0.5, 0\n...\n******* E L E M E N T S *************\n*ELEMENT, type=T3D2, ELSET=Line1\n1, 1, 7\n...\n*ELEMENT, type=CPS4, ELSET=Surface1\n191, 272, 46, 263, 807\n...\n*NSET,NSET=PhysicalLine1\n1, 4, 52, 53, 54, 55, 56, 57, 58,\n*NSET,NSET=PhysicalLine2\n2, 3, 26, 27, 28, 29, 30, 31, 32,\n*NSET,NSET=PhysicalLine3\n1, 2, 3, 4, 7, 8, 9, 10, 11, 12,\n13, 14, 15, 16, 17, 18, 19, 20, 21, 22,\n23, 24, 25, 33, 34, 35, 36, 37, 38, 39,\n40, 41, 42, 43, 44, 45, 46, 47, 48, 49,\n50, 51,\n*NSET,NSET=PhysicalLine4\n5, 6, 59, 60, 61, 62, 63, 64, 65, 66,\n67, 68, 69, 70, 71, 72, 73, 74, 75, 76,\n77, 78, 79, 80, 81, 82, 83, 84, 85, 86,\n87, 88, 89, 90, 91, 92, 93, 94, 95, 96,\n97, 98, 99, 100, 101, 102, 103, 104, 105, 106,\n107, 108, 109, 110, 111, 112, 113, 114, 115, 116,\n117, 118, 119, 120, 121, 122, 123, 124, 125, 126,\n127, 128, 129, 130, 131, 132, 133, 134, 135, 136,\n137, 138, 139, 140, 141, 142, 143, 144, 145, 146,\n147, 148, 149, 150, 151, 152, 153, 154, 155, 156,\n157, 158, 159, 160, 161, 162, 163, 164, 165, 166,\n167, 168, 169, 170, 171, 172, 173, 174, 175, 176,\n177, 178, 179, 180, 181, 182, 183, 184, 185, 186,\n187, 188, 189, 190,","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"First, the coordinates of the nodes are listed, followed by the elements. Note that gmsh exports also line elements of type T3D2 which are ignored by p4est. The relevant elements in 2D which form the gridcells are of type CPS4 which are defined by their four corner nodes. This is followed by the nodesets encoded via *NSET which are used to assign boundary conditions in Trixi.jl. Trixi.jl parses the .inp file and assigns the edges (in 2D, surfaces in 3D) of elements to the corresponding boundary condition based on the supplied boundary_symbols that have to be supplied to the P4estMesh constructor:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"# boundary symbols\nboundary_symbols = [:PhysicalLine1, :PhysicalLine2, :PhysicalLine3, :PhysicalLine4]\nmesh = P4estMesh{2}(mesh_file, polydeg = polydeg, boundary_symbols = boundary_symbols)","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"The same boundary symbols have then also be supplied to the semidiscretization alongside the corresponding physical boundary conditions:","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"# Supersonic inflow boundary condition.\n# Calculate the boundary flux entirely from the external solution state, i.e., set\n# external solution state values for everything entering the domain.\n@inline function boundary_condition_supersonic_inflow(u_inner,\n normal_direction::AbstractVector,\n x, t, surface_flux_function,\n equations::CompressibleEulerEquations2D)\n u_boundary = initial_condition_mach2_flow(x, t, equations)\n flux = Trixi.flux(u_boundary, normal_direction, equations)\n\n return flux\nend\n\n# Supersonic outflow boundary condition.\n# Calculate the boundary flux entirely from the internal solution state. Analogous to supersonic inflow\n# except all the solution state values are set from the internal solution as everything leaves the domain\n@inline function boundary_condition_supersonic_outflow(u_inner,\n normal_direction::AbstractVector, x,\n t,\n surface_flux_function,\n equations::CompressibleEulerEquations2D)\nflux = Trixi.flux(u_inner, normal_direction, equations)\n\nboundary_conditions = Dict(:PhysicalLine1 => boundary_condition_supersonic_inflow, # Left boundary\n :PhysicalLine2 => boundary_condition_supersonic_outflow, # Right boundary\n :PhysicalLine3 => boundary_condition_supersonic_outflow, # Top and bottom boundary\n :PhysicalLine4 => boundary_condition_slip_wall) # Airfoil\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n boundary_conditions = boundary_conditions)","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"Note that you have to supply the boundary_symbols keyword to the P4estMesh constructor to select the boundaries from the available nodesets in the .inp file. If the boundary_symbols keyword is not supplied, all boundaries will be assigned to the default set :all.","category":"page"},{"location":"tutorials/p4est_from_gmsh/#Package-versions","page":"18 P4est mesh from gmsh","title":"Package versions","text":"","category":"section"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\", \"Download\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"","category":"page"},{"location":"tutorials/p4est_from_gmsh/","page":"18 P4est mesh from gmsh","title":"18 P4est mesh from gmsh","text":"This page was generated using Literate.jl.","category":"page"},{"location":"code_of_conduct/","page":"Code of Conduct","title":"Code of Conduct","text":"EditURL = \"https://github.com/trixi-framework/Trixi.jl/blob/main/CODE_OF_CONDUCT.md\"","category":"page"},{"location":"code_of_conduct/#code-of-conduct","page":"Code of Conduct","title":"Code of Conduct","text":"","category":"section"},{"location":"code_of_conduct/","page":"Code of Conduct","title":"Code of Conduct","text":"Contributor Covenant Code of ConductOur PledgeWe as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.Our StandardsExamples of behavior that contributes to a positive environment for our community include:Demonstrating empathy and kindness toward other people\nBeing respectful of differing opinions, viewpoints, and experiences\nGiving and gracefully accepting constructive feedback\nAccepting responsibility and apologizing to those affected by our mistakes, and learning from the experience\nFocusing on what is best not just for us as individuals, but for the overall communityExamples of unacceptable behavior include:The use of sexualized language or imagery, and sexual attention or advances of any kind\nTrolling, insulting or derogatory comments, and personal or political attacks\nPublic or private harassment\nPublishing others' private information, such as a physical or email address, without their explicit permission\nOther conduct which could reasonably be considered inappropriate in a professional settingEnforcement ResponsibilitiesCommunity leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.ScopeThis Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.EnforcementInstances of abusive, harassing, or otherwise unacceptable behavior may be reported to Michael Schlottke-Lakemper, Hendrik Ranocha, or any other of the principal developers responsible for enforcement listed in Authors. All complaints will be reviewed and investigated promptly and fairly.All community leaders are obligated to respect the privacy and security of the reporter of any incident.Enforcement GuidelinesCommunity leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:1. CorrectionCommunity Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.2. WarningCommunity Impact: A violation through a single incident or series of actions.Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.3. Temporary BanCommunity Impact: A serious violation of community standards, including sustained inappropriate behavior.Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.4. Permanent BanCommunity Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.Consequence: A permanent ban from any sort of public interaction within the community.AttributionThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/codeofconduct.html.Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.[homepage]: https://www.contributor-covenant.orgFor answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.","category":"page"},{"location":"conventions/#conventions","page":"Conventions","title":"Conventions","text":"","category":"section"},{"location":"conventions/#Spatial-dimensions-and-directions","page":"Conventions","title":"Spatial dimensions and directions","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"We use the following numbering schemes on Cartesian or curved structured meshes.","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"The orientations are numbered as 1 => x, 2 => y, 3 => z. For example, numerical fluxes such as flux_central(u_ll, u_rr, orientation, equations::AbstractEquations) use the orientation in this way.\nThe directions are numbered as 1 => -x, 2 => +x, 3 => -y, 4 => +y, 5 => -z, 6 => +z. For example, the boundary_conditions are ordered in this way when a Tuple of boundary conditions per direction is passed to the constructor of a SemidiscretizationHyperbolic.\nFor structured and unstructured curved meshes the concept of direction is generalized via the variable normal_direction. This variable points in the normal direction at a given, curved surface. For the computation of boundary fluxes the normal_direction is normalized to be a normal_vector used, for example, in FluxRotated.","category":"page"},{"location":"conventions/#Cells-vs.-elements-vs.-nodes","page":"Conventions","title":"Cells vs. elements vs. nodes","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"To uniquely distinguish between different components of the discretization, we use the following naming conventions:","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"The computational domain is discretized by a mesh, which is made up of individual cells. In general, neither the mesh nor the cells should be aware of any solver-specific knowledge, i.e., they should not store anything that goes beyond the geometrical information and the connectivity.\nThe numerical solvers do not directly store their information inside the mesh, but use own data structures. Specifically, for each cell on which a solver wants to operate, the solver creates an element to store solver-specific data.\nFor discretization schemes such as the discontinuous Galerkin or the finite element method, inside each element multiple nodes may be defined, which hold nodal information. The nodes are again a solver-specific component, just like the elements.\nWe often identify elements, nodes, etc. with their (local or global) integer index. Convenience iterators such as eachelement, eachnode use these indices.","category":"page"},{"location":"conventions/#Keywords-in-elixirs","page":"Conventions","title":"Keywords in elixirs","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Trixi.jl is distributed with several examples in the form of elixirs, small Julia scripts containing everything to set up and run a simulation. Working interactively from the Julia REPL with these scripts can be quite convenient while for exploratory research and development of Trixi.jl. For example, you can use the convenience function trixi_include to include an elixir with some modified arguments. To enable this, it is helpful to use a consistent naming scheme in elixirs, since trixi_include can only perform simple replacements. Some standard variables names are","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"polydeg for the polynomial degree of a solver\nsurface_flux for the numerical flux at surfaces\nvolume_flux for the numerical flux used in flux differencing volume terms","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Moreover, convergence_test requires that the spatial resolution is set via the keywords","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"initial_refinement_level (an integer, e.g., for the TreeMesh and the P4estMesh) or\ncells_per_dimension (a tuple of integers, one per spatial dimension, e.g., for the StructuredMesh and the DGMultiMesh).","category":"page"},{"location":"conventions/#Variable-names","page":"Conventions","title":"Variable names","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Use descriptive names (using snake_case for variables/functions and CamelCase for types)\nUse a suffix _ as in name_ for local variables that would otherwise hide existing symbols.\nUse a prefix _ as in _name to indicate internal methods/data that are \"fragile\" in the sense that there's no guarantee that they might get changed without notice. These are also not documented with a docstring (but maybe with comments using #).","category":"page"},{"location":"conventions/#Array-types-and-wrapping","page":"Conventions","title":"Array types and wrapping","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"To allow adaptive mesh refinement efficiently when using time integrators from OrdinaryDiffEq, Trixi.jl allows to represent numerical solutions in two different ways. Some discussion can be found online and in form of comments describing Trixi.wrap_array and Trixi.wrap_array_native in the source code of Trixi.jl. The flexibility introduced by this possible wrapping enables additional performance optimizations. However, it comes at the cost of some additional abstractions (and needs to be used with caution, as described in the source code of Trixi.jl). Thus, we use the following conventions to distinguish between arrays visible to the time integrator and wrapped arrays mainly used internally.","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Arrays visible to the time integrator have a suffix _ode, e.g., du_ode, u_ode.\nWrapped arrays do not have a suffix, e.g., du, u.","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Methods either accept arrays visible to the time integrator or wrapped arrays based on the following rules.","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"When some solution is passed together with a semidiscretization semi, the solution must be a u_ode that needs to be wrapped via wrap_array(u_ode, semi) (or wrap_array_native(u_ode, semi)) for further processing.\nWhen some solution is passed together with the mesh, equations, solver, cache, ..., it is already wrapped via wrap_array (or wrap_array_native).\nExceptions of this rule are possible, e.g., for AMR, but must be documented in the code.\nwrap_array should be used as default option. wrap_array_native should only be used when necessary, e.g., to avoid additional overhead when interfacing with external C libraries such as HDF5, MPI, or visualization.","category":"page"},{"location":"conventions/#Numeric-types-and-type-stability","page":"Conventions","title":"Numeric types and type stability","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"In Trixi.jl, we use generic programming to support custom data types to store the numerical simulation data, including standard floating point types and automatic differentiation types. Specifically, Float32 and Float64 types are fully supported, including the ability to run Trixi.jl on hardware that only supports Float32 types. We ensure the type stability of these numeric types throughout the development process. Below are some guidelines to apply in various scenarios.","category":"page"},{"location":"conventions/#Exact-floating-point-numbers","page":"Conventions","title":"Exact floating-point numbers","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Some real numbers can be represented exactly as both Float64 and Float32 values (e.g., 0.25, 0.5, 1/2). We prefer to use Float32 type for these numbers to achieve a concise way of possible type promotion. For example,","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"# Assume we have `0.25`, `0.5`, `1/2` in function\n0.25f0, 0.5f0, 0.5f0 # corresponding numbers","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Generally, this equivalence is true for integer multiples of powers of two. That is, numbers that can be written as m 2^n, where m n in mathbbZ, and where m and n are such that the result is representable as a single precision floating point value. If a decimal value v is exactly representable in Float32, the expression","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Float32(v) == v","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"will evaluate to true.","category":"page"},{"location":"conventions/#Non-exact-floating-point-numbers","page":"Conventions","title":"Non-exact floating-point numbers","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"For real numbers that cannot be exactly represented in machine precision (e.g., 0.1, 1/3, pi), use the convert function to make them consistent with the type of the function input. For example, ","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"# Assume we are handling `pi` in function\nfunction foo(..., input, ...)\n RealT = eltype(input) # see **notes** below\n # ...\n c1 = convert(RealT, pi) * c2 # sample operation\n # ...\nend","category":"page"},{"location":"conventions/#Integer-numbers","page":"Conventions","title":"Integer numbers","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"Integers need special consideration. Using functions like convert (as mentioned above), zero, and one to change integers to a specific type or keeping them in integer format is feasible in most cases. We aim to balance code readability and consistency while maintaining type stability. Here are some examples to guide our developers.","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"# The first example - `SVector`, keep code consistency within `SVector`\nSVector(0, 0, 0)\nSVector(zero(RealT), zero(RealT), zero(RealT))\nSvector(one(RealT), one(RealT), one(RealT))\n\n# The second example - inner functions, keep them type-stable as well\nfunction foo(..., input, ...)\nRealT = eltype(input) # see **notes** below\n# ...\nc1 = c2 > 0.5f0 ? one(RealT) : convert(RealT, 0.1) # make type-stable\n# ...\nend \n\n# The third example - some operations (e.g., `/`, `sqrt`, `inv`), convert them definitely\nc1 = convert(RealT, 4) # suppose we get RealT before\nc2 = 1 / c1\nc3 = sqrt(c1)\nc4 = inv(c1)","category":"page"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"In general, in the case of integer numbers, our developers should apply a case-by-case strategy to maintain type stability. ","category":"page"},{"location":"conventions/#Notes","page":"Conventions","title":"Notes","text":"","category":"section"},{"location":"conventions/","page":"Conventions","title":"Conventions","text":"If the function gets a local pointwise vector of the solution variables u such as flux(u, equations), use u to determine the real type eltype(u).\nIf u is not passed as an argument but a vector of coordinates x such as initial_condition(x, t, equations), use eltype(x) instead.\nChoose an appropriate argument to determine the real type otherwise.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"EditURL = \"../../literate/src/files/non_periodic_boundaries.jl\"","category":"page"},{"location":"tutorials/non_periodic_boundaries/#non_periodic_boundaries","page":"7 Non-periodic boundaries","title":"7: Non-periodic boundaries","text":"","category":"section"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/non_periodic_boundaries/#Dirichlet-boundary-condition","page":"7 Non-periodic boundaries","title":"Dirichlet boundary condition","text":"","category":"section"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"First, let's look at the Dirichlet boundary condition BoundaryConditionDirichlet.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"BoundaryConditionDirichlet(boundary_value_function)","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"In Trixi.jl, this creates a Dirichlet boundary condition where the function boundary_value_function is used to set the values at the boundary. It can be used to create a boundary condition that sets exact boundary values by passing the exact solution of the equation.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"It is important to note that standard Dirichlet boundary conditions for hyperbolic PDEs do not make sense in most cases. However, we are using a special weak form of the Dirichlet boundary condition, based on the application of the numerical surface flux. The numerical surface flux takes the solution value from inside the domain and the prescribed value of the outer boundary state as arguments, and solves an approximate Riemann problem to introduce dissipation (and hence stabilization) at the boundary. Hence, the performance of the Dirichlet BC depends on the fidelity of the numerical surface flux. An easy-to read introductory reference on this topic is the paper by Mengaldo et al..","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"The passed boundary value function is called with the same arguments as an initial condition function, i.e.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"boundary_value_function(x, t, equations)","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"where x specifies the spatial coordinates, t is the current time, and equations is the corresponding system of equations.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"We want to give a short example for a simulation with such a Dirichlet BC.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Consider the one-dimensional linear advection equation with domain Omega=0 2 and a constant zero initial condition.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"using OrdinaryDiffEq, Trixi\n\nadvection_velocity = 1.0\nequations = LinearScalarAdvectionEquation1D(advection_velocity)\n\ninitial_condition_zero(x, t, equation::LinearScalarAdvectionEquation1D) = SVector(0.0)\ninitial_condition = initial_condition_zero\n\nusing Plots\nplot(x -> sum(initial_condition(x, 0.0, equations)), label=\"initial condition\", ylim=(-1.5, 1.5))","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Using an advection velocity of 1.0 and the (local) Lax-Friedrichs/Rusanov flux FluxLaxFriedrichs as a numerical surface flux, we are able to create an inflow boundary on the left and an outflow boundary on the right, as the Lax-Friedrichs flux is in this case an exact characteristics Riemann solver. We note that for more complex PDEs different strategies for inflow/outflow boundaries are necessary. To define the inflow values, we initialize a boundary_value_function.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"function boundary_condition_sine_sector(x, t, equation::LinearScalarAdvectionEquation1D)\n if 1 <= t <= 3\n scalar = sin(2 * pi * sum(t - 1))\n else\n scalar = zero(t)\n end\n return SVector(scalar)\nend\nboundary_condition = boundary_condition_sine_sector","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"We set the BC in negative and positive x-direction.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"boundary_conditions = (x_neg=BoundaryConditionDirichlet(boundary_condition),\n x_pos=BoundaryConditionDirichlet(boundary_condition))","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n\ncoordinates_min = (0.0,)\ncoordinates_max = (2.0,)","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"For the mesh type TreeMesh the parameter periodicity must be set to false in the corresponding direction.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"mesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=4,\n n_cells_max=10_000,\n periodicity=false)\n\n\nsemi = SemidiscretizationHyperbolic(mesh, equations,\n initial_condition,\n solver,\n boundary_conditions=boundary_conditions)\n\ntspan = (0.0, 6.0)\node = semidiscretize(semi, tspan)\n\nanalysis_callback = AnalysisCallback(semi, interval=100,)\n\nstepsize_callback = StepsizeCallback(cfl=0.9)\n\ncallbacks = CallbackSet(analysis_callback,\n stepsize_callback);\nnothing #hide","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"We define some equidistant nodes for the visualization","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"visnodes = range(tspan[1], tspan[2], length=300)","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"and run the simulation.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt=1, # solve needs some value here but it will be overwritten by the stepsize_callback\n save_everystep=false, saveat=visnodes, callback=callbacks);\n\nusing Plots\n@gif for step in eachindex(sol.u)\n plot(sol.u[step], semi, ylim=(-1.5, 1.5), legend=true, label=\"approximation\", title=\"time t=$(round(sol.t[step], digits=5))\")\n scatter!([0.0], [sum(boundary_condition(SVector(0.0), sol.t[step], equations))], label=\"boundary condition\")\nend","category":"page"},{"location":"tutorials/non_periodic_boundaries/#Other-available-example-elixirs-with-non-trivial-BC","page":"7 Non-periodic boundaries","title":"Other available example elixirs with non-trivial BC","text":"","category":"section"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Moreover, there are other boundary conditions in Trixi.jl. For instance, you can use the slip wall boundary condition boundary_condition_slip_wall.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Trixi.jl provides some interesting examples with different combinations of boundary conditions, e.g. using boundary_condition_slip_wall and other self-defined boundary conditions using BoundaryConditionDirichlet.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"For instance, there is a 2D compressible Euler setup for a Mach 3 wind tunnel flow with a forward facing step in the elixir elixir_euler_forward_step_amr.jl discretized with a P4estMesh using adaptive mesh refinement (AMR).","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":" \n
","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Source: Video on Trixi.jl's YouTube channel Trixi Framework","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"A double Mach reflection problem for the 2D compressible Euler equations elixir_euler_double_mach_amr.jl exercises a special boundary conditions along the bottom of the domain that is a mixture of Dirichlet and slip wall.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":" \n
","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Source: Video on Trixi.jl's YouTube channel Trixi Framework","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"A channel flow around a cylinder at Mach 3 elixir_euler_supersonic_cylinder.jl contains supersonic Mach 3 inflow at the left portion of the domain and supersonic outflow at the right portion of the domain. The top and bottom of the channel as well as the cylinder are treated as Euler slip wall boundaries.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":" \n
","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"Source: Video on Trixi.jl's YouTube channel Trixi Framework","category":"page"},{"location":"tutorials/non_periodic_boundaries/#Package-versions","page":"7 Non-periodic boundaries","title":"Package versions","text":"","category":"section"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"","category":"page"},{"location":"tutorials/non_periodic_boundaries/","page":"7 Non-periodic boundaries","title":"7 Non-periodic boundaries","text":"This page was generated using Literate.jl.","category":"page"},{"location":"parallelization/#Parallelization","page":"Parallelization","title":"Parallelization","text":"","category":"section"},{"location":"parallelization/#Shared-memory-parallelization-with-threads","page":"Parallelization","title":"Shared-memory parallelization with threads","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"Many compute-intensive loops in Trixi.jl are parallelized using the multi-threading support provided by Julia. You can recognize those loops by the @threaded macro prefixed to them, e.g.,","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"@threaded for element in eachelement(dg, cache)\n ...\nend","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"This will statically assign an equal iteration count to each available thread.","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"To use multi-threading, you need to tell Julia at startup how many threads you want to use by either setting the environment variable JULIA_NUM_THREADS or by providing the -t/--threads command line argument. For example, to start Julia with four threads, start Julia with","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"julia --threads=4","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"If both the environment variable and the command line argument are specified at the same time, the latter takes precedence.","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"If you use time integration methods from OrdinaryDiffEq.jl and want to use multiple threads therein, you need to set the keyword argument thread=OrdinaryDiffEq.True() of the algorithms, as described in the section on time integration methods.","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"warning: Warning\nNot everything is parallelized yet and there are likely opportunities to improve scalability. Multi-threading isn't considered part of the public API of Trixi.jl yet.","category":"page"},{"location":"parallelization/#Distributed-computing-with-MPI","page":"Parallelization","title":"Distributed computing with MPI","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"In addition to the shared memory parallelization with multi-threading, Trixi.jl supports distributed parallelism via MPI.jl, which leverages the Message Passing Interface (MPI). MPI.jl comes with its own MPI library binaries such that there is no need to install MPI yourself. However, it is also possible to instead use an existing MPI installation, which is recommended if you are running MPI programs on a cluster or supercomputer (see the MPI.jl docs to find out how to select the employed MPI library). Additional notes on how to use a system-provided MPI installation with Trixi.jl can be found in the following subsection.","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"warning: Work in progress\nMPI-based parallelization is work in progress and not finished yet. Nothing related to MPI is part of the official API of Trixi.jl yet.","category":"page"},{"location":"parallelization/#parallel_system_MPI","page":"Parallelization","title":"Using a system-provided MPI installation","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"When using Trixi.jl with a system-provided MPI backend, the underlying p4est, t8code and HDF5 libraries need to be compiled with the same MPI installation. If you want to use p4est (via the P4estMesh) or t8code (via the T8codeMesh) from Trixi.jl, you also need to use system-provided p4est or t8code installations (for notes on how to install p4est and t8code see, e.g., here and here, use the configure option --enable-mpi). Otherwise, there will be warnings that no preference is set for P4est.jl and T8code.jl that can be ignored if you do not use these libraries from Trixi.jl. Note that t8code already comes with a p4est installation, so it suffices to install t8code. In order to use system-provided p4est and t8code installations, P4est.jl and T8code.jl need to be configured to use the custom installations. Follow the steps described here and here for the configuration. The paths that point to libp4est.so (and potentially to libsc.so) need to be the same for P4est.jl and T8code.jl. This could, e.g., be libp4est.so that usually can be found in lib/ or local/lib/ in the installation directory of t8code. The preferences for HDF5.jl always need to be set, even if you do not want to use HDF5 from Trixi.jl, see also issue #1079 in HDF5.jl. To set the preferences for HDF5.jl, follow the instructions described here.","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"In total, in your active Julia project you should have a LocalPreferences.toml file with sections [MPIPreferences], [T8code] (only needed if T8codeMesh is used), [P4est] (only needed if P4estMesh is used), and [HDF5] as well as an entry MPIPreferences in your Project.toml to use a custom MPI installation. A LocalPreferences.toml file created as described above might look something like the following:","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"[HDF5]\nlibhdf5 = \"/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so\"\nlibhdf5_hl = \"/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so\"\n\n[HDF5_jll]\nlibhdf5_hl_path = \"/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so\"\nlibhdf5_path = \"/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so\"\n\n[MPIPreferences]\n__clear__ = [\"preloads_env_switch\"]\n_format = \"1.0\"\nabi = \"OpenMPI\"\nbinary = \"system\"\ncclibs = []\nlibmpi = \"/lib/x86_64-linux-gnu/libmpi.so\"\nmpiexec = \"mpiexec\"\npreloads = []\n\n[P4est]\nlibp4est = \"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libp4est.so\"\nlibsc = \"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libsc.so\"\n\n[T8code]\nlibp4est = \"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libp4est.so\"\nlibsc = \"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libsc.so\"\nlibt8 = \"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libt8.so\"","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"This file is created with the following sequence of commands:","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"julia> using MPIPreferences\njulia> MPIPreferences.use_system_binary()","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"Restart the Julia REPL","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"julia> using P4est\njulia> P4est.set_library_p4est!(\"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libp4est.so\")\njulia> P4est.set_library_sc!(\"/home/mschlott/hackathon/libtrixi/t8code/install/lib/libsc.so\")\njulia> using T8code\njulia> T8code.set_libraries_path!(\"/home/mschlott/hackathon/libtrixi/t8code/install/lib/\")\njulia> using HDF5\njulia> HDF5.API.set_libraries!(\"/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so\", \"/usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5_hl.so\")","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"After the preferences are set, restart the Julia REPL again.","category":"page"},{"location":"parallelization/#parallel_usage","page":"Parallelization","title":"Usage","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"To start Trixi.jl in parallel with MPI, there are three options:","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"Run from the REPL with mpiexec(): You can start a parallel execution directly from the REPL by executing\njulia> using MPI\n\njulia> mpiexec() do cmd\n run(`$cmd -n 3 $(Base.julia_cmd()) --threads=1 --project=@. -e 'using Trixi; trixi_include(default_example())'`)\n end\nThe parameter -n 3 specifies that Trixi.jl should run with three processes (or ranks in MPI parlance) and should be adapted to your available computing resources and problem size. The $(Base.julia_cmd()) argument ensures that Julia is executed in parallel with the same optimization level etc. as you used for the REPL; if this is unnecessary or undesired, you can also just use julia. Further, if you are not running Trixi.jl from a local clone but have installed it as a package, you need to omit the --project=@..\nRun from the command line with mpiexecjl: Alternatively, you can use the mpiexecjl script provided by MPI.jl, which allows you to start Trixi.jl in parallel directly from the command line. As a preparation, you need to install the script once by running\njulia> using MPI\n\njulia> MPI.install_mpiexecjl(destdir=\"/somewhere/in/your/PATH\")\nThen, to execute Trixi.jl in parallel, execute the following command from your command line:\nmpiexecjl -n 3 julia --threads=1 --project=@. -e 'using Trixi; trixi_include(default_example())'\nRun interactively with tmpi (Linux/MacOS only): If you are on a Linux/macOS system, you have a third option which lets you run Julia in parallel interactively from the REPL. This comes in handy especially during development, as in contrast to the first two options, it allows to reuse the compilation cache and thus facilitates much faster startup times after the first execution. It requires tmux and the OpenMPI library to be installed before, both of which are usually available through a package manager. Once you have installed both tools, you need to configure MPI.jl to use the OpenMPI for your system, which is explained here. Then, you can download and install the tmpi script by executing\ncurl https://raw.githubusercontent.com/Azrael3000/tmpi/master/tmpi -o /somewhere/in/your/PATH/tmpi\nFinally, you can start and control multiple Julia REPLs simultaneously by running\ntmpi 3 julia --threads=1 --project=@.\nThis will start Julia inside tmux three times and multiplexes all commands you enter in one REPL to all other REPLs (try for yourself to understand what it means). If you have no prior experience with tmux, handling the REPL this way feels slightly weird in the beginning. However, there is a lot of documentation for tmux available and once you get the hang of it, developing Trixi.jl in parallel becomes much smoother this way. Some helpful commands are the following. To close a single pane you can press Ctrl+b and then x followed by y to confirm. To quit the whole session you press Ctrl+b followed by :kill-session. Often you would like to scroll up. You can do that by pressing Ctrl+b and then [, which allows you to use the arrow keys to scroll up and down. To leave the scroll mode you press q. Switching between panes can be done by Ctrl+b followed by o. As of March 2022, newer versions of tmpi also support mpich, which is the default backend of MPI.jl (via MPICH_Jll.jl). To use this setup, you need to install mpiexecjl as described in the documentation of MPI.jl and make it available as mpirun, e.g., via a symlink of the form\nln -s ~/.julia/bin/mpiexecjl /somewhere/in/your/path/mpirun\n(assuming default installations).","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"note: Hybrid parallelism\nIt is possible to combine MPI with shared memory parallelism via threads by starting Julia with more than one thread, e.g. by passing the command line argument julia --threads=2 instead of julia --threads=1 used in the examples above. In that case, you should make sure that your system supports the number of processes/threads that you try to start.","category":"page"},{"location":"parallelization/#parallel_performance","page":"Parallelization","title":"Performance","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"For information on how to evaluate the parallel performance of Trixi.jl, please have a look at the Performance metrics of the AnalysisCallback section, specifically at the descriptions of the performance index (PID).","category":"page"},{"location":"parallelization/#Using-error-based-step-size-control-with-MPI","page":"Parallelization","title":"Using error-based step size control with MPI","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"If you use error-based step size control (see also the section on error-based adaptive step sizes) together with MPI you need to pass internalnorm=ode_norm and you should pass unstable_check=ode_unstable_check to OrdinaryDiffEq's solve, which are both included in ode_default_options.","category":"page"},{"location":"parallelization/#Using-parallel-input-and-output","page":"Parallelization","title":"Using parallel input and output","text":"","category":"section"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"Trixi.jl allows parallel I/O using MPI by leveraging parallel HDF5.jl. On most systems, this is enabled by default. Additionally, you can also use a local installation of the HDF5 library (with MPI support). For this, you first need to use a system-provided MPI library, see also here and you need to tell HDF5.jl to use this library. To do so with HDF5.jl v0.17 and newer, set the preferences libhdf5 and libhdf5_hl to the local paths of the libraries libhdf5 and libhdf5_hl, which can be done by","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"julia> using Preferences, UUIDs\njulia> set_preferences!(\n UUID(\"f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f\"), # UUID of HDF5.jl\n \"libhdf5\" => \"/path/to/your/libhdf5.so\",\n \"libhdf5_hl\" => \"/path/to/your/libhdf5_hl.so\", force = true)","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"Alternatively, with HDF5.jl v0.17.1 or higher you can use","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"julia> using HDF5\njulia> HDF5.API.set_libraries!(\"/path/to/your/libhdf5.so\", \"/path/to/your/libhdf5_hl.so\")","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"For more information see also the documentation of HDF5.jl. In total, you should have a file called LocalPreferences.toml in the project directory that contains a section [MPIPreferences], a section [HDF5] with entries libhdf5 and libhdf5_hl, a section [P4est] with the entry libp4est as well as a section [T8code] with the entries libt8, libp4est and libsc. If you use HDF5.jl v0.16 or older, instead of setting the preferences for HDF5.jl, you need to set the environment variable JULIA_HDF5_PATH to the path, where the HDF5 binaries are located and then call ]build HDF5 from Julia.","category":"page"},{"location":"parallelization/","page":"Parallelization","title":"Parallelization","text":"If HDF5 is not MPI-enabled, Trixi.jl will fall back on a less efficient I/O mechanism. In that case, all disk I/O is performed only on rank zero and data is distributed to/gathered from the other ranks using regular MPI communication.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"EditURL = \"../../literate/src/files/behind_the_scenes_simulation_setup.jl\"","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/#behind_the_scenes_simulation_setup","page":"2 Behind the scenes of a simulation setup","title":"2: Behind the scenes of a simulation setup","text":"","category":"section"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"This tutorial will guide you through a simple Trixi.jl setup (\"elixir\"), giving an overview of what happens in the background during the initialization of a simulation. While the setup described herein does not cover all details, it involves relatively stable parts of Trixi.jl that are unlikely to undergo significant changes in the near future. The goal is to clarify some of the more fundamental, technical concepts that are applicable to a variety of (also more complex) configurations.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Trixi.jl follows the method of lines concept for solving partial differential equations (PDEs). Firstly, the PDEs are reduced to a (potentially huge) system of ordinary differential equations (ODEs) by discretizing the spatial derivatives. Subsequently, these generated ODEs may be solved with methods available in OrdinaryDiffEq.jl or those specifically implemented in Trixi.jl. The following steps elucidate the process of transitioning from PDEs to ODEs within the framework of Trixi.jl.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/#Basic-setup","page":"2 Behind the scenes of a simulation setup","title":"Basic setup","text":"","category":"section"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Import essential libraries and specify an equation.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"using Trixi, OrdinaryDiffEq\nequations = LinearScalarAdvectionEquation2D((-0.2, 0.7))","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Generate a spatial discretization using a TreeMesh with a pre-coarsened set of cells.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"coordinates_min = (-2.0, -2.0)\ncoordinates_max = (2.0, 2.0)\n\ncoarsening_patches = ((type = \"box\", coordinates_min = [0.0, -2.0],\n coordinates_max = [2.0, 0.0]),)\n\nmesh = TreeMesh(coordinates_min, coordinates_max, initial_refinement_level = 2,\n n_cells_max = 30_000,\n coarsening_patches = coarsening_patches)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"The created TreeMesh looks like the following:","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"(Image: TreeMesh_example)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Instantiate a DGSEM solver with a user-specified polynomial degree. The solver will define polydeg + 1 Gauss-Lobatto nodes and their associated weights within the reference interval -1 1 in each spatial direction. These nodes will be subsequently used to approximate solutions on each leaf cell of the TreeMesh.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"solver = DGSEM(polydeg = 3)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Gauss-Lobatto nodes with polydeg = 3:","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"(Image: Gauss-Lobatto_nodes_example)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/#Overview-of-the-[SemidiscretizationHyperbolic](@ref)-type","page":"2 Behind the scenes of a simulation setup","title":"Overview of the SemidiscretizationHyperbolic type","text":"","category":"section"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"At this stage, all necessary components for configuring the spatial discretization are in place. The remaining task is to combine these components into a single structure that will be used throughout the entire simulation process. This is where SemidiscretizationHyperbolic comes into play.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test,\n solver)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"The constructor for the SemidiscretizationHyperbolic object calls numerous sub-functions to perform the necessary initialization steps. A brief description of the key sub-functions is provided below.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"init_elements(leaf_cell_ids, mesh, equations, dg.basis, RealT, uEltype)\nThe fundamental elements for approximating the solution are the leaf cells. The solution is constructed as a polynomial of the degree specified in the DGSEM solver in each spatial direction on each leaf cell. This polynomial approximation is evaluated at the Gauss-Lobatto nodes mentioned earlier. The init_elements function extracts these leaf cells from the TreeMesh, assigns them the label \"elements\", records their coordinates, and maps the Gauss-Lobatto nodes from the 1D interval -1 1 onto each coordinate axis of every element.\n(Image: elements_example)\nThe visualization of elements with nodes shown here includes spaces between elements, which do not exist in reality. This spacing is included only for illustrative purposes to underscore the separation of elements and the independent projection of nodes onto each element.\ninit_interfaces(leaf_cell_ids, mesh, elements)\nAt this point, the elements with nodes have been defined; however, they lack the necessary communication functionality. This is crucial because the local solution polynomials on the elements are not independent of each other. Furthermore, nodes on the boundary of adjacent elements share the same spatial location, which requires a method to combine this into a meaningful solution. Here Riemann solvers come into play which can handle the principal ambiguity of a multi-valued solution at the same spatial location.\nAs demonstrated earlier, the elements can have varying sizes. Let us initially consider neighbors with equal size. For these elements, the init_interfaces function generates interfaces that store information about adjacent elements, their relative positions, and allocate containers for sharing solution data between neighbors during the solution process.\nIn our visualization, these interfaces would conceptually resemble tubes connecting the corresponding elements.\n(Image: interfaces_example)\ninit_mortars(leaf_cell_ids, mesh, elements, dg.mortar)\nReturning to the consideration of different sizes among adjacent elements, within the TreeMesh, adjacent leaf cells can vary in side length by a maximum factor of two. This implies that a large element has one neighbor of equal size with a connection through an interface, or two neighbors at half the size, requiring a connection through so called \"mortars\". In 3D, a large element would have four small neighbor elements.\nMortars store information about the connected elements, their relative positions, and allocate containers for storing the solutions along the boundaries between these elements.\nDue to the differing sizes of adjacent elements, it is not feasible to directly map boundary nodes of adjacent elements. Therefore, the concept of mortars employs a mass-conserving interpolation function to map boundary nodes from a larger element to a smaller one.\nIn our visualization, mortars are represented as branched tubes.\n(Image: mortars_example)\ninit_boundaries(leaf_cell_ids, mesh, elements)\nIn order to apply boundary conditions, it is necessary to identify the locations of the boundaries. Therefore, we initialize a \"boundaries\" object, which records the elements that contain boundaries, specifies which side of an element is a boundary, stores the coordinates of boundary nodes, and allocates containers for managing solutions at these boundaries.\nIn our visualization, boundaries and their corresponding nodes are highlighted with green, semi-transparent lines.\n(Image: boundaries_example)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"All the structures mentioned earlier are collected as a cache of type NamedTuple. Subsequently, an object of type SemidiscretizationHyperbolic is initialized using this cache, initial and boundary conditions, equations, mesh and solver.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"In conclusion, the primary purpose of a SemidiscretizationHyperbolic is to collect equations, the geometric representation of the domain, and approximation instructions, creating specialized structures to interconnect these components in a manner that enables their utilization for the numerical solution of partial differential equations (PDEs).","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"As evident from the earlier description of SemidiscretizationHyperbolic, it comprises numerous functions called subsequently. Without delving into details, the structure of the primary calls are illustrated as follows:","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"(Image: SemidiscretizationHyperbolic_structure)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/#Overview-of-the-[semidiscretize](@ref)-function","page":"2 Behind the scenes of a simulation setup","title":"Overview of the semidiscretize function","text":"","category":"section"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"At this stage, we have defined the equations and configured the domain's discretization. The final step before solving is to select a suitable time span and apply the corresponding initial conditions, which are already stored in the initialized SemidiscretizationHyperbolic object.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"The purpose of the semidiscretize function is to wrap the semidiscretization as an ODEProblem within the specified time interval. During this procedure the approximate solution is created at the given initial time via the specified initial_condition function from the SemidiscretizationHyperbolic object. This ODEProblem can be subsequently passed to the solve function from the OrdinaryDiffEq.jl package or to Trixi.solve.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"ode = semidiscretize(semi, (0.0, 1.0));\nnothing #hide","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"The semidiscretize function involves a deep tree of subsequent calls, with the primary ones explained below.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"allocate_coefficients(mesh, equations, solver, cache)\nTo apply initial conditions, a data structure (\"container\") needs to be generated to store the initial values of the target variables for each node within each element.\nSince only one-dimensional Arrays are resize!able in Julia, we use Vectors as an internal storage for the target variables and resize! them whenever needed, e.g. to change the number of elements. Then, during the solving process the same memory is reused by unsafe_wrapping multi-dimensional Arrays around the internal storage.\nwrap_array(u_ode, semi)\nAs previously noted, u_ode is constructed as a 1D vector to ensure compatibility with OrdinaryDiffEq.jl. However, for internal use within Trixi.jl, identifying which part of the vector relates to specific variables, elements, or nodes can be challenging.\nThis is why the u_ode vector is wrapped by the wrap_array function using unsafe_wrap to form a multidimensional array u. In this array, the first dimension corresponds to variables, followed by N dimensions corresponding to nodes for each of N space dimensions. The last dimension corresponds to the elements. Consequently, navigation within this multidimensional array becomes noticeably easier.\n\"Wrapping\" in this context involves the creation of a reference to the same storage location but with an alternative structural representation. This approach enables the use of both instances u and u_ode as needed, so that changes are simultaneously reflected in both. This is possible because, from a storage perspective, they share the same stored data, while access to this data is provided in different ways.\ncompute_coefficients!(u, initial_conditions, t, mesh::DG, equations, solver, cache)\nNow the variable u, intended to store solutions, has been allocated and wrapped, it is time to apply the initial conditions. The compute_coefficients! function calculates the initial conditions for each variable at every node within each element and properly stores them in the u array.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"At this stage, the semidiscretize function has all the necessary components to initialize and return an ODEProblem object, which will be used by the solve function to compute the solution.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"In summary, the internal workings of semidiscretize with brief descriptions can be presented as follows.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"(Image: semidiscretize_structure)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/#Functions-solve-and-rhs!","page":"2 Behind the scenes of a simulation setup","title":"Functions solve and rhs!","text":"","category":"section"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Once the ODEProblem object is initialized, the solve function and one of the ODE solvers from the OrdinaryDiffEq.jl package can be utilized to compute an approximated solution using the instructions contained in the ODEProblem object.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false), dt = 0.01,\n save_everystep = false);\nnothing #hide","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Since the solve function and the ODE solver have no knowledge of a particular spatial discretization, it is necessary to define a \"right-hand-side function\", rhs!, within Trixi.jl.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Trixi.jl includes a set of rhs! functions designed to compute du, i.e., fracpartial upartial t according to the structure of the setup. These rhs! functions calculate interface, mortars, and boundary fluxes, in addition to surface and volume integrals, in order to construct the du vector. This du vector is then used by the time integration method to obtain the solution at the subsequent time step. The rhs! function is called by time integration methods in each iteration of the solve loop within OrdinaryDiffEq.jl, with arguments du, u, semidiscretization, and the current time.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Trixi.jl uses a two-levels approach for rhs! functions. The first level is limited to a single function for each semidiscretization type, and its role is to redirect data to the target rhs! for specific solver and mesh types. This target rhs! function is responsible for calculating du.","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Path from the solve function call to the appropriate rhs! function call:","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"(Image: rhs_structure)","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"Computed solution:","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"using Plots\nplot(sol)\npd = PlotData2D(sol)\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"","category":"page"},{"location":"tutorials/behind_the_scenes_simulation_setup/","page":"2 Behind the scenes of a simulation setup","title":"2 Behind the scenes of a simulation setup","text":"This page was generated using Literate.jl.","category":"page"},{"location":"overview/#Overview-of-the-structure-of-Trixi.jl","page":"Overview","title":"Overview of the structure of Trixi.jl","text":"","category":"section"},{"location":"overview/","page":"Overview","title":"Overview","text":"Trixi.jl is designed as a library of components for discretizations of hyperbolic conservation laws. Thus, it is not a monolithic PDE solver that is configured at runtime via parameter files, as it is often found in classical numerical simulation codes. Instead, each simulation is configured by pure Julia code. Many examples of such simulation setups, called elixirs in Trixi.jl, are provided in the examples/ folder.","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"Trixi.jl uses the method of lines, i.e., the full space-time discretization is separated into two steps; the spatial semidiscretization is performed at first and the resulting ODE system is solved numerically using a suitable time integration method. Thus, the main ingredients of an elixir designed to solve a PDE numerically are the spatial semidiscretization and the time integration scheme.","category":"page"},{"location":"overview/#overview-semidiscretizations","page":"Overview","title":"Semidiscretizations","text":"","category":"section"},{"location":"overview/","page":"Overview","title":"Overview","text":"Semidiscretizations are high-level descriptions of spatial discretizations specialized for certain PDEs. Trixi.jl's main focus is on hyperbolic conservation laws represented in a SemidiscretizationHyperbolic. Such semidiscretizations are usually named semi in Trixi.jl","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"(Image: semidiscretization_overview)","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"The basic building blocks of a semidiscretization are","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"a mesh describing the geometry of the domain\na set of equations describing the physical model\na solver describing the numerical approach","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"In addition, a semidiscretization bundles initial and boundary conditions, and possible source terms. These different ingredients of a semidiscretization can be configured individually and combined together. When a semidiscretization is constructed, it will create an internal cache, i.e., a collection of setup-specific data structures, that is usually passed to all lower level functions.","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"Due to Trixi.jl's modular nature using Julia's multiple dispatch features, new ingredients can be created specifically for a certain combination of other ingredients. For example, a new mesh type can be created and implemented at first only for a specific solver. Thus, there is no need to consider all possible combinations of meshes, equations, and solvers when implementing new features. This allows rapid prototyping of new ideas and is one of the main design goals behind Trixi.jl. Below is a brief overview of the availability of different features on different mesh types.","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"Feature TreeMesh StructuredMesh UnstructuredMesh2D P4estMesh DGMultiMesh Further reading\nSpatial dimension 1D, 2D, 3D 1D, 2D, 3D 2D 2D, 3D 1D, 2D, 3D \nCoordinates Cartesian curvilinear curvilinear curvilinear curvilinear \nConnectivity h-nonconforming conforming conforming h-nonconforming conforming \nElement type line, square, cube line, quadᵃ, hexᵃ quadᵃ quadᵃ, hexᵃ simplex, quadᵃ, hexᵃ \nAdaptive mesh refinement ✅ ❌ ❌ ✅ ❌ AMRCallback\nSolver type DGSEM DGSEM DGSEM DGSEM DGMulti \nDomain hypercube mapped hypercube arbitrary arbitrary arbitrary \nWeak form ✅ ✅ ✅ ✅ ✅ VolumeIntegralWeakForm\nFlux differencing ✅ ✅ ✅ ✅ ✅ VolumeIntegralFluxDifferencing\nShock capturing ✅ ✅ ✅ ✅ ❌ VolumeIntegralShockCapturingHG\nNonconservative equations ✅ ✅ ✅ ✅ ✅ e.g., GLM MHD or shallow water equations\nParabolic terms ✅ ❌ ❌ ✅ ✅ e.g., CompressibleNavierStokesDiffusion2D","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"ᵃ: quad = quadrilateral, hex = hexahedron","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"Note that except for TreeMesh all meshes are of curvilinear type, which means that a (unit) vector normal to the interface (normal_direction) needs to be supplied to the numerical flux function. You can check the reference if a certain numerical flux is implemented with a normal_direction or if currently only the Cartesian version (for TreeMesh) exists. In this case, you can still use this flux on curvilinear meshes by rotating it, see FluxRotated.","category":"page"},{"location":"overview/#Time-integration-methods","page":"Overview","title":"Time integration methods","text":"","category":"section"},{"location":"overview/","page":"Overview","title":"Overview","text":"Trixi.jl is compatible with the SciML ecosystem for ordinary differential equations. In particular, a spatial semidiscretization can be wrapped in an ODE problem using semidiscretize, which returns an ODEProblem. This ODEProblem is a wrapper of Trixi.rhs!(du_ode, u_ode, semi, t), which gets called in ODE solvers. Further information can be found in the section on time integration methods.","category":"page"},{"location":"overview/#Next-steps","page":"Overview","title":"Next steps","text":"","category":"section"},{"location":"overview/","page":"Overview","title":"Overview","text":"We explicitly encourage people interested in Trixi.jl to have a look at the examples/ bundled with Trixi.jl to get an impression of what is possible and the general look and feel of Trixi.jl. Before doing that, it is usually good to get an idea of how to visualize numerical results.","category":"page"},{"location":"overview/","page":"Overview","title":"Overview","text":"If you like learning by doing, looking at the tutorials and trying to mix your own elixirs based thereon is probably a good next step. Otherwise, you can further dig into the documentation by looking at Trixi.jl's basic building blocks.","category":"page"},{"location":"callbacks/#callbacks-id","page":"Callbacks","title":"Callbacks","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Many of the advanced features of Trixi.jl, such as adaptive mesh refinement, are implemented as callbacks. A callback is an algorithmic entity that gets passed to the ODE solver and is called at specific points during execution to perform certain tasks. Callbacks in Trixi.jl are either called after each time step (step callbacks) or after each stage of the ODE solver (stage callbacks).","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"(Image: callbacks_illustration)","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"The advantage of callbacks over hard-coding all features is that it allows to extend Trixi.jl without modifying the internal source code. Trixi.jl provides callbacks for time step control, adaptive mesh refinement, I/O, and more.","category":"page"},{"location":"callbacks/#Step-callbacks","page":"Callbacks","title":"Step callbacks","text":"","category":"section"},{"location":"callbacks/#CFL-based-time-step-control","page":"Callbacks","title":"CFL-based time step control","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Time step control can be performed with a StepsizeCallback. An example making use of this can be found at examples/tree_2d_dgsem/elixir_advection_basic.jl","category":"page"},{"location":"callbacks/#Adaptive-mesh-refinement","page":"Callbacks","title":"Adaptive mesh refinement","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Trixi.jl uses a hierarchical Cartesian mesh which can be locally refined in a solution-adaptive way. This can be used to speed up simulations with minimal loss in overall accuracy. Adaptive mesh refinement (AMR) can be used by passing an AMRCallback to the ODE solver. The AMRCallback requires a controller such as ControllerThreeLevel or ControllerThreeLevelCombined to tell the AMR algorithm which cells to refine/coarsen.","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"An example elixir using AMR can be found at examples/tree_2d_dgsem/elixir_advection_amr.jl.","category":"page"},{"location":"callbacks/#Analyzing-the-numerical-solution","page":"Callbacks","title":"Analyzing the numerical solution","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"The AnalysisCallback can be used to analyze the numerical solution, e.g. calculate errors or user-specified integrals, and print the results to the screen. The results can also be saved in a file. An example can be found at examples/tree_2d_dgsem/elixir_euler_vortex.jl. Note that the errors (e.g. L2 error or Linf error) are computed with respect to the initial condition. The percentage of the simulation time refers to the ratio of the current time and the final time, i.e. it does not consider the maximal number of iterations. So the simulation could finish before 100% are reached. Note that, e.g., due to AMR or smaller time step sizes, the simulation can actually take longer than the percentage indicates. In Performance metrics of the AnalysisCallback you can find a detailed description of the different performance metrics the AnalysisCallback computes.","category":"page"},{"location":"callbacks/#I/O","page":"Callbacks","title":"I/O","text":"","category":"section"},{"location":"callbacks/#Solution-and-restart-files","page":"Callbacks","title":"Solution and restart files","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"To save the solution in regular intervals you can use a SaveSolutionCallback. It is also possible to create restart files using the SaveRestartCallback. An example making use of these can be found at examples/tree_2d_dgsem/elixir_advection_extended.jl. An example showing how to restart a simulation from a restart file can be found at examples/tree_2d_dgsem/elixir_advection_restart.jl.","category":"page"},{"location":"callbacks/#Time-series","page":"Callbacks","title":"Time series","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Sometimes it is useful to record the evaluations of state variables over time at a given set of points. This can be achieved by the TimeSeriesCallback, which is used, e.g., in examples/tree_2d_dgsem/elixir_acoustics_gaussian_source.jl. The TimeSeriesCallback constructor expects a semidiscretization and a list of points at which the solution should be recorded in regular time step intervals. After the last time step, the entire record is stored in an HDF5 file.","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"For the points, two different input formats are supported: You can either provide them as a list of tuples, which is handy if you specify them by hand on the REPL. Alternatively, you can provide them as a two-dimensional array, where the first dimension is the point number and the second dimension is the coordinate dimension. This is especially useful when reading them from a file.","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"For example, to record the primitive variables at the points (0.0, 0.0) and (-1.0, 0.5) every five timesteps and storing the collected data in the file tseries.h5, you can create the TimeSeriesCallback as","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"time_series = TimeSeriesCallback(semi, [(0.0, 0.0), (-1.0, 0.5)];\n interval=5,\n solution_variables=cons2prim,\n filename=\"tseries.h5\")","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"For a full list of possible arguments, please check the documentation for the TimeSeriesCallback. As an alternative to specifying the point coordinates directly in the elixir or on the REPL, you can read them from a file. For instance, with a text file points.dat with content","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":" 0.0 0.0\n-1.0 0.5","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"you can create a time series callback with","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"using DelimitedFiles: readdlm\ntime_series = TimeSeriesCallback(semi, readdlm(\"points.dat\"))","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"To plot the individual point data series over time, you can create a PlotData1D from the TimeSeriesCallback and a given point ID. For example, executing","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"julia> using Trixi, Plots\n\njulia> trixi_include(joinpath(examples_dir(), \"tree_2d_dgsem\", \"elixir_acoustics_gaussian_source.jl\"))\n\njulia> pd1 = PlotData1D(time_series, 1)\n\njulia> pd2 = PlotData1D(time_series, 2)\n\njulia> plot(pd1[\"p_prime\"]); plot!(pd2[\"p_prime\"], xguide=\"t\")","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"will yield the following plot:","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"(Image: image)","category":"page"},{"location":"callbacks/#Miscellaneous","page":"Callbacks","title":"Miscellaneous","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"The AliveCallback prints some information to the screen to show that a simulation is still running.\nThe SummaryCallback prints a human-readable summary of the simulation setup and controls the automated performance measurements, including an output of the recorded timers after a simulation.\nThe VisualizationCallback can be used for in-situ visualization. See Visualizing results during a simulation.\nThe TrivialCallback does nothing and can be used to easily disable some callbacks via trixi_include.","category":"page"},{"location":"callbacks/#Equation-specific-callbacks","page":"Callbacks","title":"Equation-specific callbacks","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Some callbacks provided by Trixi.jl implement specific features for certain equations:","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"The LBMCollisionCallback implements the Lattice-Boltzmann method (LBM) collision operator and should only be used when solving the Lattice-Boltzmann equations. See e.g. examples/tree_2d_dgsem/elixir_lbm_constant.jl\nThe SteadyStateCallback terminates the time integration when the residual steady state falls below a certain threshold. This checks the convergence of the potential phi for hyperbolic diffusion. See e.g. examples/tree_2d_dgsem/elixir_hypdiff_nonperiodic.jl.\nThe GlmSpeedCallback updates the divergence cleaning wave speed c_h for the ideal GLM-MHD equations. See e.g. examples/tree_2d_dgsem/elixir_mhd_alfven_wave.jl.","category":"page"},{"location":"callbacks/#Usage-of-step-callbacks","page":"Callbacks","title":"Usage of step callbacks","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Step callbacks are passed to the solve method from the ODE solver via the keyword argument callback. If you want to use a single callback cb, pass it as callback=cb. When using two or more callbacks, you need to turn them into a CallbackSet first by calling callbacks = CallbackSet(cb1, cb2) and passing it as callback=callbacks.","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"note: Note\nThere are some restrictions regarding the order of callbacks in a CallbackSet.The callbacks are called after each time step but some callbacks actually belong to the next time step. Therefore, the callbacks should be ordered in the following way:Callbacks that belong to the current time step:\nSummaryCallback controls, among other things, timers and should thus be first\nSteadyStateCallback may mark a time step as the last one\nAnalysisCallback may do some checks that mark a time step as the last one\nAliveCallback should be nearby AnalysisCallback\nSaveSolutionCallback/SaveRestartCallback should save the current solution before it is degraded by AMR\nVisualizationCallback should be called before the mesh is adapted\nCallbacks that belong to the next time step:\nAMRCallback\nStepsizeCallback must be called after AMRCallback to accommodate potential changes to the mesh\nGlmSpeedCallback must be called after StepsizeCallback because the step size affects the value of c_h\nLBMCollisionCallback is already part of the calculations of the next time step and should therefore be called after StepsizeCallback","category":"page"},{"location":"callbacks/#Stage-callbacks","page":"Callbacks","title":"Stage callbacks","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"PositivityPreservingLimiterZhangShu is a positivity-preserving limiter, used to enforce physical constraints. An example elixir using this feature can be found at examples/tree_2d_dgsem/elixir_euler_positivity.jl.","category":"page"},{"location":"callbacks/#Implementing-new-callbacks","page":"Callbacks","title":"Implementing new callbacks","text":"","category":"section"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"Since Trixi.jl is compatible with OrdinaryDiffEq.jl, both packages share the same callback interface. A detailed description of it can be found in the OrdinaryDiffEq.jl documentation. Step callbacks are just called callbacks. Stage callbacks are called stage_limiter!.","category":"page"},{"location":"callbacks/","page":"Callbacks","title":"Callbacks","text":"An example elixir showing how to implement a new simple stage callback and a new simple step callback can be found at examples/tree_2d_dgsem/elixir_advection_callbacks.jl.","category":"page"},{"location":"#Trixi.jl","page":"Home","title":"Trixi.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"(Image: Docs-stable) (Image: Docs-dev) (Image: Slack) (Image: Youtube) (Image: Build Status) (Image: Codecov) (Image: Coveralls) (Image: Aqua QA) (Image: License: MIT) (Image: DOI)","category":"page"},{"location":"","page":"Home","title":"Home","text":"Trixi.jl is a numerical simulation framework for conservation laws written in Julia. A key objective for the framework is to be useful to both scientists and students. Therefore, next to having an extensible design with a fast implementation, Trixi.jl is focused on being easy to use for new or inexperienced users, including the installation and postprocessing procedures. Its features include:","category":"page"},{"location":"","page":"Home","title":"Home","text":"1D, 2D, and 3D simulations on line/quad/hex/simplex meshes\nCartesian and curvilinear meshes\nConforming and non-conforming meshes\nStructured and unstructured meshes\nHierarchical quadtree/octree grid with adaptive mesh refinement\nForests of quadtrees/octrees with p4est via P4est.jl\nHigh-order accuracy in space and time\nDiscontinuous Galerkin methods\nKinetic energy-preserving and entropy-stable methods based on flux differencing\nEntropy-stable shock capturing\nPositivity-preserving limiting\nFinite difference summation by parts (SBP) methods\nCompatible with the SciML ecosystem for ordinary differential equations\nExplicit low-storage Runge-Kutta time integration\nStrong stability preserving methods\nCFL-based and error-based time step control\nNative support for differentiable programming\nForward mode automatic differentiation via ForwardDiff.jl\nPeriodic and weakly-enforced boundary conditions\nMultiple governing equations:\nCompressible Euler equations\nCompressible Navier-Stokes equations\nMagnetohydrodynamics (MHD) equations\nMulti-component compressible Euler and MHD equations\nLinearized Euler and acoustic perturbation equations\nHyperbolic diffusion equations for elliptic problems\nLattice-Boltzmann equations (D2Q9 and D3Q27 schemes)\nShallow water equations\nScalar advection\nMulti-physics simulations\nSelf-gravitating gas dynamics\nShared-memory parallelization via multithreading\nMulti-node parallelization via MPI\nVisualization and postprocessing of the results\nIn-situ and a posteriori visualization with Plots.jl\nInteractive visualization with Makie.jl\nPostprocessing with ParaView/VisIt via Trixi2Vtk","category":"page"},{"location":"#Installation","page":"Home","title":"Installation","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"If you have not yet installed Julia, please follow the instructions for your operating system. Trixi.jl works with Julia v1.8 and newer. We recommend using the latest stable release of Julia.","category":"page"},{"location":"#For-users","page":"Home","title":"For users","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Trixi.jl and its related tools are registered Julia packages. Hence, you can install Trixi.jl, the visualization tool Trixi2Vtk, OrdinaryDiffEq.jl, and Plots.jl by executing the following commands in the Julia REPL:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Pkg\n\njulia> Pkg.add([\"Trixi\", \"Trixi2Vtk\", \"OrdinaryDiffEq\", \"Plots\"])","category":"page"},{"location":"","page":"Home","title":"Home","text":"You can copy and paste all commands to the REPL including the leading julia> prompts - they will automatically be stripped away by Julia. The package OrdinaryDiffEq.jl provides time integration schemes used by Trixi.jl, while Plots.jl can be used to directly visualize Trixi.jl's results from the REPL.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Note on package versions: If some of the examples for how to use Trixi.jl do not work, verify that you are using a recent Trixi.jl release by comparing the installed Trixi.jl version from","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Pkg; Pkg.update(\"Trixi\"); Pkg.status(\"Trixi\")","category":"page"},{"location":"","page":"Home","title":"Home","text":"to the latest release. If the installed version does not match the current release, please check the Troubleshooting section.","category":"page"},{"location":"","page":"Home","title":"Home","text":"The commands above can also be used to update Trixi.jl. A brief list of notable changes to Trixi.jl is available in NEWS.md.","category":"page"},{"location":"#for-developers","page":"Home","title":"For developers","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"If you plan on editing Trixi.jl itself, you can download Trixi.jl to a local folder and use the code from the cloned directory:","category":"page"},{"location":"","page":"Home","title":"Home","text":"git clone git@github.com:trixi-framework/Trixi.jl.git\ncd Trixi.jl\nmkdir run\ncd run\njulia --project=. -e 'using Pkg; Pkg.develop(PackageSpec(path=\"..\"))'","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you installed Trixi.jl this way, you always have to start Julia with the --project flag set to your run directory, e.g.,","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia --project=.","category":"page"},{"location":"","page":"Home","title":"Home","text":"if already inside the run directory.","category":"page"},{"location":"","page":"Home","title":"Home","text":"The advantage of using a separate run directory is that you can also add other related packages (see below, e.g., for time integration or visualization) to the project in the run folder and always have a reproducible environment at hand to share with others.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Since the postprocessing tool Trixi2Vtk.jl typically does not need to be modified, it is recommended to install it as a normal package. Likewise, you can install OrdinaryDiffEq.jl and Plots.jl as ordinary packages. To achieve this, use the following REPL commands:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Pkg\n\njulia> Pkg.add([\"OrdinaryDiffEq\", \"Trixi2Vtk\", \"Plots\"])","category":"page"},{"location":"","page":"Home","title":"Home","text":"Note that the postprocessing tools Trixi2Vtk.jl and Plots.jl are optional and can be omitted.","category":"page"},{"location":"#Example:-Installing-Trixi.jl-as-a-package","page":"Home","title":"Example: Installing Trixi.jl as a package","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":" ","category":"page"},{"location":"","page":"Home","title":"Home","text":"Please note that the playback speed is set to 3x, thus the entire installation procedure lasts around 45 seconds in real time (depending on the performance of your computer and on how many dependencies had already been installed before).","category":"page"},{"location":"#Usage","page":"Home","title":"Usage","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"In the Julia REPL, first load the package Trixi.jl","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Trixi","category":"page"},{"location":"","page":"Home","title":"Home","text":"Then start a simulation by executing","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> trixi_include(default_example())","category":"page"},{"location":"","page":"Home","title":"Home","text":"Please be patient since Julia will compile the code just before running it. To visualize the results, load the package Plots","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> using Plots","category":"page"},{"location":"","page":"Home","title":"Home","text":"and generate a heatmap plot of the results with","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> plot(sol) # No trailing semicolon, otherwise no plot is shown","category":"page"},{"location":"","page":"Home","title":"Home","text":"This will open a new window with a 2D visualization of the final solution:","category":"page"},{"location":"","page":"Home","title":"Home","text":"(Image: image)","category":"page"},{"location":"","page":"Home","title":"Home","text":"The method trixi_include(...) expects a single string argument with the path to a Trixi.jl elixir, i.e., a text file containing Julia code necessary to set up and run a simulation. To quickly see Trixi.jl in action, default_example() returns the path to an example elixir with a short, two-dimensional problem setup. A list of all example elixirs packaged with Trixi.jl can be obtained by running get_examples(). Alternatively, you can also browse the examples/ subdirectory. If you want to modify one of the elixirs to set up your own simulation, download it to your machine, edit the configuration, and pass the file path to trixi_include(...).","category":"page"},{"location":"#Example:-Running-a-simulation-with-Trixi.jl","page":"Home","title":"Example: Running a simulation with Trixi.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":" ","category":"page"},{"location":"","page":"Home","title":"Home","text":"If this produces weird symbols or question marks in the terminal on your system, you are probably using Mac OS with problematic fonts. In that case, please check the Troubleshooting section.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Note on performance: Julia uses just-in-time compilation to transform its source code to native, optimized machine code at the time of execution and caches the compiled methods for further use. That means that the first execution of a Julia method is typically slow, with subsequent runs being much faster. For instance, in the example above the first execution of trixi_include takes about 20 seconds, while subsequent runs require less than 60 milliseconds.","category":"page"},{"location":"#Performing-a-convergence-analysis","page":"Home","title":"Performing a convergence analysis","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"To automatically determine the experimental order of convergence (EOC) for a given setup, execute","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> convergence_test(default_example(), 4)","category":"page"},{"location":"","page":"Home","title":"Home","text":"This will run a convergence test with the elixir default_example(), using four iterations with different initial refinement levels. The initial iteration will use the elixir unchanged, while for each subsequent iteration the initial_refinement_level parameter is incremented by one. Finally, the measured l^2 and l^infty errors and the determined EOCs will be displayed like this:","category":"page"},{"location":"","page":"Home","title":"Home","text":"[...]\nl2\nscalar\nerror EOC\n9.14e-06 -\n5.69e-07 4.01\n3.55e-08 4.00\n2.22e-09 4.00\n\nmean 4.00\n--------------------------------------------------------------------------------\nlinf\nscalar\nerror EOC\n6.44e-05 -\n4.11e-06 3.97\n2.58e-07 3.99\n1.62e-08 4.00\n\nmean 3.99\n--------------------------------------------------------------------------------","category":"page"},{"location":"","page":"Home","title":"Home","text":"An example with multiple variables looks like this:","category":"page"},{"location":"","page":"Home","title":"Home","text":"julia> convergence_test(joinpath(examples_dir(), \"tree_2d_dgsem\", \"elixir_euler_source_terms.jl\"), 3)","category":"page"},{"location":"","page":"Home","title":"Home","text":"[...]\nl2\nrho rho_v1 rho_v2 rho_e\nerror EOC error EOC error EOC error EOC\n9.32e-07 - 1.42e-06 - 1.42e-06 - 4.82e-06 -\n7.03e-08 3.73 9.53e-08 3.90 9.53e-08 3.90 3.30e-07 3.87\n4.65e-09 3.92 6.09e-09 3.97 6.09e-09 3.97 2.12e-08 3.96\n\nmean 3.82 mean 3.93 mean 3.93 mean 3.91\n--------------------------------------------------------------------------------\nlinf\nrho rho_v1 rho_v2 rho_e\nerror EOC error EOC error EOC error EOC\n9.58e-06 - 1.17e-05 - 1.17e-05 - 4.89e-05 -\n6.23e-07 3.94 7.48e-07 3.97 7.48e-07 3.97 3.22e-06 3.92\n4.05e-08 3.94 4.97e-08 3.91 4.97e-08 3.91 2.10e-07 3.94\n\nmean 3.94 mean 3.94 mean 3.94 mean 3.93\n--------------------------------------------------------------------------------","category":"page"},{"location":"#Showcase-of-advanced-features","page":"Home","title":"Showcase of advanced features","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The presentation From Mesh Generation to Adaptive Simulation: A Journey in Julia, originally given as part of JuliaCon 2022, outlines how to use Trixi.jl for an adaptive simulation of the compressible Euler equations in two spatial dimensions on a complex domain. More details as well as code to run the simulation presented can be found at the reproducibility repository for the presentation.","category":"page"},{"location":"#Referencing","page":"Home","title":"Referencing","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"If you use Trixi.jl in your own research or write a paper using results obtained with the help of Trixi.jl, please cite the following articles:","category":"page"},{"location":"","page":"Home","title":"Home","text":"@article{ranocha2022adaptive,\n title={Adaptive numerical simulations with {T}rixi.jl:\n {A} case study of {J}ulia for scientific computing},\n author={Ranocha, Hendrik and Schlottke-Lakemper, Michael and Winters, Andrew Ross\n and Faulhaber, Erik and Chan, Jesse and Gassner, Gregor},\n journal={Proceedings of the JuliaCon Conferences},\n volume={1},\n number={1},\n pages={77},\n year={2022},\n doi={10.21105/jcon.00077},\n eprint={2108.06476},\n eprinttype={arXiv},\n eprintclass={cs.MS}\n}\n\n@article{schlottkelakemper2021purely,\n title={A purely hyperbolic discontinuous {G}alerkin approach for\n self-gravitating gas dynamics},\n author={Schlottke-Lakemper, Michael and Winters, Andrew R and\n Ranocha, Hendrik and Gassner, Gregor J},\n journal={Journal of Computational Physics},\n pages={110467},\n year={2021},\n month={06},\n volume={442},\n publisher={Elsevier},\n doi={10.1016/j.jcp.2021.110467},\n eprint={2008.10593},\n eprinttype={arXiv},\n eprintclass={math.NA}\n}","category":"page"},{"location":"","page":"Home","title":"Home","text":"In addition, you can also refer to Trixi.jl directly as","category":"page"},{"location":"","page":"Home","title":"Home","text":"@misc{schlottkelakemper2020trixi,\n title={{T}rixi.jl: {A}daptive high-order numerical simulations\n of hyperbolic {PDE}s in {J}ulia},\n author={Schlottke-Lakemper, Michael and Gassner, Gregor J and\n Ranocha, Hendrik and Winters, Andrew R and Chan, Jesse},\n year={2021},\n month={09},\n howpublished={\\url{https://github.com/trixi-framework/Trixi.jl}},\n doi={10.5281/zenodo.3996439}\n}","category":"page"},{"location":"#authors-index-md","page":"Home","title":"Authors","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Trixi.jl was initiated by Michael Schlottke-Lakemper (University of Augsburg, Germany) and Gregor Gassner (University of Cologne, Germany). Together with Hendrik Ranocha (Johannes Gutenberg University Mainz, Germany) and Andrew Winters (Linköping University, Sweden), and Jesse Chan (Rice University, US), they are the principal developers of Trixi.jl. The full list of contributors can be found under Authors.","category":"page"},{"location":"#License-and-contributing","page":"Home","title":"License and contributing","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"Trixi.jl is licensed under the MIT license (see License). Since Trixi.jl is an open-source project, we are very happy to accept contributions from the community. Please refer to Contributing for more details. Note that we strive to be a friendly, inclusive open-source community and ask all members of our community to adhere to our Code of Conduct. To get in touch with the developers, join us on Slack or create an issue.","category":"page"},{"location":"#Acknowledgments","page":"Home","title":"Acknowledgments","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"
\n
\n
\n
\n
\n
\n
\n
","category":"page"},{"location":"","page":"Home","title":"Home","text":"This project has benefited from funding by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) through the following grants:","category":"page"},{"location":"","page":"Home","title":"Home","text":"Excellence Strategy EXC 2044-390685587, Mathematics Münster: Dynamics-Geometry-Structure.\nResearch unit FOR 5409 \"Structure-Preserving Numerical Methods for Bulk- and Interface Coupling of Heterogeneous Models (SNuBIC)\" (project number 463312734).\nIndividual grant no. 528753982.","category":"page"},{"location":"","page":"Home","title":"Home","text":"This project has benefited from funding from the European Research Council through the ERC Starting Grant \"An Exascale aware and Un-crashable Space-Time-Adaptive Discontinuous Spectral Element Solver for Non-Linear Conservation Laws\" (Extreme), ERC grant agreement no. 714487.","category":"page"},{"location":"","page":"Home","title":"Home","text":"This project has benefited from funding from Vetenskapsrådet (VR, Swedish Research Council), Sweden through the VR Starting Grant \"Shallow water flows including sediment transport and morphodynamics\", VR grant agreement 2020-03642 VR.","category":"page"},{"location":"","page":"Home","title":"Home","text":"This project has benefited from funding from the United States National Science Foundation (NSF) under awards DMS-1719818 and DMS-1943186.","category":"page"},{"location":"","page":"Home","title":"Home","text":"This project has benefited from funding from the German Federal Ministry of Education and Research (BMBF) through the project grant \"Adaptive earth system modeling with significantly reduced computation time for exascale supercomputers (ADAPTEX)\" (funding id: 16ME0668K).","category":"page"},{"location":"","page":"Home","title":"Home","text":"This project has benefited from funding by the Daimler und Benz Stiftung (Daimler and Benz Foundation) through grant no. 32-10/22.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Trixi.jl is supported by NumFOCUS as an Affiliated Project.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"EditURL = \"../../literate/src/files/adding_nonconservative_equation.jl\"","category":"page"},{"location":"tutorials/adding_nonconservative_equation/#adding_nonconservative_equation","page":"12 Adding a non-conservative equation","title":"12: Adding a non-conservative equation","text":"","category":"section"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"If you want to use Trixi.jl for your own research, you might be interested in a new physics model that is not present in Trixi.jl. In this tutorial, we will implement the nonconservative linear advection equation in a periodic domain","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"left\nbeginalignedpartial_t u(tx) + a(x) partial_x u(tx) = 0 \nu(0x)=sin(x) \nu(t-pi)=u(tpi)\nendaligned\nright","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"where a(x) = 2 + cos(x). The analytic solution is","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"u(tx)=-sin left(2 tan ^-1left(sqrt3 tan left(fracsqrt3 t2-tan ^-1left(frac1sqrt3tan left(fracx2right)right)right)right)right)","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"In Trixi.jl, such a mathematical model is encoded as a subtype of Trixi.AbstractEquations.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/#Basic-setup","page":"12 Adding a non-conservative equation","title":"Basic setup","text":"","category":"section"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"Since there is no native support for variable coefficients, we need to transform the PDE to the following system:","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"left\nbeginalignedpartial_t beginpmatrixu(tx)a(tx) endpmatrix +beginpmatrix a(tx) partial_x u(tx) 0 endpmatrix = 0 \nu(0x)=sin(x) \na(0x)=2+cos(x) \nu(t-pi)=u(tpi)\nendaligned\nright","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"# Define new physics\nusing Trixi\nusing Trixi: AbstractEquations, get_node_vars\nimport Trixi: varnames, default_analysis_integrals, flux, max_abs_speed_naive,\n have_nonconservative_terms\n\n# Since there is no native support for variable coefficients, we use two\n# variables: one for the basic unknown `u` and another one for the coefficient `a`\nstruct NonconservativeLinearAdvectionEquation <: AbstractEquations{1 #= spatial dimension =#,\n 2 #= two variables (u,a) =#}\nend\n\nvarnames(::typeof(cons2cons), ::NonconservativeLinearAdvectionEquation) = (\"scalar\", \"advection_velocity\")\n\ndefault_analysis_integrals(::NonconservativeLinearAdvectionEquation) = ()\n\n\n# The conservative part of the flux is zero\nflux(u, orientation, equation::NonconservativeLinearAdvectionEquation) = zero(u)\n\n# Calculate maximum wave speed for local Lax-Friedrichs-type dissipation\nfunction max_abs_speed_naive(u_ll, u_rr, orientation::Integer, ::NonconservativeLinearAdvectionEquation)\n _, advection_velocity_ll = u_ll\n _, advection_velocity_rr = u_rr\n\n return max(abs(advection_velocity_ll), abs(advection_velocity_rr))\nend\n\n\n# We use nonconservative terms\nhave_nonconservative_terms(::NonconservativeLinearAdvectionEquation) = Trixi.True()\n\n# This \"nonconservative numerical flux\" implements the nonconservative terms.\n# In general, nonconservative terms can be written in the form\n# g(u) ∂ₓ h(u)\n# Thus, a discrete difference approximation of this nonconservative term needs\n# - `u mine`: the value of `u` at the current position (for g(u))\n# - `u_other`: the values of `u` in a neighborhood of the current position (for ∂ₓ h(u))\nfunction flux_nonconservative(u_mine, u_other, orientation,\n equations::NonconservativeLinearAdvectionEquation)\n _, advection_velocity = u_mine\n scalar, _ = u_other\n\n return SVector(advection_velocity * scalar, zero(scalar))\nend","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"The implementation of nonconservative terms uses a single \"nonconservative flux\" function flux_nonconservative. It will basically be applied in a loop of the form","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"du_m(D, u) = sum(D[m, l] * flux_nonconservative(u[m], u[l], 1, equations)) # orientation 1: x","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"where D is the derivative matrix and u contains the nodal solution values.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"Now, we can run a simple simulation using a DGSEM discretization.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"# Create a simulation setup\nusing Trixi\nusing OrdinaryDiffEq\n\nequation = NonconservativeLinearAdvectionEquation()\n\n# You can derive the exact solution for this setup using the method of\n# characteristics\nfunction initial_condition_sine(x, t, equation::NonconservativeLinearAdvectionEquation)\n x0 = -2 * atan(sqrt(3) * tan(sqrt(3) / 2 * t - atan(tan(x[1] / 2) / sqrt(3))))\n scalar = sin(x0)\n advection_velocity = 2 + cos(x[1])\n SVector(scalar, advection_velocity)\nend\n\n# Create a uniform mesh in 1D in the interval [-π, π] with periodic boundaries\nmesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates\n initial_refinement_level=4, n_cells_max=10^4)\n\n# Create a DGSEM solver with polynomials of degree `polydeg`\n# Remember to pass a tuple of the form `(conservative_flux, nonconservative_flux)`\n# as `surface_flux` and `volume_flux` when working with nonconservative terms\nvolume_flux = (flux_central, flux_nonconservative)\nsurface_flux = (flux_lax_friedrichs, flux_nonconservative)\nsolver = DGSEM(polydeg=3, surface_flux=surface_flux,\n volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n\n# Setup the spatial semidiscretization containing all ingredients\nsemi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n\n# Create an ODE problem with given time span\ntspan = (0.0, 1.0)\node = semidiscretize(semi, tspan)\n\n# Set up some standard callbacks summarizing the simulation setup and computing\n# errors of the numerical solution\nsummary_callback = SummaryCallback()\nanalysis_callback = AnalysisCallback(semi, interval=50)\ncallbacks = CallbackSet(summary_callback, analysis_callback)\n\n# OrdinaryDiffEq's `solve` method evolves the solution in time and executes\n# the passed callbacks\nsol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,\n save_everystep=false, callback=callbacks)\n\n# Print the timer summary\nsummary_callback()\n\n# Plot the numerical solution at the final time\nusing Plots: plot\nplot(sol)","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"You see a plot of the final solution.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"We can check whether everything fits together by refining the grid and comparing the numerical errors. First, we look at the error using the grid resolution above.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"error_1 = analysis_callback(sol).l2 |> first","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"Next, we increase the grid resolution by one refinement level and run the simulation again.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates\n initial_refinement_level=5, n_cells_max=10^4)\n\nsemi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n\ntspan = (0.0, 1.0)\node = semidiscretize(semi, tspan);\n\nsummary_callback = SummaryCallback()\nanalysis_callback = AnalysisCallback(semi, interval=50)\ncallbacks = CallbackSet(summary_callback, analysis_callback);\n\nsol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,\n save_everystep=false, callback=callbacks);\nsummary_callback()\n\nerror_2 = analysis_callback(sol).l2 |> first","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"error_1 / error_2","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"As expected, the new error is roughly reduced by a factor of 16, corresponding to an experimental order of convergence of 4 (for polynomials of degree 3).","category":"page"},{"location":"tutorials/adding_nonconservative_equation/#Summary-of-the-code","page":"12 Adding a non-conservative equation","title":"Summary of the code","text":"","category":"section"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"Here is the complete code that we used (without the callbacks since these create a lot of unnecessary output in the doctests of this tutorial). In addition, we create the struct inside the new module NonconservativeLinearAdvection. That ensures that we can re-create structs defined therein without having to restart Julia.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"Define new physics","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"module NonconservativeLinearAdvection\n\nusing Trixi\nusing Trixi: AbstractEquations, get_node_vars\nimport Trixi: varnames, default_analysis_integrals, flux, max_abs_speed_naive,\n have_nonconservative_terms\n\n# Since there is not yet native support for variable coefficients, we use two\n# variables: one for the basic unknown `u` and another one for the coefficient `a`\nstruct NonconservativeLinearAdvectionEquation <: AbstractEquations{1 #= spatial dimension =#,\n 2 #= two variables (u,a) =#}\nend\n\nvarnames(::typeof(cons2cons), ::NonconservativeLinearAdvectionEquation) = (\"scalar\", \"advection_velocity\")\n\ndefault_analysis_integrals(::NonconservativeLinearAdvectionEquation) = ()\n\n\n# The conservative part of the flux is zero\nflux(u, orientation, equation::NonconservativeLinearAdvectionEquation) = zero(u)\n\n# Calculate maximum wave speed for local Lax-Friedrichs-type dissipation\nfunction max_abs_speed_naive(u_ll, u_rr, orientation::Integer, ::NonconservativeLinearAdvectionEquation)\n _, advection_velocity_ll = u_ll\n _, advection_velocity_rr = u_rr\n\n return max(abs(advection_velocity_ll), abs(advection_velocity_rr))\nend\n\n\n# We use nonconservative terms\nhave_nonconservative_terms(::NonconservativeLinearAdvectionEquation) = Trixi.True()\n\n# This \"nonconservative numerical flux\" implements the nonconservative terms.\n# In general, nonconservative terms can be written in the form\n# g(u) ∂ₓ h(u)\n# Thus, a discrete difference approximation of this nonconservative term needs\n# - `u mine`: the value of `u` at the current position (for g(u))\n# - `u_other`: the values of `u` in a neighborhood of the current position (for ∂ₓ h(u))\nfunction flux_nonconservative(u_mine, u_other, orientation,\n equations::NonconservativeLinearAdvectionEquation)\n _, advection_velocity = u_mine\n scalar, _ = u_other\n\n return SVector(advection_velocity * scalar, zero(scalar))\nend\n\nend # module\n\n\n\n# Create a simulation setup\nimport .NonconservativeLinearAdvection\nusing Trixi\nusing OrdinaryDiffEq\n\nequation = NonconservativeLinearAdvection.NonconservativeLinearAdvectionEquation()\n\n# You can derive the exact solution for this setup using the method of\n# characteristics\nfunction initial_condition_sine(x, t, equation::NonconservativeLinearAdvection.NonconservativeLinearAdvectionEquation)\n x0 = -2 * atan(sqrt(3) * tan(sqrt(3) / 2 * t - atan(tan(x[1] / 2) / sqrt(3))))\n scalar = sin(x0)\n advection_velocity = 2 + cos(x[1])\n SVector(scalar, advection_velocity)\nend\n\n# Create a uniform mesh in 1D in the interval [-π, π] with periodic boundaries\nmesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates\n initial_refinement_level=4, n_cells_max=10^4)\n\n# Create a DGSEM solver with polynomials of degree `polydeg`\n# Remember to pass a tuple of the form `(conservative_flux, nonconservative_flux)`\n# as `surface_flux` and `volume_flux` when working with nonconservative terms\nvolume_flux = (flux_central, NonconservativeLinearAdvection.flux_nonconservative)\nsurface_flux = (flux_lax_friedrichs, NonconservativeLinearAdvection.flux_nonconservative)\nsolver = DGSEM(polydeg=3, surface_flux=surface_flux,\n volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n\n# Setup the spatial semidiscretization containing all ingredients\nsemi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n\n# Create an ODE problem with given time span\ntspan = (0.0, 1.0)\node = semidiscretize(semi, tspan);\n\n# Set up some standard callbacks summarizing the simulation setup and computing\n# errors of the numerical solution\nsummary_callback = SummaryCallback()\nanalysis_callback = AnalysisCallback(semi, interval=50)\ncallbacks = CallbackSet(summary_callback, analysis_callback);\n\n# OrdinaryDiffEq's `solve` method evolves the solution in time and executes\n# the passed callbacks\nsol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,\n save_everystep=false);\n\n# Plot the numerical solution at the final time\nusing Plots: plot\nplot(sol);\nnothing #hide","category":"page"},{"location":"tutorials/adding_nonconservative_equation/#Package-versions","page":"12 Adding a non-conservative equation","title":"Package versions","text":"","category":"section"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"","category":"page"},{"location":"tutorials/adding_nonconservative_equation/","page":"12 Adding a non-conservative equation","title":"12 Adding a non-conservative equation","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"EditURL = \"../../literate/src/files/differentiable_programming.jl\"","category":"page"},{"location":"tutorials/differentiable_programming/#differentiable_programming","page":"20 Differentiable programming","title":"20: Differentiable programming","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Julia and its ecosystem provide some tools for differentiable programming. Trixi.jl is designed to be flexible, extendable, and composable with Julia's growing ecosystem for scientific computing and machine learning. Thus, the ultimate goal is to have fast implementations that allow automatic differentiation (AD) without too much hassle for users. If some parts do not meet these requirements, please feel free to open an issue or propose a fix in a PR.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"In the following, we will walk through some examples demonstrating how to differentiate through Trixi.jl.","category":"page"},{"location":"tutorials/differentiable_programming/#Forward-mode-automatic-differentiation","page":"20 Differentiable programming","title":"Forward mode automatic differentiation","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Trixi.jl integrates well with ForwardDiff.jl for forward mode AD.","category":"page"},{"location":"tutorials/differentiable_programming/#Computing-the-Jacobian","page":"20 Differentiable programming","title":"Computing the Jacobian","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"The high-level interface to compute the Jacobian this way is jacobian_ad_forward. First, we load the required packages and compute the Jacobian of a semidiscretization of the compressible Euler equations, a system of nonlinear conservation laws.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using Trixi, LinearAlgebra, Plots\n\nequations = CompressibleEulerEquations2D(1.4)\n\nsolver = DGSEM(3, flux_central)\nmesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n\nJ = jacobian_ad_forward(semi);\nsize(J)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Next, we compute the eigenvalues of the Jacobian.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"λ = eigvals(J)\nscatter(real.(λ), imag.(λ), label=\"central flux\")","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"As you can see here, the maximal real part is close to zero.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"relative_maximum = maximum(real, λ) / maximum(abs, λ)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Interestingly, if we add dissipation by switching to the flux_lax_friedrichs at the interfaces, the maximal real part of the eigenvalues increases.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"solver = DGSEM(3, flux_lax_friedrichs)\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n\nJ = jacobian_ad_forward(semi)\nλ = eigvals(J)\n\nscatter!(real.(λ), imag.(λ), label=\"Lax-Friedrichs flux\")","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Although the maximal real part is still somewhat small, it's larger than for the purely central discretization.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"relative_maximum = maximum(real, λ) / maximum(abs, λ)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"However, we should be careful when using this analysis, since the eigenvectors are not necessarily well-conditioned.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"λ, V = eigen(J)\ncondition_number = cond(V)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"In one space dimension, the situation is a bit different.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"equations = CompressibleEulerEquations1D(1.4)\n\nsolver = DGSEM(3, flux_central)\nmesh = TreeMesh((-1.0,), (1.0,), initial_refinement_level=6, n_cells_max=10^5)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n\nJ = jacobian_ad_forward(semi)\n\nλ = eigvals(J)\n\nscatter(real.(λ), imag.(λ), label=\"central flux\")","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Here, the maximal real part is basically zero to machine accuracy.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"relative_maximum = maximum(real, λ) / maximum(abs, λ)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Moreover, the eigenvectors are not as ill-conditioned as in 2D.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"λ, V = eigen(J)\ncondition_number = cond(V)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"If we add dissipation, the maximal real part is still approximately zero.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"solver = DGSEM(3, flux_lax_friedrichs)\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n\nJ = jacobian_ad_forward(semi)\nλ = eigvals(J)\n\nscatter!(real.(λ), imag.(λ), label=\"Lax-Friedrichs flux\")","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"As you can see from the plot generated above, the maximal real part is still basically zero to machine precision.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"relative_maximum = maximum(real, λ) / maximum(abs, λ)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Let's check the condition number of the eigenvectors.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"λ, V = eigen(J)\n\ncondition_number = cond(V)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Note that the condition number of the eigenvector matrix increases but is still smaller than for the example in 2D.","category":"page"},{"location":"tutorials/differentiable_programming/#Computing-other-derivatives","page":"20 Differentiable programming","title":"Computing other derivatives","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"It is also possible to compute derivatives of other dependencies using AD in Trixi.jl. For example, you can compute the gradient of an entropy-dissipative semidiscretization with respect to the ideal gas constant of the compressible Euler equations as described in the following. This example is also available as the elixir examples/special_elixirs/elixir_euler_ad.jl","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"First, we create a semidiscretization of the compressible Euler equations.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using Trixi, LinearAlgebra, ForwardDiff\n\nequations = CompressibleEulerEquations2D(1.4)\n\n\"\"\"\n initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)\n\nThe classical isentropic vortex test case of\n- Chi-Wang Shu (1997)\n Essentially Non-Oscillatory and Weighted Essentially Non-Oscillatory\n Schemes for Hyperbolic Conservation Laws\n [NASA/CR-97-206253](https://ntrs.nasa.gov/citations/19980007543)\n\"\"\"\nfunction initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)\n inicenter = SVector(0.0, 0.0) # initial center of the vortex\n iniamplitude = 5.0 # size and strength of the vortex\n\n rho = 1.0 # base flow\n v1 = 1.0\n v2 = 1.0\n vel = SVector(v1, v2)\n p = 25.0\n\n rt = p / rho # ideal gas equation\n t_loc = 0.0\n\n cent = inicenter + vel*t_loc # shift advection of center to handle periodic BC, but only for v1 = v2 = 1.0\n cent = x - cent # distance to center point\n cent = SVector(-cent[2], cent[1])\n\n r2 = cent[1]^2 + cent[2]^2\n du = iniamplitude / (2*π) * exp(0.5 * (1 - r2)) # vel. perturbation\n dtemp = -(equations.gamma - 1) / (2 * equations.gamma * rt) * du^2 # isentropic\n\n rho = rho * (1 + dtemp)^(1 / (equations.gamma - 1))\n vel = vel + du * cent\n v1, v2 = vel\n p = p * (1 + dtemp)^(equations.gamma / (equations.gamma - 1))\n\n prim = SVector(rho, v1, v2, p)\n return prim2cons(prim, equations)\nend\n\nmesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n\nsolver = DGSEM(3, flux_lax_friedrichs, VolumeIntegralFluxDifferencing(flux_ranocha))\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_isentropic_vortex, solver)\n\nu0_ode = Trixi.compute_coefficients(0.0, semi)\nsize(u0_ode)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Next, we compute the Jacobian using ForwardDiff.jacobian.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"J = ForwardDiff.jacobian((du_ode, γ) -> begin\n equations_inner = CompressibleEulerEquations2D(first(γ))\n semi_inner = Trixi.remake(semi, equations=equations_inner, uEltype=eltype(γ))\n Trixi.rhs!(du_ode, u0_ode, semi_inner, 0.0)\nend, similar(u0_ode), [1.4]); # γ needs to be an `AbstractArray`\n\nround.(extrema(J), sigdigits=2)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Note that we create a semidiscretization semi at first to determine the state u0_ode around which we want to perform the linearization. Next, we wrap the RHS evaluation inside a closure and pass that to ForwardDiff.jacobian. There, we need to make sure that the internal caches are able to store dual numbers from ForwardDiff.jl by setting uEltype appropriately. A similar approach is used by jacobian_ad_forward.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Note that the ideal gas constant does not influence the semidiscrete rate of change of the density, as demonstrated by","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"norm(J[1:4:end])","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Here, we used some knowledge about the internal memory layout of Trixi.jl, an array of structs with the conserved variables as fastest-varying index in memory.","category":"page"},{"location":"tutorials/differentiable_programming/#Differentiating-through-a-complete-simulation","page":"20 Differentiable programming","title":"Differentiating through a complete simulation","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"It is also possible to differentiate through a complete simulation. As an example, let's differentiate the total energy of a simulation using the linear scalar advection equation with respect to the wave number (frequency) of the initial data.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using Trixi, OrdinaryDiffEq, ForwardDiff, Plots\n\nfunction energy_at_final_time(k) # k is the wave number of the initial condition\n equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)\n solver = DGSEM(3, flux_lax_friedrichs)\n initial_condition = (x, t, equation) -> begin\n x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)\n return SVector(sinpi(k * sum(x_trans)))\n end\n semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n uEltype=typeof(k))\n ode = semidiscretize(semi, (0.0, 1.0))\n sol = solve(ode, BS3(), save_everystep=false)\n Trixi.integrate(energy_total, sol.u[end], semi)\nend\n\nk_values = range(0.9, 1.1, length=101)\n\nplot(k_values, energy_at_final_time.(k_values), label=\"Energy\")","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"You see a plot of a curve that resembles a parabola with local maximum around k = 1.0. Why's that? Well, the domain is fixed but the wave number changes. Thus, if the wave number is not chosen as an integer, the initial condition will not be a smooth periodic function in the given domain. Hence, the dissipative surface flux (flux_lax_friedrichs in this example) will introduce more dissipation. In particular, it will introduce more dissipation for \"less smooth\" initial data, corresponding to wave numbers k further away from integers.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"We can compute the discrete derivative of the energy at the final time with respect to the wave number k as follows.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"round(ForwardDiff.derivative(energy_at_final_time, 1.0), sigdigits=2)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"This is rather small and we can treat it as zero in comparison to the value of this derivative at other wave numbers k.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"dk_values = ForwardDiff.derivative.((energy_at_final_time,), k_values);\n\nplot(k_values, dk_values, label=\"Derivative\")","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"If you remember basic calculus, a sufficient condition for a local maximum is that the first derivative vanishes and the second derivative is negative. We can also check this discretely.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"second_derivative = round(ForwardDiff.derivative(\n k -> Trixi.ForwardDiff.derivative(energy_at_final_time, k), 1.0),\n sigdigits=2)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Having seen this application, let's break down what happens step by step.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"function energy_at_final_time(k) # k is the wave number of the initial condition\n equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)\n solver = DGSEM(3, flux_lax_friedrichs)\n initial_condition = (x, t, equation) -> begin\n x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)\n return SVector(sinpi(k * sum(x_trans)))\n end\n semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n uEltype=typeof(k))\n ode = semidiscretize(semi, (0.0, 1.0))\n sol = solve(ode, BS3(), save_everystep=false)\n Trixi.integrate(energy_total, sol.u[end], semi)\nend\n\nk = 1.0\nround(ForwardDiff.derivative(energy_at_final_time, k), sigdigits=2)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"When calling ForwardDiff.derivative(energy_at_final_time, k) with k=1.0, ForwardDiff.jl will basically use the chain rule and known derivatives of existing basic functions to calculate the derivative of the energy at the final time with respect to the wave number k at k0 = 1.0. To do this, ForwardDiff.jl uses dual numbers, which basically store the result and its derivative w.r.t. a specified parameter at the same time. Thus, we need to make sure that we can treat these ForwardDiff.Dual numbers everywhere during the computation. Fortunately, generic Julia code usually supports these operations. The most basic problem for a developer is to ensure that all types are generic enough, in particular the ones of internal caches.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"The first step in this example creates some basic ingredients of our simulation.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\nmesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)\nsolver = DGSEM(3, flux_lax_friedrichs);\nnothing #hide","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"These do not have internal caches storing intermediate values of the numerical solution, so we do not need to adapt them. In fact, we could also define them outside of energy_at_final_time (but would need to take care of globals or wrap everything in another function).","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Next, we define the initial condition","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"initial_condition = (x, t, equation) -> begin\n x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)\n return SVector(sinpi(k * sum(x_trans)))\nend;\nnothing #hide","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"as a closure capturing the wave number k passed to energy_at_final_time. If you call energy_at_final_time(1.0), k will be a Float64. Thus, the return values of initial_condition will be SVectors of Float64s. When calculating the ForwardDiff.derivative, k will be a ForwardDiff.Dual number. Hence, the initial_condition will return SVectors of ForwardDiff.Dual numbers.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"The semidiscretization semi uses some internal caches to avoid repeated allocations and speed up the computations, e.g. for numerical fluxes at interfaces. Thus, we need to tell Trixi.jl to allow ForwardDiff.Dual numbers in these caches. That's what the keyword argument uEltype=typeof(k) in","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n uEltype=typeof(k));\nnothing #hide","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"does. This is basically the only part where you need to modify your standard Trixi.jl code to enable automatic differentiation. From there on, the remaining steps","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"ode = semidiscretize(semi, (0.0, 1.0))\nsol = solve(ode, BS3(), save_everystep=false)\nround(Trixi.integrate(energy_total, sol.u[end], semi), sigdigits=5)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"do not need any modifications since they are sufficiently generic (and enough effort has been spend to allow general types inside these calls).","category":"page"},{"location":"tutorials/differentiable_programming/#Propagating-errors-using-Measurements.jl","page":"20 Differentiable programming","title":"Propagating errors using Measurements.jl","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"(Image: Error bars by Randall Munroe) \"Error bars\" by Randall Munroe, linked from https://xkcd.com/2110","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Similar to AD, Trixi.jl also allows propagating uncertainties using linear error propagation theory via Measurements.jl. As an example, let's create a system representing the linear advection equation in 1D with an uncertain velocity. Then, we create a semidiscretization using a sine wave as initial condition, solve the ODE, and plot the resulting uncertainties in the primitive variables.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using Trixi, OrdinaryDiffEq, Measurements, Plots, LaTeXStrings\n\nequations = LinearScalarAdvectionEquation1D(1.0 ± 0.1)\n\nmesh = TreeMesh((-1.0,), (1.0,), n_cells_max=10^5, initial_refinement_level=5)\n\nsolver = DGSEM(3)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test,\n solver, uEltype=Measurement{Float64})\n\node = semidiscretize(semi, (0.0, 1.5))\n\nsol = solve(ode, BS3(), save_everystep=false);\n\nplot(sol)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"You should see a plot where small error bars are shown around the extrema and larger error bars are shown in the remaining parts. This result is in accordance with expectations. Indeed, the uncertain propagation speed will affect the extrema less since the local variation of the solution is relatively small there. In contrast, the local variation of the solution is large around the turning points of the sine wave, so the uncertainties will be relatively large there.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"All this is possible due to allowing generic types and having good abstractions in Julia that allow packages to work together seamlessly.","category":"page"},{"location":"tutorials/differentiable_programming/#Finite-difference-approximations","page":"20 Differentiable programming","title":"Finite difference approximations","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Trixi.jl provides the convenience function jacobian_fd to approximate the Jacobian via central finite differences.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using Trixi, LinearAlgebra\n\nequations = CompressibleEulerEquations2D(1.4)\n\nsolver = DGSEM(3, flux_central)\n\nmesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n\nJ_fd = jacobian_fd(semi)\n\nJ_ad = jacobian_ad_forward(semi)\n\nrelative_difference = norm(J_fd - J_ad) / size(J_fd, 1)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"This discrepancy is of the expected order of magnitude for central finite difference approximations.","category":"page"},{"location":"tutorials/differentiable_programming/#Linear-systems","page":"20 Differentiable programming","title":"Linear systems","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"When a linear PDE is discretized using a linear scheme such as a standard DG method, the resulting semidiscretization yields an affine ODE of the form","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"partial_t u(t) = A u(t) + b","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"where A is a linear operator (\"matrix\") and b is a vector. Trixi.jl allows you to obtain this linear structure in a matrix-free way by using linear_structure. The resulting operator A can be used in multiplication, e.g. mul! from LinearAlgebra, converted to a sparse matrix using sparse from SparseArrays, or converted to a dense matrix using Matrix for detailed eigenvalue analyses. For example,","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using Trixi, LinearAlgebra, Plots\n\nequations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n\nsolver = DGSEM(3, flux_lax_friedrichs)\n\nmesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, solver)\n\nA, b = linear_structure(semi)\n\nsize(A), size(b)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"Next, we compute the eigenvalues of the linear operator.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"λ = eigvals(Matrix(A))\n\nscatter(real.(λ), imag.(λ))","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"As you can see here, the maximal real part is close to machine precision.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"λ = eigvals(Matrix(A))\nrelative_maximum = maximum(real, λ) / maximum(abs, λ)","category":"page"},{"location":"tutorials/differentiable_programming/#Package-versions","page":"20 Differentiable programming","title":"Package versions","text":"","category":"section"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\", \"ForwardDiff\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"","category":"page"},{"location":"tutorials/differentiable_programming/","page":"20 Differentiable programming","title":"20 Differentiable programming","text":"This page was generated using Literate.jl.","category":"page"},{"location":"meshes/tree_mesh/#Tree-mesh","page":"Tree mesh","title":"Tree mesh","text":"","category":"section"},{"location":"meshes/tree_mesh/","page":"Tree mesh","title":"Tree mesh","text":"The TreeMesh is a Cartesian, h-non-conforming mesh type used in many parts of Trixi.jl. Often, the support for this mesh type is developed best since it was the first mesh type in Trixi.jl, and it is available in one, two, and three space dimensions.","category":"page"},{"location":"meshes/tree_mesh/","page":"Tree mesh","title":"Tree mesh","text":"It is limited to hypercube domains (that is, lines in 1D, squares in 2D and cubes in 3D) but supports AMR via the AMRCallback. Due to its Cartesian nature, (numerical) fluxes need to implement methods dispatching on the orientation::Integer as described in the conventions.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"EditURL = \"../../literate/src/files/subcell_shock_capturing.jl\"","category":"page"},{"location":"tutorials/subcell_shock_capturing/#subcell_shock_capturing","page":"6 Subcell limiting with the IDP Limiter","title":"6: Subcell limiting with the IDP Limiter","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"In the previous tutorial, the element-wise limiting with IndicatorHennemannGassner and VolumeIntegralShockCapturingHG was explained. This tutorial contains a short introduction to the idea and implementation of subcell shock capturing approaches in Trixi.jl, which is also based on the DGSEM scheme in flux differencing formulation. Trixi.jl contains the a-posteriori invariant domain-preserving (IDP) limiter which was introduced by Pazner (2020) and Rueda-Ramírez, Pazner, Gassner (2022). It is a flux-corrected transport-type (FCT) limiter and is implemented using SubcellLimiterIDP and VolumeIntegralSubcellLimiting. Since it is an a-posteriori limiter you have to apply a correction stage after each Runge-Kutta stage. This is done by passing the stage callback SubcellLimiterIDPCorrection to the time integration method.","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Time-integration-method","page":"6 Subcell limiting with the IDP Limiter","title":"Time integration method","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"As mentioned before, the IDP limiting is an a-posteriori limiter. Its limiting process guarantees the target bounds for an explicit (forward) Euler time step. To still achieve a high-order approximation, the implementation uses strong-stability preserving (SSP) Runge-Kutta methods, which can be written as convex combinations of forward Euler steps. As such, they preserve the convexity of convex functions and functionals, such as the TVD semi-norm and the maximum principle in 1D, for instance.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Since IDP/FCT limiting procedure operates on independent forward Euler steps, its a-posteriori correction stage is implemented as a stage callback that is triggered after each forward Euler step in an SSP Runge-Kutta method. Unfortunately, the solve(...) routines in OrdinaryDiffEq.jl, typically employed for time integration in Trixi.jl, do not support this type of stage callback.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Therefore, subcell limiting with the IDP limiter requires the use of a Trixi-intern time integration SSPRK method called with","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Trixi.solve(ode, method(stage_callbacks = stage_callbacks); ...)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Right now, only the canonical three-stage, third-order SSPRK method (Shu-Osher) Trixi.SimpleSSPRK33 is implemented.","category":"page"},{"location":"tutorials/subcell_shock_capturing/#IDPLimiter","page":"6 Subcell limiting with the IDP Limiter","title":"IDP Limiting","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The implementation of the invariant domain preserving (IDP) limiting approach (SubcellLimiterIDP) is based on Pazner (2020) and Rueda-Ramírez, Pazner, Gassner (2022). It supports several types of limiting which are enabled by passing parameters individually.","category":"page"},{"location":"tutorials/subcell_shock_capturing/#global_bounds","page":"6 Subcell limiting with the IDP Limiter","title":"Global bounds","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"If enabled, the global bounds enforce physical admissibility conditions, such as non-negativity of variables. This can be done for conservative variables, where the limiter is of a one-sided Zalesak-type (Zalesak, 1979), and general non-linear variables, where a Newton-bisection algorithm is used to enforce the bounds.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The Newton-bisection algorithm is an iterative method and requires some parameters. It uses a fixed maximum number of iteration steps (max_iterations_newton = 10) and relative/absolute tolerances (newton_tolerances = (1.0e-12, 1.0e-14)). The given values are sufficient in most cases and therefore used as default. Additionally, there is the parameter gamma_constant_newton, which can be used to scale the antidiffusive flux for the computation of the blending coefficients of nonlinear variables. The default value is 2 * ndims(equations), as it was shown by Pazner (2020) [Section 4.2.2.] that this value guarantees the fulfillment of bounds for a forward-Euler increment.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Very small non-negative values can be an issue as well. That's why we use an additional correction factor in the calculation of the global bounds,","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"u^new geq beta * u^FV","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"By default, beta (named positivity_correction_factor) is set to 0.1 which works properly in most of the tested setups.","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Conservative-variables","page":"6 Subcell limiting with the IDP Limiter","title":"Conservative variables","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The procedure to enforce global bounds for a conservative variables is as follows: If you want to guarantee non-negativity for the density of the compressible Euler equations, you pass the specific quantity name of the conservative variable.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"using Trixi\nequations = CompressibleEulerEquations2D(1.4)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The quantity name of the density is rho which is how we enable its limiting.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"positivity_variables_cons = [\"rho\"]","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The quantity names are passed as a vector to allow several quantities. This is used, for instance, if you want to limit the density of two different components using the multicomponent compressible Euler equations.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"equations = CompressibleEulerMulticomponentEquations2D(gammas = (1.4, 1.648),\n gas_constants = (0.287, 1.578))","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Then, we just pass both quantity names.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"positivity_variables_cons = [\"rho1\", \"rho2\"]","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Alternatively, it is possible to all limit all density variables with a general command using","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"positivity_variables_cons = [\"rho\" * string(i) for i in eachcomponent(equations)]","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Non-linear-variables","page":"6 Subcell limiting with the IDP Limiter","title":"Non-linear variables","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"To allow limitation for all possible non-linear variables, including variables defined on-the-fly, you can directly pass the function that computes the quantity for which you want to enforce positivity. For instance, if you want to enforce non-negativity for the pressure, do as follows.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"positivity_variables_nonlinear = [pressure]","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Local-bounds","page":"6 Subcell limiting with the IDP Limiter","title":"Local bounds","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Second, Trixi.jl supports the limiting with local bounds for conservative variables using a two-sided Zalesak-type limiter (Zalesak, 1979) and for general non-linear variables using a one-sided Newton-bisection algorithm. They allow to avoid spurious oscillations within the global bounds and to improve the shock-capturing capabilities of the method. The corresponding numerical admissibility conditions are frequently formulated as local maximum or minimum principles. The local bounds are computed using the maximum and minimum values of all local neighboring nodes. Within this calculation we use the low-order FV solution values for each node.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"As for the limiting with global bounds you are passing the quantity names of the conservative variables you want to limit. So, to limit the density with lower and upper local bounds pass the following.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"local_twosided_variables_cons = [\"rho\"]","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"To limit non-linear variables locally, pass the variable function combined with the requested bound (min or max) as a tuple. For instance, to impose a lower local bound on the modified specific entropy Trixi.entropy_guermond_etal, use","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"local_onesided_variables_nonlinear = [(Trixi.entropy_guermond_etal, min)]","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Exemplary-simulation","page":"6 Subcell limiting with the IDP Limiter","title":"Exemplary simulation","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"How to set up a simulation using the IDP limiting becomes clearer when looking at an exemplary setup. This will be a simplified version of tree_2d_dgsem/elixir_euler_blast_wave_sc_subcell.jl. Since the setup is mostly very similar to a pure DGSEM setup as in tree_2d_dgsem/elixir_euler_blast_wave.jl, the equivalent parts are used without any explanation here.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"using OrdinaryDiffEq\nusing Trixi\n\nequations = CompressibleEulerEquations2D(1.4)\n\nfunction initial_condition_blast_wave(x, t, equations::CompressibleEulerEquations2D)\n # Modified From Hennemann & Gassner JCP paper 2020 (Sec. 6.3) -> \"medium blast wave\"\n # Set up polar coordinates\n inicenter = SVector(0.0, 0.0)\n x_norm = x[1] - inicenter[1]\n y_norm = x[2] - inicenter[2]\n r = sqrt(x_norm^2 + y_norm^2)\n phi = atan(y_norm, x_norm)\n sin_phi, cos_phi = sincos(phi)\n\n # Calculate primitive variables\n rho = r > 0.5 ? 1.0 : 1.1691\n v1 = r > 0.5 ? 0.0 : 0.1882 * cos_phi\n v2 = r > 0.5 ? 0.0 : 0.1882 * sin_phi\n p = r > 0.5 ? 1.0E-3 : 1.245\n\n return prim2cons(SVector(rho, v1, v2, p), equations)\nend\ninitial_condition = initial_condition_blast_wave;\nnothing #hide","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Since the surface integral is equal for both the DG and the subcell FV method, the limiting is applied only in the volume integral.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Note, that the DG method is based on the flux differencing formulation. Hence, you have to use a two-point flux, such as flux_ranocha, flux_shima_etal, flux_chandrashekar or flux_kennedy_gruber, for the DG volume flux.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"surface_flux = flux_lax_friedrichs\nvolume_flux = flux_ranocha","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The limiter is implemented within SubcellLimiterIDP. It always requires the parameters equations and basis. With additional parameters (described above or listed in the docstring) you can specify and enable additional limiting options. Here, the simulation should contain local limiting for the density using lower and upper bounds.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"basis = LobattoLegendreBasis(3)\nlimiter_idp = SubcellLimiterIDP(equations, basis;\n local_twosided_variables_cons = [\"rho\"])","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The initialized limiter is passed to VolumeIntegralSubcellLimiting in addition to the volume fluxes of the low-order and high-order scheme.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"volume_integral = VolumeIntegralSubcellLimiting(limiter_idp;\n volume_flux_dg = volume_flux,\n volume_flux_fv = surface_flux)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Then, the volume integral is passed to solver as it is done for the standard flux-differencing DG scheme or the element-wise limiting.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"solver = DGSEM(basis, surface_flux, volume_integral)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"coordinates_min = (-2.0, -2.0)\ncoordinates_max = (2.0, 2.0)\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level = 5,\n n_cells_max = 10_000)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n\ntspan = (0.0, 2.0)\node = semidiscretize(semi, tspan)\n\nsummary_callback = SummaryCallback()\n\nanalysis_interval = 1000\nanalysis_callback = AnalysisCallback(semi, interval = analysis_interval)\n\nalive_callback = AliveCallback(analysis_interval = analysis_interval)\n\nsave_solution = SaveSolutionCallback(interval = 1000,\n save_initial_solution = true,\n save_final_solution = true,\n solution_variables = cons2prim)\n\nstepsize_callback = StepsizeCallback(cfl = 0.3)\n\ncallbacks = CallbackSet(summary_callback,\n analysis_callback, alive_callback,\n save_solution,\n stepsize_callback);\nnothing #hide","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"As explained above, the IDP limiter works a-posteriori and requires the additional use of a correction stage implemented with the stage callback SubcellLimiterIDPCorrection. This callback is passed within a tuple to the time integration method.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"stage_callbacks = (SubcellLimiterIDPCorrection(),)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Moreover, as mentioned before as well, simulations with subcell limiting require a Trixi-intern SSPRK time integration methods with passed stage callbacks and a Trixi-intern Trixi.solve(...) routine.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"sol = Trixi.solve(ode, Trixi.SimpleSSPRK33(stage_callbacks = stage_callbacks);\n dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n callback = callbacks);\nsummary_callback() # print the timer summary","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Visualization","page":"6 Subcell limiting with the IDP Limiter","title":"Visualization","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"As for a standard simulation in Trixi.jl, it is possible to visualize the solution using the plot routine from Plots.jl.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"using Plots\nplot(sol)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"To get an additional look at the amount of limiting that is used, you can use the visualization approach using the SaveSolutionCallback, Trixi2Vtk and ParaView. More details about this procedure can be found in the visualization documentation. Unfortunately, the support for subcell limiting data is not yet merged into the main branch of Trixi2Vtk but lies in the branch bennibolm/node-variables.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"With that implementation and the standard procedure used for Trixi2Vtk you get the following dropdown menu in ParaView.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"(Image: ParaView_Dropdownmenu)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"The resulting visualization of the density and the limiting parameter then looks like this. (Image: blast_wave_paraview)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"You can see that the limiting coefficient does not lie in the interval [0,1] because Trixi2Vtk interpolates all quantities to regular nodes by default. You can disable this functionality with reinterpolate=false within the call of trixi2vtk(...) and get the following visualization. (Image: blast_wave_paraview_reinterpolate=false)","category":"page"},{"location":"tutorials/subcell_shock_capturing/#Bounds-checking","page":"6 Subcell limiting with the IDP Limiter","title":"Bounds checking","text":"","category":"section"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Subcell limiting is based on the fulfillment of target bounds - either global or local. Although the implementation works and has been thoroughly tested, there are some cases where these bounds are not met. For instance, the deviations could be in machine precision, which is not problematic. Larger deviations can be cause by too large time-step sizes (which can be easily fixed by reducing the CFL number), specific boundary conditions or source terms. Insufficient parameters for the Newton-bisection algorithm can also be a reason when limiting non-linear variables. There are described above.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"In many cases, it is reasonable to monitor the bounds deviations. Because of that, Trixi.jl supports a bounds checking routine implemented using the stage callback BoundsCheckCallback. It checks all target bounds for fulfillment in every RK stage. If added to the tuple of stage callbacks like","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"stage_callbacks = (SubcellLimiterIDPCorrection(), BoundsCheckCallback())","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"and passed to the time integration method, a summary is added to the final console output. For the given example, this summary shows that all bounds are met at all times.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"────────────────────────────────────────────────────────────────────────────────────────────────────\nMaximum deviation from bounds:\n────────────────────────────────────────────────────────────────────────────────────────────────────\nrho:\n- lower bound: 0.0\n- upper bound: 0.0\n────────────────────────────────────────────────────────────────────────────────────────────────────","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Moreover, it is also possible to monitor the bounds deviations incurred during the simulations. To do that use the parameter save_errors = true, such that the instant deviations are written to deviations.txt in output_directory every interval time steps.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"BoundsCheckCallback(save_errors = true, output_directory = \"out\", interval = 100)","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"Then, for the given example the deviations file contains all daviations for the current timestep and simulation time.","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"iter, simu_time, rho_min, rho_max\n100, 0.29103427131404924, 0.0, 0.0\n200, 0.5980281923063808, 0.0, 0.0\n300, 0.9520853560765293, 0.0, 0.0\n400, 1.3630295622683186, 0.0, 0.0\n500, 1.8344999624013498, 0.0, 0.0\n532, 1.9974179806990118, 0.0, 0.0","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"","category":"page"},{"location":"tutorials/subcell_shock_capturing/","page":"6 Subcell limiting with the IDP Limiter","title":"6 Subcell limiting with the IDP Limiter","text":"This page was generated using Literate.jl.","category":"page"},{"location":"meshes/unstructured_quad_mesh/#Unstructured-quadrilateral-mesh","page":"Unstructured mesh","title":"Unstructured quadrilateral mesh","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"The UnstructuredMesh2D is an unstructured, curvilinear, conforming mesh type in two space dimensions.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Due to its curvilinear nature, (numerical) fluxes need to implement methods dispatching on the normal::AbstractVector. Rotationally invariant equations such as the compressible Euler equations can use FluxRotated to wrap numerical fluxes implemented only for Cartesian meshes. This simplifies the re-use of existing functionality for the TreeMesh but is usually less efficient, cf. PR #550.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Next, we describe the conventions taken in the implementation for two-dimensional unstructured quadrilateral meshes. Principally, this relates to how a file with the extension .mesh encodes information about the numbering and orientation of elements in an unstructured quadrilateral mesh with possibly curved boundaries.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"We use the following unstructured mesh with three elements for this discussion:","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"(Image: example-mesh)","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Further, a simulation using Trixi.jl on this example unstructured mesh is provided in examples/unstructured_2d_dgsem/elixir_euler_basic.jl.","category":"page"},{"location":"meshes/unstructured_quad_mesh/#Mesh-file-header","page":"Unstructured mesh","title":"Mesh file header","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"The first two lines of the mesh file lists the mesh file type as well as the total number of corners, surfaces, elements, and the polynomial degree that the mesh will use to represent any curved sides. For the example mesh these quantities are","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"ISM-V2\n 7 9 3 8","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"corresponding to seven corners, nine surfaces, and three elements. The mesh polynomial degree of eight is taken only for illustrative purposes. In practice, this mesh polynomial degree depends on the particular application for which the curved, unstructured mesh is required.","category":"page"},{"location":"meshes/unstructured_quad_mesh/#List-of-corner-nodes","page":"Unstructured mesh","title":"List of corner nodes","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"After these global counts that prescribe information about the mesh skeleton, the mesh file give a list of the physical (x,y) coordinates of all the corners. The corner nodes are listed in the order prescribed by mesh generator. Thus, for the example mesh this node list would be","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 1.0 -1.0\n 3.0 0.0\n 1.0 1.0\n 2.0 0.0\n 0.0 0.0\n 3.0 1.0\n 3.0 -1.0","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"The corner nodes are internally referenced by their position in the list above. For example, here the node at (1.0, -1.0) would have node id 1, node id 2 would be at (3.0, 0.0) etc.","category":"page"},{"location":"meshes/unstructured_quad_mesh/#List-of-neighbor-connectivity","page":"Unstructured mesh","title":"List of neighbor connectivity","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"After the corner list comes the neighbor connectivity along each surface in the mesh. This includes local indexing and orientation information necessary to compute the coupling between elements in the mesh. In 2D each surface is defined by connecting two nodes indexed as with the numbering above. We adopt the convention that node id 1 < node id 2.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Each surface will have two neighbors where the element on the left locally as one \"walks\" from node id 1 to node id 2 is taken to be the primary element and the element locally on the right is taken to be the secondary element. If, however, there is no secondary element index, then the surface lies along a physical boundary. In this case the only available element index is considered to be primary and the secondary index is set to zero.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"The final two index numbers within the neighbor information list are used to identify the local surface within each element. The first local surface index (on the primary element) will always be positive whereas the second local surface index (on the primary element) can be positive or negative. If the second local surface index is positive, then the local coordinate systems in the primary element and secondary element match, i.e., the indexing on either side runs from 1:polydeg+1. However, if the local surface index of the secondary element is negative in the mesh file, then the coordinate system in the secondary element is flipped with respect to the primary element. Therefore, care must be taken in the implementation to ensure that the primary element indexing runs from 1:polydeg+1 whereas the secondary element indexing must run in reverse from polydeg+1:-1:1. Finally, if the secondary element index is zero, then so will be the local surface index because the surface is on a physical boundary. Also, there is no flipping of coordinate indexing required at the physical boundary because only the primary element's coordinate system exists.","category":"page"},{"location":"meshes/unstructured_quad_mesh/#Three-examples:-One-along-a-physical-boundary-and-two-along-interior-surfaces.","page":"Unstructured mesh","title":"Three examples: One along a physical boundary and two along interior surfaces.","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Along edge {8} we connect node (2) to node (7) and are along a physical boundary in element 3 with the local surface index 1 and the neighbor information:","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 2 7 3 0 1 0","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Along edge {1} we connect node (2) to node (4) such that the primary element is 3 with local surface index 2 and the secondary element is 2 with local surface index 1. Furthermore, we see that coordinate system in the secondary element 2 is flipped with respect to the primary element's coordinate system such that the sign of the local surface index in the secondary element flips. This gives the following neighbor information:","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 2 4 3 2 2 -1","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Along edge {4} we connect node (1) to node (4) such that the primary element is 1 with local surface index 2 and the secondary element is 3 with local surface index 3. The coordinate systems in both elements match and no sign change is required on the local surface index in the secondary element:","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 1 4 1 3 2 3","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"We collect the complete neighbor information for the example mesh above:","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 2 4 3 2 2 -1\n 3 5 1 0 4 0\n 1 5 1 0 1 0\n 1 4 1 3 2 3\n 2 6 2 0 2 0\n 1 7 3 0 4 0\n 3 6 2 0 3 0\n 2 7 3 0 1 0\n 3 4 2 1 4 -3","category":"page"},{"location":"meshes/unstructured_quad_mesh/#List-of-elements","page":"Unstructured mesh","title":"List of elements","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Each quadrilateral element in the unstructured mesh is dictated by four corner points with indexing taken from the numbering given by the corner list above. We connect a set of four corner points (starting from the bottom left) in an anti-clockwise fashion thus making the element right-handed indicated using the circular arrow in the figure above. In turn, this right-handedness defines the local surface indexing (i.e. the four local sides) and the local (xi eta) coordinate system. For example, the four corners for element 1 would be listed as","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 5 1 4 3","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"The mesh file also encodes information for curved surfaces either interior to the domain (as surface {9} above) or along the physical boundaries. A set of check digits are included directly below the four corner indexes to indicate whether the local surface index (1, 2, 3, or 4) within the element is straight sided, 0, or is curved, 1. If the local surface is straight sided no additional information is necessary during the mesh file read in. But for any curved surfaces the mesh file provides (x,y) coordinate values in order to construct an interpolant of this surface with the mesh polynomial order at the Chebyshev-Gauss-Lobatto nodes. This list of (x,y) data will be given in the direction of the local coordinate system.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"The last piece of information provided by the mesh file are labels for the different surfaces of an element. These labels are useful to set boundary conditions along physical surfaces. The labels can be short descriptive words. The label --- indicates an internal surface where no boundary condition is required.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"As an example, the complete information for element 1 in the example mesh would be","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 5 1 4 3\n 0 0 1 1\n 1.000000000000000 1.000000000000000\n 1.024948365654583 0.934461926834452\n 1.116583018200151 0.777350964621867\n 1.295753434047077 0.606254343587194\n 1.537500000000000 0.462500000000000\n 1.768263070247418 0.329729152118310\n 1.920916981799849 0.185149035378133\n 1.986035130050921 0.054554577460044\n 2.000000000000000 0.0\n 0.0 0.0\n 0.035513826946206 0.105291711848750\n 0.148591270347399 0.317731556850611\n 0.340010713990041 0.452219430075470\n 0.575000000000000 0.462500000000000\n 0.788022294598950 0.483764065630034\n 0.926408729652601 0.644768443149389\n 0.986453164464803 0.883724792445746\n 1.000000000000000 1.000000000000000\n Slant --- --- Bezier","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"where the curved boundary information is encoded \"back to back\". That is, the first nine (x,y) nodes in the list above correspond to the interior boundary curve along local side 3 in element 1 and the next nine (x,y) nodes denote the curved physical boundary named Bezier along local side 4.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"We collect the complete set of element information for the example mesh","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" 5 1 4 3\n 0 0 1 1\n 1.000000000000000 1.000000000000000\n 1.024948365654583 0.934461926834452\n 1.116583018200151 0.777350964621867\n 1.295753434047077 0.606254343587194\n 1.537500000000000 0.462500000000000\n 1.768263070247418 0.329729152118310\n 1.920916981799849 0.185149035378133\n 1.986035130050921 0.054554577460044\n 2.000000000000000 0.0\n 0.0 0.0\n 0.035513826946206 0.105291711848750\n 0.148591270347399 0.317731556850611\n 0.340010713990041 0.452219430075470\n 0.575000000000000 0.462500000000000\n 0.788022294598950 0.483764065630034\n 0.926408729652601 0.644768443149389\n 0.986453164464803 0.883724792445746\n 1.000000000000000 1.000000000000000\n Slant --- --- Bezier\n 4 2 6 3\n 0 0 0 1\n 2.000000000000000 0.0\n 1.986035130050921 0.054554577460044\n 1.920916981799849 0.185149035378133\n 1.768263070247418 0.329729152118310\n 1.537500000000000 0.462500000000000\n 1.295753434047077 0.606254343587194\n 1.116583018200151 0.777350964621867\n 1.024948365654583 0.934461926834452\n 1.000000000000000 1.000000000000000\n --- Right Top ---\n 7 2 4 1\n 0 0 0 0\n Right --- --- Bottom","category":"page"},{"location":"meshes/unstructured_quad_mesh/#Trixi.jl-on-an-unstructured-quadrilateral-mesh","page":"Unstructured mesh","title":"Trixi.jl on an unstructured quadrilateral mesh","text":"","category":"section"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"We provide an example simulation on an unstructured quadrilateral mesh by executing","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"julia> trixi_include(default_example_unstructured())","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":"Note this may download a copy of the mesh file described above for the three element unstructured mesh. This elixir provides the solution for the compressible Euler equations in two spatial dimensions for a smooth propagating wave solution. Below we provide the time evolution of the pressure wave for this example created with the Trixi2Vtk tool and visualized using ParaView.","category":"page"},{"location":"meshes/unstructured_quad_mesh/","page":"Unstructured mesh","title":"Unstructured mesh","text":" \n
","category":"page"},{"location":"reference-trixibase/#TrixiBase.jl-API","page":"TrixiBase.jl","title":"TrixiBase.jl API","text":"","category":"section"},{"location":"reference-trixibase/","page":"TrixiBase.jl","title":"TrixiBase.jl","text":"CurrentModule = TrixiBase","category":"page"},{"location":"reference-trixibase/","page":"TrixiBase.jl","title":"TrixiBase.jl","text":"Modules = [TrixiBase]","category":"page"},{"location":"reference-trixibase/#TrixiBase.disable_debug_timings-Tuple{}","page":"TrixiBase.jl","title":"TrixiBase.disable_debug_timings","text":"disable_debug_timings()\n\nDisable all @trixi_timeit timings. The timings should be optimized away, allowing for truly zero-overhead. Enable timings again with enable_debug_timings.\n\nSee also enable_debug_timings, @trixi_timeit.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixibase/#TrixiBase.enable_debug_timings-Tuple{}","page":"TrixiBase.jl","title":"TrixiBase.enable_debug_timings","text":"enable_debug_timings()\n\nEnable all @trixi_timeit timings (default behavior).\n\nSee also disable_debug_timings, @trixi_timeit.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixibase/#TrixiBase.timer-Tuple{}","page":"TrixiBase.jl","title":"TrixiBase.timer","text":"timer()\n\nMain timer for global timing, e.g., to be used with @trixi_timeit.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixibase/#TrixiBase.trixi_include-Tuple{Module, AbstractString}","page":"TrixiBase.jl","title":"TrixiBase.trixi_include","text":"trixi_include([mod::Module=Main,] elixir::AbstractString; kwargs...)\n\ninclude the file elixir and evaluate its content in the global scope of module mod. You can override specific assignments in elixir by supplying keyword arguments. Its basic purpose is to make it easier to modify some parameters while running simulations from the REPL. Additionally, this is used in tests to reduce the computational burden for CI while still providing examples with sensible default values for users.\n\nBefore replacing assignments in elixir, the keyword argument maxiters is inserted into calls to solve with it's default value used in the SciML ecosystem for ODEs, see the \"Miscellaneous\" section of the documentation.\n\nExamples\n\njulia> using TrixiBase, Trixi\n\njulia> redirect_stdout(devnull) do\n trixi_include(@__MODULE__, joinpath(examples_dir(), \"tree_1d_dgsem\", \"elixir_advection_extended.jl\"),\n tspan=(0.0, 0.1))\n sol.t[end]\n end\n[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.\n0.1\n\n\n\n\n\n","category":"method"},{"location":"reference-trixibase/#TrixiBase.@trixi_timeit-Tuple{Any, Any, Any}","page":"TrixiBase.jl","title":"TrixiBase.@trixi_timeit","text":"@trixi_timeit timer() \"some label\" expression\n\nBasically the same as a special case of @timeit_debug from TimerOutputs.jl, but without try ... finally ... end block. Thus, it's not exception-safe, but it also avoids some related performance problems. Since we do not use exception handling in Trixi.jl, that's not really an issue.\n\nAll @trixi_timeit timings can be disabled with disable_debug_timings. The timings should then be optimized away, allowing for truly zero-overhead.\n\nSee also disable_debug_timings, enable_debug_timings.\n\n\n\n\n\n","category":"macro"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"EditURL = \"../../literate/src/files/time_stepping.jl\"","category":"page"},{"location":"tutorials/time_stepping/#time_stepping","page":"19 Explicit time stepping","title":"19: Explicit time stepping","text":"","category":"section"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"For the time integration, Trixi.jl uses the package OrdinaryDiffEq.jl from the SciML ecosystem. The interface to this package is the solve(...) function. It always requires an ODE problem and a time integration algorithm as input parameters.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"solve(ode, alg; kwargs...)","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"In Trixi.jl, the ODE problem is created by semidiscretize(semi, tspan) for a semidiscretization semi and the time span tspan. In particular, semidiscretize returns an ODEProblem used by OrdinaryDiffEq.jl.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"OrdinaryDiffEq.jl provides many integration algorithms, which are summarized in the documentation. Particularly interesting for Trixi.jl are their strong stability preserving (SSP) methods and low-storage methods. There are some differences regarding the choice of the used time step.","category":"page"},{"location":"tutorials/time_stepping/#adaptive_step_sizes","page":"19 Explicit time stepping","title":"Error-based adaptive step sizes","text":"","category":"section"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"First, we treat time integration algorithms with adaptive step sizes, such as SSPRK43. It is used in some elixirs, like elixir_euler_colliding_flow.jl or elixir_euler_astro_jet_amr.jl.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"Other error-based adaptive integration algorithms are for instance RDPK3SpFSAL35, RDPK3Sp35, RDPK3SpFSAL49, RDPK3Sp49, RDPK3SpFSAL510, RDPK3Sp510.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"They already contain an error-based adaptive step size control and heuristics to guess a starting step size. If this heuristic fails in your case, you can specify an appropriately small initial step size as keyword argument dt=... of solve.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"If you run Trixi in parallel with MPI you need to pass internalnorm=ode_norm and you should pass unstable_check=ode_unstable_check to enable MPI aware error-based adaptive step size control. These keyword arguments are also included in ode_default_options.","category":"page"},{"location":"tutorials/time_stepping/#CFL-based-step-size-control","page":"19 Explicit time stepping","title":"CFL-based step size control","text":"","category":"section"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"The SciML ecosystem also provides time integration algorithms without adaptive time stepping on their own, such as CarpenterKennedy2N54. Moreover, you also can deactivate the automatic adaptivity of adaptive integration algorithms by passing adaptive=false in the solve function.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"These algorithms require another way of setting the step size. You have to pass dt=... in the solve function. Without other settings, the simulation uses this fixed time step.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"For hyperbolic PDEs, it is natural to use an adaptive CFL-based step size control. Here, the time step is proportional to a ratio of the local measure of mesh spacing Delta x_i for an element i and the maximum (local) wave speed lambda_max related to the largest-magnitude eigenvalue of the flux Jacobian of the hyperbolic system.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"Delta t_n = textCFL * min_i fracDelta x_ilambda_max(u_i^n)","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"We compute Delta x_i by scaling the element size by a factor of 1(N+1), cf. Gassner and Kopriva (2011), Section 5.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"Trixi.jl provides such a CFL-based step size control. It is implemented as the callback StepsizeCallback.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"stepsize_callback = StepsizeCallback(; cfl=1.0)","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"A suitable CFL number depends on many parameters such as the chosen grid, the integration algorithm and the polynomial degree of the spatial DG discretization. So, the optimal number for an example is mostly determined experimentally.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"You can add this CFL-based step size control to your simulation like any other callback.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"callbacks = CallbackSet(stepsize_callback)\nalg = CarpenterKennedy2N54(williamson_condition=false)\nsolve(ode, alg;\n dt=1.0 # solve needs some value here but it will be overwritten by the stepsize_callback\n callback=callbacks)","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"You can find simple examples with a CFL-based step size control for instance in the elixirs elixir_advection_basic.jl or elixir_euler_source_terms.jl.","category":"page"},{"location":"tutorials/time_stepping/#Package-versions","page":"19 Explicit time stepping","title":"Package versions","text":"","category":"section"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"","category":"page"},{"location":"tutorials/time_stepping/","page":"19 Explicit time stepping","title":"19 Explicit time stepping","text":"This page was generated using Literate.jl.","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"EditURL = \"https://github.com/trixi-framework/Trixi.jl/blob/main/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing","page":"Contributing","title":"Contributing","text":"","category":"section"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"Trixi.jl is an open-source project and we are very happy to accept contributions from the community. Please feel free to open issues or submit patches (preferably as pull requests) any time. For planned larger contributions, it is often beneficial to get in contact with one of the principal developers first (see Authors).","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"Trixi.jl and its contributions are licensed under the MIT license (see License). As a contributor, you certify that all your contributions are in conformance with the Developer Certificate of Origin (Version 1.1), which is reproduced below.","category":"page"},{"location":"contributing/#Developer-Certificate-of-Origin-(Version-1.1)","page":"Contributing","title":"Developer Certificate of Origin (Version 1.1)","text":"","category":"section"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"The following text was taken from https://developercertificate.org:","category":"page"},{"location":"contributing/","page":"Contributing","title":"Contributing","text":"Developer Certificate of Origin\nVersion 1.1\n\nCopyright (C) 2004, 2006 The Linux Foundation and its contributors.\n1 Letterman Drive\nSuite D4700\nSan Francisco, CA, 94129\n\nEveryone is permitted to copy and distribute verbatim copies of this\nlicense document, but changing it is not allowed.\n\n\nDeveloper's Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:\n\n(a) The contribution was created in whole or in part by me and I\n have the right to submit it under the open source license\n indicated in the file; or\n\n(b) The contribution is based upon previous work that, to the best\n of my knowledge, is covered under an appropriate open source\n license and I have the right under that license to submit that\n work with modifications, whether created in whole or in part\n by me, under the same open source license (unless I am\n permitted to submit under a different license), as indicated\n in the file; or\n\n(c) The contribution was provided directly to me by some other\n person who certified (a), (b) or (c) and I have not modified\n it.\n\n(d) I understand and agree that this project and the contribution\n are public and that a record of the contribution (including all\n personal information I submit with it, including my sign-off) is\n maintained indefinitely and may be redistributed consistent with\n this project or the open source license(s) involved.","category":"page"},{"location":"performance/#Performance","page":"Performance","title":"Performance","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"Trixi.jl is designed to balance performance and readability. Since Julia provides a lot of zero-cost abstractions, it is often possible to optimize both goals simultaneously.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"The usual development workflow in Julia is","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Make it work.\nMake it nice.\nMake it fast.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"To achieve the third step, you should be familiar with (at least) the section on performance tips in the Julia manual. Here, we just list some important aspects you should consider when developing Trixi.jl.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Consider using @views/view(...) when using array slices, except on the left-side of an assignment (further details).\nFunctions are essentially for free, since they are usually automatically inlined where it makes sense (using @inline can be used as an additional hint to the compiler) (further details).\nFunction barriers can improve performance due to type stability (further details).\nLook for type instabilities using @code_warntype. Consider using @descend from Cthulhu.jl to investigate deeper call chains.","category":"page"},{"location":"performance/#Manual-benchmarking","page":"Performance","title":"Manual benchmarking","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"If you modify some internal parts of Trixi.jl, you should check the impact on performance. Hence, you should at least investigate the performance roughly by comparing the reported timings of several elixirs. Deeper investigations and micro-benchmarks should usually use BenchmarkTools.jl. For example, the following steps were used to benchmark the changes introduced in PR #256.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"git checkout e7ebf3846b3fd62ee1d0042e130afb50d7fe8e48 (new version)\nStart julia --threads=1 --check-bounds=no.\nExecute the following code in the REPL to benchmark the rhs! call at the final state.\njulia> using BenchmarkTools, Revise; using Trixi\n\njulia> # nowadays \"examples/tree_2d_dgsem/elixir_euler_sedov_blast_wave.jl\"\n trixi_include(\"examples/2d/elixir_euler_sedov_blast_wave.jl\")\n\njulia> du_test = copy(sol.u[end]); u_test = copy(sol.u[end]);\n\njulia> @benchmark Trixi.rhs!(\n $(du_test),\n $(u_test),\n $(semi),\n $(sol.t[end]))\nBenchmarkTools.Trial:\n memory estimate: 10.48 KiB\n allocs estimate: 67\n --------------\n minimum time: 4.510 ms (0.00% GC)\n median time: 4.646 ms (0.00% GC)\n mean time: 4.699 ms (0.00% GC)\n maximum time: 7.183 ms (0.00% GC)\n --------------\n samples: 1065\n evals/sample: 1\n\nshell> git checkout 222241ff54f8a4ca9876cc1fc25ae262416a4ea0\n\njulia> # nowadays \"examples/tree_2d_dgsem/elixir_euler_sedov_blast_wave.jl\"\n trixi_include(\"examples/2d/elixir_euler_sedov_blast_wave.jl\")\n\njulia> @benchmark Trixi.rhs!(\n $(du_test),\n $(u_test),\n $(semi),\n $(sol.t[end]))\nBenchmarkTools.Trial:\n memory estimate: 10.36 KiB\n allocs estimate: 67\n --------------\n minimum time: 4.500 ms (0.00% GC)\n median time: 4.635 ms (0.00% GC)\n mean time: 4.676 ms (0.00% GC)\n maximum time: 5.880 ms (0.00% GC)\n --------------\n samples: 1070\n evals/sample: 1\nRun the @benchmark ... commands multiple times to see whether there are any significant fluctuations. Note that the elixir name has changed since PR #256. Nowadays, the relevant elixir is examples/tree_2d_dgsem/elixir_euler_sedov_blast_wave.jl.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Follow these steps for both commits you want to compare. The relevant benchmark results you should typically be looking at are the median and mean values of the runtime and the memory/allocs estimate. In this example, the differences of the runtimes are of the order of the fluctuations one gets when running the benchmarks multiple times. Since the memory/allocs are (roughly) the same, there doesn't seem to be a significant performance regression here.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"You can also make it more detailed by benchmarking only, e.g., the calculation of the volume terms, but whether that's necessary depends on the modifications you made and their (potential) impact.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Some more detailed description of manual profiling and benchmarking as well as resulting performance improvements of Trixi.jl are given in the following blog posts.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Improving performance of AMR with p4est, cf. #638\nImproving performance of EC methods, cf. #643","category":"page"},{"location":"performance/#Automated-benchmarking","page":"Performance","title":"Automated benchmarking","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"We use PkgBenchmark.jl to provide a standard set of benchmarks for Trixi.jl. The relevant benchmark script is benchmark/benchmarks.jl. To benchmark the changes made in a PR, please proceed as follows:","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Check out the latest main branch of your Trixi.jl development repository.\nCheck out the latest development branch of your PR.\nChange your working directory to the benchmark directory of Trixi.jl.\nExecute julia run_benchmarks.jl.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"This will take some hours to complete and requires at least 8 GiB of RAM. When everything is finished, some output files will be created in the benchmark directory of Trixi.jl.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"warning: Warning\nPlease note that the benchmark scripts use --check-bounds=no at the moment. Thus, they will not work in any useful way for Julia v1.10 (and newer?), see Julia issue #50985.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"You can also run a standard set of benchmarks manually via","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"julia> using PkgBenchmark, Trixi\n\njulia> results = benchmarkpkg(Trixi, BenchmarkConfig(juliacmd=`$(Base.julia_cmd()) --check-bounds=no --threads=1`))\n\njulia> export_markdown(pkgdir(Trixi, \"benchmark\", \"single_benchmark.md\"), results)","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"This will save a markdown file with a summary of the benchmark results similar to this example. Note that this will take quite some time. Additional options are described in the docs of PkgBenchmark.jl. A particularly useful option is to specify a BenchmarkConfig including Julia command line options affecting the performance such as disabling bounds-checking and setting the number of threads.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"A useful feature when developing Trixi.jl is to compare the performance of Trixi.jl's current state vs. the main branch. This can be achieved by executing","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"julia> using PkgBenchmark, Trixi\n\njulia> results = judge(Trixi,\n BenchmarkConfig(juliacmd=`$(Base.julia_cmd()) --check-bounds=no --threads=1`), # target\n BenchmarkConfig(juliacmd=`$(Base.julia_cmd()) --check-bounds=no --threads=1`, id=\"main\") # baseline\n )\n\njulia> export_markdown(pkgdir(Trixi, \"benchmark\", \"results.md\"), results)","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"By default, the target is the current state of the repository. Remember that you need to be in a clean state (commit or stash your changes) to run this successfully. You can also run this comparison and an additional one using two threads via","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"julia> include(\"benchmark/run_benchmarks.jl\")","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Then, markdown files including the results are saved in benchmark/. This example result was obtained using a GitHub action for the PR #535. Note that GitHub actions run on in the cloud in a virtual machine. Hence, we do not really have control over it and performance results must be taken with a grain of salt. Nevertheless, significant runtime differences and differences of memory allocations should be robust indicators of performance changes.","category":"page"},{"location":"performance/#Runtime-performance-vs.-latency-aka-using-@nospecialize-selectively","page":"Performance","title":"Runtime performance vs. latency aka using @nospecialize selectively","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"Usually, Julia will compile specialized versions of each method, using as much information from the types of function arguments as possible (based on some heuristics). The compiler will generate code that is as efficient as comparable code written in a low-level language such as C or Fortran. However, there are cases where the runtime performance does not really matter but the time needed to compile specializations becomes significant. This is related to latency or the time-to-first-plot problem, well-known in the Julia community. In such a case, it can be useful to remove some burden from the compiler by avoiding specialization on every possible argument types using the macro @nospecialize. A prime example of such a case is pretty printing of structs in the Julia REPL, see the associated PR for further discussions.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"As a rule of thumb:","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Do not use @nospecialize in performance-critical parts, in particular not for methods involved in computing Trixi.rhs!.\nConsider using @nospecialize for methods like custom implementations of Base.show.","category":"page"},{"location":"performance/#performance-metrics","page":"Performance","title":"Performance metrics of the AnalysisCallback","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"The AnalysisCallback computes two performance indicators that you can use to evaluate the serial and parallel performance of Trixi.jl. They represent measured run times that are normalized by the number of rhs! evaluations and the number of degrees of freedom of the problem setup. The normalization ensures that we can compare different measurements for each type of indicator independent of the number of time steps or mesh size. All indicators have in common that they are still in units of time, thus lower is better for each of them.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"Here, the term \"degrees of freedom\" (DOFs) refers to the number of independent state vectors that are used to represent the numerical solution. For example, if you use a DGSEM-type scheme in 2D on a mesh with 8 elements and with 5-by-5 Gauss-Lobatto nodes in each element (i.e., a polynomial degree of 4), the total number of DOFs would be","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"n_textDOFsDGSEM = textnumber of elements cdot textnumber of nodes per element = 8 cdot (5 cdot 5) = 200","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"In contrast, for a finite volume-type scheme on a mesh with 8 elements, the total number of DOFs would be (independent of the number of spatial dimensions)","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"n_textDOFsFV = textnumber of elements = 8","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"since for standard finite volume methods you store a single state vector in each element. Note that we specifically count the number of state vectors and not the number of state variables for the DOFs. That is, in the previous example n_textDOFsFV is equal to 8 independent of whether this is a compressible Euler setup with 5 state variables or a linear scalar advection setup with one state variable.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"For each indicator, the measurements are always since the last invocation of the AnalysisCallback. That is, if the analysis callback is called multiple times, the indicators are repeatedly computed and can thus also be used to track the performance over the course of a longer simulation, e.g., to analyze setups with varying performance characteristics. Note that the time spent in the AnalysisCallback itself is always excluded, i.e., the performance measurements are not distorted by potentially expensive solution analysis computations. All other parts of a Trixi.jl simulation are included, however, thus make sure that you disable everything you do not want to be measured (such as I/O callbacks, visualization etc.).","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"note: Performance indicators and adaptive mesh refinement\nCurrently it is not possible to compute meaningful performance indicators for a simulation with arbitrary adaptive mesh refinement, since this would require to explicitly keep track of the number of DOF updates due to the mesh size changing repeatedly. The only way to do this at the moment is by setting the analysis interval to the same value as the AMR interval.","category":"page"},{"location":"performance/#Local,-rhs!-only-indicator","page":"Performance","title":"Local, rhs!-only indicator","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"The local, rhs!-only indicator is computed as","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"texttimeDOFrhs = fract_texttextttrhsn_textDOFslocal cdot n_textcallstextttrhs","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"where t_texttextttrhs is the accumulated time spent in rhs!, n_textDOFslocal is the local number of DOFs (i.e., on the current MPI rank; if doing a serial run, you can just think of this as the number of DOFs), and n_textcallstextttrhs is the number of times the rhs! function has been evaluated. Note that for this indicator, we measure only the time spent in rhs!, i.e., by definition all computations outside of rhs! - specifically all other callbacks and the time integration method - are not taken into account.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"The local, rhs!-only indicator is usually most useful if you do serial measurements and are interested in the performance of the implementation of your core numerical methods (e.g., when doing performance tuning).","category":"page"},{"location":"performance/#Performance-index-(PID)","page":"Performance","title":"Performance index (PID)","text":"","category":"section"},{"location":"performance/","page":"Performance","title":"Performance","text":"The performance index (PID) is computed as","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"textPID = fract_textwall cdot n_textranksMPIn_textDOFsglobal cdot n_textcallstextttrhs","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"where t_textwall is the walltime since the last call to the AnalysisCallback, n_textranksMPI is the number of MPI ranks used, n_textDOFsglobal is the global number of DOFs (i.e., the sum of DOFs over all MPI ranks; if doing a serial run, you can just think of this as the number of DOFs), and n_textcallstextttrhs is the number of times the rhs! function has been evaluated since the last call to the AnalysisCallback. The PID measures everything except the time spent in the AnalysisCallback itself - specifically, all other callbacks and the time integration method itself are included.","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"The PID is usually most useful if you would like to compare the parallel performance of your code to its serial performance. Specifically, it allows you to evaluate the parallelization overhead of your code by giving you a measure of the resources that are necessary to solve a given simulation setup. In a sense, it mimics the \"core hours\" metric that is often used by supercomputer centers to measure how many resources a particular compute job requires. It can thus be seen as a proxy for \"energy used\" and, as an extension, \"monetary cost\".","category":"page"},{"location":"performance/","page":"Performance","title":"Performance","text":"note: Initialization overhead in measurements\nWhen using one of the integration schemes from OrdinaryDiffEq.jl, their implementation will initialize some OrdinaryDiffEq.jl-specific information during the first time step. Among other things, one additional call to rhs! is performed. Therefore, make sure that for performance measurements using the PID either the number of timesteps or the workload per rhs! call is large enough to make the initialization overhead negligible. Note that the extra call to rhs! is properly accounted for in both the number of calls and the measured time, so you do not need to worry about it being expensive. If you want a perfect timing result, you need to set the analysis interval such that the AnalysisCallback is invoked at least once during the course of the simulation and discard the first PID value.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"EditURL = \"../../literate/src/files/custom_semidiscretization.jl\"","category":"page"},{"location":"tutorials/custom_semidiscretization/#custom_semidiscretization","page":"21 Custom semidiscretizations","title":"21: Custom semidiscretizations","text":"","category":"section"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"As described in the overview section, semidiscretizations are high-level descriptions of spatial discretizations in Trixi.jl. Trixi.jl's main focus is on hyperbolic conservation laws represented in a SemidiscretizationHyperbolic. Hyperbolic-parabolic problems based on the advection-diffusion equation or the compressible Navier-Stokes equations can be represented in a SemidiscretizationHyperbolicParabolic. This is described in the basic tutorial on parabolic terms and its extension to custom parabolic terms. In this tutorial, we will describe how these semidiscretizations work and how they can be used to create custom semidiscretizations involving also other tasks.","category":"page"},{"location":"tutorials/custom_semidiscretization/#Overview-of-the-right-hand-side-evaluation","page":"21 Custom semidiscretizations","title":"Overview of the right-hand side evaluation","text":"","category":"section"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"The semidiscretizations provided by Trixi.jl are set up to create ODEProblems from the SciML ecosystem for ordinary differential equations. In particular, a spatial semidiscretization can be wrapped in an ODE problem using semidiscretize, which returns an ODEProblem. This ODEProblem bundles an initial condition, a right-hand side (RHS) function, the time span, and possible parameters. The ODEProblems created by Trixi.jl use the semidiscretization passed to semidiscretize as a parameter. For a SemidiscretizationHyperbolic, the ODEProblem wraps Trixi.rhs! as ODE RHS. For a SemidiscretizationHyperbolicParabolic, Trixi.jl uses a SplitODEProblem combining Trixi.rhs_parabolic! for the (potentially) stiff part and Trixi.rhs! for the other part.","category":"page"},{"location":"tutorials/custom_semidiscretization/#Standard-Trixi.jl-setup","page":"21 Custom semidiscretizations","title":"Standard Trixi.jl setup","text":"","category":"section"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"In this tutorial, we will consider the linear advection equation with source term","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"partial_t u(tx) + partial_x u(tx) = -exp(-t) sinbigl(pi (x - t) bigr)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"with periodic boundary conditions in the domain [-1, 1] as a model problem. The initial condition is","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"u(0x) = sin(pi x)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"The source term results in some damping and the analytical solution","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"u(tx) = exp(-t) sinbigl(pi (x - t) bigr)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"First, we discretize this equation using the standard functionality of Trixi.jl.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"using Trixi, OrdinaryDiffEq, Plots","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"The linear scalar advection equation is already implemented in Trixi.jl as LinearScalarAdvectionEquation1D. We construct it with an advection velocity 1.0.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"equations = LinearScalarAdvectionEquation1D(1.0)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Next, we use a standard DGSEM solver.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"solver = DGSEM(polydeg = 3)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"We create a simple TreeMesh in 1D.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"coordinates_min = (-1.0,)\ncoordinates_max = (+1.0,)\nmesh = TreeMesh(coordinates_min, coordinates_max;\n initial_refinement_level = 4,\n n_cells_max = 10^4,\n periodicity = true)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"We wrap everything in in a semidiscretization and pass the source terms as a standard Julia function. Please note that Trixi.jl uses SVectors from StaticArrays.jl to store the conserved variables u. Thus, the return value of the source terms must be wrapped in an SVector - even if we consider just a scalar problem.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"function initial_condition(x, t, equations)\n return SVector(exp(-t) * sinpi(x[1] - t))\nend\n\nfunction source_terms_standard(u, x, t, equations)\n return -initial_condition(x, t, equations)\nend\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition,\n solver;\n source_terms = source_terms_standard)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Now, we can create the ODEProblem, solve the resulting ODE using a time integration method from OrdinaryDiffEq.jl, and visualize the numerical solution at the final time using Plots.jl.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"tspan = (0.0, 3.0)\node = semidiscretize(semi, tspan)\n\nsol = solve(ode, RDPK3SpFSAL49(); ode_default_options()...)\n\nplot(sol; label = \"numerical sol.\", legend = :topright)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"We can also plot the analytical solution for comparison. Since Trixi.jl uses SVectors for the variables, we take their first (and only) component to get the scalar value for manual plotting.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"let\n x = range(-1.0, 1.0; length = 200)\n plot!(x, first.(initial_condition.(x, sol.t[end], equations)),\n label = \"analytical sol.\", linestyle = :dash, legend = :topright)\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"We can also add the initial condition to the plot.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"plot!(sol.u[1], semi, label = \"u0\", linestyle = :dot, legend = :topleft)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"You can of course also use some callbacks provided by Trixi.jl as usual.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"summary_callback = SummaryCallback()\nanalysis_interval = 100\nanalysis_callback = AnalysisCallback(semi; interval = analysis_interval)\nalive_callback = AliveCallback(; analysis_interval)\ncallbacks = CallbackSet(summary_callback,\n analysis_callback,\n alive_callback)\n\nsol = solve(ode, RDPK3SpFSAL49();\n ode_default_options()..., callback = callbacks)\nsummary_callback()","category":"page"},{"location":"tutorials/custom_semidiscretization/#Using-a-custom-ODE-right-hand-side-function","page":"21 Custom semidiscretizations","title":"Using a custom ODE right-hand side function","text":"","category":"section"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Next, we will solve the same problem but use our own ODE RHS function. To demonstrate this, we will artificially create a global variable containing the current time of the simulation.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"const GLOBAL_TIME = Ref(0.0)\n\nfunction source_terms_custom(u, x, t, equations)\n t = GLOBAL_TIME[]\n return -initial_condition(x, t, equations)\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Next, we create our own RHS function to update the global time of the simulation before calling the RHS function from Trixi.jl.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"function rhs_source_custom!(du_ode, u_ode, semi, t)\n GLOBAL_TIME[] = t\n Trixi.rhs!(du_ode, u_ode, semi, t)\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Next, we create an ODEProblem manually copying over the data from the one we got from semidiscretize earlier.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"ode_source_custom = ODEProblem(rhs_source_custom!,\n ode.u0,\n ode.tspan,\n ode.p #= semi =#)\nsol_source_custom = solve(ode_source_custom, RDPK3SpFSAL49();\n ode_default_options()...)\n\nplot(sol_source_custom; label = \"numerical sol.\")\nlet\n x = range(-1.0, 1.0; length = 200)\n plot!(x, first.(initial_condition.(x, sol_source_custom.t[end], equations)),\n label = \"analytical sol.\", linestyle = :dash, legend = :topleft)\nend\nplot!(sol_source_custom.u[1], semi, label = \"u0\", linestyle = :dot, legend = :topleft)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"This also works with callbacks as usual.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"summary_callback = SummaryCallback()\nanalysis_interval = 100\nanalysis_callback = AnalysisCallback(semi; interval = analysis_interval)\nalive_callback = AliveCallback(; analysis_interval)\ncallbacks = CallbackSet(summary_callback,\n analysis_callback,\n alive_callback)\n\nsol = solve(ode_source_custom, RDPK3SpFSAL49();\n ode_default_options()..., callback = callbacks)\nsummary_callback()","category":"page"},{"location":"tutorials/custom_semidiscretization/#Setting-up-a-custom-semidiscretization","page":"21 Custom semidiscretizations","title":"Setting up a custom semidiscretization","text":"","category":"section"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Using a global constant is of course not really nice from a software engineering point of view. Thus, it can often be useful to collect additional data in the parameters of the ODEProblem. Thus, it is time to create our own semidiscretization. Here, we create a small wrapper of a standard semidiscretization of Trixi.jl and the current global time of the simulation.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"struct CustomSemidiscretization{Semi, T} <: Trixi.AbstractSemidiscretization\n semi::Semi\n t::T\nend\n\nsemi_custom = CustomSemidiscretization(semi, Ref(0.0))","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"To get pretty printing in the REPL, you can consider specializing","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Base.show(io::IO, parameters::CustomSemidiscretization)\nBase.show(io::IO, ::MIME\"text/plain\", parameters::CustomSemidiscretization)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"for your custom semidiscretiation.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Next, we create our own source terms that use the global time stored in the custom semidiscretiation.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"source_terms_custom_semi = let semi_custom = semi_custom\n function source_terms_custom_semi(u, x, t, equations)\n t = semi_custom.t[]\n return -initial_condition(x, t, equations)\n end\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"We also create a custom ODE RHS to update the current global time stored in the custom semidiscretization. We unpack the standard semidiscretization created by Trixi.jl and pass it to Trixi.rhs!.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"function rhs_semi_custom!(du_ode, u_ode, semi_custom, t)\n semi_custom.t[] = t\n Trixi.rhs!(du_ode, u_ode, semi_custom.semi, t)\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Finally, we set up an ODEProblem and solve it numerically.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"ode_semi_custom = ODEProblem(rhs_semi_custom!,\n ode.u0,\n ode.tspan,\n semi_custom)\nsol_semi_custom = solve(ode_semi_custom, RDPK3SpFSAL49();\n ode_default_options()...)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"If we want to make use of additional functionality provided by Trixi.jl, e.g., for plotting, we need to implement a few additional specializations. In this case, we forward everything to the standard semidiscretization provided by Trixi.jl wrapped in our custom semidiscretization.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Base.ndims(semi::CustomSemidiscretization) = ndims(semi.semi)\nfunction Trixi.mesh_equations_solver_cache(semi::CustomSemidiscretization)\n Trixi.mesh_equations_solver_cache(semi.semi)\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Now, we can plot the numerical solution as usual.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"plot(sol_semi_custom; label = \"numerical sol.\")\nlet\n x = range(-1.0, 1.0; length = 200)\n plot!(x, first.(initial_condition.(x, sol_semi_custom.t[end], equations)),\n label = \"analytical sol.\", linestyle = :dash, legend = :topleft)\nend\nplot!(sol_semi_custom.u[1], semi, label = \"u0\", linestyle = :dot, legend = :topleft)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"This also works with many callbacks as usual. However, the AnalysisCallback requires some special handling since it makes use of a performance counter contained in the standard semidiscretizations of Trixi.jl to report some performance metrics. Here, we forward all accesses to the performance counter to the wrapped semidiscretization.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"function Base.getproperty(semi::CustomSemidiscretization, s::Symbol)\n if s === :performance_counter\n wrapped_semi = getfield(semi, :semi)\n wrapped_semi.performance_counter\n else\n getfield(semi, s)\n end\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Moreover, the AnalysisCallback also performs some error calculations. We also need to forward them to the wrapped semidiscretization.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"function Trixi.calc_error_norms(func, u, t, analyzer,\n semi::CustomSemidiscretization,\n cache_analysis)\n Trixi.calc_error_norms(func, u, t, analyzer,\n semi.semi,\n cache_analysis)\nend","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"Now, we can work with the callbacks used before as usual.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"summary_callback = SummaryCallback()\nanalysis_interval = 100\nanalysis_callback = AnalysisCallback(semi_custom;\n interval = analysis_interval)\nalive_callback = AliveCallback(; analysis_interval)\ncallbacks = CallbackSet(summary_callback,\n analysis_callback,\n alive_callback)\n\nsol = solve(ode_semi_custom, RDPK3SpFSAL49();\n ode_default_options()..., callback = callbacks)\nsummary_callback()","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"For even more advanced usage of custom semidiscretizations, you may look at the source code of the ones contained in Trixi.jl, e.g.,","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"SemidiscretizationHyperbolicParabolic\nSemidiscretizationEulerGravity\nSemidiscretizationEulerAcoustics\nSemidiscretizationCoupled","category":"page"},{"location":"tutorials/custom_semidiscretization/#Package-versions","page":"21 Custom semidiscretizations","title":"Package versions","text":"","category":"section"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"","category":"page"},{"location":"tutorials/custom_semidiscretization/","page":"21 Custom semidiscretizations","title":"21 Custom semidiscretizations","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"EditURL = \"../../literate/src/files/DGSEM_FluxDiff.jl\"","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/#DGSEM_FluxDiff","page":"4 DGSEM with flux differencing","title":"4: DGSEM with flux differencing","text":"","category":"section"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This tutorial starts with a presentation of the weak formulation of the discontinuous Galerkin spectral element method (DGSEM) in order to fix the notation of the used operators. Then, the DGSEM formulation with flux differencing (split form DGSEM) and its implementation in Trixi.jl is shown.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We start with the one-dimensional conservation law","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"u_t + f(u)_x = 0 qquad tin mathbbR^+ xinOmega","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"with the physical flux f.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We split the domain Omega into elements K with center x_K and size Delta x. With the transformation mapping x(xi)=x_K + fracDelta x2 xi we can transform the reference element -11 to every physical element. So, the equation can be restricted to the reference element using the determinant of the Jacobian matrix of the transformation mapping J=fracpartial xpartial xi=fracDelta x2.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"J u_t + f(u)_xi = 0 qquad tin mathbbR^+ xiin -11","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/#The-weak-form-of-the-DGSEM","page":"4 DGSEM with flux differencing","title":"The weak form of the DGSEM","text":"","category":"section"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We consider the so-called discontinuous Galerkin spectral element method (DGSEM) with collocation. It results from choosing a nodal DG ansatz using N+1 Gauss-Lobatto nodes xi_i in -11 with matching interpolation weights w_i, which are used for numerical integration and interpolation with the Lagrange polynomial basis l_i of degree N. The Lagrange functions are created with those nodes and hence fulfil a Kronecker property at the GL nodes. The weak formulation of the DGSEM for one element is","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"J underlinedotu(t) = - M^-1 B underlinef^* + M^-1 D^T M underlinef","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"where underlineu=(u_0 u_1 dots u_N)^TinmathbbR^N+1 is the collected pointwise evaluation of u at the discretization nodes and dotu = partial u partial t = u_t is the temporal derivative. The nodal values of the flux function f results with collocation in underlinef, since underlinef_j=f(underlineu_j). Moreover, we got the numerical flux f^*=f^*(u^- u^+).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We will now have a short overview over the operators we used.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"The derivative matrix DinmathbbR^(N+1)times (N+1) mimics a spatial derivation on a discrete level with underlinef_x approx D underlinef. It is defined by D_ij = l_j(xi_i).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"The diagonal mass matrix M is defined by M_ij=langle l_j l_irangle_N with the numerical scalar product langle cdot cdotrangle_N defined for functions f and g by","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"langle f grangle_N = int_-1 N^1 f(xi) g(xi) dxi = sum_k=0^N f(xi_k) g(xi_k) w_k","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"The multiplication by M matches a discrete integration","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":" int_-1^1 f(xi) underlinel(xi) dxi approx M underlinef","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"The boundary matrix B=textdiag(-1 0 0 1) represents an evaluation of a function at the boundaries xi_0=-1 and xi_N=1.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"For these operators the following property holds:","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":" M D + (M D)^T = B","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This is called the summation-by-parts (SBP) property since it mimics integration by parts on a discrete level (Gassner (2013)).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"The explicit definitions of the operators and the construction of the 1D algorithm can be found for instance in the tutorial introduction to DG methods or in more detail in Kopriva (2009).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This property shows the equivalence between the weak form and the following strong formulation of the DGSEM.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"beginalign*\nJ underlinedotu(t)\n= - M^-1 B underlinef^* + M^-1 D^T M underlinef5pt\n= - M^-1 B underlinef^* + M^-1 (B - MD) underlinef5pt\n= - M^-1 B (underlinef^* - underlinef) - D underlinef\nendalign*","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"More information about the equivalence you can find in Kopriva, Gassner (2010).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/#DGSEM-with-flux-differencing","page":"4 DGSEM with flux differencing","title":"DGSEM with flux differencing","text":"","category":"section"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"When using the diagonal SBP property it is possible to rewrite the application of the derivative operator D in the calculation of the volume integral into a subcell based finite volume type differencing formulation (Fisher, Carpenter (2013)). Generalizing","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"(D underlinef)_i = sum_j D_ij underlinef_j\n= 2sum_j frac12 D_ij (underlinef_j + underlinef_i)\neqqcolon 2sum_j D_ij f_textcentral(u_i u_j)","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"we replace D underlinef in the strong form by 2D underlinef_vol(u^- u^+) with the consistent two-point volume flux f_vol and receive the DGSEM formulation with flux differencing (split form DGSEM) (Gassner, Winters, Kopriva (2016)).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"beginalign*\nJ underlinedotu(t) = - M^-1 B (underlinef^* - underlinef) - 2D underlinef_vol(u^- u^+)5pt\n= - M^-1 B (underlinef^* - underlinef_vol(underlineu underlineu)) - 2D underlinef_vol(u^- u^+)5pt\n= - M^-1 B underlinef_surface^* - (2D - M^-1 B) underlinef_vol5pt\n= - M^-1 B underlinef_surface^* - D_split underlinef_vol\nendalign*","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This formulation is in a weak form type formulation and can be implemented by using the derivative split matrix D_split=(2D-M^-1B) and two different fluxes. We divide between the surface flux f=f_surface used for the numerical flux f_surface^* and the already mentioned volume flux f_vol especially for this formulation.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This formulation creates a more stable version of DGSEM, because it fulfils entropy stability. Moreover it allows the construction of entropy conserving discretizations without relying on exact integration. This is achieved when using a two-point entropy conserving flux function as volume flux in the volume flux differencing formulation. Then, the numerical surface flux can be used to control the dissipation of the discretization and to guarantee decreasing entropy, i.e. entropy stability.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/#fluxDiffExample","page":"4 DGSEM with flux differencing","title":"Implementation in Trixi.jl","text":"","category":"section"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"Now, we have a look at the implementation of DGSEM with flux differencing with Trixi.jl.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"using OrdinaryDiffEq, Trixi","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We implement a simulation for the compressible Euler equations in 2D","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"partial_t beginpmatrix rho rho v_1 rho v_2 rho e endpmatrix\n+ partial_x beginpmatrix rho v_1 rho v_1^2 + p rho v_1 v_2 (rho e +p) v_1 endpmatrix\n+ partial_y beginpmatrix rho v_2 rho v_1 v_2 rho v_2^2 + p (rho e +p) v_2 endpmatrix\n= beginpmatrix 0 0 0 0 endpmatrix","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"for an ideal gas with ratio of specific heats gamma=14. Here, rho is the density, v_1, v_2 the velocities, e the specific total energy and","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"p = (gamma - 1) left( rho e - frac12 rho (v_1^2+v_2^2) right)","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"the pressure.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"gamma = 1.4\nequations = CompressibleEulerEquations2D(gamma)","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"As our initial condition we will use a weak blast wave from Hennemann, Gassner (2020). The primitive variables are defined by","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"beginpmatrix rho v_1 v_2 p endpmatrix\n= beginpmatrix 10 00 00 10 endpmatrix textif x_2 05\ntextand beginpmatrix rho v_1 v_2 p endpmatrix\n= beginpmatrix 11691 01882 * cos(phi) 01882 * sin(phi) 1245 endpmatrix textelse","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"with phi = tan^-1(fracx_2x_1).","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This initial condition is implemented in Trixi.jl under the name initial_condition_weak_blast_wave.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"initial_condition = initial_condition_weak_blast_wave","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"In Trixi.jl, flux differencing for the volume integral can be implemented with VolumeIntegralFluxDifferencing using symmetric two-point volume fluxes. First, we set up a simulation with the entropy conserving and kinetic energy preserving flux flux_ranocha by Hendrik Ranocha (2018) as surface and volume flux.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We will confirm the entropy conservation property numerically.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"volume_flux = flux_ranocha # = f_vol\nsolver = DGSEM(polydeg=3, surface_flux=volume_flux,\n volume_integral=VolumeIntegralFluxDifferencing(volume_flux))","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"Now, we implement Trixi.jl's mesh, semi and ode in a simple framework. For more information please have a look at the documentation, the basic tutorial introduction to DG methods or some basic elixirs.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"coordinates_min = (-2.0, -2.0)\ncoordinates_max = ( 2.0, 2.0)\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=5,\n n_cells_max=10_000,\n periodicity=true)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n boundary_conditions=boundary_condition_periodic)\n\n# ODE solvers\ntspan = (0.0, 0.4)\node = semidiscretize(semi, tspan);\nnothing #hide","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"To analyse the entropy conservation of the approximation, we will use the analysis calllback implemented in Trixi. It provides some information about the approximation including the entropy change.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"analysis_callback = AnalysisCallback(semi, interval=100);\nnothing #hide","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We now run the simulation using flux_ranocha for both surface and volume flux.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n ode_default_options()..., callback=analysis_callback);\nnothing #hide","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"A look at the change in entropy sum partial Spartial U cdot U_t in the analysis callback confirms that the flux is entropy conserving since the change is about machine precision.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We can plot the approximated solution at the time t=0.4.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"using Plots\nplot(sol)","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"Now, we can use for instance the dissipative flux flux_lax_friedrichs as surface flux to get an entropy stable method.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"using OrdinaryDiffEq, Trixi\n\ngamma = 1.4\nequations = CompressibleEulerEquations2D(gamma)\n\ninitial_condition = initial_condition_weak_blast_wave\n\nvolume_flux = flux_ranocha # = f_vol\nsolver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs,\n volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n\ncoordinates_min = (-2.0, -2.0)\ncoordinates_max = ( 2.0, 2.0)\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=5,\n n_cells_max=10_000,\n periodicity=true)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n boundary_conditions=boundary_condition_periodic)\n\n# ODE solvers\ntspan = (0.0, 0.4)\node = semidiscretize(semi, tspan);\n\nanalysis_callback = AnalysisCallback(semi, interval=100);\nnothing #hide","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"We now run the simulation using the volume flux flux_ranocha and surface flux flux_lax_friedrichs.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n ode_default_options()..., callback=analysis_callback);\nnothing #hide","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"The change in entropy confirms the expected entropy stability.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"using Plots\nplot(sol)","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"Of course, you can use more than these two fluxes in Trixi. Here, we will give a short list of possible fluxes for the compressible Euler equations. For the volume flux Trixi.jl provides for example flux_ranocha, flux_shima_etal, flux_chandrashekar, flux_kennedy_gruber. As surface flux you can use all volume fluxes and additionally for instance flux_lax_friedrichs, flux_hll, flux_hllc.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/#Package-versions","page":"4 DGSEM with flux differencing","title":"Package versions","text":"","category":"section"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"","category":"page"},{"location":"tutorials/DGSEM_FluxDiff/","page":"4 DGSEM with flux differencing","title":"4 DGSEM with flux differencing","text":"This page was generated using Literate.jl.","category":"page"},{"location":"multi-physics_coupling/#multi-physics-coupling","page":"Coupling","title":"Multi-physics coupling","text":"","category":"section"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"A complex simulation can consist of different spatial domains in which different equations are being solved, different numerical methods being used or the grid structure is different. One example would be a fluid in a tank and an extended hot plate attached to it. We would then like to solve the Navier-Stokes equations in the fluid domain and the heat conduction equations in the plate. The coupling would happen at the interface through the exchange of thermal energy.","category":"page"},{"location":"multi-physics_coupling/#Converter-coupling","page":"Coupling","title":"Converter coupling","text":"","category":"section"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"It may happen that the two systems to be coupled do not share any variables, but share some of the physics. In such a situation, the same physics is just represented in a different form and with a different set of variables. This is the case, for instance assuming two domains, if there is a fluid system in one domain and a Vlasov system in the other domain. In that case we would have variables representing distribution functions of the Vlasov system on one side and variables representing the mechanical quantities, like density, of the fluid system. To translate the fields from one description to the other one needs to use converter functions. These functions need to be hand tailored by the user in the elixir file where each pair of coupled systems requires two coupling functions, one for each direction.","category":"page"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"In the general case, we have a system A with m variables u_Ai i = 1 dots m and another system B with n variables u_Bj j = 1 dots n. We then define two coupling functions, one that transforms u_A into u_B and one that goes the other way.","category":"page"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"In their minimal form they take the position vector x, state vector u and the equations of the two coupled systems and return the transformed variables. By passing the equations we can make use of their parameters, if they are required. Examples can be seen in examples/structured_2d_dgsem/elixir_advection_coupled.jl.","category":"page"},{"location":"multi-physics_coupling/#GlmSpeedCallback-for-coupled-MHD-simulations","page":"Coupling","title":"GlmSpeedCallback for coupled MHD simulations","text":"","category":"section"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"When simulating an MHD system and the GlmSpeedCallback is required, we need to specify for which semidiscretization we need the GLM speed updated. This can be done with an additional parameter called semi_indices, which is a tuple containing the semidiscretization indices for all systems that require the GLM speed updated.","category":"page"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"An example elixir can be found at examples/structured_2d_dgsem/elixir_mhd_coupled.jl.","category":"page"},{"location":"multi-physics_coupling/#Warning-about-binary-compatibility","page":"Coupling","title":"Warning about binary compatibility","text":"","category":"section"},{"location":"multi-physics_coupling/","page":"Coupling","title":"Coupling","text":"Currently the coordinate values on the nodes can differ by machine precision when simulating the mesh and when splitting the mesh in multiple domains. This is an issue coming from the coordinate interpolation on the nodes. As a result, running a simulation in a single system and in two coupled domains may result in a difference of the order of the machine precision. While this is not an issue for most practical problems, it is best to keep this in mind when comparing test runs.","category":"page"},{"location":"meshes/dgmulti_mesh/#DGMulti","page":"DGMulti mesh","title":"Unstructured meshes and the DGMulti solver","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Trixi.jl includes support for simplicial and tensor product meshes via the DGMulti solver type, which is based on the StartUpDG.jl package. DGMulti solvers also provide support for quadrilateral and hexahedral meshes, though this feature is currently restricted to Cartesian grids. On these line/quad/hex meshes, the DGMulti solver also allows to use all (finite domain) SBP derivative operators provided by SummationByPartsOperators.jl, including several finite difference SBP methods.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"We make a few simplifying assumptions about supported meshes:","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"meshes consist of a single type of element\nmeshes are conforming (e.g., each face of an element is shared with at most one other element).\nthe geometric mapping from reference to physical elements is polynomial (currently, only affine mappings are supported).","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"StartUpDG.jl includes both simple uniform meshes via uniform_mesh, as well as support for triangular meshes constructed using Triangulate.jl, a wrapper around Jonathan Shewchuk's Triangle package.","category":"page"},{"location":"meshes/dgmulti_mesh/#The-DGMulti-solver-type","page":"DGMulti mesh","title":"The DGMulti solver type","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Trixi.jl solvers on simplicial meshes use the DGMulti solver type, which allows users to specify element_type and approximation_type in addition to polydeg, surface_flux, surface_integral, and volume_integral.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"DGMulti(; polydeg::Integer,\n element_type::AbstractElemShape,\n approximation_type=Polynomial(),\n surface_flux=flux_central,\n surface_integral=SurfaceIntegralWeakForm(surface_flux),\n volume_integral=VolumeIntegralWeakForm(),\n RefElemData_kwargs...)","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Here, element_type can be Tri(), Quad(), Tet(), or Hex(), and approximation_type can be","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Polynomial(), which specifies a DG discretization using a polynomial basis using quadrature rules which are exact for degree 2 * polydeg integrands, or\nSBP(), which specifies a DG discretization using multi-dimensional SBP operators. Types of SBP discretizations available include: SBP{Kubatko{LobattoFaceNodes}}() (the default choice), SBP{Kubatko{LegendreFaceNodes}}(), and SBP{Hicken}(). For polydeg = 1, ..., 4, the SBP{Kubatko{LegendreFaceNodes}}() SBP nodes are identical to the SBP nodes of Chen and Shu. More detailed descriptions of each SBP node set can be found in the StartUpDG.jl docs. Trixi.jl will also specialize certain parts of the solver based on the SBP approximation type.\na (periodic or non-periodic) derivative operator from SummationByPartsOperators.jl, usually constructed as D = derivative_operator(...). In this case, you do not need to pass a polydeg. Periodic derivative operators will only work with single-element meshes constructed using DGMultiMesh.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Additional options can also be specified through RefElemData_kwargs:","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"quad_rule_vol = quad_nodes(Tri(), Nq) will substitute in a volume quadrature rule of degree Nq instead of the default (which is a quadrature rule of degree polydeg). Here, a degree Nq rule will be exact for at least degree 2*Nq integrands (such that the mass matrix is integrated exactly). Quadrature rules of which exactly integrate degree Nq integrands may also be specified (for example, quad_rule_vol = StartUpDG.quad_nodes_tri(Nq) on triangles).\nquad_rule_face = quad_nodes(Line(), Nq)) will use a face quadrature rule of degree Nq rather than the default. This rule is also exact for at least degree 2*Nq integrands.","category":"page"},{"location":"meshes/dgmulti_mesh/#The-GaussSBP()-approximation-type-on-Quad()-and-Hex()-meshes","page":"DGMulti mesh","title":"The GaussSBP() approximation type on Quad() and Hex() meshes","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"When using VolumeIntegralFluxDifferencing on Quad() and Hex() meshes, one can also specify approximation_type = GaussSBP() to use an entropy stable Gauss collocation scheme. Here, GaussSBP() refers to \"generalized\" summation-by-parts operators (see for example Ranocha 2018 or Fernandez and Zingg 2015).","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Unlike traditional SBP operators, generalized SBP operators are constructed from nodes which do not include boundary nodes (i.e., Gauss quadrature nodes as opposed to Gauss-Lobatto quadrature nodes). This makes the computation of interface fluxes slightly more expensive, but also usually results in a more accurate solution. Roughly speaking, an entropy stable Gauss collocation scheme will yield results similar to a modal entropy stable scheme using a Polynomial() approximation type, but will be more efficient at high orders of approximation.","category":"page"},{"location":"meshes/dgmulti_mesh/#Trixi.jl-elixirs-on-simplicial-and-tensor-product-element-meshes","page":"DGMulti mesh","title":"Trixi.jl elixirs on simplicial and tensor product element meshes","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Example elixirs with triangular, quadrilateral, and tetrahedral meshes can be found in the examples/dgmulti_2d/ and examples/dgmulti_3d/ folders. Some key elixirs to look at:","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"examples/dgmulti_2d/elixir_euler_weakform.jl: basic weak form DG discretization on a uniform triangular mesh. Changing element_type = Quad() or approximation_type = SBP() will switch to a quadrilateral mesh or an SBP-type discretization. Changing surface_integral = SurfaceIntegralWeakForm(flux_ec) and volume_integral = VolumeIntegralFluxDifferencing(flux_ec) for some entropy conservative flux (e.g., flux_chandrashekar or flux_ranocha) will switch to an entropy conservative formulation.\nexamples/dgmulti_2d/elixir_euler_triangulate_pkg_mesh.jl: uses an unstructured mesh generated by Triangulate.jl.\nexamples/dgmulti_3d/elixir_euler_weakform.jl: ´basic weak form DG discretization on a uniform tetrahedral mesh. Changing element_type = Hex() will switch to a hexahedral mesh. Changing surface_integral = SurfaceIntegralWeakForm(flux_ec) and volume_integral = VolumeIntegralFluxDifferencing(flux_ec) for some entropy conservative flux (e.g., flux_chandrashekar or flux_ranocha) will switch to an entropy conservative formulation.","category":"page"},{"location":"meshes/dgmulti_mesh/#For-developers","page":"DGMulti mesh","title":"For developers","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/#DGMultiMesh-wrapper-type","page":"DGMulti mesh","title":"DGMultiMesh wrapper type","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"DGMulti meshes in Trixi.jl are represented using a DGMultiMesh{NDIMS, ...} type. This mesh type is assumed to have fields md::MeshData, which contains geometric terms derived from the mapping between the reference and physical elements, and boundary_faces, which contains a Dict of boundary segment names (symbols) and list of faces which lie on that boundary segment.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"A DGMultiMesh can be constructed in several ways. For example, DGMultiMesh(dg::DGMulti) will return a Cartesian mesh on -1 1^d with element types specified by dg. DGMulti meshes can also be constructed by specifying a list of vertex coordinates vertex_coordinates_x, vertex_coordinates_y, vertex_coordinates_z and a connectivity matrix EToV where EToV[e,:] gives the vertices which correspond to element e. These quantities are available from most unstructured mesh generators.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Initial support for curved DGMultiMeshes is available for flux differencing solvers using SBP and GaussSBP approximation types on quadrilateral and hexahedral meshes. These can be called by specifying mesh = DGMultiMesh(dg, cells_per_dimension, mapping), where mapping is a function which specifies the warping of the mesh (e.g., mapping(xi, eta) = SVector{2}(xi, eta) is the identity mapping) similar to the mapping argument used by StructuredMesh.","category":"page"},{"location":"meshes/dgmulti_mesh/#Variable-naming-conventions","page":"DGMulti mesh","title":"Variable naming conventions","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"We use the convention that coordinates on the reference element are r in 1D, r s in 2D, or r s t in 3D. Physical coordinates use the standard conventions x (1D), x y (2D), and x y z (3D).","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"(Image: \"Ref-to-physical mapping\")","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Derivatives of reference coordinates with respect to physical coordinates are abbreviated, e.g., fracpartial rpartial x = r_x. Additionally, J is used to denote the determinant of the Jacobian of the reference-to-physical mapping.","category":"page"},{"location":"meshes/dgmulti_mesh/#Variable-meanings-and-conventions-in-StartUpDG.jl","page":"DGMulti mesh","title":"Variable meanings and conventions in StartUpDG.jl","text":"","category":"section"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"StartUpDG.jl exports structs RefElemData{NDIMS, ElemShape, ...} (which contains data associated with the reference element, such as interpolation points, quadrature rules, face nodes, normals, and differentiation/interpolation/projection matrices) and MeshData{NDIMS} (which contains geometric data associated with a mesh). These are currently used for evaluating DG formulations in a matrix-free fashion. These structs contain fields similar (but not identical) to those in Globals1D, Globals2D, Globals3D in the Matlab codes from \"Nodal Discontinuous Galerkin Methods\" by Hesthaven and Warburton (2007).","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"In general, we use the following code conventions:","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"variables such as r, s,... and x, y,... correspond to values at nodal interpolation points.\nvariables ending in q (e.g., rq, sq,... and xq, yq,...) correspond to values at volume quadrature points.\nvariables ending in f (e.g., rf, sf,... and xf, yf,...) correspond to values at face quadrature points.\nvariables ending in p (e.g., rp, sp,...) correspond to \"plotting\" points, which are usually a fine grid of equispaced points.\nV matrices correspond to interpolation matrices from nodal interpolation points, e.g., Vq interpolates to volume quadrature points, Vf interpolates to face quadrature points.\ngeometric quantities in MeshData are stored as matrices of dimension textnumber of points per element times textnumber of elements.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Quantities in rd::RefElemData:","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"rd.Np, rd.Nq, rd.Nf: the number of nodal interpolation points, volume quadrature points, and face quadrature points on the reference element, respectively.\nrd.Vq: interpolation matrices from values at nodal interpolation points to volume quadrature points\nrd.wq: volume quadrature weights on the reference element\nrd.Vf: interpolation matrices from values at nodal interpolation points to face quadrature points\nrd.wf: a vector containing face quadrature weights on the reference element\nrd.M: the quadrature-based mass matrix, computed via rd.Vq' * diagm(rd.wq) * rd.Vq.\nrd.Pq: a quadrature-based L^2 projection matrix rd.Pq = rd.M \\ rd.Vq' * diagm(rd.wq) which maps between values at quadrature points and values at nodal points.\nDr, Ds, Dt matrices are nodal differentiation matrices with respect to the rst coordinates, e.g., Dr*f.(r,s) approximates the derivative of f(rs) at nodal points.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"Quantities in md::MeshData:","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"md.xyz is a tuple of matrices md.x, md.y, md.z, where column e contains coordinates of physical interpolation points.\nmd.xyzq is a tuple of matrices md.xq, md.yq, md.zq, where column e contains coordinates of physical quadrature points.\nmd.rxJ, md.sxJ, ... are matrices where column e contains values of Jfracpartial rpartial x, Jfracpartial spartial x, etc. at nodal interpolation points on the element e.\nmd.J is a matrix where column e contains values of the Jacobian J at nodal interpolation points.\nmd.Jf is a matrix where column e contains values of the face Jacobian (e.g., determinant of the geometric mapping between a physical face and a reference face) at face quadrature points.\nmd.nxJ, md.nyJ, ... are matrices where column e contains values of components of the unit normal scaled by the face Jacobian md.Jf at face quadrature points.","category":"page"},{"location":"meshes/dgmulti_mesh/","page":"DGMulti mesh","title":"DGMulti mesh","text":"For more details, please see the StartUpDG.jl docs.","category":"page"},{"location":"meshes/p4est_mesh/#P4est-based-mesh","page":"P4est-based mesh","title":"P4est-based mesh","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The P4estMesh is an unstructured, curvilinear, nonconforming mesh type for quadrilateral (2D) and hexahedral (3D) cells. It supports quadtree/octree-based adaptive mesh refinement (AMR) via the C library p4est. See AMRCallback for further information.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Due to its curvilinear nature, (numerical) fluxes need to implement methods dispatching on the normal::AbstractVector. Rotationally invariant equations such as the compressible Euler equations can use FluxRotated to wrap numerical fluxes implemented only for Cartesian meshes. This simplifies the re-use of existing functionality for the TreeMesh but is usually less efficient, cf. PR #550.","category":"page"},{"location":"meshes/p4est_mesh/#Construction-of-a-P4estMesh-from-an-Abaqus-file","page":"P4est-based mesh","title":"Construction of a P4estMesh from an Abaqus file","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"One available option to construct a P4estMesh is to read in an Abaqus (.inp) mesh file. We briefly describe the structure of this file, the conventions it uses, and how the mesh file is parsed to create an initial unstructured, curvilinear, and conforming mesh.","category":"page"},{"location":"meshes/p4est_mesh/#Mesh-in-two-spatial-dimensions","page":"P4est-based mesh","title":"Mesh in two spatial dimensions","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"For this discussion we use the following two-dimensional unstructured curved mesh with three elements:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"(Image: abaqus-2dmesh-docs)","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"We note that the corner and element connectivity information parsed from the Abaqus file creates a straight sided (linear) mesh. From this linear mesh there are two strategies available to make the mesh curvilinear:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Apply a mapping function to describe a transformation of the linear mesh to another physical domain. The mapping is approximated using interpolation polynomial of a user specified polynomial degree. The default value of this polynomial degree is 1 that corresponds to an uncurved geometry.\nHigh-order boundary information is available in the .inp mesh file because it was created with the HOHQMesh mesh generator, which is available via the Julia package HOHQMesh.jl. This information is used to create appropriate transfinite mappings during the mesh construction.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"We divide our discussion into two parts. The first part discusses the standard corner and element information contained in the .inp mesh file. The second part specifically deals with the mesh file parsing of an Abaqus file created by HOHQMesh.jl.","category":"page"},{"location":"meshes/p4est_mesh/#Mesh-file-header","page":"P4est-based mesh","title":"Mesh file header","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"An Abaqus .inp mesh file typically begins with a *Heading. Though optional, the *Heading is helpful to give users some information about the mesh described by the mesh file. In particular, a .inp mesh file created with HOHQMesh will contain the header","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*Heading\n File created by HOHQMesh","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"This heading is used to indicate to the mesh constructor which of the above mapping strategies to apply in order to create a curvilinear mesh. If the Abaqus file header is not present then the P4estMesh is created with the first strategy above.","category":"page"},{"location":"meshes/p4est_mesh/#corner-node-list","page":"P4est-based mesh","title":"List of corner nodes","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Next, prefaced with *NODE, comes a list of the physical (x,y,z) coordinates of all the corners. The first integer in the list of the corners provides its id number. Thus, for the two-dimensional example mesh this block of corner information is","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*NODE\n1, 1.0, -1.0, 0.0\n2, 3.0, 0.0, 0.0\n3, 1.0, 1.0, 0.0\n4, 2.0, 0.0, 0.0\n5, 0.0, 0.0, 0.0\n6, 3.0, 1.0, 0.0\n7, 3.0, -1.0, 0.0","category":"page"},{"location":"meshes/p4est_mesh/#element-list","page":"P4est-based mesh","title":"List of elements","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The element connectivity is given after the list of corners. The header for this information block is","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*ELEMENT, type=CPS4, ELSET=Surface1","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The Abaqus element type CPS4 corresponds to a quadrilateral element. Each quadrilateral element in the unstructured mesh is dictated by four corner points with indexing taken from the numbering given by the corner list above. The elements connect a set of four corner points (starting from the bottom left) in an anti-clockwise fashion; making the element right-handed. This element handedness is indicated using the circular arrow in the figure above. Just as with the corner list, the first integer in the element connectivity list indicates the element id number. Thus, the element connectivity list for the three element example mesh is","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*ELEMENT, type=CPS4, ELSET=Surface1\n1, 5, 1, 4, 3\n2, 4, 2, 6, 3\n3, 7, 2, 4, 1","category":"page"},{"location":"meshes/p4est_mesh/#Element-neighbor-connectivity","page":"P4est-based mesh","title":"Element neighbor connectivity","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The construction of the element neighbor ids and identifying physical boundary surfaces is done using functionality directly from the p4est library. For example, the neighbor connectivity is created in the mesh constructor using the wrapper read_inp_p4est function.","category":"page"},{"location":"meshes/p4est_mesh/#Encoding-of-boundaries","page":"P4est-based mesh","title":"Encoding of boundaries","text":"","category":"section"},{"location":"meshes/p4est_mesh/#HOHQMesh-boundary-information","page":"P4est-based mesh","title":"HOHQMesh boundary information","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"If present, any additional information in the mesh file that was created by HOHQMesh is prefaced with ** to make it an Abaqus comment. This ensures that the read in of the file by a standard Abaqus file parser, as done in the read_inp_p4est function, is done correctly.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The high-order, curved boundary information and labels of the physical boundary created by HOHQMesh is found below the comment line","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"** ***** HOHQMesh boundary information ***** **","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Next comes the polynomial degree that the mesh will use to represent any curved sides","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"** mesh polynomial degree = 8","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The mesh file then, again, provides the element connectivity as well as information for curved surfaces either interior to the domain or along the physical boundaries. A set of check digits are included directly below the four corner indexes to indicate whether the local surface index (-y, +x, +y, or -x) within the element is straight sided, 0, or is curved, 1. If the local surface is straight sided no additional information is necessary during the mesh file read in. But for any curved surfaces the mesh file provides (x,y,z) coordinate values in order to construct an interpolant of this surface with the mesh polynomial order at the Chebyshev-Gauss-Lobatto nodes. This list of (x,y,z) data will be given in the direction of the local coordinate system. Given below is the element curvature information for the example mesh:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"** 5 1 4 3\n** 0 0 1 1\n** 1.000000000000000 1.000000000000000 0.0\n** 1.024948365654583 0.934461926834452 0.0\n** 1.116583018200151 0.777350964621867 0.0\n** 1.295753434047077 0.606254343587194 0.0\n** 1.537500000000000 0.462500000000000 0.0\n** 1.768263070247418 0.329729152118310 0.0\n** 1.920916981799849 0.185149035378133 0.0\n** 1.986035130050921 0.054554577460044 0.0\n** 2.000000000000000 0.0 0.0\n** 0.0 0.0 0.0\n** 0.035513826946206 0.105291711848750 0.0\n** 0.148591270347399 0.317731556850611 0.0\n** 0.340010713990041 0.452219430075470 0.0\n** 0.575000000000000 0.462500000000000 0.0\n** 0.788022294598950 0.483764065630034 0.0\n** 0.926408729652601 0.644768443149389 0.0\n** 0.986453164464803 0.883724792445746 0.0\n** 1.000000000000000 1.000000000000000 0.0\n** 4 2 6 3\n** 0 0 0 1\n** 2.000000000000000 0.0 0.0\n** 1.986035130050921 0.054554577460044 0.0\n** 1.920916981799849 0.185149035378133 0.0\n** 1.768263070247418 0.329729152118310 0.0\n** 1.537500000000000 0.462500000000000 0.0\n** 1.295753434047077 0.606254343587194 0.0\n** 1.116583018200151 0.777350964621867 0.0\n** 1.024948365654583 0.934461926834452 0.0\n** 1.000000000000000 1.000000000000000 0.0\n** 7 2 4 1\n** 0 0 0 0","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The last piece of information provided by HOHQMesh are labels for the different surfaces of an element. These labels are useful to set boundary conditions along physical surfaces. The labels can be short descriptive words up to 32 characters in length. The label --- indicates an internal surface where no boundary condition is required.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"It is important to note that these labels are given in the following order according to the local surface index -x +x -y +y as required by the p4est library.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"** Bezier --- Slant ---\n** --- Right --- Top\n** Bottom --- Right ---","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"For completeness, we provide the entire Abaqus mesh file for the example mesh in the figure above:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*Heading\n File created by HOHQMesh\n*NODE\n1, 1.0, -1.0, 0.0\n2, 3.0, 0.0, 0.0\n3, 1.0, 1.0, 0.0\n4, 2.0, 0.0, 0.0\n5, 0.0, 0.0, 0.0\n6, 3.0, 1.0, 0.0\n7, 3.0, -1.0, 0.0\n*ELEMENT, type=CPS4, ELSET=Surface1\n1, 5, 1, 4, 3\n2, 4, 2, 6, 3\n3, 7, 2, 4, 1\n** ***** HOHQMesh boundary information ***** **\n** mesh polynomial degree = 8\n** 5 1 4 3\n** 0 0 1 1\n** 1.000000000000000 1.000000000000000 0.0\n** 1.024948365654583 0.934461926834452 0.0\n** 1.116583018200151 0.777350964621867 0.0\n** 1.295753434047077 0.606254343587194 0.0\n** 1.537500000000000 0.462500000000000 0.0\n** 1.768263070247418 0.329729152118310 0.0\n** 1.920916981799849 0.185149035378133 0.0\n** 1.986035130050921 0.054554577460044 0.0\n** 2.000000000000000 0.0 0.0\n** 0.0 0.0 0.0\n** 0.035513826946206 0.105291711848750 0.0\n** 0.148591270347399 0.317731556850611 0.0\n** 0.340010713990041 0.452219430075470 0.0\n** 0.575000000000000 0.462500000000000 0.0\n** 0.788022294598950 0.483764065630034 0.0\n** 0.926408729652601 0.644768443149389 0.0\n** 0.986453164464803 0.883724792445746 0.0\n** 1.000000000000000 1.000000000000000 0.0\n** 4 2 6 3\n** 0 0 0 1\n** 2.000000000000000 0.0 0.0\n** 1.986035130050921 0.054554577460044 0.0\n** 1.920916981799849 0.185149035378133 0.0\n** 1.768263070247418 0.329729152118310 0.0\n** 1.537500000000000 0.462500000000000 0.0\n** 1.295753434047077 0.606254343587194 0.0\n** 1.116583018200151 0.777350964621867 0.0\n** 1.024948365654583 0.934461926834452 0.0\n** 1.000000000000000 1.000000000000000 0.0\n** 7 2 4 1\n** 0 0 0 0\n** Bezier --- Slant ---\n** --- Right --- Top\n** Bottom --- Right ---","category":"page"},{"location":"meshes/p4est_mesh/#Standard-Abaqus-format-boundary-information","page":"P4est-based mesh","title":"Standard Abaqus format boundary information","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"As an alternative to an Abaqus mesh generated by HOHQMesh, .inp files with boundary information encoded as nodesets *NSET,NSET= can be used to construct a p4est mesh. This is especially useful for usage of existing meshes (consisting of bilinear elements) which could stem from the popular gmsh meshing software.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"In addition to the list of nodes and elements given above, there are nodesets of the form ","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*NSET,NSET=PhysicalLine1\n1, 4, 52, 53, 54, 55, 56, 57, 58, ","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"present which are used to associate the edges defined through their corner nodes with a label. In this case it is called PhysicalLine1. By looping over every element and its associated edges, consisting of two nodes, we query the read in NSETs if the current node pair is present.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"To prevent that every nodeset following *NSET,NSET= is treated as a boundary, the user must supply a boundary_symbols keyword to the P4estMesh constructor:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"boundary_symbols = [:PhysicalLine1]\n\nmesh = P4estMesh{2}(mesh_file, polydeg = polydeg, boundary_symbols = boundary_symbols)","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"By doing so, only nodesets with a label present in boundary_symbols are treated as physical boundaries. Other nodesets that could be used for diagnostics are not treated as external boundaries. Note that there is a leading colon : compared to the label in the .inp mesh file. This is required to turn the label into a Symbol. Important: In Julia, a symbol cannot contain a hyphen/dash -, i.e., :BC-1 is not a valid symbol. Keep this in mind when importing boundaries, you might have to convert hyphens/dashes - to underscores _ in the .inp mesh file, i.e., BC_1 instead of BC-1.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"A 2D example for this mesh, which is read-in for an unstructured mesh file created with gmsh, is presented in examples/p4est_2d_dgsem/elixir_euler_NACA6412airfoil_mach2.jl.","category":"page"},{"location":"meshes/p4est_mesh/#Mesh-in-three-spatial-dimensions","page":"P4est-based mesh","title":"Mesh in three spatial dimensions","text":"","category":"section"},{"location":"meshes/p4est_mesh/#HOHQMesh-Extended-Abaqus-format","page":"P4est-based mesh","title":"HOHQMesh-Extended Abaqus format","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The 3D Abaqus file format with high-order boundary information from HOHQMesh is very similar to the 2D version discussed above. There are only three changes:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"The element connectivity would be given in terms of the eight corners that define a hexahedron. The corners are numbered as shown in the figure below. The header of the element list changes to be\n*ELEMENT, type=C3D8, ELSET=Volume1\nwhere C3D8 corresponds to a Abaqus hexahedral element.\nThere are six check digits included directly below the eight corner indexes to indicate whether the local face within the element is straight sided, 0, or is curved, 1. For curved faces (x,y,z) coordinate values are available in order to construct an face interpolant with the mesh polynomial order at the Chebyshev-Gauss-Lobatto nodes.\nThe boundary labels are given in the following order according to the local surface index -x +x -y +y -z +z as required by the p4est library.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"For completeness, we also give a short description and derivation of the three-dimensional transfinite mapping formulas used to compute the physical coordinates mathbfx=(xyz) of a (possibly curved) hexahedral element give the reference coordinates boldsymbolxi = (xi eta zeta) which lie in -11^3. That is, we will create an expression mathbfx= mathbfX(boldsymbolxi).","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Below we provide a sketch of a single hexahedral element with curved faces. This is done to introduce the numbering conventions for corners, edges, and faces of the element.","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"(Image: abaqus-3dmesh-docs)","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"When the hexahedron is a straight sided (linear) element we compute the transfinite mapping directly from the element corner points according to","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"beginaligned\nmathbfX_linear(boldsymbolxi) = frac18quad mathbfx_1(1-xi)(1-eta)(1-zeta)\n + mathbfx_2(1+xi)(1-eta)(1-zeta)-015cm\n qquad + mathbfx_3(1+xi)(1+eta)(1-zeta)\n + mathbfx_4(1-xi)(1+eta)(1-zeta) \n qquad + mathbfx_5(1-xi)(1-eta)(1+zeta)\n + mathbfx_6(1+xi)(1-eta)(1+zeta) \n qquad + mathbfx_7(1+xi)(1+eta)(1+zeta)\n + mathbfx_8(1-xi)(1+eta)(1+zeta)quad\nendaligned","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Next, we create a transfinite mapping function, mathbfX(boldsymbolxi), for a hexahedron that has one or more curved faces. For this we assume that have a set of six interpolating polynomials Gamma_i_i=1^6 that approximate the faces. The interpolating polynomial for any curved faces is provided by the information in a HOHQMesh Abaqus mesh file or is constructed on the fly via a bi-linear interpolation routine for any linear faces. Explicitly, these six face interpolation polynomials depend on the computational coordinates boldsymbolxi as follows","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":" beginaligned\n Gamma_1(xi zeta) quad quad Gamma_3(xi eta) quad quad Gamma_4(eta zeta)01cm\n Gamma_2(xi zeta) quad quad Gamma_5(xi eta) quad quad Gamma_6(eta zeta)\n endaligned","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"To determine the form of the mapping we first create linear interpolations between two opposing faces, e.g., Gamma_3 and Gamma_5 and sum them together to have","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"beginaligned\n boldsymbolSigma(boldsymbolxi) = frac12quad(1-xi)Gamma_6(etazeta) + (1+xi)Gamma_4(etazeta) -015cm\n qquad+ (1-eta)Gamma_1(xizeta) + (1+eta)Gamma_2(xizeta) -015cm\n qquad +(1-zeta)Gamma_3(xieta) + (1+zeta)Gamma_5(xieta)quad\nendaligned","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Unfortunately, the linear interpolations boldsymbolSigma(boldsymbolxi) no longer match at the faces, e.g., evaluating at eta = -1 we have","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"boldsymbolSigma(xi-1zeta) = Gamma_1(xizeta) + frac12(1-xi)Gamma_6(-1zeta) + (1+xi)Gamma_4(-1zeta)\n +(1-zeta)Gamma_3(xi-1) + (1+zeta)Gamma_5(xi-1)","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"which is the desired face Gamma_1(xizeta) plus four edge error terms. Analogous edge error terms occur at the other faces evaluating boldsymbolSigma(boldsymbolxi) at eta=1, xi=pm 1, and zeta=pm 1. In order to match the faces, we subtract a linear interpolant in the xi, eta, and zeta directions of the edge error terms, e.g., the terms in braces in the above equation. So, continuing the example above, the correction term to be subtracted for face Gamma_1 to match would be","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"left(frac1-eta2right) bigg frac12 (1-xi)Gamma_6(-1zeta) + (1+xi)Gamma_4(-1zeta)+(1-zeta)Gamma_3(xi-1)\n + (1+zeta)Gamma_5(xi-1) bigg","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"For clarity, and to allow an easier comparison to the implementation, we introduce auxiliary notation for the 12 edge values present in the complete correction term. That is, for given values of xi, eta, and zeta we have","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":" beginaligned\n textttedge_1 = Gamma_1(xi -1) quad quad textttedge_5 = Gamma_2(xi -1) quad quad textttedge_9 = Gamma_6(eta -1)01cm\n textttedge_2 = Gamma_1(1 zeta) quad quadtextttedge_6 = Gamma_2(1 zeta) quad quad textttedge_10 = Gamma_4(eta -1)01cm\n textttedge_3 = Gamma_1(xi 1) quad quad textttedge_7 = Gamma_2(xi 1) quad quad textttedge_11 = Gamma_4(eta 1)01cm\n textttedge_4 = Gamma_1(-1 zeta) quad quad textttedge_8 = Gamma_2(-1 zeta) quad quad textttedge_12 = Gamma_6(eta 1)\n endaligned","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"With this notation for the edge terms (and after some algebraic manipulation) we write the complete edge correction term, mathcalC_textttedge(boldsymbolxi), as","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"beginaligned\nmathcalC_textttedge(boldsymbolxi) = frac14quad (1-eta)(1-zeta)textttedge_1-015cm\n qquad + (1+xi)(1-eta)textttedge_2 \n qquad + (1-eta)(1+zeta)textttedge_3 \n qquad + (1-xi)(1-eta)textttedge_4 \n qquad + (1+eta)(1-zeta)textttedge_5 \n qquad + (1+xi)(1+eta)textttedge_6 \n qquad + (1+eta)(1+zeta)textttedge_7 \n qquad + (1-xi)(1+eta)textttedge_8 \n qquad + (1-xi)(1-zeta)textttedge_9 \n qquad + (1+xi)(1-zeta)textttedge_10 \n qquad + (1+xi)(1+zeta)textttedge_11 \n qquad + (1-xi)(1+zeta)textttedge_12quad\nendaligned","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"However, subtracting the edge correction terms mathcalC_textttedge(boldsymbolxi) from boldsymbolSigma(boldsymbolxi) removes the interior element contributions twice. Thus, to complete the construction of the transfinite mapping mathbfX(boldsymbolxi) we add the transfinite map of the straight sided hexahedral element to find","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"mathbfX(boldsymbolxi) = boldsymbolSigma(boldsymbolxi)\n - mathcalC_textttedge(boldsymbolxi)\n + mathbfX_linear(boldsymbolxi)","category":"page"},{"location":"meshes/p4est_mesh/#Construction-from-standard-Abaqus","page":"P4est-based mesh","title":"Construction from standard Abaqus","text":"","category":"section"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"Also for a mesh in standard Abaqus format there are no qualitative changes when going from 2D to 3D. The most notable difference is that boundaries are formed in 3D by faces defined by four nodes while in 2D boundaries are edges consisting of two elements. A simple mesh file, which is used also in examples/p4est_3d_dgsem/elixir_euler_free_stream_boundaries.jl, is given below:","category":"page"},{"location":"meshes/p4est_mesh/","page":"P4est-based mesh","title":"P4est-based mesh","text":"*Heading\n\n*NODE\n1, -2, 0, 0\n2, -1, 0, 0\n3, -1, 1, 0\n4, -2, 1, 0\n5, -2, 0, 1\n6, -1, 0, 1\n7, -1, 1, 1\n8, -2, 1, 1\n9, -1.75, 1, 0\n10, -1.5, 1, 0\n11, -1.25, 1, 0\n12, -1, 0.75000000000035, 0\n13, -1, 0.50000000000206, 0\n14, -1, 0.25000000000104, 0\n15, -1.25, 0, 0\n16, -1.5, 0, 0\n17, -1.75, 0, 0\n18, -2, 0.24999999999941, 0\n19, -2, 0.49999999999869, 0\n20, -2, 0.74999999999934, 0\n21, -1.75, 0, 1\n22, -1.5, 0, 1\n23, -1.25, 0, 1\n24, -1, 0.24999999999941, 1\n25, -1, 0.49999999999869, 1\n26, -1, 0.74999999999934, 1\n27, -1.25, 1, 1\n28, -1.5, 1, 1\n29, -1.75, 1, 1\n30, -2, 0.75000000000035, 1\n31, -2, 0.50000000000206, 1\n32, -2, 0.25000000000104, 1\n33, -2, 0, 0.24999999999941\n34, -2, 0, 0.49999999999869\n35, -2, 0, 0.74999999999934\n36, -2, 1, 0.24999999999941\n37, -2, 1, 0.49999999999869\n38, -2, 1, 0.74999999999934\n39, -1, 0, 0.24999999999941\n40, -1, 0, 0.49999999999869\n41, -1, 0, 0.74999999999934\n42, -1, 1, 0.24999999999941\n43, -1, 1, 0.49999999999869\n44, -1, 1, 0.74999999999934\n45, -1.25, 0.25000000000063, 0\n46, -1.25, 0.50000000000122, 0\n47, -1.25, 0.7500000000001, 0\n48, -1.5, 0.25000000000023, 0\n49, -1.5, 0.50000000000038, 0\n50, -1.5, 0.74999999999984, 0\n51, -1.75, 0.24999999999982, 0\n52, -1.75, 0.49999999999953, 0\n53, -1.75, 0.74999999999959, 0\n54, -1.75, 0.25000000000063, 1\n55, -1.75, 0.50000000000122, 1\n56, -1.75, 0.7500000000001, 1\n57, -1.5, 0.25000000000023, 1\n58, -1.5, 0.50000000000038, 1\n59, -1.5, 0.74999999999984, 1\n60, -1.25, 0.24999999999982, 1\n61, -1.25, 0.49999999999953, 1\n62, -1.25, 0.74999999999959, 1\n63, -2, 0.24999999999982, 0.24999999999941\n64, -2, 0.49999999999953, 0.24999999999941\n65, -2, 0.74999999999959, 0.24999999999941\n66, -2, 0.25000000000023, 0.49999999999869\n67, -2, 0.50000000000038, 0.49999999999869\n68, -2, 0.74999999999984, 0.49999999999869\n69, -2, 0.25000000000063, 0.74999999999934\n70, -2, 0.50000000000122, 0.74999999999934\n71, -2, 0.7500000000001, 0.74999999999934\n72, -1.25, 1, 0.74999999999934\n73, -1.25, 1, 0.49999999999869\n74, -1.25, 1, 0.24999999999941\n75, -1.5, 1, 0.74999999999934\n76, -1.5, 1, 0.49999999999869\n77, -1.5, 1, 0.24999999999941\n78, -1.75, 1, 0.74999999999934\n79, -1.75, 1, 0.49999999999869\n80, -1.75, 1, 0.24999999999941\n81, -1, 0.25000000000063, 0.24999999999941\n82, -1, 0.50000000000122, 0.24999999999941\n83, -1, 0.7500000000001, 0.24999999999941\n84, -1, 0.25000000000023, 0.49999999999869\n85, -1, 0.50000000000038, 0.49999999999869\n86, -1, 0.74999999999984, 0.49999999999869\n87, -1, 0.24999999999982, 0.74999999999934\n88, -1, 0.49999999999953, 0.74999999999934\n89, -1, 0.74999999999959, 0.74999999999934\n90, -1.75, 0, 0.74999999999934\n91, -1.75, 0, 0.49999999999869\n92, -1.75, 0, 0.24999999999941\n93, -1.5, 0, 0.74999999999934\n94, -1.5, 0, 0.49999999999869\n95, -1.5, 0, 0.24999999999941\n96, -1.25, 0, 0.74999999999934\n97, -1.25, 0, 0.49999999999869\n98, -1.25, 0, 0.24999999999941\n99, -1.75, 0.25000000000043, 0.74999999999934\n100, -1.75, 0.25000000000023, 0.49999999999869\n101, -1.75, 0.25000000000002, 0.24999999999941\n102, -1.75, 0.5000000000008, 0.74999999999934\n103, -1.75, 0.50000000000038, 0.49999999999869\n104, -1.75, 0.49999999999995, 0.24999999999941\n105, -1.75, 0.74999999999997, 0.74999999999934\n106, -1.75, 0.74999999999984, 0.49999999999869\n107, -1.75, 0.74999999999972, 0.24999999999941\n108, -1.5, 0.25000000000023, 0.74999999999934\n109, -1.5, 0.25000000000023, 0.49999999999869\n110, -1.5, 0.25000000000023, 0.24999999999941\n111, -1.5, 0.50000000000038, 0.74999999999934\n112, -1.5, 0.50000000000038, 0.49999999999869\n113, -1.5, 0.50000000000038, 0.24999999999941\n114, -1.5, 0.74999999999984, 0.74999999999934\n115, -1.5, 0.74999999999984, 0.49999999999869\n116, -1.5, 0.74999999999984, 0.24999999999941\n117, -1.25, 0.25000000000002, 0.74999999999934\n118, -1.25, 0.25000000000023, 0.49999999999869\n119, -1.25, 0.25000000000043, 0.24999999999941\n120, -1.25, 0.49999999999995, 0.74999999999934\n121, -1.25, 0.50000000000038, 0.49999999999869\n122, -1.25, 0.5000000000008, 0.24999999999941\n123, -1.25, 0.74999999999972, 0.74999999999934\n124, -1.25, 0.74999999999984, 0.49999999999869\n125, -1.25, 0.74999999999997, 0.24999999999941\n******* E L E M E N T S *************\n*ELEMENT, type=C3D8, ELSET=Volume1\n153, 54, 21, 5, 32, 99, 90, 35, 69\n154, 99, 90, 35, 69, 100, 91, 34, 66\n155, 100, 91, 34, 66, 101, 92, 33, 63\n156, 101, 92, 33, 63, 51, 17, 1, 18\n157, 55, 54, 32, 31, 102, 99, 69, 70\n158, 102, 99, 69, 70, 103, 100, 66, 67\n159, 103, 100, 66, 67, 104, 101, 63, 64\n160, 104, 101, 63, 64, 52, 51, 18, 19\n161, 56, 55, 31, 30, 105, 102, 70, 71\n162, 105, 102, 70, 71, 106, 103, 67, 68\n163, 106, 103, 67, 68, 107, 104, 64, 65\n164, 107, 104, 64, 65, 53, 52, 19, 20\n165, 29, 56, 30, 8, 78, 105, 71, 38\n166, 78, 105, 71, 38, 79, 106, 68, 37\n167, 79, 106, 68, 37, 80, 107, 65, 36\n168, 80, 107, 65, 36, 9, 53, 20, 4\n169, 57, 22, 21, 54, 108, 93, 90, 99\n170, 108, 93, 90, 99, 109, 94, 91, 100\n171, 109, 94, 91, 100, 110, 95, 92, 101\n172, 110, 95, 92, 101, 48, 16, 17, 51\n173, 58, 57, 54, 55, 111, 108, 99, 102\n174, 111, 108, 99, 102, 112, 109, 100, 103\n175, 112, 109, 100, 103, 113, 110, 101, 104\n176, 113, 110, 101, 104, 49, 48, 51, 52\n177, 59, 58, 55, 56, 114, 111, 102, 105\n178, 114, 111, 102, 105, 115, 112, 103, 106\n179, 115, 112, 103, 106, 116, 113, 104, 107\n180, 116, 113, 104, 107, 50, 49, 52, 53\n181, 28, 59, 56, 29, 75, 114, 105, 78\n182, 75, 114, 105, 78, 76, 115, 106, 79\n183, 76, 115, 106, 79, 77, 116, 107, 80\n184, 77, 116, 107, 80, 10, 50, 53, 9\n185, 60, 23, 22, 57, 117, 96, 93, 108\n186, 117, 96, 93, 108, 118, 97, 94, 109\n187, 118, 97, 94, 109, 119, 98, 95, 110\n188, 119, 98, 95, 110, 45, 15, 16, 48\n189, 61, 60, 57, 58, 120, 117, 108, 111\n190, 120, 117, 108, 111, 121, 118, 109, 112\n191, 121, 118, 109, 112, 122, 119, 110, 113\n192, 122, 119, 110, 113, 46, 45, 48, 49\n193, 62, 61, 58, 59, 123, 120, 111, 114\n194, 123, 120, 111, 114, 124, 121, 112, 115\n195, 124, 121, 112, 115, 125, 122, 113, 116\n196, 125, 122, 113, 116, 47, 46, 49, 50\n197, 27, 62, 59, 28, 72, 123, 114, 75\n198, 72, 123, 114, 75, 73, 124, 115, 76\n199, 73, 124, 115, 76, 74, 125, 116, 77\n200, 74, 125, 116, 77, 11, 47, 50, 10\n201, 24, 6, 23, 60, 87, 41, 96, 117\n202, 87, 41, 96, 117, 84, 40, 97, 118\n203, 84, 40, 97, 118, 81, 39, 98, 119\n204, 81, 39, 98, 119, 14, 2, 15, 45\n205, 25, 24, 60, 61, 88, 87, 117, 120\n206, 88, 87, 117, 120, 85, 84, 118, 121\n207, 85, 84, 118, 121, 82, 81, 119, 122\n208, 82, 81, 119, 122, 13, 14, 45, 46\n209, 26, 25, 61, 62, 89, 88, 120, 123\n210, 89, 88, 120, 123, 86, 85, 121, 124\n211, 86, 85, 121, 124, 83, 82, 122, 125\n212, 83, 82, 122, 125, 12, 13, 46, 47\n213, 7, 26, 62, 27, 44, 89, 123, 72\n214, 44, 89, 123, 72, 43, 86, 124, 73\n215, 43, 86, 124, 73, 42, 83, 125, 74\n216, 42, 83, 125, 74, 3, 12, 47, 11\n*NSET,NSET=PhysicalSurface1\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \n11, 12, 13, 14, 15, 16, 17, 18, 19, 20, \n21, 22, 23, 24, 25, 26, 27, 28, 29, 30, \n31, 32, 33, 34, 35, 36, 37, 38, 45, 46, \n47, 48, 49, 50, 51, 52, 53, 54, 55, 56, \n57, 58, 59, 60, 61, 62, 63, 64, 65, 66, \n67, 68, 69, 70, 71, \n*NSET,NSET=PhysicalSurface2\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \n11, 12, 13, 14, 15, 16, 17, 21, 22, 23, \n24, 25, 26, 27, 28, 29, 33, 34, 35, 36, \n37, 38, 39, 40, 41, 42, 43, 44, 72, 73, \n74, 75, 76, 77, 78, 79, 80, 81, 82, 83, \n84, 85, 86, 87, 88, 89, 90, 91, 92, 93, \n94, 95, 96, 97, 98, ","category":"page"},{"location":"troubleshooting/#Troubleshooting-and-FAQ","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"","category":"section"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"In general, Trixi.jl works best with the newest Julia release and up-to-date dependencies. If something does not work as expected, try updating your installed Julia packages via the package manager, e.g., by running","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"julia> import Pkg; Pkg.update()","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"If you do not use the latest stable release of Julia from the official website, consider updating your Julia installation.","category":"page"},{"location":"troubleshooting/#old-release","page":"Troubleshooting and FAQ","title":"Installing Trixi.jl as a package only provides an older release","text":"","category":"section"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"Trixi.jl requires fairly recent versions of several of its dependencies, which sometimes causes issues when other installed packages have conflicting version requirements. In this case, Julia's package manager Pkg will try to handle this gracefully by going back in history until it finds a Trixi.jl release whose version requirements can be met, resulting in an older - and usually outdated - version of Trixi.jl being installed.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"The following example illustrates this issue:","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"The current Trixi.jl release v0.3.6 requires package Foo with a minimum version of v0.2.\nAn older Trixi.jl release v0.2.1 requires package Foo only with a minimum version of v0.1.\nA user has already installed package Bar, which itself requires Foo with a maximum version of v0.1.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"In this case, installing Trixi.jl via Pkg will result in version v0.2.1 to be installed instead of the current release v0.3.6. That is, a specific release of Trixi.jl may not be installable if it has a dependency with a higher minimum version that at the same time is restricted to a lower maximum version by another installed package.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"You can check whether an outdated version of Trixi.jl is installed by executing","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"julia> import Pkg; Pkg.update(\"Trixi\"); Pkg.status(\"Trixi\")","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"in the REPL and comparing the reported Trixi.jl version with the version of the latest release. If the versions differ, you can confirm that it is due to a version conflict by forcing Pkg to install the latest Trixi.jl release, where version is the current release:","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"julia> Pkg.add(name=\"Trixi\", version=\"0.3.6\")","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"In case of a conflict, the command above will produce an error that informs you about the offending packages, similar to the following:","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":" Updating registry at `~/.julia/registries/General`\n Resolving package versions...\nERROR: Unsatisfiable requirements detected for package DataStructures [864edb3b]:\n DataStructures [864edb3b] log:\n ├─possible versions are: [0.9.0, 0.10.0, 0.11.0-0.11.1, 0.12.0, 0.13.0, 0.14.0-0.14.1, 0.15.0, 0.16.1, 0.17.0-0.17.20, 0.18.0-0.18.8] or uninstalled\n ├─restricted by compatibility requirements with DiffEqCallbacks [459566f4] to versions: 0.18.0-0.18.8\n │ └─DiffEqCallbacks [459566f4] log:\n │ ├─possible versions are: [2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0-2.5.2, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.10.0, 2.11.0, 2.12.0-2.12.1, 2.13.0-2.13.5, 2.14.0-2.14.1, 2.15.0] or uninstalled\n │ ├─restricted by compatibility requirements with Trixi [a7f1ee26] to versions: [2.14.0-2.14.1, 2.15.0]\n │ │ └─Trixi [a7f1ee26] log:\n │ │ ├─possible versions are: [0.1.0-0.1.2, 0.2.0-0.2.6, 0.3.0-0.3.6] or uninstalled\n │ │ └─restricted to versions 0.3.6 by an explicit requirement, leaving only versions 0.3.6\n │ └─restricted by compatibility requirements with StaticArrays [90137ffa] to versions: 2.15.0 or uninstalled, leaving only versions: 2.15.0\n │ └─StaticArrays [90137ffa] log:\n │ ├─possible versions are: [0.8.0-0.8.3, 0.9.0-0.9.2, 0.10.0, 0.10.2-0.10.3, 0.11.0-0.11.1, 0.12.0-0.12.5, 1.0.0-1.0.1] or uninstalled\n │ └─restricted by compatibility requirements with Trixi [a7f1ee26] to versions: 1.0.0-1.0.1\n │ └─Trixi [a7f1ee26] log: see above\n └─restricted by compatibility requirements with JLD2 [033835bb] to versions: [0.9.0, 0.10.0, 0.11.0-0.11.1, 0.12.0, 0.13.0, 0.14.0-0.14.1, 0.15.0, 0.16.1, 0.17.0-0.17.20] — no versions left\n └─JLD2 [033835bb] log:\n ├─possible versions are: [0.1.0-0.1.14, 0.2.0-0.2.4, 0.3.0-0.3.1] or uninstalled\n └─restricted by compatibility requirements with BinaryBuilder [12aac903] to versions: 0.1.0-0.1.14\n └─BinaryBuilder [12aac903] log:\n ├─possible versions are: [0.1.0-0.1.2, 0.1.4, 0.2.0-0.2.6] or uninstalled\n └─restricted to versions * by an explicit requirement, leaving only versions [0.1.0-0.1.2, 0.1.4, 0.2.0-0.2.6]","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"From the error message, we can see that ultimately BinaryBuilder is the problem here: It restricts the package DataStructures to version v0.17 (via its dependency JLD2), while Trixi.jl requires at least v0.18 (via its dependency DiffEqCallbacks). Following the official Pkg documentation, there are a number of things you can try to fix such errors:","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"Try updating all packages with julia -e 'using Pkg; Pkg.update()'. A newer version of the problematic package may exist that has updated version requirements.\nRemove the offending package. Running\njulia> import Pkg; Pkg.rm(\"BinaryBuilder\"); Pkg.update(); Pkg.status()\nin the REPL will remove BinaryBuilder and (hopefully) update Trixi.jl to the latest version.\nReport the versioning issue to us and/or the development repository of the conflicting package. Maybe it is possible to lift the version restrictions such that both packages can live side by side.\nInstead of installing Trixi.jl and conflicting packages in the same (default) environment, consider creating new environments/projects and install only packages required for the specific tasks, as explained in the official Pkg documentation. For example, if you use Trixi.jl for a research project (Bachelor/Master thesis or a paper), you should create a new Julia project/environment for that research and add Trixi.jl as a dependency. If you track all your code and the Project.toml, Manifest.toml files (generated by Pkg) in a version control system such as git, you can make your research easily reproducible (if you also record the version of Julia you are using and leave some comments for others who do not know what you are trying to do, including your future self 😉).","category":"page"},{"location":"troubleshooting/#font-issues","page":"Troubleshooting and FAQ","title":"There are many questions marks and weird symbols in the output of Trixi.jl","text":"","category":"section"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"This probably means that the default font used by your operating system does not support enough Unicode symbols. Try installing a modern font with decent unicode support, e.g. JuliaMono. Detailed installation instructions are available there.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"This problems affects users of Mac OS particularly often. At the time of writing, installing JuliaMono is as simple as","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"$ brew tap homebrew/cask-fonts\n$ brew install --cask font-juliamono","category":"page"},{"location":"troubleshooting/#There-are-no-timing-results-of-the-initial-mesh-creation","page":"Troubleshooting and FAQ","title":"There are no timing results of the initial mesh creation","text":"","category":"section"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"By default, the SummaryCallback resets the timer used internally by Trixi.jl when it is initialized (when solve is called). If this step needs to be timed, e.g. to debug performance problems, explicit timings can be used as follows.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"using Trixi\n\nbegin\n Trixi.reset_timer!(Trixi.timer())\n\n equations = LinearScalarAdvectionEquation2D(0.2, -0.7)\n mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), n_cells_max=10^5, initial_refinement_level=5)\n solver = DGSEM(3)\n semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, solver)\n\n Trixi.print_timer(Trixi.timer())\nend","category":"page"},{"location":"troubleshooting/#MPI-ranks-are-assigned-zero-cells-in-[P4estMesh](@ref)-even-though-there-are-enough-cells","page":"Troubleshooting and FAQ","title":"MPI ranks are assigned zero cells in P4estMesh even though there are enough cells","text":"","category":"section"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"The P4estMesh allows one to coarsen the mesh by default. When Trixi.jl is parallelized with multiple MPI ranks, this has the consequence that sibling cells (i.e., child cells with the same parent cell) are kept on the same MPI rank to be able to coarsen them easily. This might cause an unbalanced distribution of cells on different ranks. For 2D meshes, this also means that initially each rank will at least own 4 cells, and for 3D meshes, initially each rank will at least own 8 cells. See issue #1329.","category":"page"},{"location":"troubleshooting/#Installing-and-updating-everything-takes-a-lot-of-time","page":"Troubleshooting and FAQ","title":"Installing and updating everything takes a lot of time","text":"","category":"section"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"Julia compiles code to get good (C/Fortran-like) performance. At the same time, Julia provides a dynamic environment and usually compiles code just before using it. Over time, Julia has improved its caching infrastructure, allowing to store and reuse more results from (pre-)compilation. This often results in an increased time to install/update packages, in particular when updating to Julia v1.8 or v1.9 from older versions.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"Some packages used together with Trixi.jl provide options to configure the amount of precompilation. For example, OrdinaryDiffEq.jl precompiles many ODE solvers for a good runtime experience of average users. Currently, Trixi.jl does not use all of the available solvers. Thus, you can save some time at every update by setting their precompilation options.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"At the time of writing, this could look as follows. First, you need to activate the environment where you have installed OrdinaryDiffEq.jl. Then, you need to execute the following Julia code.","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"using Preferences, UUIDs\nlet uuid = UUID(\"1dea7af3-3e70-54e6-95c3-0bf5283fa5ed\")\n set_preferences!(uuid, \"PrecompileAutoSpecialize\" => false)\n set_preferences!(uuid, \"PrecompileAutoSwitch\" => false)\n set_preferences!(uuid, \"PrecompileDefaultSpecialize\" => true)\n set_preferences!(uuid, \"PrecompileFunctionWrapperSpecialize\" => false)\n set_preferences!(uuid, \"PrecompileLowStorage\" => true)\n set_preferences!(uuid, \"PrecompileNoSpecialize\" => false)\n set_preferences!(uuid, \"PrecompileNonStiff\" => true)\n set_preferences!(uuid, \"PrecompileStiff\" => false)\nend","category":"page"},{"location":"troubleshooting/","page":"Troubleshooting and FAQ","title":"Troubleshooting and FAQ","text":"This disables precompilation of all implicit methods. This should usually not affect the runtime latency with Trixi.jl since most setups use explicit time integration methods.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"EditURL = \"../../literate/src/files/shock_capturing.jl\"","category":"page"},{"location":"tutorials/shock_capturing/#shock_capturing","page":"5 Shock capturing with flux differencing and stage limiter","title":"5: Shock capturing with flux differencing and stage limiter","text":"","category":"section"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"This tutorial contains a short summary of the idea of shock capturing for DGSEM with flux differencing and its implementation in Trixi.jl. In the second part, an implementation of a positivity preserving limiter is added to the simulation.","category":"page"},{"location":"tutorials/shock_capturing/#Shock-capturing-with-flux-differencing","page":"5 Shock capturing with flux differencing and stage limiter","title":"Shock capturing with flux differencing","text":"","category":"section"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"The following rough explanation is on a very basic level. More information about an entropy stable shock-capturing strategy for DGSEM discretizations of advection dominated problems, such as the compressible Euler equations or the compressible Navier-Stokes equations, can be found in Hennemann et al. (2021). In Rueda-Ramírez et al. (2021) you find the extension to the systems with non-conservative terms, such as the compressible magnetohydrodynamics (MHD) equations.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"The strategy for a shock-capturing method presented by Hennemann et al. is based on a hybrid blending of a high-order DG method with a low-order variant. The low-order subcell finite volume (FV) method is created directly with the Legendre-Gauss-Lobatto (LGL) nodes already used for the high-order DGSEM. Then, the final method is a convex combination with regulating indicator alpha of these two methods.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Since the surface integral is equal for both the DG and the subcell FV method, only the volume integral divides between the two methods.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"This strategy for the volume integral is implemented in Trixi.jl under the name of VolumeIntegralShockCapturingHG with the three parameters of the indicator and the volume fluxes for the DG and the subcell FV method.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Note, that the DG method is based on the flux differencing formulation. Hence, you have to use a two-point flux, such as flux_ranocha, flux_shima_etal, flux_chandrashekar or flux_kennedy_gruber, for the DG volume flux. We would recommend to use the entropy conserving flux flux_ranocha by Ranocha (2018) for the compressible Euler equations.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;\n volume_flux_dg=volume_flux_dg,\n volume_flux_fv=volume_flux_fv)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We now focus on a choice of the shock capturing indicator indicator_sc. A possible indicator is alpha_HG presented by Hennemann et al. (p.10), which depends on the current approximation with modal coefficients m_j_j=0^N of a given variable.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"The indicator is calculated for every DG element by itself. First, we calculate a smooth alpha by","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"alpha = frac11+exp(-frac-smathbbT(mathbbE-mathbbT))","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"with the total energy mathbbE=maxbig(fracm_N^2sum_j=0^N m_j^2 fracm_N-1^2sum_j=0^N-1 m_j^2big), threshold mathbbT= 05 * 10^-18*(N+1)^14 and parameter s=lnbig(frac1-0000100001big)approx 921024.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"For computational efficiency, alpha_min is introduced and used for","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"tildealpha = begincases\n0 textif alphaalpha_min\nalpha textif alpha_minleq alpha leq 1- alpha_min\n1 textif 1-alpha_minalpha\nendcases","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Moreover, the parameter alpha_max sets a maximal value for alpha by","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"alpha = mintildealpha alpha_max","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"This allows to control the maximal dissipation.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"To remove numerical artifact the final indicator is smoothed with all the neighboring elements' indicators. This is activated with alpha_smooth=true.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"alpha_HG = max_E alpha 05 * alpha_E","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"where E are all elements sharing a face with the current element.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Furthermore, you can specify the variable used for the calculation. For instance you can choose density, pressure or both with density_pressure for the compressible Euler equations. For every equation there is also the option to use the first conservation variable with first.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"This indicator is implemented in Trixi.jl and called IndicatorHennemannGassner with the parameters equations, basis, alpha_max, alpha_min, alpha_smooth and variable.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"indicator_sc = IndicatorHennemannGassner(equations, basis,\n alpha_max=0.5,\n alpha_min=0.001,\n alpha_smooth=true,\n variable=variable)","category":"page"},{"location":"tutorials/shock_capturing/#Positivity-preserving-limiter","page":"5 Shock capturing with flux differencing and stage limiter","title":"Positivity preserving limiter","text":"","category":"section"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Some numerical solutions are physically meaningless, for instance negative values of pressure or density for the compressible Euler equations. This often results in crashed simulations since the calculation of numerical fluxes or stable time steps uses mathematical operations like roots or logarithms. One option to avoid these cases are a-posteriori positivity preserving limiters. Trixi.jl provides the fully-discrete positivity-preserving limiter of Zhang, Shu (2011).","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"It works the following way. For every passed (scalar) variable and for every DG element we calculate the minimal value value_min. If this value falls below the given threshold varepsilon, the approximation is slightly adapted such that the minimal value of the relevant variable lies now above the threshold.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"underlineu^new = theta * underlineu + (1-theta) * u_mean","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"where underlineu are the collected pointwise evaluation coefficients in element e and u_mean the integral mean of the quantity in e. The new coefficients are a convex combination of these two values with factor","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"theta = fracvalue_mean - varepsilonvalue_mean - value_min","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"where value_mean is the relevant variable evaluated for the mean value u_mean.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"The adapted approximation keeps the exact same mean value, but the relevant variable is now greater or equal the threshold varepsilon at every node in every element.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We specify the variables the way we did before for the shock capturing variables. For the compressible Euler equations density, pressure or the combined variable density_pressure are a reasonable choice.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"You can implement the limiter in Trixi.jl using PositivityPreservingLimiterZhangShu with parameters threshold and variables.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"stage_limiter! = PositivityPreservingLimiterZhangShu(thresholds=thresholds,\n variables=variables)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Then, the limiter is added to the time integration method in the solve function. For instance, like","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"CarpenterKennedy2N54(stage_limiter!, williamson_condition=false)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"or","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"SSPRK43(stage_limiter!).","category":"page"},{"location":"tutorials/shock_capturing/#Simulation-with-shock-capturing-and-positivity-preserving","page":"5 Shock capturing with flux differencing and stage limiter","title":"Simulation with shock capturing and positivity preserving","text":"","category":"section"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Now, we can run a simulation using the described methods of shock capturing and positivity preserving limiters. We want to give an example for the 2D compressible Euler equations.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"using OrdinaryDiffEq, Trixi\n\nequations = CompressibleEulerEquations2D(1.4)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"As our initial condition we use the Sedov blast wave setup.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"function initial_condition_sedov_blast_wave(x, t, equations::CompressibleEulerEquations2D)\n # Set up polar coordinates\n inicenter = SVector(0.0, 0.0)\n x_norm = x[1] - inicenter[1]\n y_norm = x[2] - inicenter[2]\n r = sqrt(x_norm^2 + y_norm^2)\n\n r0 = 0.21875 # = 3.5 * smallest dx (for domain length=4 and max-ref=6)\n # r0 = 0.5 # = more reasonable setup\n E = 1.0\n p0_inner = 3 * (equations.gamma - 1) * E / (3 * pi * r0^2)\n p0_outer = 1.0e-5 # = true Sedov setup\n # p0_outer = 1.0e-3 # = more reasonable setup\n\n # Calculate primitive variables\n rho = 1.0\n v1 = 0.0\n v2 = 0.0\n p = r > r0 ? p0_outer : p0_inner\n\n return prim2cons(SVector(rho, v1, v2, p), equations)\nend\ninitial_condition = initial_condition_sedov_blast_wave","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"basis = LobattoLegendreBasis(3)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We set the numerical fluxes and divide between the surface flux and the two volume fluxes for the DG and FV method. Here, we are using flux_lax_friedrichs and flux_ranocha.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"surface_flux = flux_lax_friedrichs\nvolume_flux = flux_ranocha","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Now, we specify the shock capturing indicator alpha.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We implement the described indicator of Hennemann, Gassner as explained above with parameters equations, basis, alpha_max, alpha_min, alpha_smooth and variable. Since density and pressure are the critical variables in this example, we use density_pressure = density * pressure = rho * p as indicator variable.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"indicator_sc = IndicatorHennemannGassner(equations, basis,\n alpha_max=0.5,\n alpha_min=0.001,\n alpha_smooth=true,\n variable=density_pressure)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"Now, we can use the defined fluxes and the indicator to implement the volume integral using shock capturing.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;\n volume_flux_dg=volume_flux,\n volume_flux_fv=surface_flux)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We finalize the discretization by implementing Trixi.jl's solver, mesh, semi and ode, while solver now has the extra parameter volume_integral.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"solver = DGSEM(basis, surface_flux, volume_integral)\n\ncoordinates_min = (-2.0, -2.0)\ncoordinates_max = ( 2.0, 2.0)\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=6,\n n_cells_max=10_000)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n\ntspan = (0.0, 1.0)\node = semidiscretize(semi, tspan);\nnothing #hide","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We add some callbacks to get an solution analysis and use a CFL-based time step size calculation.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"analysis_callback = AnalysisCallback(semi, interval=100)\n\nstepsize_callback = StepsizeCallback(cfl=0.8)\n\ncallbacks = CallbackSet(analysis_callback, stepsize_callback);\nnothing #hide","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"We now run the simulation using the positivity preserving limiter of Zhang and Shu for the variables density and pressure.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"stage_limiter! = PositivityPreservingLimiterZhangShu(thresholds=(5.0e-6, 5.0e-6),\n variables=(Trixi.density, pressure))\n\nsol = solve(ode, CarpenterKennedy2N54(stage_limiter!, williamson_condition=false),\n dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n save_everystep=false, callback=callbacks);\n\nusing Plots\nplot(sol)","category":"page"},{"location":"tutorials/shock_capturing/#Package-versions","page":"5 Shock capturing with flux differencing and stage limiter","title":"Package versions","text":"","category":"section"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"","category":"page"},{"location":"tutorials/shock_capturing/","page":"5 Shock capturing with flux differencing and stage limiter","title":"5 Shock capturing with flux differencing and stage limiter","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"EditURL = \"../../literate/src/files/DGMulti_1.jl\"","category":"page"},{"location":"tutorials/DGMulti_1/#DGMulti_1","page":"8 DG schemes via DGMulti solver","title":"8: DG schemes via DGMulti solver","text":"","category":"section"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"DGMulti is a DG solver that allows meshes with simplex elements. The basic idea and implementation of this solver is explained in section \"Meshes\". Here, we want to give some examples and a quick overview about the options with DGMulti.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"We start with a simple example we already used in the tutorial about flux differencing. There, we implemented a simulation with initial_condition_weak_blast_wave for the 2D compressible Euler equations CompressibleEulerEquations2D and used the DG formulation with flux differencing using volume flux flux_ranocha and surface flux flux_lax_friedrichs.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"Here, we want to implement the equivalent example, only now using the DGMulti solver instead of DGSEM.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Trixi, OrdinaryDiffEq\n\nequations = CompressibleEulerEquations2D(1.4)\n\ninitial_condition = initial_condition_weak_blast_wave","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"To use the Gauss-Lobatto nodes again, we choose approximation_type=SBP() in the solver. Since we want to start with a Cartesian domain discretized with squares, we use the element type Quad().","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"dg = DGMulti(polydeg = 3,\n element_type = Quad(),\n approximation_type = SBP(),\n surface_flux = flux_lax_friedrichs,\n volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))\n\ncells_per_dimension = (32, 32)\nmesh = DGMultiMesh(dg,\n cells_per_dimension, # initial_refinement_level = 5\n coordinates_min=(-2.0, -2.0),\n coordinates_max=( 2.0, 2.0),\n periodicity=true)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n boundary_conditions=boundary_condition_periodic)\ntspan = (0.0, 0.4)\node = semidiscretize(semi, tspan)\n\nalive_callback = AliveCallback(alive_interval=10)\nanalysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))\ncallbacks = CallbackSet(analysis_callback, alive_callback);\nnothing #hide","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"Run the simulation with the same time integration algorithm as before.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"sol = solve(ode, RDPK3SpFSAL49(), abstol=1.0e-6, reltol=1.0e-6,\n callback=callbacks, save_everystep=false);\nnothing #hide","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Plots\npd = PlotData2D(sol)\nplot(pd)","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"plot(pd[\"rho\"])\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"This simulation is not as fast as the equivalent with TreeMesh since no special optimizations for quads (for instance tensor product structure) have been implemented. Figure 4 in \"Efficient implementation of modern entropy stable and kinetic energy preserving discontinuous Galerkin methods for conservation laws\" (2021) provides a nice runtime comparison between the different mesh types. On the other hand, the functions are more general and thus we have more option we can choose from.","category":"page"},{"location":"tutorials/DGMulti_1/#Simulation-with-Gauss-nodes","page":"8 DG schemes via DGMulti solver","title":"Simulation with Gauss nodes","text":"","category":"section"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"For instance, we can change the approximation type of our simulation.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Trixi, OrdinaryDiffEq\nequations = CompressibleEulerEquations2D(1.4)\ninitial_condition = initial_condition_weak_blast_wave","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"We now use Gauss nodes instead of Gauss-Lobatto nodes which can be done for the element types Quad() and Hex(). Therefore, we set approximation_type=GaussSBP(). Alternatively, we can use a modal approach using the approximation type Polynomial().","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"dg = DGMulti(polydeg = 3,\n element_type = Quad(),\n approximation_type = GaussSBP(),\n surface_flux = flux_lax_friedrichs,\n volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))\n\ncells_per_dimension = (32, 32)\nmesh = DGMultiMesh(dg,\n cells_per_dimension, # initial_refinement_level = 5\n coordinates_min=(-2.0, -2.0),\n coordinates_max=( 2.0, 2.0),\n periodicity=true)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n boundary_conditions=boundary_condition_periodic)\ntspan = (0.0, 0.4)\node = semidiscretize(semi, tspan)\n\nalive_callback = AliveCallback(alive_interval=10)\nanalysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))\ncallbacks = CallbackSet(analysis_callback, alive_callback);\n\nsol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n ode_default_options()..., callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Plots\npd = PlotData2D(sol)\nplot(pd)","category":"page"},{"location":"tutorials/DGMulti_1/#Simulation-with-triangular-elements","page":"8 DG schemes via DGMulti solver","title":"Simulation with triangular elements","text":"","category":"section"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"Also, we can set another element type. We want to use triangles now.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Trixi, OrdinaryDiffEq\nequations = CompressibleEulerEquations2D(1.4)\ninitial_condition = initial_condition_weak_blast_wave","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"Since there is no direct equivalent to Gauss-Lobatto nodes on triangles, the approximation type SBP() now uses Gauss-Lobatto nodes on faces and special nodes in the interior of the triangular. More details can be found in the documentation of StartUpDG.jl.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"dg = DGMulti(polydeg = 3,\n element_type = Tri(),\n approximation_type = SBP(),\n surface_flux = flux_lax_friedrichs,\n volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))\n\ncells_per_dimension = (32, 32)\nmesh = DGMultiMesh(dg,\n cells_per_dimension, # initial_refinement_level = 5\n coordinates_min=(-2.0, -2.0),\n coordinates_max=( 2.0, 2.0),\n periodicity=true)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n boundary_conditions=boundary_condition_periodic)\ntspan = (0.0, 0.4)\node = semidiscretize(semi, tspan)\n\nalive_callback = AliveCallback(alive_interval=10)\nanalysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))\ncallbacks = CallbackSet(analysis_callback, alive_callback);\n\nsol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n ode_default_options()..., callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Plots\npd = PlotData2D(sol)\nplot(pd)","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"plot(pd[\"rho\"])\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/DGMulti_1/#Triangular-meshes-on-non-Cartesian-domains","page":"8 DG schemes via DGMulti solver","title":"Triangular meshes on non-Cartesian domains","text":"","category":"section"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"To use triangular meshes on a non-Cartesian domain, Trixi.jl uses the package StartUpDG.jl. The following example is based on elixir_euler_triangulate_pkg_mesh.jl and uses a pre-defined mesh from StartUpDG.jl.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Trixi, OrdinaryDiffEq","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"We want to simulate the smooth initial condition initial_condition_convergence_test with source terms source_terms_convergence_test for the 2D compressible Euler equations.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"equations = CompressibleEulerEquations2D(1.4)\ninitial_condition = initial_condition_convergence_test\nsource_terms = source_terms_convergence_test","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"We create the solver DGMulti with triangular elements (Tri()) as before.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"dg = DGMulti(polydeg = 3, element_type = Tri(),\n approximation_type=Polynomial(),\n surface_flux = flux_lax_friedrichs,\n volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"StartUpDG.jl provides for instance a pre-defined Triangulate geometry for a rectangular domain with hole RectangularDomainWithHole. Other pre-defined Triangulate geometries are e.g., SquareDomain, Scramjet, and CircularDomain.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"meshIO = StartUpDG.triangulate_domain(StartUpDG.RectangularDomainWithHole());\nnothing #hide","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"The pre-defined Triangulate geometry in StartUpDG has integer boundary tags. With DGMultiMesh we assign boundary faces based on these integer boundary tags and create a mesh compatible with Trixi.jl.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"mesh = DGMultiMesh(dg, meshIO, Dict(:outer_boundary=>1, :inner_boundary=>2))","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"boundary_condition_convergence_test = BoundaryConditionDirichlet(initial_condition)\nboundary_conditions = (; :outer_boundary => boundary_condition_convergence_test,\n :inner_boundary => boundary_condition_convergence_test)\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n source_terms = source_terms,\n boundary_conditions = boundary_conditions)\n\ntspan = (0.0, 0.2)\node = semidiscretize(semi, tspan)\n\nalive_callback = AliveCallback(alive_interval=20)\nanalysis_callback = AnalysisCallback(semi, interval=200, uEltype=real(dg))\ncallbacks = CallbackSet(alive_callback, analysis_callback);\n\nsol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt = 0.5 * estimate_dt(mesh, dg), save_everystep=false, callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using Plots\npd = PlotData2D(sol)\nplot(pd[\"rho\"])\nplot!(getmesh(pd))","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"For more information, please have a look in the StartUpDG.jl documentation.","category":"page"},{"location":"tutorials/DGMulti_1/#Package-versions","page":"8 DG schemes via DGMulti solver","title":"Package versions","text":"","category":"section"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"StartUpDG\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"","category":"page"},{"location":"tutorials/DGMulti_1/","page":"8 DG schemes via DGMulti solver","title":"8 DG schemes via DGMulti solver","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"EditURL = \"../../literate/src/files/adding_new_scalar_equations.jl\"","category":"page"},{"location":"tutorials/adding_new_scalar_equations/#adding_new_scalar_equations","page":"11 Adding a new scalar conservation law","title":"11: Adding a new scalar conservation law","text":"","category":"section"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"If you want to use Trixi.jl for your own research, you might be interested in a new physics model that's not already included in Trixi.jl. In this tutorial, we will implement the cubic conservation law","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"partial_t u(tx) + partial_x u(tx)^3 = 0","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"in a periodic domain in one space dimension. In Trixi.jl, such a mathematical model is encoded as a subtype of Trixi.AbstractEquations.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/#Basic-setup","page":"11 Adding a new scalar conservation law","title":"Basic setup","text":"","category":"section"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"using Trixi\n\nstruct CubicEquation <: Trixi.AbstractEquations{1 #= number of spatial dimensions =#,\n 1 #= number of primary variables, i.e. scalar =#};\nend","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"We create CubicEquation as an empty struct since we do not use any parameters for this equation. Other models could bundle arbitrary parameters, e.g., the ideal gas constant for the compressible Euler equations.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"Next, we define the physical flux f(u) = u^3 using the calling structure used in Trixi.jl.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"Trixi.flux(u, orientation, equation::CubicEquation) = u.^3\nTrixi.varnames(_, ::CubicEquation) = (\"scalar\",)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"In Trixi.jl, the conserved variables u are usually passed as SVectors of variables at a single physical location. Hence, we must use u.^3 instead of the scalar operation u^3.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"That's already enough to run a simple simulation with a standard DGSEM discretization using the non-dissipative central flux at interfaces.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"using OrdinaryDiffEq\n\n# Create a simulation setup\nequation = CubicEquation()\n\ninitial_condition_sine(x, t, equation::CubicEquation) = SVector(sinpi(x[1]))\n\nmesh = TreeMesh(-1.0, 1.0, # min/max coordinates\n initial_refinement_level=4,\n n_cells_max=10^4)\n\nsolver = DGSEM(3 #= polynomial degree =#, flux_central)\n\nsemi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"We wrap the return value of the initial_condition_sine inside an SVector since that's the approach used in Trixi.jl also for systems of equations. We need to index the spatial coordinate x[1], since it is an SVector with one component. In multiple space dimensions, all spatial coordinates are passed together.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"Next, we create an ODEProblem from the SciML/DifferentialEquations ecosystem. We can solve this ODE numerically using any time integration method, e.g., SSPRK43 from OrdinaryDiffEq.jl. Before, we set up a callback to summarize the simulation setup.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"# Create ODE problem with given time span\ntspan = (0.0, 0.09)\node = semidiscretize(semi, tspan)\n\nsummary_callback = SummaryCallback()\ncallbacks = CallbackSet(summary_callback)\n\n# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks\nsol = solve(ode, SSPRK43();\n ode_default_options()..., callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"That's it, you ran your first simulation using your new equation with Trixi.jl! Now, we can plot the solution at the final time using Plots.jl.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"using Plots\nplot(sol)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"You can already see that discontinuities will develop and oscillations start to occur around steep parts of the wave. That's expected from our central discretization. To avoid these issues, we need to use dissipative numerical fluxes (approximate Riemann solvers) at interfaces.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/#Advanced-setup","page":"11 Adding a new scalar conservation law","title":"Advanced setup","text":"","category":"section"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"Thus, we add a Godunov's flux for our cubic equation. That is easy for this equation since the wave speed f'(u) = 3u^2 is always non-negative.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"@inline Trixi.flux_godunov(u_ll, u_rr, orientation, equation::CubicEquation) = flux(u_ll, orientation, equation)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"Let's run the example again but with a dissipative numerical flux at interfaces. remake will recreate the semidiscretization we used before and only change selected parameters, in this case the solver.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"# A new setup with dissipation\nsemi = remake(semi, solver=DGSEM(3, flux_godunov))\node = semidiscretize(semi, tspan)\nsol = solve(ode, SSPRK43(); ode_default_options()...)\nplot!(sol)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"You can see that there are fewer oscillations, in particular around steep edges. Now let's increase the final time (and also the spatial resolution).","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"# A larger final time: Nonclassical shocks develop (you can even increase the refinement to 12)\nsemi = remake(semi, mesh=TreeMesh(-1.0, 1.0, initial_refinement_level=8, n_cells_max=10^5))\node = semidiscretize(semi, (0.0, 0.5) #= tspan =#)\nsol = solve(ode, SSPRK43(); ode_default_options()...)\nplot(sol)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"You can observe that nonclassical shocks develop and are stable under grid refinement, e.g. for initial_refinement_level=12. In this case, these nonclassical shocks can be avoided by using an entropy-dissipative semidiscretization. Thus, we need to define an entropy-conservative numerical flux","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"@inline function Trixi.flux_ec(u_ll, u_rr, orientation, equation::CubicEquation)\n return SVector(0.25 * (u_ll[1]^3 + u_ll[1]^2 * u_rr[1] + u_ll[1] * u_rr[1]^2 + u_rr[1]^3))\nend","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"and use a VolumeIntegralFluxDifferencing instead of the standard VolumeIntegralWeakForm in the DGSEM.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"# Let's use a provably entropy-dissipative semidiscretization\nsemi = remake(semi, solver=DGSEM(3, flux_godunov, VolumeIntegralFluxDifferencing(flux_ec)))\node = semidiscretize(semi, (0.0, 0.5))\nsol = solve(ode, SSPRK43(); ode_default_options()...);\nplot(sol)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"Possible next steps could be","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"to define Trixi.max_abs_speeds(u, equations::CubicEquation) = 3 * u[1]^2 to use CFL-based time step control via a StepsizeCallback\nto define quantities of interest like Trixi.entropy(u, equations::CubicEquation) = u[1]^2 and integrate them in a simulation using the AnalysisCallback\nto experiment with shock-capturing volume integrals VolumeIntegralShockCapturingHG and adaptive mesh refinement AMRCallback","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"For further reading, Trixi.jl provides another example on adding a scalar equation. In the elixir about the KPP problem, the 2D scalar \"KPP equation\" from Kurganov, Petrova, Popov (2007) is implemented.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/#Summary-of-the-code","page":"11 Adding a new scalar conservation law","title":"Summary of the code","text":"","category":"section"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"To sum up, here is the complete code that we used (without the callbacks since these create a lot of unnecessary output in the doctests of this tutorial). In addition, we create the struct inside the new module CubicConservationLaw. That ensures that we can re-create structs defined therein without having to restart Julia.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"# Define new physics\nmodule CubicConservationLaw\n\nusing Trixi\n\nstruct CubicEquation <: Trixi.AbstractEquations{1 #= number of spatial dimensions =#,\n 1 #= number of primary variables, i.e. scalar =#}\nend\n\n@inline Trixi.flux(u, orientation, equation::CubicEquation) = u.^3\nTrixi.varnames(_, ::CubicEquation) = (\"scalar\",)\n\n@inline Trixi.flux_godunov(u_ll, u_rr, orientation, equation::CubicEquation) = flux(u_ll, orientation, equation)\n@inline function Trixi.flux_ec(u_ll, u_rr, orientation, equation::CubicEquation)\n return SVector(0.25 * (u_ll[1]^3 + u_ll[1]^2 * u_rr[1] + u_ll[1] * u_rr[1]^2 + u_rr[1]^3))\nend\n\nend # module\n\n\n# Create a simulation setup\nimport .CubicConservationLaw\nusing Trixi\nusing OrdinaryDiffEq\nusing Plots\n\nequation = CubicConservationLaw.CubicEquation()\n\ninitial_condition_sine(x, t, equation::CubicConservationLaw.CubicEquation) = SVector(sinpi(x[1]))\n\nmesh = TreeMesh(-1.0, 1.0, # min/max coordinates\n initial_refinement_level=4,\n n_cells_max=10^4)\n\nsolver = DGSEM(3 #= polynomial degree =#, flux_central)\n\nsemi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n\n# Create ODE problem with given time span\ntspan = (0.0, 0.1)\node = semidiscretize(semi, tspan)\n\n# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks\nsol = solve(ode, SSPRK43(); ode_default_options()...)\nplot(sol)\n\n\n# A new setup with dissipation\nsemi = remake(semi, solver=DGSEM(3, flux_godunov))\node = semidiscretize(semi, tspan)\nsol = solve(ode, SSPRK43(); ode_default_options()...)\nplot!(sol)\n\n\n# A larger final time: Nonclassical shocks develop (you can even increase the refinement to 12)\nsemi = remake(semi, mesh=TreeMesh(-1.0, 1.0, initial_refinement_level=8, n_cells_max=10^5))\node = semidiscretize(semi, (0.0, 0.5))\nsol = solve(ode, SSPRK43(); ode_default_options()...)\nplot(sol)\n\n\n# Let's use a provably entropy-dissipative semidiscretization\nsemi = remake(semi, solver=DGSEM(3, flux_godunov, VolumeIntegralFluxDifferencing(flux_ec)))\node = semidiscretize(semi, (0.0, 0.5))\nsol = solve(ode, SSPRK43(); ode_default_options()...)\nplot(sol)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/#Package-versions","page":"11 Adding a new scalar conservation law","title":"Package versions","text":"","category":"section"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"","category":"page"},{"location":"tutorials/adding_new_scalar_equations/","page":"11 Adding a new scalar conservation law","title":"11 Adding a new scalar conservation law","text":"This page was generated using Literate.jl.","category":"page"},{"location":"time_integration/#time-integration","page":"Time integration","title":"Time integration methods","text":"","category":"section"},{"location":"time_integration/","page":"Time integration","title":"Time integration","text":"Trixi.jl is compatible with the SciML ecosystem for ordinary differential equations. In particular, explicit Runge-Kutta methods from OrdinaryDiffEq.jl are tested extensively. Interesting classes of time integration schemes are","category":"page"},{"location":"time_integration/","page":"Time integration","title":"Time integration","text":"Explicit low-storage Runge-Kutta methods\nStrong stability preserving methods","category":"page"},{"location":"time_integration/","page":"Time integration","title":"Time integration","text":"Some common options for solve from OrdinaryDiffEq.jl are the following. Further documentation can be found in the SciML docs.","category":"page"},{"location":"time_integration/","page":"Time integration","title":"Time integration","text":"If you use a fixed time step method like CarpenterKennedy2N54, you need to pass a time step as dt=.... If you use a StepsizeCallback, the value passed as dt=... is irrelevant since it will be overwritten by the StepsizeCallback. If you want to use an adaptive time step method such as SSPRK43 or RDPK3SpFSAL49 and still want to use CFL-based step size control via the StepsizeCallback, you need to pass the keyword argument adaptive=false to solve.\nYou should usually set save_everystep=false. Otherwise, OrdinaryDiffEq.jl will (try to) save the numerical solution after every time step in RAM (until you run out of memory or start to swap).\nYou can set the maximal number of time steps via maxiters=....\nSSP methods and many low-storage methods from OrdinaryDiffEq.jl support stage_limiter!s and step_limiter!s, e.g., PositivityPreservingLimiterZhangShu from Trixi.jl.\nIf you start Julia with multiple threads and want to use them also in the time integration method from OrdinaryDiffEq.jl, you need to pass the keyword argument thread=OrdinaryDiffEq.True() to the algorithm, e.g., RDPK3SpFSAL49(thread=OrdinaryDiffEq.True()) or CarpenterKennedy2N54(thread=OrdinaryDiffEq.True(), williamson_condition=false). For more information on using thread-based parallelism in Trixi.jl, please refer to Shared-memory parallelization with threads.\nIf you use error-based step size control (see also the section on error-based adaptive step sizes together with MPI, you need to pass internalnorm=ode_norm and you should pass unstable_check=ode_unstable_check to OrdinaryDiffEq's solve, which are both included in ode_default_options.","category":"page"},{"location":"time_integration/","page":"Time integration","title":"Time integration","text":"note: Number of `rhs!` calls\nIf you use explicit Runge-Kutta methods from OrdinaryDiffEq.jl, the total number of rhs! calls can be (slightly) bigger than the number of steps times the number of stages, e.g. to allow for interpolation (dense output), root-finding for continuous callbacks, and error-based time step control. In general, you often should not need to worry about this if you use Trixi.jl.","category":"page"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/trixi-framework/Trixi.jl/blob/main/CHANGELOG.md\"","category":"page"},{"location":"changelog_tmp/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Trixi.jl follows the interpretation of semantic versioning (semver) used in the Julia ecosystem. Notable changes will be documented in this file for human readability.","category":"page"},{"location":"changelog_tmp/#Changes-when-updating-to-v0.8-from-v0.7.x","page":"Changelog","title":"Changes when updating to v0.8 from v0.7.x","text":"","category":"section"},{"location":"changelog_tmp/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/#Changed","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The specification of boundary names on which AnalysisSurfaceIntegrals are computed (such as drag and lift coefficients) has changed from Symbol and Vector{Symbol} to NTuple{Symbol}. Thus, for one boundary the syntax changes from :boundary to (:boundary,) and for Vectors [:boundary1, :boundary2] to (:boundary1, :boundary2) (#1959).\nThe names of output files like the one created from the SaveSolutionCallback have changed from %06d to %09d to allow longer-running simulations (#1996).","category":"page"},{"location":"changelog_tmp/#Deprecated","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/#Removed","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/#Changes-in-the-v0.7-lifecycle","page":"Changelog","title":"Changes in the v0.7 lifecycle","text":"","category":"section"},{"location":"changelog_tmp/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Implementation of TimeSeriesCallback for curvilinear meshes on UnstructuredMesh2D and extension to 1D and 3D on TreeMesh (#1855, #1873).\nImplementation of 1D Linearized Euler Equations (#1867).\nNew analysis callback for 2D P4estMesh to compute integrated quantities along a boundary surface, e.g., pressure lift and drag coefficients (#1812).\nOptional tuple parameter for GlmSpeedCallback called semi_indices to specify for which semidiscretization of a SemidiscretizationCoupled we need to update the GLM speed (#1835).\nSubcell local one-sided limiting support for nonlinear variables in 2D for TreeMesh (#1792).\nNew time integrator PairedExplicitRK2, implementing the second-order paired explicit Runge-Kutta method with Convex.jl and ECOS.jl (#1908)\nAdd subcell limiting support for StructuredMesh (#1946).","category":"page"},{"location":"changelog_tmp/#Changes-when-updating-to-v0.7-from-v0.6.x","page":"Changelog","title":"Changes when updating to v0.7 from v0.6.x","text":"","category":"section"},{"location":"changelog_tmp/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/#Changed-2","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The default wave speed estimate used within flux_hll is now min_max_speed_davis instead of min_max_speed_naive.","category":"page"},{"location":"changelog_tmp/#Deprecated-2","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/#Removed-2","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Some specialized shallow water specific features are no longer available directly in Trixi.jl, but are moved to a dedicated repository: TrixiShallowWater.jl. This includes all features related to wetting and drying, as well as the ShallowWaterTwoLayerEquations1D and ShallowWaterTwoLayerEquations2D. However, the basic shallow water equations are still part of Trixi.jl. We'll also be updating the TrixiShallowWater.jl documentation with instructions on how to use these relocated features in the future.","category":"page"},{"location":"changelog_tmp/#Changes-in-the-v0.6-lifecycle","page":"Changelog","title":"Changes in the v0.6 lifecycle","text":"","category":"section"},{"location":"changelog_tmp/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"AMR for hyperbolic-parabolic equations on 3D P4estMesh\nflux_hllc on non-cartesian meshes for CompressibleEulerEquations{2,3}D\nDifferent boundary conditions for quad/hex meshes in Abaqus format, even if not generated by HOHQMesh, can now be digested by Trixi in 2D and 3D.\nSubcell (positivity) limiting support for nonlinear variables in 2D for TreeMesh\nAdded Lighthill-Whitham-Richards (LWR) traffic model","category":"page"},{"location":"changelog_tmp/#Changes-when-updating-to-v0.6-from-v0.5.x","page":"Changelog","title":"Changes when updating to v0.6 from v0.5.x","text":"","category":"section"},{"location":"changelog_tmp/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"AMR for hyperbolic-parabolic equations on 2D P4estMesh","category":"page"},{"location":"changelog_tmp/#Changed-3","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The wave speed estimates for flux_hll, FluxHLL() are now consistent across equations. In particular, the functions min_max_speed_naive, min_max_speed_einfeldt are now conceptually identical across equations. Users, who have been using flux_hll for MHD have now to use flux_hlle in order to use the Einfeldt wave speed estimate.\nParabolic diffusion terms are now officially supported and not marked as experimental anymore.","category":"page"},{"location":"changelog_tmp/#Deprecated-3","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/#Removed-3","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The neural network-based shock indicators have been migrated to a new repository TrixiSmartShockFinder.jl. To continue using the indicators, you will need to use both Trixi.jl and TrixiSmartShockFinder.jl, as explained in the latter packages' README.md.","category":"page"},{"location":"changelog_tmp/#Changes-in-the-v0.5-lifecycle","page":"Changelog","title":"Changes in the v0.5 lifecycle","text":"","category":"section"},{"location":"changelog_tmp/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Experimental support for 3D parabolic diffusion terms has been added.\nNon-uniform TreeMesh available for hyperbolic-parabolic equations.\nCapability to set truly discontinuous initial conditions in 1D.\nWetting and drying feature and examples for 1D and 2D shallow water equations\nImplementation of the polytropic Euler equations in 2D\nImplementation of the quasi-1D shallow water and compressible Euler equations\nSubcell (positivity and local min/max) limiting support for conservative variables in 2D for TreeMesh\nAMR for hyperbolic-parabolic equations on 2D/3D TreeMesh\nAdded GradientVariables type parameter to AbstractEquationsParabolic","category":"page"},{"location":"changelog_tmp/#Changed-4","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The required Julia version is updated to v1.8 in Trixi.jl v0.5.13.","category":"page"},{"location":"changelog_tmp/#Deprecated-4","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The macro @unpack (re-exported originally from UnPack.jl) is deprecated and will be removed. Consider using Julia's standard destructuring syntax (; a, b) = stuff instead of @unpack a, b = stuff.\nThe constructor DGMultiMesh(dg; cells_per_dimension, kwargs...) is deprecated and will be removed. The new constructor DGMultiMesh(dg, cells_per_dimension; kwargs...) does not have cells_per_dimesion as a keyword argument.","category":"page"},{"location":"changelog_tmp/#Removed-4","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Migrate neural network-based shock indicators to a new repository TrixiSmartShockFinder.jl.","category":"page"},{"location":"changelog_tmp/#Changes-when-updating-to-v0.5-from-v0.4.x","page":"Changelog","title":"Changes when updating to v0.5 from v0.4.x","text":"","category":"section"},{"location":"changelog_tmp/#Added-7","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/#Changed-5","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Compile-time boolean indicators have been changed from Val{true}/Val{false} to Trixi.True/Trixi.False. This affects user code only if new equations with nonconservative terms are created. Change Trixi.has_nonconservative_terms(::YourEquations) = Val{true}() to Trixi.has_nonconservative_terms(::YourEquations) = Trixi.True().\nThe (non-exported) DGSEM function split_form_kernel! has been renamed to flux_differencing_kernel!\nTrixi.jl updated its dependency P4est.jl from v0.3 to v0.4. The new bindings of the C library p4est have been generated using Clang.jl instead of CBinding.jl v0.9. This affects only user code that is interacting directly with p4est, e.g., because custom refinement functions have been passed to p4est. Please consult the NEWS.md of P4est.jl for further information.","category":"page"},{"location":"changelog_tmp/#Deprecated-5","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The signature of the DGMultiMesh constructors has changed - the dg::DGMulti argument now comes first.\nThe undocumented and unused DGMultiMesh(triangulateIO, rd::RefElemData{2, Tri}, boundary_dict::Dict{Symbol, Int}) constructor was removed.","category":"page"},{"location":"changelog_tmp/#Removed-5","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Everything deprecated in Trixi.jl v0.4.x has been removed.","category":"page"},{"location":"changelog_tmp/#Changes-in-the-v0.4-lifecycle","page":"Changelog","title":"Changes in the v0.4 lifecycle","text":"","category":"section"},{"location":"changelog_tmp/#Added-8","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Implementation of linearized Euler equations in 2D\nExperimental support for upwind finite difference summation by parts (FDSBP) has been added in Trixi.jl v0.4.55. The first implementation requires a TreeMesh and comes with several examples in the examples_dir() of Trixi.jl.\nExperimental support for 2D parabolic diffusion terms has been added.\nLaplaceDiffusion2D and CompressibleNavierStokesDiffusion2D can be used to add\ndiffusion to systems. LaplaceDiffusion2D can be used to add scalar diffusion to each equation of a system, while CompressibleNavierStokesDiffusion2D can be used to add Navier-Stokes diffusion to CompressibleEulerEquations2D.\nParabolic boundary conditions can be imposed as well. For LaplaceDiffusion2D, both\nDirichlet and Neumann conditions are supported. For CompressibleNavierStokesDiffusion2D, viscous no-slip velocity boundary conditions are supported, along with adiabatic and isothermal temperature boundary conditions. See the boundary condition container BoundaryConditionNavierStokesWall and boundary condition types NoSlip, Adiabatic, and Isothermal for more information.\nCompressibleNavierStokesDiffusion2D can utilize both primitive variables (which are not\nguaranteed to provably dissipate entropy) and entropy variables (which provably dissipate entropy at the semi-discrete level).\nPlease check the examples directory for further information about the supported setups. Further documentation will be added later.\nNumerical fluxes flux_shima_etal_turbo and flux_ranocha_turbo that are equivalent to their non-_turbo counterparts but may enable specialized methods making use of SIMD instructions to increase runtime efficiency\nSupport for (periodic and non-periodic) SBP operators of SummationByPartsOperators.jl as approximation type in DGMulti solvers\nInitial support for MPI-based parallel simulations using non-conforming meshes of type P4estMesh in 2D and 3D including adaptive mesh refinement","category":"page"},{"location":"changelog_tmp/#Removed-6","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The VertexMappedMesh type is removed in favor of the DGMultiMesh type. The VertexMappedMesh constructor is deprecated.","category":"page"},{"location":"changelog_tmp/#Changed-6","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The required Julia version is updated to v1.7.\nThe isentropic vortex setups contained a bug that was fixed in Trixi.jl v0.4.54. Moreover, the setup was made a bit more challenging. See https://github.com/trixi-framework/Trixi.jl/issues/1269 for further information.","category":"page"},{"location":"changelog_tmp/#Deprecated-6","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"The DGMultiMesh constructor which uses a rd::RefElemData argument is deprecated in favor of the constructor which uses a dg::DGMulti argument instead.","category":"page"},{"location":"changelog_tmp/#Changes-when-updating-to-v0.4-from-v0.3.x","page":"Changelog","title":"Changes when updating to v0.4 from v0.3.x","text":"","category":"section"},{"location":"changelog_tmp/#Added-9","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Experimental support for artificial neural network-based indicators for shock capturing and adaptive mesh refinement (#632)\nExperimental support for direct-hybrid aeroacoustics simulations (#712)\nImplementation of shallow water equations in 2D\nExperimental support for interactive visualization with Makie.jl","category":"page"},{"location":"changelog_tmp/#Changed-7","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Implementation of acoustic perturbation equations now uses the conservative form, i.e. the perturbed pressure p_prime has been replaced with p_prime_scaled = p_prime / c_mean^2.\nRemoved the experimental BoundaryConditionWall and instead directly compute slip wall boundary condition flux term using the function boundary_condition_slip_wall.\nRenamed advectionvelocity in LinearScalarAdvectionEquation to advection_velocity.\nThe signature of indicators used for adaptive mesh refinement (AMR) and shock capturing changed to generalize them to curved meshes.","category":"page"},{"location":"changelog_tmp/#Deprecated-7","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/#Removed-7","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Many initial/boundary conditions and source terms for typical setups were moved from Trixi/src to the example elixirs Trixi/examples. Thus, they are no longer available when using Trixi, e.g., the initial condition for the Kelvin Helmholtz instability.\nFeatures deprecated in v0.3 were removed.","category":"page"},{"location":"changelog_tmp/#Changes-in-the-v0.3-lifecycle","page":"Changelog","title":"Changes in the v0.3 lifecycle","text":"","category":"section"},{"location":"changelog_tmp/#Added-10","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"Support for automatic differentiation, e.g. jacobian_ad_forward\nIn-situ visualization and post hoc visualization with Plots.jl\nNew systems of equations\nmulticomponent compressible Euler and MHD equations\nacoustic perturbation equations\nLattice-Boltzmann equations\nComposable FluxPlusDissipation and FluxLaxFriedrichs(), FluxHLL() with adaptable wave speed estimates were added in #493\nNew structured, curvilinear, conforming mesh type StructuredMesh\nNew unstructured, curvilinear, conforming mesh type UnstructuredMesh2D in 2D\nNew unstructured, curvilinear, adaptive (non-conforming) mesh type P4estMesh in 2D and 3D\nExperimental support for finite difference (FD) summation-by-parts (SBP) methods via SummationByPartsOperators.jl\nNew support for modal DG and SBP-DG methods on triangular and tetrahedral meshes via StartUpDG.jl","category":"page"},{"location":"changelog_tmp/#Changed-8","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations2D) and flux_lax_friedrichs(u_ll, u_rr, orientation, equations::LatticeBoltzmannEquations3D) were actually using the logic of flux_godunov. Thus, they were renamed accordingly in #493. This is considered a bugfix (released in Trixi.jl v0.3.22).\nThe required Julia version is updated to v1.6.","category":"page"},{"location":"changelog_tmp/#Deprecated-8","page":"Changelog","title":"Deprecated","text":"","category":"section"},{"location":"changelog_tmp/","page":"Changelog","title":"Changelog","text":"calcflux → flux (#463)\nflux_upwind → flux_godunov\nflux_hindenlang → flux_hindenlang_gassner\nProviding the keyword argument solution_variables of SaveSolutionCallback as Symbol is deprecated in favor of using functions like cons2cons and cons2prim\nvarnames_cons(equations) → varnames(cons2cons, equations)\nvarnames_prim(equations) → varnames(cons2prim, equations)\nThe old interface for nonconservative terms is deprecated. In particular, passing only a single two-point numerical flux for nonconservative is deprecated. The new interface is described in a tutorial. Now, a tuple of two numerical fluxes of the form (conservative_flux, nonconservative_flux) needs to be passed for nonconservative equations, see #657.","category":"page"},{"location":"changelog_tmp/#Removed-8","page":"Changelog","title":"Removed","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"EditURL = \"../../../literate/src/files/first_steps/getting_started.jl\"","category":"page"},{"location":"tutorials/first_steps/getting_started/#getting_started","page":"1.1 Getting started","title":"1.1: First steps in Trixi.jl: Getting started","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Trixi.jl is a numerical simulation framework for conservation laws and is written in the Julia programming language. This tutorial is intended for beginners in Julia and Trixi.jl. After reading it, you will know how to install Julia and Trixi.jl on your computer, and you will be able to download setup files from our GitHub repository, modify them, and run simulations.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"The contents of this tutorial:","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Julia installation\nTrixi.jl installation\nRunning a simulation\nGetting an existing setup file\nModifying an existing setup","category":"page"},{"location":"tutorials/first_steps/getting_started/#Julia-installation","page":"1.1 Getting started","title":"Julia installation","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Trixi.jl is compatible with the latest stable release of Julia. Additional details regarding Julia support can be found in the README.md file. After installation, the current default Julia version can be managed through the command line tool juliaup. You may follow our concise installation guidelines for Windows, Linux, and MacOS provided below. In the event of any issues during the installation process, please consult the official Julia installation instruction.","category":"page"},{"location":"tutorials/first_steps/getting_started/#Windows","page":"1.1 Getting started","title":"Windows","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Open a terminal by pressing Win+r and entering cmd in the opened window.\nTo install Julia, execute the following command in the terminal:\nwinget install julia -s msstore\nNote: For this installation an MS Store account is necessary to proceed.\nVerify the successful installation of Julia by executing the following command in the terminal:\njulia\nTo exit Julia, execute exit() or press Ctrl+d.","category":"page"},{"location":"tutorials/first_steps/getting_started/#Linux-and-MacOS","page":"1.1 Getting started","title":"Linux and MacOS","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"To install Julia, run the following command in a terminal:\ncurl -fsSL https://install.julialang.org | sh\nFollow the instructions displayed in the terminal during the installation process.\nIf an error occurs during the execution of the previous command, you may need to install curl. On Ubuntu-type systems, you can use the following command:\nsudo apt install curl\nAfter installing curl, repeat the first step once more to proceed with Julia installation.\nVerify the successful installation of Julia by executing the following command in the terminal:\njulia\nTo exit Julia, execute exit() or press Ctrl+d.","category":"page"},{"location":"tutorials/first_steps/getting_started/#Trixi.jl-installation","page":"1.1 Getting started","title":"Trixi.jl installation","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Trixi.jl and its related tools are registered Julia packages, thus their installation happens inside Julia. For a smooth workflow experience with Trixi.jl, you need to install Trixi.jl, OrdinaryDiffEq.jl, and Plots.jl.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Open a terminal and start Julia.\nExecute the following commands to install all mentioned packages. Please note that the installation process involves downloading and precompiling the source code, which may take some time depending on your machine.\nimport Pkg\nPkg.add([\"OrdinaryDiffEq\", \"Plots\", \"Trixi\"])\nOn Windows, the firewall may request permission to install packages.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Besides Trixi.jl you have now installed two additional packages: OrdinaryDiffEq.jl provides time integration schemes used by Trixi.jl and Plots.jl can be used to directly visualize Trixi.jl results from the Julia REPL.","category":"page"},{"location":"tutorials/first_steps/getting_started/#Usage","page":"1.1 Getting started","title":"Usage","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/#Running-a-simulation","page":"1.1 Getting started","title":"Running a simulation","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"To get you started, Trixi.jl has a large set of example setups, that can be taken as a basis for your future investigations. In Trixi.jl, we call these setup files \"elixirs\", since they contain Julia code that takes parts of Trixi.jl and combines them into something new.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Any of the examples can be executed using the trixi_include function. trixi_include(...) expects a single string argument with a path to a file containing Julia code. For convenience, the examples_dir function returns a path to the examples folder, which has been locally downloaded while installing Trixi.jl. joinpath(...) can be used to join path components into a full path.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Let's execute a short two-dimensional problem setup. It approximates the solution of the compressible Euler equations in 2D for an ideal gas (CompressibleEulerEquations2D) with a weak blast wave as the initial condition and periodic boundary conditions.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"The compressible Euler equations in two spatial dimensions are given by","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"fracpartialpartial t\nbeginpmatrix\nrho rho v_1 rho v_2 rho e\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\nrho v_1 rho v_1^2 + p rho v_1 v_2 (rho e + p) v_1\nendpmatrix\n+\nfracpartialpartial y\nbeginpmatrix\nrho v_2 rho v_1 v_2 rho v_2^2 + p (rho e + p) v_2\nendpmatrix\n=\nbeginpmatrix\n0 0 0 0\nendpmatrix","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"for an ideal gas with the specific heat ratio gamma. Here, rho is the density, v_1 and v_2 are the velocities, e is the specific total energy, and","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"p = (gamma - 1) left( rho e - frac12 rho (v_1^2 + v_2^2) right)","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"is the pressure.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"The initial_condition_weak_blast_wave is specified in compressible_euler_2d.jl","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Start Julia in a terminal and execute the following code:","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"using Trixi, OrdinaryDiffEq\ntrixi_include(joinpath(examples_dir(), \"tree_2d_dgsem\", \"elixir_euler_ec.jl\"))","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"using Trixi, OrdinaryDiffEq #hide\ntrixi_include(@__MODULE__,joinpath(examples_dir(), \"tree_2d_dgsem\", \"elixir_euler_ec.jl\")) #hide","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"The output contains a recap of the setup and various information about the course of the simulation. For instance, the solution was approximated over the TreeMesh with 1024 effective cells using the CarpenterKennedy2N54 ODE solver. Further details about the ODE solver can be found in the documentation of OrdinaryDiffEq.jl","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"To analyze the result of the computation, we can use the Plots.jl package and the function plot(...), which creates a graphical representation of the solution. sol is a variable defined in the executed example and it contains the solution after the simulation finishes. sol.u holds the vector of values at each saved timestep, while sol.t holds the corresponding times for each saved timestep. In this instance, only two timesteps were saved: the initial and final ones. The plot depicts the distribution of the weak blast wave at the final moment of time, showing the density, velocities, and pressure of the ideal gas across a 2D domain.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"using Plots\nplot(sol)","category":"page"},{"location":"tutorials/first_steps/getting_started/#Getting-an-existing-setup-file","page":"1.1 Getting started","title":"Getting an existing setup file","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"To obtain a list of all Trixi.jl elixirs execute get_examples. It returns the paths to all example setups.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"get_examples()","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Editing an existing elixir is the best way to start your first own investigation using Trixi.jl.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"To edit an existing elixir, you first have to find a suitable one and then copy it to a local folder. Let's have a look at how to download the elixir_euler_ec.jl elixir used in the previous section from the Trixi.jl GitHub repository.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"All examples are located inside the examples folder.\nNavigate to the file elixir_euler_ec.jl.\nRight-click the Raw button on the right side of the webpage and choose Save as... (or Save Link As...).\nChoose a folder and save the file.","category":"page"},{"location":"tutorials/first_steps/getting_started/#Modifying-an-existing-setup","page":"1.1 Getting started","title":"Modifying an existing setup","text":"","category":"section"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"As an example, we will change the initial condition for calculations that occur in elixir_euler_ec.jl. Initial conditions for CompressibleEulerEquations2D consist of initial values for rho, rho v_1, rho v_2 and rho e. One of the common initial conditions for the compressible Euler equations is a simple density wave. Let's implement it.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Open the downloaded file elixir_euler_ec.jl with a text editor.\nGo to the line with the following code:\ninitial_condition = initial_condition_weak_blast_wave\nHere, initial_condition_weak_blast_wave is used as the initial condition.\nComment out the line using the # symbol:\n# initial_condition = initial_condition_weak_blast_wave\nNow you can create your own initial conditions. Add the following code after the commented line:","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"function initial_condition_density_waves(x, t, equations::CompressibleEulerEquations2D)\n v1 = 0.1 # velocity along x-axis\n v2 = 0.2 # velocity along y-axis\n rho = 1.0 + 0.98 * sinpi(sum(x) - t * (v1 + v2)) # density wave profile\n p = 20 # pressure\n rho_e = p / (equations.gamma - 1) + 1/2 * rho * (v1^2 + v2^2)\n return SVector(rho, rho*v1, rho*v2, rho_e)\nend\ninitial_condition = initial_condition_density_waves\nnothing; #hide\nnothing #hide","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Execute the following code one more time, but instead of path/to/file paste the path to the elixir_euler_ec.jl file that you just edited.\nusing Trixi\ntrixi_include(path/to/file)\nusing Plots\nplot(sol)","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Then you will obtain a new solution from running the simulation with a different initial condition.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"trixi_include(@__MODULE__,joinpath(examples_dir(), \"tree_2d_dgsem\", \"elixir_euler_ec.jl\"), #hide\n initial_condition=initial_condition) #hide\npd = PlotData2D(sol) #hide\np1 = plot(pd[\"rho\"]) #hide\np2 = plot(pd[\"v1\"], clim=(0.05, 0.15)) #hide\np3 = plot(pd[\"v2\"], clim=(0.15, 0.25)) #hide\np4 = plot(pd[\"p\"], clim=(10, 30)) #hide\nplot(p1, p2, p3, p4) #hide","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"To get exactly the same picture execute the following.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"pd = PlotData2D(sol)\np1 = plot(pd[\"rho\"])\np2 = plot(pd[\"v1\"], clim=(0.05, 0.15))\np3 = plot(pd[\"v2\"], clim=(0.15, 0.25))\np4 = plot(pd[\"p\"], clim=(10, 30))\nplot(p1, p2, p3, p4)","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Feel free to make further changes to the initial condition to observe different solutions.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Now you are able to download, modify and execute simulation setups for Trixi.jl. To explore further details on setting up a new simulation with Trixi.jl, refer to the second part of the introduction titled Create your first setup.","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"Sys.rm(\"out\"; recursive=true, force=true) #hide","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"","category":"page"},{"location":"tutorials/first_steps/getting_started/","page":"1.1 Getting started","title":"1.1 Getting started","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"EditURL = \"../../literate/src/files/upwind_fdsbp.jl\"","category":"page"},{"location":"tutorials/upwind_fdsbp/#upwind_fdsbp","page":"10 Upwind FD SBP schemes","title":"10: Upwind FD SBP schemes","text":"","category":"section"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"General tensor product SBP methods are supported via the DGMulti solver in a reasonably complete way, see the previous tutorial. Nevertheless, there is also experimental support for SBP methods with other solver and mesh types.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"The first step is to set up an SBP operator. A classical (central) SBP operator can be created as follows.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"using Trixi\nD_SBP = derivative_operator(SummationByPartsOperators.MattssonNordström2004(),\n derivative_order=1, accuracy_order=2,\n xmin=0.0, xmax=1.0, N=11)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Instead of prefixing the source of coefficients MattssonNordström2004(), you can also load the package SummationByPartsOperators.jl. Either way, this yields an object representing the operator efficiently. If you want to compare it to coefficients presented in the literature, you can convert it to a matrix.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Matrix(D_SBP)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Upwind SBP operators are a concept introduced in 2017 by Ken Mattsson. You can create them as follows.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"D_upw = upwind_operators(SummationByPartsOperators.Mattsson2017,\n derivative_order=1, accuracy_order=2,\n xmin=0.0, xmax=1.0, N=11)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Upwind operators are derivative operators biased towards one direction. The \"minus\" variants has a bias towards the left side, i.e., it uses values from more nodes to the left than from the right to compute the discrete derivative approximation at a given node (in the interior of the domain). In matrix form, this means more non-zero entries are left from the diagonal.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Matrix(D_upw.minus)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Analogously, the \"plus\" variant has a bias towards the right side.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Matrix(D_upw.plus)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"For more information on upwind SBP operators, please refer to the documentation of SummationByPartsOperators.jl and references cited there.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"The basic idea of upwind SBP schemes is to apply a flux vector splitting and use appropriate upwind operators for both parts of the flux. In 1D, this means to split the flux","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"f(u) = f^-(u) + f^+(u)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"such that f^-(u) is associated with left-going waves and f^+(u) with right-going waves. Then, we apply upwind SBP operators D^- D^+ with an appropriate upwind bias, resulting in","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"partial_x f(u) approx D^+ f^-(u) + D^- f^+(u)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Note that the established notations of upwind operators D^pm and flux splittings f^pm clash. The right-going waves from f^+ need an operator biased towards their upwind side, i.e., the left side. This upwind bias is provided by the operator D^-.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Many classical flux vector splittings have been developed for finite volume methods and are described in the book \"Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction\" of Eleuterio F. Toro (2009), DOI: 10.1007/b79761. One such a well-known splitting provided by Trixi.jl is splitting_steger_warming.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"Trixi.jl comes with several example setups using upwind SBP methods with flux vector splitting, e.g.,","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"elixir_euler_vortex.jl\nelixir_euler_taylor_green_vortex.jl","category":"page"},{"location":"tutorials/upwind_fdsbp/#Package-versions","page":"10 Upwind FD SBP schemes","title":"Package versions","text":"","category":"section"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"SummationByPartsOperators\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"","category":"page"},{"location":"tutorials/upwind_fdsbp/","page":"10 Upwind FD SBP schemes","title":"10 Upwind FD SBP schemes","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"EditURL = \"../../literate/src/files/hohqmesh_tutorial.jl\"","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#hohqmesh_tutorial","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17: Unstructured meshes with HOHQMesh.jl","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Trixi.jl supports numerical approximations on unstructured quadrilateral meshes with the UnstructuredMesh2D mesh type.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The purpose of this tutorial is to demonstrate how to use the UnstructuredMesh2D functionality of Trixi.jl. This begins by running and visualizing an available unstructured quadrilateral mesh example. Then, the tutorial will demonstrate how to conceptualize a problem with curved boundaries, generate a curvilinear mesh using the available software in the Trixi.jl ecosystem, and then run a simulation using Trixi.jl on said mesh.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Unstructured quadrilateral meshes can be made with the High-Order Hex-Quad Mesh (HOHQMesh) generator created and developed by David Kopriva. HOHQMesh is a mesh generator specifically designed for spectral element methods. It provides high-order boundary curve information (needed to accurately set boundary conditions) and elements can be larger (due to the high accuracy of the spatial approximation) compared to traditional finite element mesh generators. For more information about the design and features of HOHQMesh one can refer to its official documentation.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"HOHQMesh is incorporated into the Trixi.jl framework via the registered Julia package HOHQMesh.jl. This package provides a Julia wrapper for the HOHQMesh generator that allows users to easily create mesh files without the need to build HOHQMesh from source. To install the HOHQMesh package execute","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"import Pkg; Pkg.add(\"HOHQMesh\")","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Now we are ready to generate an unstructured quadrilateral mesh that can be used by Trixi.jl.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Running-and-visualizing-an-unstructured-simulation","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Running and visualizing an unstructured simulation","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Trixi.jl supports solving hyperbolic problems on several mesh types. There is a default example for this mesh type that can be executed by","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using Trixi\nrm(\"out\", force = true, recursive = true) #hide\nredirect_stdio(stdout=devnull, stderr=devnull) do # code that prints annoying stuff we don't want to see here #hide\ntrixi_include(default_example_unstructured())\nend #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"This will compute a smooth, manufactured solution test case for the 2D compressible Euler equations on the curved quadrilateral mesh described in the Trixi.jl documentation.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Apart from the usual error and timing output provided by the Trixi.jl run, it is useful to visualize and inspect the solution. One option available in the Trixi.jl framework to visualize the solution on unstructured quadrilateral meshes is post-processing the Trixi.jl output file(s) with the Trixi2Vtk tool and plotting them with ParaView.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"To convert the HDF5-formatted .h5 output file(s) from Trixi.jl into VTK format execute the following","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using Trixi2Vtk\nredirect_stdio(stdout=devnull, stderr=devnull) do # code that prints annoying stuff we don't want to see here #hide\ntrixi2vtk(\"out/solution_000000180.h5\", output_directory=\"out\")\nend #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Note this step takes about 15-30 seconds as the package Trixi2Vtk must be precompiled and executed for the first time in your REPL session. The trixi2vtk command above will convert the solution file at the final time into a .vtu file which can be read in and visualized with ParaView. Optional arguments for trixi2vtk are: (1) Pointing to the output_directory where the new files will be saved; it defaults to the current directory. (2) Specifying a higher number of visualization nodes. For instance, if we want to use 12 uniformly spaced nodes for visualization we can execute","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"redirect_stdio(stdout=devnull, stderr=devnull) do # code that prints annoying stuff we don't want to see here #hide\ntrixi2vtk(\"out/solution_000000180.h5\", output_directory=\"out\", nvisnodes=12)\nend #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"By default trixi2vtk sets nvisnodes to be the same as the number of nodes specified in the elixir file used to run the simulation.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Finally, if you want to convert all the solution files to VTK execute","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"redirect_stdio(stdout=devnull, stderr=devnull) do # code that prints annoying stuff we don't want to see here #hide\ntrixi2vtk(\"out/solution_000*.h5\", output_directory=\"out\", nvisnodes=12)\nend #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"then it is possible to open the .pvd file with ParaView and create a video of the simulation.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Creating-a-mesh-using-HOHQMesh","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Creating a mesh using HOHQMesh","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The creation of an unstructured quadrilateral mesh using HOHQMesh.jl is driven by a control file. In this file the user dictates the domain to be meshed, prescribes any desired boundary curvature, the polynomial order of said boundaries, etc. In this tutorial we cover several basic features of the possible control inputs. For a complete discussion on this topic see the HOHQMesh control file documentation.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"To begin, we provide a complete control file in this tutorial. After this we give a breakdown of the control file components to explain the chosen parameters.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Suppose we want to create a mesh of a domain with straight sided outer boundaries and a curvilinear \"ice cream cone\" shaped object at its center.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: mesh_boundary_cartoon)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The associated ice_cream_straight_sides.control file is created below.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"open(\"out/ice_cream_straight_sides.control\", \"w\") do io\n println(io, raw\"\"\"\n\\begin{CONTROL_INPUT}\n \\begin{RUN_PARAMETERS}\n mesh file name = ice_cream_straight_sides.mesh\n plot file name = ice_cream_straight_sides.tec\n stats file name = none\n mesh file format = ISM-v2\n polynomial order = 4\n plot file format = skeleton\n \\end{RUN_PARAMETERS}\n\n \\begin{BACKGROUND_GRID}\n x0 = [-8.0, -8.0, 0.0]\n dx = [1.0, 1.0, 0.0]\n N = [16,16,1]\n \\end{BACKGROUND_GRID}\n\n \\begin{SPRING_SMOOTHER}\n smoothing = ON\n smoothing type = LinearAndCrossBarSpring\n number of iterations = 25\n \\end{SPRING_SMOOTHER}\n\n\\end{CONTROL_INPUT}\n\n\\begin{MODEL}\n\n \\begin{INNER_BOUNDARIES}\n\n \\begin{CHAIN}\n name = IceCreamCone\n \\begin{END_POINTS_LINE}\n name = LeftSlant\n xStart = [-2.0, 1.0, 0.0]\n xEnd = [ 0.0, -3.0, 0.0]\n \\end{END_POINTS_LINE}\n\n \\begin{END_POINTS_LINE}\n name = RightSlant\n xStart = [ 0.0, -3.0, 0.0]\n xEnd = [ 2.0, 1.0, 0.0]\n \\end{END_POINTS_LINE}\n\n \\begin{CIRCULAR_ARC}\n name = IceCream\n units = degrees\n center = [ 0.0, 1.0, 0.0]\n radius = 2.0\n start angle = 0.0\n end angle = 180.0\n \\end{CIRCULAR_ARC}\n \\end{CHAIN}\n\n \\end{INNER_BOUNDARIES}\n\n\\end{MODEL}\n\\end{FILE}\n\"\"\")\nend","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The first three blocks of information are wrapped within a CONTROL_INPUT environment block as they define the core components of the quadrilateral mesh that will be generated.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The first block of information in RUN_PARAMETERS is","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"\\begin{RUN_PARAMETERS}\n mesh file name = ice_cream_straight_sides.mesh\n plot file name = ice_cream_straight_sides.tec\n stats file name = none\n mesh file format = ISM-v2\n polynomial order = 4\n plot file format = skeleton\n\\end{RUN_PARAMETERS}","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The mesh and plot file names will be the files created by HOHQMesh once successfully executed. The stats file name is available if you wish to also save a collection of mesh statistics. For this example it is deactivated. These file names given within RUN_PARAMETERS should match that of the control file, and although this is not required by HOHQMesh, it is a useful style convention. The mesh file format ISM-v2 in the format currently required by Trixi.jl. The polynomial order prescribes the order of an interpolant constructed on the Chebyshev-Gauss-Lobatto nodes that is used to represent any curved boundaries on a particular element. The plot file format of skeleton means that visualizing the plot file will only draw the element boundaries (and no internal nodes). Alternatively, the format can be set to sem to visualize the interior nodes of the approximation as well.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The second block of information in BACKGROUND_GRID is","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"\\begin{BACKGROUND_GRID}\n x0 = [-8.0, -8.0, 0.0]\n dx = [1.0, 1.0, 0.0]\n N = [16,16,1]\n\\end{BACKGROUND_GRID}","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"This lays a grid of Cartesian elements for the domain beginning at the point x0 as its bottom-left corner. The value of dx, which could differ in each direction if desired, controls the step size taken in each Cartesian direction. The values in N set how many Cartesian box elements are set in each coordinate direction. The above parameters define a 16times 16 element square mesh on -88^2. Further, this sets up four outer boundaries of the domain that are given the default names: Top, Left, Bottom, Right.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The third block of information in SPRING_SMOOTHER is","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"\\begin{SPRING_SMOOTHER}\n smoothing = ON\n smoothing type = LinearAndCrossBarSpring\n number of iterations = 25\n\\end{SPRING_SMOOTHER}","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Once HOHQMesh generates the mesh, a spring-mass-dashpot model is created to smooth the mesh and create \"nicer\" quadrilateral elements. The default parameters of Hooke's law for the spring-mass-dashpot model have been selected after a fair amount of experimentation across many meshes. If you wish to deactivate this feature you can set smoothing = OFF (or remove this block from the control file).","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"After the CONTROL_INPUT environment block comes the MODEL environment block. It is here where the user prescribes curved boundary information with either:","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"An OUTER_BOUNDARY (covered in the next section of this tutorial).\nOne or more INNER_BOUNDARIES.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"There are several options to describe the boundary curve data to HOHQMesh like splines or parametric curves.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"For the example ice_cream_straight_sides.control we define three internal boundaries; two straight-sided and one as a circular arc. Within the HOHQMesh control input each curve must be assigned to a CHAIN as shown below in the complete INNER_BOUNDARIES block.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"\\begin{INNER_BOUNDARIES}\n\n \\begin{CHAIN}\n name = IceCreamCone\n \\begin{END_POINTS_LINE}\n name = LeftSlant\n xStart = [-2.0, 1.0, 0.0]\n xEnd = [ 0.0, -3.0, 0.0]\n \\end{END_POINTS_LINE}\n\n \\begin{END_POINTS_LINE}\n name = RightSlant\n xStart = [ 0.0, -3.0, 0.0]\n xEnd = [ 2.0, 1.0, 0.0]\n \\end{END_POINTS_LINE}\n\n \\begin{CIRCULAR_ARC}\n name = IceCream\n units = degrees\n center = [ 0.0, 1.0, 0.0]\n radius = 2.0\n start angle = 0.0\n end angle = 180.0\n \\end{CIRCULAR_ARC}\n \\end{CHAIN}\n\n\\end{INNER_BOUNDARIES}","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"It is important to note there are two name quantities one for the CHAIN and one for the PARAMETRIC_EQUATION_CURVE. The name for the CHAIN is used internally by HOHQMesh, so if you have multiple CHAINs they must be given a unique name. The name for the PARAMETRIC_EQUATION_CURVE will be printed to the appropriate boundaries within the .mesh file produced by HOHQMesh.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"We create the mesh file ice_cream_straight_sides.mesh and its associated file for plotting ice_cream_straight_sides.tec by using HOHQMesh.jl's function generate_mesh.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using HOHQMesh\ncontrol_file = joinpath(\"out\", \"ice_cream_straight_sides.control\")\noutput = generate_mesh(control_file);\nnothing #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The mesh file ice_cream_straight_sides.mesh and its associated file for plotting ice_cream_straight_sides.tec are placed in the out folder. The resulting mesh generated by HOHQMesh.jl is given in the following figure.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: mesh_straight_sides)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"We note that Trixi.jl uses the boundary name information from the control file to assign boundary conditions in an elixir file. Therefore, the name should start with a letter and consist only of alphanumeric characters and underscores. Please note that the name will be treated as case sensitive.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Example-simulation-on-ice_cream_straight_sides.mesh","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Example simulation on ice_cream_straight_sides.mesh","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"With this newly generated mesh we are ready to run a Trixi.jl simulation on an unstructured quadrilateral mesh. For this we must create a new elixir file.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The elixir file given below creates an initial condition for a uniform background flow state with a free stream Mach number of 0.3. A focus for this part of the tutorial is to specify the boundary conditions and to construct the new mesh from the file that was generated in the previous exercise.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"It is straightforward to set the different boundary condition types in an elixir by assigning a particular function to a boundary name inside a Julia dictionary, Dict, variable. Observe that the names of these boundaries match those provided by HOHQMesh either by default, e.g. Bottom, or user assigned, e.g. IceCream. For this problem setup use","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Freestream boundary conditions on the four box edges.\nFree slip wall boundary condition on the interior curved boundaries.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"To construct the unstructured quadrilateral mesh from the HOHQMesh file we point to the appropriate location with the variable mesh_file and then feed this into the constructor for the UnstructuredMesh2D type in Trixi.jl","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"# create the unstructured mesh from your mesh file\nusing Trixi\nmesh_file = joinpath(\"out\", \"ice_cream_straight_sides.mesh\")\nmesh = UnstructuredMesh2D(mesh_file);","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The complete elixir file for this simulation example is given below.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using OrdinaryDiffEq, Trixi\n\nequations = CompressibleEulerEquations2D(1.4) # set gas gamma = 1.4\n\n# freestream flow state with Ma_inf = 0.3\n@inline function uniform_flow_state(x, t, equations::CompressibleEulerEquations2D)\n\n # set the freestream flow parameters\n rho_freestream = 1.0\n u_freestream = 0.3\n p_freestream = inv(equations.gamma)\n\n theta = 0.0 # zero angle of attack\n si, co = sincos(theta)\n v1 = u_freestream * co\n v2 = u_freestream * si\n\n prim = SVector(rho_freestream, v1, v2, p_freestream)\n return prim2cons(prim, equations)\nend\n\n# initial condition\ninitial_condition = uniform_flow_state\n\n# boundary condition types\nboundary_condition_uniform_flow = BoundaryConditionDirichlet(uniform_flow_state)\n\n# boundary condition dictionary\nboundary_conditions = Dict( :Bottom => boundary_condition_uniform_flow,\n :Top => boundary_condition_uniform_flow,\n :Right => boundary_condition_uniform_flow,\n :Left => boundary_condition_uniform_flow,\n :LeftSlant => boundary_condition_slip_wall,\n :RightSlant => boundary_condition_slip_wall,\n :IceCream => boundary_condition_slip_wall );\n\n# DGSEM solver.\n# 1) polydeg must be >= the polynomial order set in the HOHQMesh control file to guarantee\n# freestream preservation. As a extra task try setting polydeg=3\n# 2) VolumeIntegralFluxDifferencing with central volume flux is activated\n# for dealiasing\nvolume_flux = flux_ranocha\nsolver = DGSEM(polydeg=4, surface_flux=flux_hll,\n volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n\n# create the unstructured mesh from your mesh file\nmesh_file = joinpath(\"out\", \"ice_cream_straight_sides.mesh\")\nmesh = UnstructuredMesh2D(mesh_file)\n\n# Create semidiscretization with all spatial discretization-related components\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n boundary_conditions=boundary_conditions)\n\n# Create ODE problem from semidiscretization with time span from 0.0 to 2.0\ntspan = (0.0, 2.0)\node = semidiscretize(semi, tspan)\n\n\n# Create the callbacks to output solution files and adapt the time step\nsummary_callback = SummaryCallback()\nsave_solution = SaveSolutionCallback(interval=10,\n save_initial_solution=true,\n save_final_solution=true)\nstepsize_callback = StepsizeCallback(cfl=1.0)\n\ncallbacks = CallbackSet(summary_callback, save_solution, stepsize_callback)\n\nredirect_stdio(stdout=devnull, stderr=devnull) do # code that prints annoying stuff we don't want to see here #hide\n# Evolve ODE problem in time using `solve` from OrdinaryDiffEq\nsol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n save_everystep=false, callback=callbacks);\n# print the timer summary\nsummary_callback()\nend #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Visualization of the solution is carried out in a similar way as above. That is, one converts the .h5 output files with trixi2vtk and then plot the solution in ParaView. An example plot of the pressure at the final time is shown below.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: simulation_straight_sides)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Making-a-mesh-with-a-curved-outer-boundary","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Making a mesh with a curved outer boundary","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Let us modify the mesh from the previous task and place a circular outer boundary instead of straight-sided outer boundaries. Note, the \"ice cream cone\" shape is still placed at the center of the domain.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"We create the new control file ice_cream_curved_sides.control file below and will then highlight the major differences compared to ice_cream_straight_sides.control.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"open(\"out/ice_cream_curved_sides.control\", \"w\") do io\n println(io, raw\"\"\"\n\\begin{CONTROL_INPUT}\n \\begin{RUN_PARAMETERS}\n mesh file name = ice_cream_curved_sides.mesh\n plot file name = ice_cream_curved_sides.tec\n stats file name = none\n mesh file format = ISM-v2\n polynomial order = 4\n plot file format = skeleton\n \\end{RUN_PARAMETERS}\n\n \\begin{BACKGROUND_GRID}\n background grid size = [1.0, 1.0, 0.0]\n \\end{BACKGROUND_GRID}\n\n \\begin{SPRING_SMOOTHER}\n smoothing = ON\n smoothing type = LinearAndCrossBarSpring\n number of iterations = 25\n \\end{SPRING_SMOOTHER}\n\n\\end{CONTROL_INPUT}\n\n\\begin{MODEL}\n\n \\begin{OUTER_BOUNDARY}\n \\begin{PARAMETRIC_EQUATION_CURVE}\n name = OuterCircle\n xEqn = x(t) = 8.0*sin(2.0*pi*t)\n yEqn = y(t) = 8.0*cos(2.0*pi*t)\n zEqn = z(t) = 0.0\n \\end{PARAMETRIC_EQUATION_CURVE}\n\n \\end{OUTER_BOUNDARY}\n\n \\begin{INNER_BOUNDARIES}\n\n \\begin{CHAIN}\n name = IceCreamCone\n \\begin{END_POINTS_LINE}\n name = LeftSlant\n xStart = [-2.0, 1.0, 0.0]\n xEnd = [ 0.0, -3.0, 0.0]\n \\end{END_POINTS_LINE}\n\n \\begin{END_POINTS_LINE}\n name = RightSlant\n xStart = [ 0.0, -3.0, 0.0]\n xEnd = [ 2.0, 1.0, 0.0]\n \\end{END_POINTS_LINE}\n\n \\begin{CIRCULAR_ARC}\n name = IceCream\n units = degrees\n center = [ 0.0, 1.0, 0.0]\n radius = 2.0\n start angle = 0.0\n end angle = 180.0\n \\end{CIRCULAR_ARC}\n \\end{CHAIN}\n\n \\end{INNER_BOUNDARIES}\n\n\\end{MODEL}\n\\end{FILE}\n\"\"\")\nend","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The first alteration is that we have altered the second block of information BACKGROUND_GRID within the CONTROL_INPUT to be","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"\\begin{BACKGROUND_GRID}\n background grid size = [1.0, 1.0, 0.0]\n\\end{BACKGROUND_GRID}","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"This mesh control file has an outer boundary that determines the extent of the domain to be meshed. Therefore, we only need to supply the background grid size to the BACKGROUND_GRID control input.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The second alteration is that the MODEL now contains information for an OUTER_BOUNDARY. In this case it is a circle of radius 8 centered at [0.0, 0.0, 0.0] written as a set of PARAMETRIC_EQUATION_CURVEs.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":" \\begin{OUTER_BOUNDARY}\n\n \\begin{PARAMETRIC_EQUATION_CURVE}\n name = OuterCircle\n xEqn = x(t) = 8.0*sin(2.0*pi*t)\n yEqn = y(t) = 8.0*cos(2.0*pi*t)\n zEqn = z(t) = 0.0\n \\end{PARAMETRIC_EQUATION_CURVE}\n\n \\end{OUTER_BOUNDARY}","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Just as with the inner boundary curves, we must assign a name to the OUTER_BOUNDARY. It will be included in the generated .mesh file and is used within the Trixi.jl elixir file to set boundary conditions.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Again, we create the .mesh and .tec files with HOHQMesh.jl's function generate_mesh","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"control_file = joinpath(\"out\", \"ice_cream_curved_sides.control\")\noutput = generate_mesh(control_file);\nnothing #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The files are placed in the out folder.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The resulting mesh generated by HOHQMesh.jl is given in the following figure.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: mesh_curved_sides)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Running-Trixi.jl-on-ice_cream_curved_sides.mesh","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Running Trixi.jl on ice_cream_curved_sides.mesh","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"We can reuse much of the elixir file to setup the uniform flow over an ice cream cone from the previous part of this tutorial. The only component of the elixir file that must be changed is the boundary condition dictionary because we now have a boundary named OuterCircle instead of four edges of a bounding box.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"# boundary condition dictionary\nboundary_conditions = Dict( :OuterCircle => boundary_condition_uniform_flow,\n :LeftSlant => boundary_condition_slip_wall,\n :RightSlant => boundary_condition_slip_wall,\n :IceCream => boundary_condition_slip_wall );\nnothing #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Also, we must update the construction of the mesh from our new mesh file ice_cream_curved_sides.mesh that is located in the out folder.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"# create the unstructured mesh from your mesh file\nmesh_file = joinpath(\"out\", \"ice_cream_curved_sides.mesh\")\nmesh = UnstructuredMesh2D(mesh_file);\nnothing #hide","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"We can then post-process the solution file at the final time on the new mesh with Trixi2Vtk and visualize with ParaView.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: simulation_curved_sides)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Setting-up-a-simulation-with-AMR-via-P4estMesh","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Setting up a simulation with AMR via P4estMesh","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"The above explained mesh file format of ISM-V2 only works with UnstructuredMesh2D and so does not support AMR. On the other hand, the mesh type P4estMesh allows AMR. The mesh constructor for the P4estMesh imports an unstructured, conforming mesh from an Abaqus mesh file (.inp).","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"As described above, the first block of the HOHQMesh control file contains the parameter mesh file format. If you set mesh file format = ABAQUS instead of ISM-V2, HOHQMesh.jl's function generate_mesh creates an Abaqus mesh file .inp.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using HOHQMesh\ncontrol_file = joinpath(\"out\", \"ice_cream_straight_sides.control\")\noutput = generate_mesh(control_file);","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Now, you can create a P4estMesh from your mesh file. It is described in detail in the P4est-based mesh part of the Trixi.jl docs.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using Trixi\nmesh_file = joinpath(\"out\", \"ice_cream_straight_sides.inp\")\nmesh = P4estMesh{2}(mesh_file)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"Since P4estMesh supports AMR, we just have to extend the setup from the first example by the standard AMR procedure. For more information about AMR in Trixi.jl, see the matching tutorial.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"amr_indicator = IndicatorLöhner(semi, variable=density)\n\namr_controller = ControllerThreeLevel(semi, amr_indicator,\n base_level=0,\n med_level =1, med_threshold=0.05,\n max_level =3, max_threshold=0.1)\n\namr_callback = AMRCallback(semi, amr_controller,\n interval=5,\n adapt_initial_condition=true,\n adapt_initial_condition_only_refine=true)\n\ncallbacks = CallbackSet(..., amr_callback)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"We can then post-process the solution file at the final time on the new mesh with Trixi2Vtk and visualize with ParaView, see the appropriate visualization section for details.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"(Image: simulation_straight_sides_p4est_amr)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/#Package-versions","page":"17 Unstructured meshes with HOHQMesh.jl","title":"Package versions","text":"","category":"section"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\", \"Trixi2Vtk\", \"HOHQMesh\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"","category":"page"},{"location":"tutorials/hohqmesh_tutorial/","page":"17 Unstructured meshes with HOHQMesh.jl","title":"17 Unstructured meshes with HOHQMesh.jl","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"EditURL = \"../../literate/src/files/DGMulti_2.jl\"","category":"page"},{"location":"tutorials/DGMulti_2/#DGMulti_2","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9: Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"","category":"section"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"For a tutorial about DG schemes via the DGMulti solver please visit the previous tutorial. The DGMulti solver also supports other methods than DG. The important property a method has to fulfill is the summation-by-parts (SBP) property. The package SummationByPartsOperators.jl provides such methods, like a finite difference SBP (FD SBP) scheme. To do this, you need to create an SBP derivative operator and pass that as approximation_type to the DGMulti constructor. For example, the classical second-order FD SBP operator can be created as","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly\nD = derivative_operator(MattssonNordström2004(), derivative_order=1, accuracy_order=2,\n xmin=0.0, xmax=1.0, N=11)","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"Here, the arguments xmin and xmax do not matter beyond setting the real type used for the operator - they just set a reference element and are rescaled on the physical elements. The parameter N determines the number of finite difference nodes. Then, D can be used as approximation_type like SBP() in a multi-block fashion. In multiple dimensions, such a 1D SBP operator will be used in a tensor product fashion, i.e., in each coordinate direction. In particular, you can use them only on 1D, 2D Quad(), and 3D Hex() elements.","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"You can also use fully periodic single-block FD methods by creating a periodic SBP operator. For example, a fully periodic FD operator can be constructed as","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"D = periodic_derivative_operator(derivative_order=1, accuracy_order=2,\n xmin=0.0, xmax=1.0, N=11)","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"An example using such an FD method is implemented in elixir_euler_fdsbp_periodic.jl. For all parameters and other calling options, please have a look in the documentation of SummationByPartsOperators.jl.","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"Another possible method is for instance a continuous Galerkin (CGSEM) method. You can use such a method with polynomial degree of 3 (N=4 Legendre Lobatto nodes on [0, 1]) coupled continuously on a uniform mesh with Nx=10 elements by setting approximation_type to","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly\nD = couple_continuously(legendre_derivative_operator(xmin=0.0, xmax=1.0, N=4),\n UniformPeriodicMesh1D(xmin=-1.0, xmax=1.0, Nx=10))","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"To choose a discontinuous coupling (DGSEM), use couple_discontinuously() instead of couple_continuously().","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"For more information and other SBP operators, see the documentations of StartUpDG.jl and SummationByPartsOperators.jl.","category":"page"},{"location":"tutorials/DGMulti_2/#Package-versions","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"Package versions","text":"","category":"section"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"StartUpDG\", \"SummationByPartsOperators\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"","category":"page"},{"location":"tutorials/DGMulti_2/","page":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"EditURL = \"../../literate/src/files/parabolic_terms.jl\"","category":"page"},{"location":"tutorials/parabolic_terms/#parabolic_terms","page":"13 Parabolic terms","title":"13: Parabolic terms","text":"","category":"section"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"Experimental support for parabolic diffusion terms is available in Trixi.jl. This demo illustrates parabolic terms for the advection-diffusion equation.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"using OrdinaryDiffEq\nusing Trixi","category":"page"},{"location":"tutorials/parabolic_terms/#Splitting-a-system-into-hyperbolic-and-parabolic-parts.","page":"13 Parabolic terms","title":"Splitting a system into hyperbolic and parabolic parts.","text":"","category":"section"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"For a mixed hyperbolic-parabolic system, we represent the hyperbolic and parabolic parts of the system separately. We first define the hyperbolic (advection) part of the advection-diffusion equation.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"advection_velocity = (1.5, 1.0)\nequations_hyperbolic = LinearScalarAdvectionEquation2D(advection_velocity);\nnothing #hide","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"Next, we define the parabolic diffusion term. The constructor requires knowledge of equations_hyperbolic to be passed in because the LaplaceDiffusion2D applies diffusion to every variable of the hyperbolic system.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"diffusivity = 5.0e-2\nequations_parabolic = LaplaceDiffusion2D(diffusivity, equations_hyperbolic);\nnothing #hide","category":"page"},{"location":"tutorials/parabolic_terms/#Boundary-conditions","page":"13 Parabolic terms","title":"Boundary conditions","text":"","category":"section"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"As with the equations, we define boundary conditions separately for the hyperbolic and parabolic part of the system. For this example, we impose inflow BCs for the hyperbolic system (no condition is imposed on the outflow), and we impose Dirichlet boundary conditions for the parabolic equations. Both BoundaryConditionDirichlet and BoundaryConditionNeumann are defined for LaplaceDiffusion2D.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"The hyperbolic and parabolic boundary conditions are assumed to be consistent with each other.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"boundary_condition_zero_dirichlet = BoundaryConditionDirichlet((x, t, equations) -> SVector(0.0))\n\nboundary_conditions_hyperbolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1 + 0.5 * x[2])),\n y_neg = boundary_condition_zero_dirichlet,\n y_pos = boundary_condition_do_nothing,\n x_pos = boundary_condition_do_nothing)\n\nboundary_conditions_parabolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1 + 0.5 * x[2])),\n y_neg = boundary_condition_zero_dirichlet,\n y_pos = boundary_condition_zero_dirichlet,\n x_pos = boundary_condition_zero_dirichlet);\nnothing #hide","category":"page"},{"location":"tutorials/parabolic_terms/#Defining-the-solver-and-mesh","page":"13 Parabolic terms","title":"Defining the solver and mesh","text":"","category":"section"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"The process of creating the DG solver and mesh is the same as for a purely hyperbolic system of equations.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\ncoordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))\ncoordinates_max = ( 1.0, 1.0) # maximum coordinates (max(x), max(y))\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=4,\n periodicity=false, n_cells_max=30_000) # set maximum capacity of tree data structure\n\ninitial_condition = (x, t, equations) -> SVector(0.0);\nnothing #hide","category":"page"},{"location":"tutorials/parabolic_terms/#Semidiscretizing-and-solving","page":"13 Parabolic terms","title":"Semidiscretizing and solving","text":"","category":"section"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"To semidiscretize a hyperbolic-parabolic system, we create a SemidiscretizationHyperbolicParabolic. This differs from a SemidiscretizationHyperbolic in that we pass in a Tuple containing both the hyperbolic and parabolic equation, as well as a Tuple containing the hyperbolic and parabolic boundary conditions.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"semi = SemidiscretizationHyperbolicParabolic(mesh,\n (equations_hyperbolic, equations_parabolic),\n initial_condition, solver;\n boundary_conditions=(boundary_conditions_hyperbolic,\n boundary_conditions_parabolic))","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"The rest of the code is identical to the hyperbolic case. We create a system of ODEs through semidiscretize, defining callbacks, and then passing the system to OrdinaryDiffEq.jl.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"tspan = (0.0, 1.5)\node = semidiscretize(semi, tspan)\ncallbacks = CallbackSet(SummaryCallback())\ntime_int_tol = 1.0e-6\nsol = solve(ode, RDPK3SpFSAL49(); abstol=time_int_tol, reltol=time_int_tol,\n ode_default_options()..., callback=callbacks);\nnothing #hide","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"We can now visualize the solution, which develops a boundary layer at the outflow boundaries.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"using Plots\nplot(sol)","category":"page"},{"location":"tutorials/parabolic_terms/#Package-versions","page":"13 Parabolic terms","title":"Package versions","text":"","category":"section"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"","category":"page"},{"location":"tutorials/parabolic_terms/","page":"13 Parabolic terms","title":"13 Parabolic terms","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"EditURL = \"../../literate/src/files/index.jl\"","category":"page"},{"location":"tutorials/introduction/#Tutorials-for-Trixi.jl","page":"Introduction","title":"Tutorials for Trixi.jl","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"The tutorial section for Trixi.jl also contains interactive step-by-step explanations via Binder.","category":"page"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Right now, you are using the classic documentation. The corresponding interactive notebooks can be opened in Binder and viewed in nbviewer via the icons (Image: ) and (Image: ) in the respective tutorial. You can also open the raw notebook files via (Image: ).","category":"page"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Note: To improve responsiveness via caching, the notebooks are updated only once a week. They are only available for the latest stable release of Trixi.jl at the time of caching.","category":"page"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"There are tutorials for the following topics:","category":"page"},{"location":"tutorials/introduction/#[1-First-steps-in-Trixi.jl](@ref-getting_started)","page":"Introduction","title":"1 First steps in Trixi.jl","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial provides guidance for getting started with Trixi.jl, and Julia as well. It outlines the installation procedures for both Julia and Trixi.jl, the execution of Trixi.jl elixirs, the fundamental structure of a Trixi.jl setup, the visualization of results, and the development process for Trixi.jl.","category":"page"},{"location":"tutorials/introduction/#[2-Behind-the-scenes-of-a-simulation-setup](@ref-behind_the_scenes_simulation_setup)","page":"Introduction","title":"2 Behind the scenes of a simulation setup","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial will guide you through a simple Trixi.jl setup (\"elixir\"), giving an overview of what happens in the background during the initialization of a simulation. While the setup described herein does not cover all details, it involves relatively stable parts of Trixi.jl that are unlikely to undergo significant changes in the near future. The goal is to clarify some of the more fundamental, technical concepts that are applicable to a variety of (also more complex) configurations.s","category":"page"},{"location":"tutorials/introduction/#[3-Introduction-to-DG-methods](@ref-scalar_linear_advection_1d)","page":"Introduction","title":"3 Introduction to DG methods","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial gives an introduction to discontinuous Galerkin (DG) methods with the example of the scalar linear advection equation in 1D. Starting with some theoretical explanations, we first implement a raw version of a discontinuous Galerkin spectral element method (DGSEM). Then, we will show how to use features of Trixi.jl to achieve the same result.","category":"page"},{"location":"tutorials/introduction/#[4-DGSEM-with-flux-differencing](@ref-DGSEM_FluxDiff)","page":"Introduction","title":"4 DGSEM with flux differencing","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"To improve stability often the flux differencing formulation of the DGSEM (split form) is used. We want to present the idea and formulation on a basic 1D level. Then, we show how this formulation can be implemented in Trixi.jl and analyse entropy conservation for two different flux combinations.","category":"page"},{"location":"tutorials/introduction/#[5-Shock-capturing-with-flux-differencing-and-stage-limiter](@ref-shock_capturing)","page":"Introduction","title":"5 Shock capturing with flux differencing and stage limiter","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Using the flux differencing formulation, a simple procedure to capture shocks is a hybrid blending of a high-order DG method and a low-order subcell finite volume (FV) method. We present the idea on a very basic level and show the implementation in Trixi.jl. Then, a positivity preserving limiter is explained and added to an exemplary simulation of the Sedov blast wave with the 2D compressible Euler equations.","category":"page"},{"location":"tutorials/introduction/#[6-Subcell-limiting-with-the-IDP-Limiter](@ref-subcell_shock_capturing)","page":"Introduction","title":"6 Subcell limiting with the IDP Limiter","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Trixi.jl features a subcell-wise limiting strategy utilizing an Invariant Domain-Preserving (IDP) approach. This IDP approach computes a blending factor that balances the high-order discontinuous Galerkin (DG) method with a low-order subcell finite volume (FV) method for each node within an element. This localized approach minimizes the application of dissipation, resulting in less limiting compared to the element-wise strategy. Additionally, the framework supports both local bounds, which are primarily used for shock capturing, and global bounds. The application of global bounds ensures the minimal necessary limiting to meet physical admissibility conditions, such as ensuring the non-negativity of variables.","category":"page"},{"location":"tutorials/introduction/#[7-Non-periodic-boundary-conditions](@ref-non_periodic_boundaries)","page":"Introduction","title":"7 Non-periodic boundary conditions","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Thus far, all examples used periodic boundaries. In Trixi.jl, you can also set up a simulation with non-periodic boundaries. This tutorial presents the implementation of the classical Dirichlet boundary condition with a following example. Then, other non-periodic boundaries are mentioned.","category":"page"},{"location":"tutorials/introduction/#[8-DG-schemes-via-DGMulti-solver](@ref-DGMulti_1)","page":"Introduction","title":"8 DG schemes via DGMulti solver","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial is about the more general DG solver DGMulti, introduced here. We are showing some examples for this solver, for instance with discretization nodes by Gauss or triangular elements. Moreover, we present a simple way to include pre-defined triangulate meshes for non-Cartesian domains using the package StartUpDG.jl.","category":"page"},{"location":"tutorials/introduction/#[9-Other-SBP-schemes-(FD,-CGSEM)-via-DGMulti-solver](@ref-DGMulti_2)","page":"Introduction","title":"9 Other SBP schemes (FD, CGSEM) via DGMulti solver","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Supplementary to the previous tutorial about DG schemes via the DGMulti solver we now present the possibility for DGMulti to use other SBP schemes via the package SummationByPartsOperators.jl. For instance, we show how to set up a finite differences (FD) scheme and a continuous Galerkin (CGSEM) method.","category":"page"},{"location":"tutorials/introduction/#[10-Upwind-FD-SBP-schemes](@ref-upwind_fdsbp)","page":"Introduction","title":"10 Upwind FD SBP schemes","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"General SBP schemes can not only be used via the DGMulti solver but also with a general DG solver. In particular, upwind finite difference SBP methods can be used together with the TreeMesh. Similar to general SBP schemes in the DGMulti framework, the interface is based on the package SummationByPartsOperators.jl.","category":"page"},{"location":"tutorials/introduction/#[11-Adding-a-new-scalar-conservation-law](@ref-adding_new_scalar_equations)","page":"Introduction","title":"11 Adding a new scalar conservation law","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial explains how to add a new physics model using the example of the cubic conservation law. First, we define the equation using a struct CubicEquation and the physical flux. Then, the corresponding standard setup in Trixi.jl (mesh, solver, semi and ode) is implemented and the ODE problem is solved by OrdinaryDiffEq's solve method.","category":"page"},{"location":"tutorials/introduction/#[12-Adding-a-non-conservative-equation](@ref-adding_nonconservative_equation)","page":"Introduction","title":"12 Adding a non-conservative equation","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"In this part, another physics model is implemented, the nonconservative linear advection equation. We run two different simulations with different levels of refinement and compare the resulting errors.","category":"page"},{"location":"tutorials/introduction/#[13-Parabolic-terms](@ref-parabolic_terms)","page":"Introduction","title":"13 Parabolic terms","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial describes how parabolic terms are implemented in Trixi.jl, e.g., to solve the advection-diffusion equation.","category":"page"},{"location":"tutorials/introduction/#[14-Adding-new-parabolic-terms](@ref-adding_new_parabolic_terms)","page":"Introduction","title":"14 Adding new parabolic terms","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial describes how new parabolic terms can be implemented using Trixi.jl.","category":"page"},{"location":"tutorials/introduction/#[15-Adaptive-mesh-refinement](@ref-adaptive_mesh_refinement)","page":"Introduction","title":"15 Adaptive mesh refinement","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Adaptive mesh refinement (AMR) helps to increase the accuracy in sensitive or turbolent regions while not wasting resources for less interesting parts of the domain. This leads to much more efficient simulations. This tutorial presents the implementation strategy of AMR in Trixi.jl, including the use of different indicators and controllers.","category":"page"},{"location":"tutorials/introduction/#[16-Structured-mesh-with-curvilinear-mapping](@ref-structured_mesh_mapping)","page":"Introduction","title":"16 Structured mesh with curvilinear mapping","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"In this tutorial, the use of Trixi.jl's structured curved mesh type StructuredMesh is explained. We present the two basic option to initialize such a mesh. First, the curved domain boundaries of a circular cylinder are set by explicit boundary functions. Then, a fully curved mesh is defined by passing the transformation mapping.","category":"page"},{"location":"tutorials/introduction/#[17-Unstructured-meshes-with-HOHQMesh.jl](@ref-hohqmesh_tutorial)","page":"Introduction","title":"17 Unstructured meshes with HOHQMesh.jl","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"The purpose of this tutorial is to demonstrate how to use the UnstructuredMesh2D functionality of Trixi.jl. This begins by running and visualizing an available unstructured quadrilateral mesh example. Then, the tutorial will demonstrate how to conceptualize a problem with curved boundaries, generate a curvilinear mesh using the available HOHQMesh software in the Trixi.jl ecosystem, and then run a simulation using Trixi.jl on said mesh. In the end, the tutorial briefly explains how to simulate an example using AMR via P4estMesh.","category":"page"},{"location":"tutorials/introduction/#[18-P4est-mesh-from-gmsh](@ref-p4est_from_gmsh)","page":"Introduction","title":"18 P4est mesh from gmsh","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial describes how to obtain a P4estMesh from an existing mesh generated by gmsh or any other meshing software that can export to the Abaqus input .inp format. The tutorial demonstrates how edges/faces can be associated with boundary conditions based on the physical nodesets.","category":"page"},{"location":"tutorials/introduction/#[19-Explicit-time-stepping](@ref-time_stepping)","page":"Introduction","title":"19 Explicit time stepping","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial is about time integration using OrdinaryDiffEq.jl. It explains how to use their algorithms and presents two types of time step choices - with error-based and CFL-based adaptive step size control.","category":"page"},{"location":"tutorials/introduction/#[20-Differentiable-programming](@ref-differentiable_programming)","page":"Introduction","title":"20 Differentiable programming","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This part deals with some basic differentiable programming topics. For example, a Jacobian, its eigenvalues and a curve of total energy (through the simulation) are calculated and plotted for a few semidiscretizations. Moreover, we calculate an example for propagating errors with Measurement.jl at the end.","category":"page"},{"location":"tutorials/introduction/#[21-Custom-semidiscretization](@ref-custom_semidiscretization)","page":"Introduction","title":"21 Custom semidiscretization","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This tutorial describes the semidiscretiations of Trixi.jl and explains how to extend them for custom tasks.","category":"page"},{"location":"tutorials/introduction/#Examples-in-Trixi.jl","page":"Introduction","title":"Examples in Trixi.jl","text":"","category":"section"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"Trixi.jl already contains several more coding examples, the so-called elixirs. You can find them in the folder examples/. They are structured by the underlying mesh type and the respective number of spatial dimensions. The name of an elixir is composed of the underlying system of conservation equations (for instance advection or euler) and other special characteristics like the initial condition (e.g. gauss, astro_jet, blast_wave) or the included simulation features (e.g. amr, shockcapturing).","category":"page"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"","category":"page"},{"location":"tutorials/introduction/","page":"Introduction","title":"Introduction","text":"This page was generated using Literate.jl.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"EditURL = \"../../../literate/src/files/first_steps/changing_trixi.jl\"","category":"page"},{"location":"tutorials/first_steps/changing_trixi/#changing_trixi","page":"1.3 Changing Trixi.jl itself","title":"1.3: First steps in Trixi.jl: Changing Trixi.jl itself","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"If you plan on editing Trixi.jl itself, you can download Trixi.jl locally and run it from the cloned directory.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/#Forking-Trixi.jl","page":"1.3 Changing Trixi.jl itself","title":"Forking Trixi.jl","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"To create your own fork of Trixi.jl, log in to your GitHub account, visit the Trixi.jl GitHub repository and click the Fork button located in the upper-right corner of the page. Then, click on Create fork in the opened window to complete the forking process.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/#Cloning-Trixi.jl","page":"1.3 Changing Trixi.jl itself","title":"Cloning Trixi.jl","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/#Windows","page":"1.3 Changing Trixi.jl itself","title":"Windows","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"If you are using Windows, you can clone Trixi.jl by using the GitHub Desktop tool:","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"If you do not have a GitHub account yet, create it on the GitHub website.\nDownload and install GitHub Desktop and then log in to your account.\nOpen GitHub Desktop, press Ctrl+Shift+O.\nIn the opened window, navigate to the URL tab and paste trixi-framework/Trixi.jl or YourGitHubUserName/Trixi.jl to clone your own fork of Trixi.jl, and choose the path to the folder where you want to save Trixi.jl. Then click Clone and Trixi.jl will be cloned to your computer.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Now you cloned Trixi.jl and only need to tell Julia to use the local clone as the package sources:","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Open a terminal using Win+r and cmd. Navigate to the folder with the cloned Trixi.jl using cd.\nCreate a new directory run, enter it, and start Julia with the --project=. flag:\nmkdir run\ncd run\njulia --project=.\nNow run the following commands to install all relevant packages:\nusing Pkg; Pkg.develop(PackageSpec(path=\"..\")) # Tell Julia to use the local Trixi.jl clone\nPkg.add([\"OrdinaryDiffEq\", \"Plots\"]) # Install additional packages","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Now you already installed Trixi.jl from your local clone. Note that if you installed Trixi.jl this way, you always have to start Julia with the --project flag set to your run directory, e.g.,","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"julia --project=.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"if already inside the run directory.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/#Linux","page":"1.3 Changing Trixi.jl itself","title":"Linux","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"You can clone Trixi.jl to your computer by executing the following commands:","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"git clone git@github.com:trixi-framework/Trixi.jl.git\n# If an error occurs, try the following:\n# git clone https://github.com/trixi-framework/Trixi.jl\ncd Trixi.jl\nmkdir run\ncd run\njulia --project=. -e 'using Pkg; Pkg.develop(PackageSpec(path=\"..\"))' # Tell Julia to use the local Trixi.jl clone\njulia --project=. -e 'using Pkg; Pkg.add([\"OrdinaryDiffEq\", \"Plots\"])' # Install additional packages","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Alternatively, you can clone your own fork of Trixi.jl by replacing the link git@github.com:trixi-framework/Trixi.jl.git with git@github.com:YourGitHubUserName/Trixi.jl.git.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Note that if you installed Trixi.jl this way, you always have to start Julia with the --project flag set to your run directory, e.g.,","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"julia --project=.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"if already inside the run directory.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/#Developing-Trixi.jl","page":"1.3 Changing Trixi.jl itself","title":"Developing Trixi.jl","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"If you've created and cloned your own fork of Trixi.jl, you can make local changes to Trixi.jl and propose them as a Pull Request (PR) to be merged into trixi-framework/Trixi.jl.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Linux and MacOS utilize the git version control system to manage changes between your local and remote repositories. The most commonly used commands include add, commit, push and pull. You can find detailed information about these functions in the Git documentation.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"For Windows and GitHub Desktop users, refer to the documentation of GitHub Desktop.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"After making local changes to Trixi.jl and pushing them to the remote repository, you can open a Pull Request (PR) from your branch to the main branch of trixi-framework/Trixi.jl. Then, follow the Review checklist provided in the Pull Request to streamline the review process.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/#Additional-reading","page":"1.3 Changing Trixi.jl itself","title":"Additional reading","text":"","category":"section"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"To further delve into Trixi.jl, you may have a look at the following introductory tutorials.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"Behind the scenes of a simulation setup will guide you through a simple Trixi.jl setup (\"elixir\"), giving an overview of what happens in the background during the initialization of a simulation. It clarifies some of the more fundamental, technical concepts that are applicable to a variety of (also more complex) configurations.\nIntroduction to DG methods will teach you how to set up a simple way to approximate the solution of a hyperbolic partial differential equation. It will be especially useful to learn about the Discontinuous Galerkin method and the way it is implemented in Trixi.jl.\nAdding a new scalar conservation law and Adding a non-conservative equation describe how to add new physics models that are not yet included in Trixi.jl.\nCallbacks gives an overview of how to regularly execute specific actions during a simulation, e.g., to store the solution or adapt the mesh.","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"","category":"page"},{"location":"tutorials/first_steps/changing_trixi/","page":"1.3 Changing Trixi.jl itself","title":"1.3 Changing Trixi.jl itself","text":"This page was generated using Literate.jl.","category":"page"},{"location":"reference-trixi/#Trixi.jl-API","page":"Trixi.jl","title":"Trixi.jl API","text":"","category":"section"},{"location":"reference-trixi/","page":"Trixi.jl","title":"Trixi.jl","text":"CurrentModule = Trixi","category":"page"},{"location":"reference-trixi/","page":"Trixi.jl","title":"Trixi.jl","text":"Modules = [Trixi]","category":"page"},{"location":"reference-trixi/#Trixi.Trixi","page":"Trixi.jl","title":"Trixi.Trixi","text":"Trixi\n\nTrixi.jl is a numerical simulation framework for hyperbolic conservation laws. A key objective for the framework is to be useful to both scientists and students. Therefore, next to having an extensible design with a fast implementation, Trixi.jl is focused on being easy to use for new or inexperienced users, including the installation and postprocessing procedures.\n\nTo get started, run your first simulation with Trixi.jl using\n\ntrixi_include(default_example())\n\nSee also: trixi-framework/Trixi.jl\n\n\n\n\n\n","category":"module"},{"location":"reference-trixi/#Trixi.boundary_condition_do_nothing","page":"Trixi.jl","title":"Trixi.boundary_condition_do_nothing","text":"boundary_condition_do_nothing = Trixi.BoundaryConditionDoNothing()\n\nImposing no boundary condition just evaluates the flux at the inner state.\n\n\n\n\n\n","category":"constant"},{"location":"reference-trixi/#Trixi.boundary_condition_periodic","page":"Trixi.jl","title":"Trixi.boundary_condition_periodic","text":"boundary_condition_periodic = Trixi.BoundaryConditionPeriodic()\n\nA singleton struct indicating periodic boundary conditions.\n\n\n\n\n\n","category":"constant"},{"location":"reference-trixi/#Trixi.flux_hll","page":"Trixi.jl","title":"Trixi.flux_hll","text":"flux_hll\n\nSee FluxHLL.\n\n\n\n\n\n","category":"constant"},{"location":"reference-trixi/#Trixi.flux_hlle","page":"Trixi.jl","title":"Trixi.flux_hlle","text":"flux_hlle\n\nSee min_max_speed_einfeldt. This is a FluxHLL-type two-wave solver with special estimates of the wave speeds.\n\n\n\n\n\n","category":"constant"},{"location":"reference-trixi/#Trixi.flux_lax_friedrichs","page":"Trixi.jl","title":"Trixi.flux_lax_friedrichs","text":"flux_lax_friedrichs\n\nSee FluxLaxFriedrichs.\n\n\n\n\n\n","category":"constant"},{"location":"reference-trixi/#Trixi.AMRCallback","page":"Trixi.jl","title":"Trixi.AMRCallback","text":"AMRCallback(semi, controller [,adaptor=AdaptorAMR(semi)];\n interval,\n adapt_initial_condition=true,\n adapt_initial_condition_only_refine=true,\n dynamic_load_balancing=true)\n\nPerforms adaptive mesh refinement (AMR) every interval time steps for a given semidiscretization semi using the chosen controller.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AbstractEquations","page":"Trixi.jl","title":"Trixi.AbstractEquations","text":"AbstractEquations{NDIMS, NVARS}\n\nAn abstract supertype of specific equations such as the compressible Euler equations. The type parameters encode the number of spatial dimensions (NDIMS) and the number of primary variables (NVARS) of the physics model.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AbstractMesh","page":"Trixi.jl","title":"Trixi.AbstractMesh","text":"AbstractMesh{NDIMS}\n\nAn abstract supertype of specific mesh types such as TreeMesh or StructuredMesh. The type parameters encode the number of spatial dimensions (NDIMS).\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AcousticPerturbationEquations2D","page":"Trixi.jl","title":"Trixi.AcousticPerturbationEquations2D","text":"AcousticPerturbationEquations2D(v_mean_global, c_mean_global, rho_mean_global)\n\nAcoustic perturbation equations (APE) in two space dimensions. The equations are given by\n\nbeginaligned\n fracpartialmathbfvpartial t + nabla (barmathbfvcdotmathbfv)\n + nablaleft( fracbarc^2 tildepbarrho right) = 0 \n fracpartial tildeppartial t +\n nablacdot (barrho mathbfv + barmathbfv tildep) = 0\nendaligned\n\nThe bar bar(cdot) indicates time-averaged quantities. The unknowns of the APE are the perturbed velocities mathbfv = (v_1 v_2)^T and the scaled perturbed pressure tildep = fracpbarc^2, where p denotes the perturbed pressure and the perturbed variables are defined by phi = phi - barphi.\n\nIn addition to the unknowns, Trixi.jl currently stores the mean values in the state vector, i.e. the state vector used internally is given by\n\nmathbfu =\n beginpmatrix\n v_1 v_2 tildep barv_1 barv_2 barc barrho\n endpmatrix\n\nThis affects the implementation and use of these equations in various ways:\n\nThe flux values corresponding to the mean values must be zero.\nThe mean values have to be considered when defining initial conditions, boundary conditions or source terms.\nAnalysisCallback analyzes these variables too.\nTrixi.jl's visualization tools will visualize the mean values by default.\n\nThe constructor accepts a 2-tuple v_mean_global and scalars c_mean_global and rho_mean_global which can be used to make the definition of initial conditions for problems with constant mean flow more flexible. These values are ignored if the mean values are defined internally in an initial condition.\n\nThe equations are based on the APE-4 system introduced in the following paper:\n\nRoland Ewert and Wolfgang Schröder (2003) Acoustic perturbation equations based on flow decomposition via source filtering DOI: 10.1016/S0021-9991(03)00168-2\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.Adiabatic","page":"Trixi.jl","title":"Trixi.Adiabatic","text":"struct Adiabatic\n\nUsed to create a no-slip boundary condition with BoundaryConditionNavierStokesWall. The field boundary_value_normal_flux_function should be a function with signature boundary_value_normal_flux_function(x, t, equations) and return a scalar value for the normal heat flux at point x and time t.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AliveCallback","page":"Trixi.jl","title":"Trixi.AliveCallback","text":"AliveCallback(analysis_interval=0, alive_interval=analysis_interval÷10)\n\nInexpensive callback showing that a simulation is still running by printing some information such as the current time to the screen every alive_interval time steps. If analysis_interval ≂̸ 0, the output is omitted every analysis_interval time steps.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AnalysisCallback","page":"Trixi.jl","title":"Trixi.AnalysisCallback","text":"AnalysisCallback(semi; interval=0,\n save_analysis=false,\n output_directory=\"out\",\n analysis_filename=\"analysis.dat\",\n extra_analysis_errors=Symbol[],\n extra_analysis_integrals=())\n\nAnalyze a numerical solution every interval time steps and print the results to the screen. If save_analysis, the results are also saved in joinpath(output_directory, analysis_filename).\n\nAdditional errors can be computed, e.g. by passing extra_analysis_errors = (:l2_error_primitive, :linf_error_primitive) or extra_analysis_errors = (:conservation_error,).\n\nIf you want to omit the computation (to safe compute-time) of the default_analysis_errors, specify analysis_errors = Symbol[]. Note: default_analysis_errors are :l2_error and :linf_error for all equations. If you want to compute extra_analysis_errors such as :conservation_error solely, i.e., without :l2_error, :linf_error you need to specify analysis_errors = [:conservation_error] instead of extra_analysis_errors = [:conservation_error].\n\nFurther scalar functions func in extra_analysis_integrals are applied to the numerical solution and integrated over the computational domain. Some examples for this are entropy, energy_kinetic, energy_internal, and energy_total. You can also write your own function with the same signature as the examples listed above and pass it via extra_analysis_integrals. See the developer comments about Trixi.analyze, Trixi.pretty_form_utf, and Trixi.pretty_form_ascii for further information on how to create custom analysis quantities.\n\nIn addition, the analysis callback records and outputs a number of quantities that are useful for evaluating the computational performance, such as the total runtime, the performance index (time/DOF/rhs!), the time spent in garbage collection (GC), or the current memory usage (alloc'd memory).\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AnalysisCallbackCoupled","page":"Trixi.jl","title":"Trixi.AnalysisCallbackCoupled","text":"AnalysisCallbackCoupled(semi, callbacks...)\n\nCombine multiple analysis callbacks for coupled simulations with a SemidiscretizationCoupled. For each coupled system, an indididual AnalysisCallback must be created and passed to the AnalysisCallbackCoupled in order, i.e., in the same sequence as the indidvidual semidiscretizations are stored in the SemidiscretizationCoupled.\n\nwarning: Experimental code\nThis is an experimental feature and can change any time.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AnalysisSurfaceIntegral","page":"Trixi.jl","title":"Trixi.AnalysisSurfaceIntegral","text":"AnalysisSurfaceIntegral{Variable, NBoundaries}(semi,\n boundary_symbols::NTuple{NBoundaries, Symbol},\n variable)\n\nThis struct is used to compute the surface integral of a quantity of interest variable alongside the boundary/boundaries associated with particular name(s) given in boundary_symbol or boundary_symbols. For instance, this can be used to compute the lift LiftCoefficientPressure or drag coefficient DragCoefficientPressure of e.g. an airfoil with the boundary name :Airfoil in 2D.\n\nsemi::Semidiscretization: Passed in to retrieve boundary condition information\nboundary_symbols::NTuple{NBoundaries, Symbol}: Name(s) of the boundary/boundaries where the quantity of interest is computed\nvariable::Variable: Quantity of interest, like lift or drag\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.AveragingCallback","page":"Trixi.jl","title":"Trixi.AveragingCallback","text":"AveragingCallback(semi::SemidiscretizationHyperbolic, tspan; output_directory=\"out\",\n filename=\"averaging.h5\")\n\nwarning: Experimental code\nThis callback is experimental and may change in any future release.\n\nA callback that averages the flow field described by semi which must be a semidiscretization of the compressible Euler equations in two dimensions. The callback records the mean velocity, mean speed of sound, mean density, and mean vorticity for each node over the time interval given by tspan and stores the results in an HDF5 file filename in the directory output_directory. Note that this callback does not support adaptive mesh refinement (AMRCallback).\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.BoundaryConditionCoupled","page":"Trixi.jl","title":"Trixi.BoundaryConditionCoupled","text":"BoundaryConditionCoupled(other_semi_index, indices, uEltype, coupling_converter)\n\nBoundary condition to glue two meshes together. Solution values at the boundary of another mesh will be used as boundary values. This requires the use of SemidiscretizationCoupled. The other mesh is specified by other_semi_index, which is the index of the mesh in the tuple of semidiscretizations.\n\nNote that the elements and nodes of the two meshes at the coupled boundary must coincide. This is currently only implemented for StructuredMesh.\n\nArguments\n\nother_semi_index: the index in SemidiscretizationCoupled of the semidiscretization from which the values are copied\nindices::Tuple: node/cell indices at the boundary of the mesh in the other semidiscretization. See examples below.\nuEltype::Type: element type of solution\ncoupling_converter::CouplingConverter: function to call for converting the solution state of one system to the other system\n\nExamples\n\n# Connect the left boundary of mesh 2 to our boundary such that our positive\n# boundary direction will match the positive y direction of the other boundary\nBoundaryConditionCoupled(2, (:begin, :i), Float64, fun)\n\n# Connect the same two boundaries oppositely oriented\nBoundaryConditionCoupled(2, (:begin, :i_backwards), Float64, fun)\n\n# Using this as y_neg boundary will connect `our_cells[i, 1, j]` to `other_cells[j, end-i, end]`\nBoundaryConditionCoupled(2, (:j, :i_backwards, :end), Float64, fun)\n\nwarning: Experimental code\nThis is an experimental feature and can change any time.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.BoundaryConditionDirichlet","page":"Trixi.jl","title":"Trixi.BoundaryConditionDirichlet","text":"BoundaryConditionDirichlet(boundary_value_function)\n\nCreate a Dirichlet boundary condition that uses the function boundary_value_function to specify the values at the boundary. This can be used to create a boundary condition that specifies exact boundary values by passing the exact solution of the equation. The passed boundary value function will be called with the same arguments as an initial condition function is called, i.e., as\n\nboundary_value_function(x, t, equations)\n\nwhere x specifies the coordinates, t is the current time, and equation is the corresponding system of equations.\n\nExamples\n\njulia> BoundaryConditionDirichlet(initial_condition_convergence_test)\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.BoundaryConditionNavierStokesWall","page":"Trixi.jl","title":"Trixi.BoundaryConditionNavierStokesWall","text":"struct BoundaryConditionNavierStokesWall\n\nCreates a wall-type boundary conditions for the compressible Navier-Stokes equations. The fields boundary_condition_velocity and boundary_condition_heat_flux are intended to be boundary condition types such as the NoSlip velocity boundary condition and the Adiabatic or Isothermal heat boundary condition.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.BoundaryConditionNeumann","page":"Trixi.jl","title":"Trixi.BoundaryConditionNeumann","text":"BoundaryConditionNeumann(boundary_normal_flux_function)\n\nSimilar to BoundaryConditionDirichlet, but creates a Neumann boundary condition for parabolic equations that uses the function boundary_normal_flux_function to specify the values of the normal flux at the boundary. The passed boundary value function will be called with the same arguments as an initial condition function is called, i.e., as\n\nboundary_normal_flux_function(x, t, equations)\n\nwhere x specifies the coordinates, t is the current time, and equation is the corresponding system of equations.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.BoundsCheckCallback","page":"Trixi.jl","title":"Trixi.BoundsCheckCallback","text":"BoundsCheckCallback(; output_directory=\"out\", save_errors=false, interval=1)\n\nSubcell limiting techniques with SubcellLimiterIDP are constructed to adhere certain local or global bounds. To make sure that these bounds are actually met, this callback calculates the maximum deviation from the bounds. The maximum deviation per applied bound is printed to the screen at the end of the simulation. For more insights, when setting save_errors=true the occurring errors are exported every interval time steps during the simulation. Then, the maximum deviations since the last export are saved in \"output_directory/deviations.txt\". The BoundsCheckCallback has to be applied as a stage callback for the SSPRK time integration scheme.\n\nnote: Note\nFor SubcellLimiterIDP, the solution is corrected in the a posteriori correction stage SubcellLimiterIDPCorrection. So, to check the final solution, this bounds check callback must be called after the correction stage.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CarpenterKennedy2N43","page":"Trixi.jl","title":"Trixi.CarpenterKennedy2N43","text":" CarpenterKennedy2N43()\n\nCarpenter, Kennedy (1994) Third order 2N storage RK schemes with error control\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CarpenterKennedy2N54","page":"Trixi.jl","title":"Trixi.CarpenterKennedy2N54","text":"CarpenterKennedy2N54()\n\nThe following structures and methods provide a minimal implementation of the low-storage explicit Runge-Kutta method of\n\nCarpenter, Kennedy (1994) Fourth order 2N storage RK schemes, Solution 3\n\nusing the same interface as OrdinaryDiffEq.jl.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleEulerEquations1D","page":"Trixi.jl","title":"Trixi.CompressibleEulerEquations1D","text":"CompressibleEulerEquations1D(gamma)\n\nThe compressible Euler equations\n\nfracpartialpartial t\nbeginpmatrix\nrho rho v_1 rho e\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\nrho v_1 rho v_1^2 + p (rho e +p) v_1\nendpmatrix\n=\nbeginpmatrix\n0 0 0\nendpmatrix\n\nfor an ideal gas with ratio of specific heats gamma in one space dimension. Here, rho is the density, v_1 the velocity, e the specific total energy rather than specific internal energy, and\n\np = (gamma - 1) left( rho e - frac12 rho v_1^2 right)\n\nthe pressure.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleEulerEquations2D","page":"Trixi.jl","title":"Trixi.CompressibleEulerEquations2D","text":"CompressibleEulerEquations2D(gamma)\n\nThe compressible Euler equations\n\nfracpartialpartial t\nbeginpmatrix\nrho rho v_1 rho v_2 rho e\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\n rho v_1 rho v_1^2 + p rho v_1 v_2 (rho e +p) v_1\nendpmatrix\n+\nfracpartialpartial y\nbeginpmatrix\nrho v_2 rho v_1 v_2 rho v_2^2 + p (rho e +p) v_2\nendpmatrix\n=\nbeginpmatrix\n0 0 0 0\nendpmatrix\n\nfor an ideal gas with ratio of specific heats gamma in two space dimensions. Here, rho is the density, v_1, v_2 the velocities, e the specific total energy rather than specific internal energy, and\n\np = (gamma - 1) left( rho e - frac12 rho (v_1^2+v_2^2) right)\n\nthe pressure.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleEulerEquations3D","page":"Trixi.jl","title":"Trixi.CompressibleEulerEquations3D","text":"CompressibleEulerEquations3D(gamma)\n\nThe compressible Euler equations\n\nfracpartialpartial t\nbeginpmatrix\nrho rho v_1 rho v_2 rho v_3 rho e\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\n rho v_1 rho v_1^2 + p rho v_1 v_2 rho v_1 v_3 ( rho e +p) v_1\nendpmatrix\n+\nfracpartialpartial y\nbeginpmatrix\nrho v_2 rho v_1 v_2 rho v_2^2 + p rho v_1 v_3 ( rho e +p) v_2\nendpmatrix\n+\nfracpartialpartial z\nbeginpmatrix\nrho v_3 rho v_1 v_3 rho v_2 v_3 rho v_3^2 + p ( rho e +p) v_3\nendpmatrix\n=\nbeginpmatrix\n0 0 0 0 0\nendpmatrix\n\nfor an ideal gas with ratio of specific heats gamma in three space dimensions. Here, rho is the density, v_1, v_2, v_3 the velocities, e the specific total energy rather than specific internal energy, and\n\np = (gamma - 1) left( rho e - frac12 rho (v_1^2+v_2^2+v_3^2) right)\n\nthe pressure.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleEulerEquationsQuasi1D","page":"Trixi.jl","title":"Trixi.CompressibleEulerEquationsQuasi1D","text":"CompressibleEulerEquationsQuasi1D(gamma)\n\nThe quasi-1d compressible Euler equations (see Chan et al. DOI: 10.48550/arXiv.2307.12089 for details)\n\nfracpartialpartial t\nbeginpmatrix\na rho a rho v_1 a e\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\na rho v_1 a rho v_1^2 a v_1 (e +p)\nendpmatrix\n+ \na fracpartialpartial x\nbeginpmatrix\n0 p 0 \nendpmatrix\n=\nbeginpmatrix\n0 0 0\nendpmatrix\n\nfor an ideal gas with ratio of specific heats gamma in one space dimension. Here, rho is the density, v_1 the velocity, e the specific total energy rather than specific internal energy, a the (possibly) variable nozzle width, and\n\np = (gamma - 1) left( e - frac12 rho v_1^2 right)\n\nthe pressure.\n\nThe nozzle width function a(x) is set inside the initial condition routine for a particular problem setup. To test the conservative form of the compressible Euler equations one can set the nozzle width variable a to one. \n\nIn addition to the unknowns, Trixi.jl currently stores the nozzle width values at the approximation points despite being fixed in time. This affects the implementation and use of these equations in various ways:\n\nThe flux values corresponding to the nozzle width must be zero.\nThe nozzle width values must be included when defining initial conditions, boundary conditions or source terms.\nAnalysisCallback analyzes this variable.\nTrixi.jl's visualization tools will visualize the nozzle width by default.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleEulerMulticomponentEquations1D","page":"Trixi.jl","title":"Trixi.CompressibleEulerMulticomponentEquations1D","text":"CompressibleEulerMulticomponentEquations1D(; gammas, gas_constants)\n\nMulticomponent version of the compressible Euler equations\n\nfracpartialpartial t\nbeginpmatrix\nrho v_1 rho e rho_1 rho_2 vdots rho_n\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\nrho v_1^2 + p (rho e +p) v_1 rho_1 v_1 rho_2 v_1 vdots rho_n v_1\nendpmatrix\n\n=\nbeginpmatrix\n0 0 0 0 vdots 0\nendpmatrix\n\nfor calorically perfect gas in one space dimension. Here, rho_i is the density of component i, rho=sum_i=1^nrho_i the sum of the individual rho_i, v_1 the velocity, e the specific total energy rather than specific internal energy, and\n\np = (gamma - 1) left( rho e - frac12 rho v_1^2 right)\n\nthe pressure,\n\ngamma=fracsum_i=1^nrho_i C_vigamma_isum_i=1^nrho_i C_vi\n\ntotal heat capacity ratio, gamma_i heat capacity ratio of component i,\n\nC_vi=fracRgamma_i-1\n\nspecific heat capacity at constant volume of component i.\n\nIn case of more than one component, the specific heat ratios gammas and the gas constants gas_constants should be passed as tuples, e.g., gammas=(1.4, 1.667).\n\nThe remaining variables like the specific heats at constant volume cv or the specific heats at constant pressure cp are then calculated considering a calorically perfect gas.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleEulerMulticomponentEquations2D","page":"Trixi.jl","title":"Trixi.CompressibleEulerMulticomponentEquations2D","text":"CompressibleEulerMulticomponentEquations2D(; gammas, gas_constants)\n\nMulticomponent version of the compressible Euler equations\n\nfracpartialpartial t\nbeginpmatrix\nrho v_1 rho v_2 rho e rho_1 rho_2 vdots rho_n\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\nrho v_1^2 + p rho v_1 v_2 ( rho e +p) v_1 rho_1 v_1 rho_2 v_1 vdots rho_n v_1\nendpmatrix\n+\nfracpartialpartial y\nbeginpmatrix\nrho v_1 v_2 rho v_2^2 + p ( rho e +p) v_2 rho_1 v_2 rho_2 v_2 vdots rho_n v_2\nendpmatrix\n=\nbeginpmatrix\n0 0 0 0 0 vdots 0\nendpmatrix\n\nfor calorically perfect gas in two space dimensions. Here, rho_i is the density of component i, rho=sum_i=1^nrho_i the sum of the individual rho_i, v_1, v_2 the velocities, e the specific total energy rather than specific internal energy, and\n\np = (gamma - 1) left( rho e - frac12 rho (v_1^2 + v_2^2) right)\n\nthe pressure,\n\ngamma=fracsum_i=1^nrho_i C_vigamma_isum_i=1^nrho_i C_vi\n\ntotal heat capacity ratio, gamma_i heat capacity ratio of component i,\n\nC_vi=fracRgamma_i-1\n\nspecific heat capacity at constant volume of component i.\n\nIn case of more than one component, the specific heat ratios gammas and the gas constants gas_constants in [kJ/(kg*K)] should be passed as tuples, e.g., gammas=(1.4, 1.667).\n\nThe remaining variables like the specific heats at constant volume cv or the specific heats at constant pressure cp are then calculated considering a calorically perfect gas.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleNavierStokesDiffusion1D","page":"Trixi.jl","title":"Trixi.CompressibleNavierStokesDiffusion1D","text":"CompressibleNavierStokesDiffusion1D(equations; mu, Pr,\n gradient_variables=GradientVariablesPrimitive())\n\nContains the diffusion (i.e. parabolic) terms applied to mass, momenta, and total energy together with the advective terms from the CompressibleEulerEquations1D.\n\nequations: instance of the CompressibleEulerEquations1D\nmu: dynamic viscosity,\nPr: Prandtl number,\ngradient_variables: which variables the gradients are taken with respect to. Defaults to GradientVariablesPrimitive().\n\nFluid properties such as the dynamic viscosity mu can be provided in any consistent unit system, e.g., [mu] = kg m⁻¹ s⁻¹. The viscosity mu may be a constant or a function of the current state, e.g., depending on temperature (Sutherland's law): mu = mu(T). In the latter case, the function mu needs to have the signature mu(u, equations).\n\nThe particular form of the compressible Navier-Stokes implemented is\n\nfracpartialpartial t\nbeginpmatrix\nrho rho v rho e\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\n rho v rho v^2 + p (rho e + p) v\nendpmatrix\n=\nfracpartialpartial x\nbeginpmatrix\n0 tau tau v - q\nendpmatrix\n\nwhere the system is closed with the ideal gas assumption giving\n\np = (gamma - 1) left( rho e - frac12 rho v^2 right)\n\nas the pressure. The value of the adiabatic constant gamma is taken from the CompressibleEulerEquations1D. The terms on the right hand side of the system above are built from the viscous stress\n\ntau = mu fracpartialpartial x v\n\nwhere the heat flux is\n\nq = -kappa fracpartialpartial x left(Tright)quad T = fracpRrho\n\nwhere T is the temperature and kappa is the thermal conductivity for Fick's law. Under the assumption that the gas has a constant Prandtl number, the thermal conductivity is\n\nkappa = fracgamma mu R(gamma - 1)textrmPr\n\nFrom this combination of temperature T and thermal conductivity kappa we see that the gas constant R cancels and the heat flux becomes\n\nq = -kappa fracpartialpartial x left(Tright) = -fracgamma mu(gamma - 1)textrmPr fracpartialpartial x left(fracprhoright)\n\nwhich is the form implemented below in the flux function.\n\nIn one spatial dimensions we require gradients for two quantities, e.g., primitive quantities\n\nfracpartialpartial x v fracpartialpartial x T\n\nor the entropy variables\n\nfracpartialpartial x w_2 fracpartialpartial x w_3\n\nwhere\n\nw_2 = fracrho v1p w_3 = -fracrhop\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleNavierStokesDiffusion2D","page":"Trixi.jl","title":"Trixi.CompressibleNavierStokesDiffusion2D","text":"CompressibleNavierStokesDiffusion2D(equations; mu, Pr,\n gradient_variables=GradientVariablesPrimitive())\n\nContains the diffusion (i.e. parabolic) terms applied to mass, momenta, and total energy together with the advective terms from the CompressibleEulerEquations2D.\n\nequations: instance of the CompressibleEulerEquations2D\nmu: dynamic viscosity,\nPr: Prandtl number,\ngradient_variables: which variables the gradients are taken with respect to. Defaults to GradientVariablesPrimitive().\n\nFluid properties such as the dynamic viscosity mu can be provided in any consistent unit system, e.g., [mu] = kg m⁻¹ s⁻¹. The viscosity mu may be a constant or a function of the current state, e.g., depending on temperature (Sutherland's law): mu = mu(T). In the latter case, the function mu needs to have the signature mu(u, equations).\n\nThe particular form of the compressible Navier-Stokes implemented is\n\nfracpartialpartial t\nbeginpmatrix\nrho rho mathbfv rho e\nendpmatrix\n+\nnabla cdot\nbeginpmatrix\n rho mathbfv rho mathbfvmathbfv^T + p underlineI (rho e + p) mathbfv\nendpmatrix\n=\nnabla cdot\nbeginpmatrix\n0 underlinetau underlinetaumathbfv - mathbfq\nendpmatrix\n\nwhere the system is closed with the ideal gas assumption giving\n\np = (gamma - 1) left( rho e - frac12 rho (v_1^2+v_2^2) right)\n\nas the pressure. The value of the adiabatic constant gamma is taken from the CompressibleEulerEquations2D. The terms on the right hand side of the system above are built from the viscous stress tensor\n\nunderlinetau = mu left(nablamathbfv + left(nablamathbfvright)^Tright) - frac23 mu left(nablacdotmathbfvright)underlineI\n\nwhere underlineI is the 2times 2 identity matrix and the heat flux is\n\nmathbfq = -kappanablaleft(Tright)quad T = fracpRrho\n\nwhere T is the temperature and kappa is the thermal conductivity for Fick's law. Under the assumption that the gas has a constant Prandtl number, the thermal conductivity is\n\nkappa = fracgamma mu R(gamma - 1)textrmPr\n\nFrom this combination of temperature T and thermal conductivity kappa we see that the gas constant R cancels and the heat flux becomes\n\nmathbfq = -kappanablaleft(Tright) = -fracgamma mu(gamma - 1)textrmPrnablaleft(fracprhoright)\n\nwhich is the form implemented below in the flux function.\n\nIn two spatial dimensions we require gradients for three quantities, e.g., primitive quantities\n\nnabla v_1 nabla v_2 nabla T\n\nor the entropy variables\n\nnabla w_2 nabla w_3 nabla w_4\n\nwhere\n\nw_2 = fracrho v_1p w_3 = fracrho v_2p w_4 = -fracrhop\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.CompressibleNavierStokesDiffusion3D","page":"Trixi.jl","title":"Trixi.CompressibleNavierStokesDiffusion3D","text":"CompressibleNavierStokesDiffusion3D(equations; mu, Pr,\n gradient_variables=GradientVariablesPrimitive())\n\nContains the diffusion (i.e. parabolic) terms applied to mass, momenta, and total energy together with the advective terms from the CompressibleEulerEquations3D.\n\nequations: instance of the CompressibleEulerEquations3D\nmu: dynamic viscosity,\nPr: Prandtl number,\ngradient_variables: which variables the gradients are taken with respect to. Defaults to GradientVariablesPrimitive().\n\nFluid properties such as the dynamic viscosity mu can be provided in any consistent unit system, e.g., [mu] = kg m⁻¹ s⁻¹. The viscosity mu may be a constant or a function of the current state, e.g., depending on temperature (Sutherland's law): mu = mu(T). In the latter case, the function mu needs to have the signature mu(u, equations).\n\nThe particular form of the compressible Navier-Stokes implemented is\n\nfracpartialpartial t\nbeginpmatrix\nrho rho mathbfv rho e\nendpmatrix\n+\nnabla cdot\nbeginpmatrix\n rho mathbfv rho mathbfvmathbfv^T + p underlineI (rho e + p) mathbfv\nendpmatrix\n=\nnabla cdot\nbeginpmatrix\n0 underlinetau underlinetaumathbfv - mathbfq\nendpmatrix\n\nwhere the system is closed with the ideal gas assumption giving\n\np = (gamma - 1) left( rho e - frac12 rho (v_1^2+v_2^2+v_3^2) right)\n\nas the pressure. The value of the adiabatic constant gamma is taken from the CompressibleEulerEquations2D. The terms on the right hand side of the system above are built from the viscous stress tensor\n\nunderlinetau = mu left(nablamathbfv + left(nablamathbfvright)^Tright) - frac23 mu left(nablacdotmathbfvright)underlineI\n\nwhere underlineI is the 3times 3 identity matrix and the heat flux is\n\nmathbfq = -kappanablaleft(Tright)quad T = fracpRrho\n\nwhere T is the temperature and kappa is the thermal conductivity for Fick's law. Under the assumption that the gas has a constant Prandtl number, the thermal conductivity is\n\nkappa = fracgamma mu R(gamma - 1)textrmPr\n\nFrom this combination of temperature T and thermal conductivity kappa we see that the gas constant R cancels and the heat flux becomes\n\nmathbfq = -kappanablaleft(Tright) = -fracgamma mu(gamma - 1)textrmPrnablaleft(fracprhoright)\n\nwhich is the form implemented below in the flux function.\n\nIn two spatial dimensions we require gradients for three quantities, e.g., primitive quantities\n\nnabla v_1 nabla v_2 nabla v_3 nabla T\n\nor the entropy variables\n\nnabla w_2 nabla w_3 nabla w_4 nabla w_5\n\nwhere\n\nw_2 = fracrho v_1p w_3 = fracrho v_2p w_4 = fracrho v_3p w_5 = -fracrhop\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ControllerThreeLevel","page":"Trixi.jl","title":"Trixi.ControllerThreeLevel","text":"ControllerThreeLevel(semi, indicator; base_level=1,\n med_level=base_level, med_threshold=0.0,\n max_level=base_level, max_threshold=1.0)\n\nAn AMR controller based on three levels (in descending order of precedence):\n\nset the target level to max_level if indicator > max_threshold\nset the target level to med_level if indicator > med_threshold; if med_level < 0, set the target level to the current level\nset the target level to base_level otherwise\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ControllerThreeLevelCombined","page":"Trixi.jl","title":"Trixi.ControllerThreeLevelCombined","text":"ControllerThreeLevelCombined(semi, indicator_primary, indicator_secondary;\n base_level=1,\n med_level=base_level, med_threshold=0.0,\n max_level=base_level, max_threshold=1.0,\n max_threshold_secondary=1.0)\n\nAn AMR controller based on three levels (in descending order of precedence):\n\nset the target level to max_level if indicator_primary > max_threshold\nset the target level to med_level if indicator_primary > med_threshold; if med_level < 0, set the target level to the current level\nset the target level to base_level otherwise\n\nIf indicator_secondary >= max_threshold_secondary, set the target level to max_level.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.DG","page":"Trixi.jl","title":"Trixi.DG","text":"DG(; basis, mortar, surface_integral, volume_integral)\n\nCreate a discontinuous Galerkin method. If basis isa LobattoLegendreBasis, this creates a DGSEM.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.DGMulti-Tuple{SummationByPartsOperators.AbstractDerivativeOperator}","page":"Trixi.jl","title":"Trixi.DGMulti","text":"DGMulti(approximation_type::AbstractDerivativeOperator;\n element_type::AbstractElemShape,\n surface_flux=flux_central,\n surface_integral=SurfaceIntegralWeakForm(surface_flux),\n volume_integral=VolumeIntegralWeakForm(),\n kwargs...)\n\nCreate a summation by parts (SBP) discretization on the given element_type using a tensor product structure based on the 1D SBP derivative operator passed as approximation_type.\n\nFor more info, see the documentations of StartUpDG.jl and SummationByPartsOperators.jl.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMulti-Tuple{}","page":"Trixi.jl","title":"Trixi.DGMulti","text":"DGMulti(; polydeg::Integer,\n element_type::AbstractElemShape,\n approximation_type=Polynomial(),\n surface_flux=flux_central,\n surface_integral=SurfaceIntegralWeakForm(surface_flux),\n volume_integral=VolumeIntegralWeakForm(),\n RefElemData_kwargs...)\n\nCreate a discontinuous Galerkin method which uses\n\napproximations of polynomial degree polydeg\nelement type element_type (Tri(), Quad(), Tet(), and Hex() currently supported)\n\nOptional:\n\napproximation_type (default is Polynomial(); SBP() also supported for Tri(), Quad(), and Hex() element types).\nRefElemData_kwargs are additional keyword arguments for RefElemData, such as quad_rule_vol. For more info, see the StartUpDG.jl docs.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiMesh","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh{NDIMS, ...}\n\nDGMultiMesh describes a mesh type which wraps StartUpDG.MeshData and boundary_faces in a dispatchable type. This is intended to store geometric data and connectivities for any type of mesh (Cartesian, affine, curved, structured/unstructured).\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.DGMultiMesh-Tuple{DGMulti{2, Tri, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar, <:StartUpDG.RefElemData{2, Tri, ApproxType}} where {ApproxType, SurfaceIntegral, VolumeIntegral, Mortar}, Any, Dict{Symbol, Int64}}","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh(dg::DGMulti{2, Tri}, triangulateIO, boundary_dict::Dict{Symbol, Int})\n\ndg::DGMulti contains information associated with to the reference element (e.g., quadrature, basis evaluation, differentiation, etc).\ntriangulateIO is a TriangulateIO mesh representation\nboundary_dict is a Dict{Symbol, Int} which associates each integer TriangulateIO boundary tag with a Symbol.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiMesh-Union{Tuple{DGMulti{NDIMS, ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar, <:StartUpDG.RefElemData{NDIMS, ElemType, ApproxType}} where {ElemType, ApproxType<:SummationByPartsOperators.AbstractPeriodicDerivativeOperator, SurfaceIntegral, VolumeIntegral, Mortar}}, Tuple{NDIMS}} where NDIMS","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh(dg::DGMulti)\n\nConstructs a single-element DGMultiMesh for a single periodic element given a DGMulti with approximation_type set to a periodic (finite difference) SBP operator from SummationByPartsOperators.jl.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiMesh-Union{Tuple{NDIMS}, Tuple{DGMulti{NDIMS, ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar, <:StartUpDG.RefElemData{NDIMS, ElemType, ApproxType}} where {ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar}, Any, AbstractArray}} where NDIMS","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh(dg::DGMulti{NDIMS}, vertex_coordinates, EToV;\n is_on_boundary=nothing,\n periodicity=ntuple(_->false, NDIMS)) where {NDIMS}\n\ndg::DGMulti contains information associated with to the reference element (e.g., quadrature, basis evaluation, differentiation, etc).\nvertex_coordinates is a tuple of vectors containing x,y,... components of the vertex coordinates\nEToV is a 2D array containing element-to-vertex connectivities for each element\nis_on_boundary specifies boundary using a Dict{Symbol, <:Function}\nperiodicity is a tuple of booleans specifying if the domain is periodic true/false in the (x,y,z) direction.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiMesh-Union{Tuple{NDIMS}, Tuple{DGMulti{NDIMS, ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar, <:StartUpDG.RefElemData{NDIMS, ElemType, ApproxType}} where {ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar}, Any, Any}} where NDIMS","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh(dg::DGMulti{NDIMS}, cells_per_dimension, mapping;\n is_on_boundary=nothing,\n periodicity=ntuple(_ -> false, NDIMS), kwargs...) where {NDIMS}\n\nConstructs a Curved() DGMultiMesh with element type dg.basis.element_type.\n\nmapping is a function which maps from a reference [-1, 1]^NDIMS domain to a mapped domain, e.g., xy = mapping(x, y) in 2D.\nis_on_boundary specifies boundary using a Dict{Symbol, <:Function}\nperiodicity is a tuple of Bools specifying periodicity = true/false in the (x,y,z) direction.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiMesh-Union{Tuple{NDIMS}, Tuple{DGMulti{NDIMS, ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar, <:StartUpDG.RefElemData{NDIMS, ElemType, ApproxType}} where {ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar}, Any}} where NDIMS","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh(dg::DGMulti, cells_per_dimension;\n coordinates_min=(-1.0, -1.0), coordinates_max=(1.0, 1.0),\n is_on_boundary=nothing,\n periodicity=ntuple(_ -> false, NDIMS))\n\nConstructs a Cartesian DGMultiMesh with element type dg.basis.element_type. The domain is the tensor product of the intervals [coordinates_min[i], coordinates_max[i]].\n\nis_on_boundary specifies boundary using a Dict{Symbol, <:Function}\nperiodicity is a tuple of Bools specifying periodicity = true/false in the (x,y,z) direction.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiMesh-Union{Tuple{NDIMS}, Tuple{DGMulti{NDIMS, ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar, <:StartUpDG.RefElemData{NDIMS, ElemType, ApproxType}} where {ElemType, ApproxType, SurfaceIntegral, VolumeIntegral, Mortar}, String}} where NDIMS","page":"Trixi.jl","title":"Trixi.DGMultiMesh","text":"DGMultiMesh(dg::DGMulti, filename::String)\n\ndg::DGMulti contains information associated with the reference element (e.g., quadrature, basis evaluation, differentiation, etc).\nfilename is a path specifying a .mesh file generated by HOHQMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGSEM","page":"Trixi.jl","title":"Trixi.DGSEM","text":"DGSEM(; RealT=Float64, polydeg::Integer,\n surface_flux=flux_central,\n surface_integral=SurfaceIntegralWeakForm(surface_flux),\n volume_integral=VolumeIntegralWeakForm(),\n mortar=MortarL2(basis))\n\nCreate a discontinuous Galerkin spectral element method (DGSEM) using a LobattoLegendreBasis with polynomials of degree polydeg.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.DissipationGlobalLaxFriedrichs","page":"Trixi.jl","title":"Trixi.DissipationGlobalLaxFriedrichs","text":"DissipationGlobalLaxFriedrichs(λ)\n\nCreate a global Lax-Friedrichs dissipation operator with dissipation coefficient λ.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.DissipationLocalLaxFriedrichs","page":"Trixi.jl","title":"Trixi.DissipationLocalLaxFriedrichs","text":"DissipationLocalLaxFriedrichs(max_abs_speed=max_abs_speed_naive)\n\nCreate a local Lax-Friedrichs dissipation operator where the maximum absolute wave speed is estimated as max_abs_speed(u_ll, u_rr, orientation_or_normal_direction, equations), defaulting to max_abs_speed_naive.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.DragCoefficientPressure-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.DragCoefficientPressure","text":"DragCoefficientPressure(aoa, rhoinf, uinf, linf)\n\nCompute the drag coefficient\n\nC_Dp coloneqq fracoint_partial Omega p boldsymbol n cdot psi_D mathrmd S\n 05 rho_infty U_infty^2 L_infty\n\nbased on the pressure distribution along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.\n\naoa::Real: Angle of attack in radians (for airfoils etc.)\nrhoinf::Real: Free-stream density\nuinf::Real: Free-stream velocity\nlinf::Real: Reference length of geometry (e.g. airfoil chord length)\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DragCoefficientShearStress-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.DragCoefficientShearStress","text":"DragCoefficientShearStress(aoa, rhoinf, uinf, linf)\n\nCompute the drag coefficient\n\nC_Df coloneqq fracoint_partial Omega boldsymbol tau_w cdot psi_D mathrmd S\n 05 rho_infty U_infty^2 L_infty\n\nbased on the wall shear stress vector tau_w along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.\n\naoa::Real: Angle of attack in radians (for airfoils etc.)\nrhoinf::Real: Free-stream density\nuinf::Real: Free-stream velocity\nlinf::Real: Reference length of geometry (e.g. airfoil chord length)\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.EulerAcousticsCouplingCallback","page":"Trixi.jl","title":"Trixi.EulerAcousticsCouplingCallback","text":"EulerAcousticsCouplingCallback\n\nwarning: Experimental code\nThis callback is experimental and may change in any future release.\n\nA callback that couples the acoustic perturbation equations and compressible Euler equations. Must be used in conjunction with SemidiscretizationEulerAcoustics. This callback manages the flow solver - which is always one time step ahead of the acoustics solver - and calculates the acoustic source term after each time step. The linearized Lamb vector is used as the source term, i.e.\n\nmathbfs = -(mathbfomega times barmathbfv\n + barmathbfomega times mathbfv)\n\nwhere mathbfv denotes the velocity, mathbfomega denotes the vorticity, the bar bar(cdot) indicates time-averaged quantities (see AveragingCallback) and prime (cdot) denotes perturbed quantities defined by phi = phi - barphi. Note that the perturbed quantities here are based entirely on the pure flow solution and should not be confused with the state variables of the acoustic perturbation equations.\n\nIn addition, this callback manages the time step size for both solvers and initializes the mean values of the acoustic perturbation equations using results obtained with the AveragingCallback.\n\nMichael Schlottke-Lakemper (2017) A direct-hybrid method for aeroacoustic analysis DOI: 10.18154/RWTH-2017-04082\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.EulerAcousticsCouplingCallback-Tuple{Any, AbstractString, Any, Real, Real}","page":"Trixi.jl","title":"Trixi.EulerAcousticsCouplingCallback","text":"EulerAcousticsCouplingCallback(ode_euler, averaging_file::AbstractString, alg,\n cfl_acoustics::Real, cfl_euler::Real; kwargs...)\n\nwarning: Experimental code\nThis callback is experimental and may change in any future release.\n\nCreates an EulerAcousticsCouplingCallback based on the pure flow ODEProblem given by ode_euler. Creates an integrator using the time integration method alg and the keyword arguments to solve ode_euler (consult the OrdinaryDiffEq documentation for further information). Manages the step size for both solvers by using the minimum of the maximum step size obtained with CFL numbers cfl_acoustics for the acoustics solver and cfl_euler for and flow solver, respectively. The mean values for the acoustic perturbation equations are read from averaging_file (see AveragingCallback).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.EulerAcousticsCouplingCallback-Tuple{Any, DiscreteCallback{<:Any, <:AveragingCallback}, Any, Real, Real}","page":"Trixi.jl","title":"Trixi.EulerAcousticsCouplingCallback","text":"EulerAcousticsCouplingCallback(ode_euler,\n averaging_callback::DiscreteCallback{<:Any, <:AveragingCallback},\n alg, cfl_acoustics::Real, cfl_euler::Real; kwargs...)\n\nwarning: Experimental code\nThis callback is experimental and may change in any future release.\n\nCreates an EulerAcousticsCouplingCallback based on the pure flow ODEProblem given by ode_euler. Creates an integrator using the time integration method alg and the keyword arguments to solve ode_euler (consult the OrdinaryDiffEq documentation for further information). Manages the step size for both solvers by using the minimum of the maximum step size obtained with CFL numbers cfl_acoustics for the acoustics solver and cfl_euler for and flow solver, respectively. The mean values for the acoustic perturbation equations are read from averaging_callback (see AveragingCallback).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.FDSBP","page":"Trixi.jl","title":"Trixi.FDSBP","text":"FDSBP(D_SBP; surface_integral, volume_integral)\n\nSpecialization of DG methods that uses general summation by parts (SBP) operators from SummationByPartsOperators.jl. In particular, this includes classical finite difference (FD) SBP methods. These methods have the same structure as classical DG methods - local operations on elements with connectivity through interfaces without imposing any continuity constraints.\n\nD_SBP is an SBP derivative operator from SummationByPartsOperators.jl. The other arguments have the same meaning as in DG or DGSEM.\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxHLL","page":"Trixi.jl","title":"Trixi.FluxHLL","text":"FluxHLL(min_max_speed=min_max_speed_davis)\n\nCreate an HLL (Harten, Lax, van Leer) numerical flux where the minimum and maximum wave speeds are estimated as λ_min, λ_max = min_max_speed(u_ll, u_rr, orientation_or_normal_direction, equations), defaulting to min_max_speed_davis. Original paper:\n\nAmiram Harten, Peter D. Lax, Bram van Leer (1983) On Upstream Differencing and Godunov-Type Schemes for Hyperbolic Conservation Laws DOI: 10.1137/1025002\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxHydrostaticReconstruction","page":"Trixi.jl","title":"Trixi.FluxHydrostaticReconstruction","text":"FluxHydrostaticReconstruction(numerical_flux, hydrostatic_reconstruction)\n\nwarning: Experimental code\nThis numerical flux is experimental and may change in any future release.\n\nAllow for some kind of hydrostatic reconstruction of the solution state prior to the surface flux computation. This is a particular strategy to ensure that the method remains well-balanced for the shallow water equations, see ShallowWaterEquations1D or ShallowWaterEquations2D.\n\nFor example, the hydrostatic reconstruction from Audusse et al. is implemented in one and two spatial dimensions, see hydrostatic_reconstruction_audusse_etal or the original paper\n\nEmmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090\n\nOther hydrostatic reconstruction techniques are available, particularly to handle wet / dry fronts. A good overview of the development and application of hydrostatic reconstruction can be found in\n\nGuoxian Chen and Sebastian Noelle A unified surface-gradient and hydrostatic reconstruction scheme for the shallow water equations (2021) RWTH Aachen preprint\nAndreas Buttinger-Kreuzhuber, Zsolt Horváth, Sebastian Noelle, Günter Blöschl and Jürgen Waser (2019) A fast second-order shallow water scheme on two-dimensional structured grids over abrupt topography DOI: 10.1016/j.advwatres.2019.03.010\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxLMARS","page":"Trixi.jl","title":"Trixi.FluxLMARS","text":"FluxLMARS(c)(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nLow Mach number approximate Riemann solver (LMARS) for atmospheric flows using an estimate c of the speed of sound.\n\nReferences:\n\nXi Chen et al. (2013) A Control-Volume Model of the Compressible Euler Equations with a Vertical Lagrangian Coordinate DOI: 10.1175/MWR-D-12-00129.1\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxLMARS-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.FluxLMARS","text":"FluxLMARS(c)(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations3D)\n\nLow Mach number approximate Riemann solver (LMARS) for atmospheric flows using an estimate c of the speed of sound.\n\nReferences:\n\nXi Chen et al. (2013) A Control-Volume Model of the Compressible Euler Equations with a Vertical Lagrangian Coordinate DOI: 10.1175/MWR-D-12-00129.1\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.FluxLaxFriedrichs","page":"Trixi.jl","title":"Trixi.FluxLaxFriedrichs","text":"FluxLaxFriedrichs(max_abs_speed=max_abs_speed_naive)\n\nLocal Lax-Friedrichs (Rusanov) flux with maximum wave speed estimate provided by max_abs_speed, cf. DissipationLocalLaxFriedrichs and max_abs_speed_naive.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxPlusDissipation","page":"Trixi.jl","title":"Trixi.FluxPlusDissipation","text":"FluxPlusDissipation(numerical_flux, dissipation)\n\nCombine a numerical_flux with a dissipation operator to create a new numerical flux.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxRotated","page":"Trixi.jl","title":"Trixi.FluxRotated","text":"FluxRotated(numerical_flux)\n\nCompute a numerical_flux flux in direction of a normal vector by rotating the solution, computing the numerical flux in x-direction, and rotating the calculated flux back.\n\nRequires a rotationally invariant equation with equation-specific functions rotate_to_x and rotate_from_x.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.FluxUpwind","page":"Trixi.jl","title":"Trixi.FluxUpwind","text":"FluxUpwind(splitting)\n\nA numerical flux f(u_left, u_right) = f⁺(u_left) + f⁻(u_right) based on flux vector splitting.\n\nThe SurfaceIntegralUpwind with a given splitting is equivalent to the SurfaceIntegralStrongForm with FluxUpwind(splitting) as numerical flux (up to floating point differences). Note, that SurfaceIntegralUpwind is only available on TreeMesh.\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.GlmSpeedCallback","page":"Trixi.jl","title":"Trixi.GlmSpeedCallback","text":"GlmSpeedCallback(; glm_scale=0.5, cfl, semi_indices=())\n\nUpdate the divergence cleaning wave speed c_h according to the time step computed in StepsizeCallback for the ideal GLM-MHD equations. The cfl number should be set to the same value as for the time step size calculation. The glm_scale ensures that the GLM wave speed is lower than the fastest physical waves in the MHD solution and should thus be set to a value within the interval [0,1]. Note that glm_scale = 0 deactivates the divergence cleaning.\n\nIn case of coupled semidiscretizations, specify for which semi_index, i.e. index of the semidiscretization, the divergence cleaning should be applied. See also SemidiscretizationCoupled. Note: SemidiscretizationCoupled and all related features are considered experimental and may change at any time.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.GradientVariablesPrimitive","page":"Trixi.jl","title":"Trixi.GradientVariablesPrimitive","text":"GradientVariablesPrimitive and GradientVariablesEntropy are gradient variable type parameters for CompressibleNavierStokesDiffusion1D. By default, the gradient variables are set to be GradientVariablesPrimitive. Specifying GradientVariablesEntropy instead uses the entropy variable formulation from\n\nHughes, Mallet, Franca (1986) A new finite element formulation for computational fluid dynamics: I. Symmetric forms of the compressible Euler and Navier-Stokes equations and the second law of thermodynamics. https://doi.org/10.1016/0045-7825(86)90127-1\n\nUnder GradientVariablesEntropy, the Navier-Stokes discretization is provably entropy stable.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.HypDiffN3Erk3Sstar52","page":"Trixi.jl","title":"Trixi.HypDiffN3Erk3Sstar52","text":"HypDiffN3Erk3Sstar52()\n\nFive stage, second-order accurate explicit Runge-Kutta scheme with stability region optimized for the hyperbolic diffusion equation with LLF flux and polynomials of degree polydeg=3.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.HyperbolicDiffusionEquations1D","page":"Trixi.jl","title":"Trixi.HyperbolicDiffusionEquations1D","text":"HyperbolicDiffusionEquations1D\n\nThe linear hyperbolic diffusion equations in one space dimension. A description of this system can be found in Sec. 2.5 of the book\n\nMasatsuka (2013) I Do Like CFD, Too: Vol 1. Freely available at http://www.cfdbooks.com/\n\nFurther analysis can be found in the paper\n\nNishikawa (2007) A first-order system approach for diffusion equation. I: Second-order residual-distribution schemes DOI: 10.1016/j.jcp.2007.07.029\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.HyperbolicDiffusionEquations2D","page":"Trixi.jl","title":"Trixi.HyperbolicDiffusionEquations2D","text":"HyperbolicDiffusionEquations2D\n\nThe linear hyperbolic diffusion equations in two space dimensions. A description of this system can be found in Sec. 2.5 of the book \"I Do Like CFD, Too: Vol 1\". The book is freely available at http://www.cfdbooks.com/ and further analysis can be found in the paper by Nishikawa DOI: 10.1016/j.jcp.2007.07.029\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.HyperbolicDiffusionEquations3D","page":"Trixi.jl","title":"Trixi.HyperbolicDiffusionEquations3D","text":"HyperbolicDiffusionEquations3D\n\nThe linear hyperbolic diffusion equations in three space dimensions. A description of this system can be found in Sec. 2.5 of the book \"I Do Like CFD, Too: Vol 1\". The book is freely available at http://www.cfdbooks.com/ and further analysis can be found in the paper by Nishikawa DOI: 10.1016/j.jcp.2007.07.029\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IdealGlmMhdEquations1D","page":"Trixi.jl","title":"Trixi.IdealGlmMhdEquations1D","text":"IdealGlmMhdEquations1D(gamma)\n\nThe ideal compressible GLM-MHD equations for an ideal gas with ratio of specific heats gamma in one space dimension.\n\nnote: Note\nThere is no divergence cleaning variable psi because the divergence-free constraint is satisfied trivially in one spatial dimension.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IdealGlmMhdEquations2D","page":"Trixi.jl","title":"Trixi.IdealGlmMhdEquations2D","text":"IdealGlmMhdEquations2D(gamma)\n\nThe ideal compressible GLM-MHD equations for an ideal gas with ratio of specific heats gamma in two space dimensions.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IdealGlmMhdEquations3D","page":"Trixi.jl","title":"Trixi.IdealGlmMhdEquations3D","text":"IdealGlmMhdEquations3D(gamma)\n\nThe ideal compressible GLM-MHD equations for an ideal gas with ratio of specific heats gamma in three space dimensions.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IdealGlmMhdMulticomponentEquations1D","page":"Trixi.jl","title":"Trixi.IdealGlmMhdMulticomponentEquations1D","text":"IdealGlmMhdMulticomponentEquations1D\n\nThe ideal compressible multicomponent GLM-MHD equations in one space dimension.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IdealGlmMhdMulticomponentEquations2D","page":"Trixi.jl","title":"Trixi.IdealGlmMhdMulticomponentEquations2D","text":"IdealGlmMhdMulticomponentEquations2D\n\nThe ideal compressible multicomponent GLM-MHD equations in two space dimensions.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IndicatorHennemannGassner","page":"Trixi.jl","title":"Trixi.IndicatorHennemannGassner","text":"IndicatorHennemannGassner(equations::AbstractEquations, basis;\n alpha_max=0.5,\n alpha_min=0.001,\n alpha_smooth=true,\n variable)\nIndicatorHennemannGassner(semi::AbstractSemidiscretization;\n alpha_max=0.5,\n alpha_min=0.001,\n alpha_smooth=true,\n variable)\n\nIndicator used for shock-capturing (when passing the equations and the basis) or adaptive mesh refinement (AMR, when passing the semi).\n\nSee also VolumeIntegralShockCapturingHG.\n\nReferences\n\nHennemann, Gassner (2020) \"A provably entropy stable subcell shock capturing approach for high order split form DG\" arXiv: 2008.12044\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IndicatorLöhner","page":"Trixi.jl","title":"Trixi.IndicatorLöhner","text":"IndicatorLöhner (equivalent to IndicatorLoehner)\n\nIndicatorLöhner(equations::AbstractEquations, basis;\n f_wave=0.2, variable)\nIndicatorLöhner(semi::AbstractSemidiscretization;\n f_wave=0.2, variable)\n\nAMR indicator adapted from a FEM indicator by Löhner (1987), also used in the FLASH code as standard AMR indicator. The indicator estimates a weighted second derivative of a specified variable locally.\n\nWhen constructed to be used for AMR, pass the semi. Pass the equations, and basis if this indicator should be used for shock capturing.\n\nReferences\n\nLöhner (1987) \"An adaptive finite element scheme for transient problems in CFD\" doi: 10.1016/0045-7825(87)90098-3\nhttps://flash.rochester.edu/site/flashcode/usersupport/flash4ug_4p62/node59.html#SECTION05163100000000000000\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.IndicatorMax","page":"Trixi.jl","title":"Trixi.IndicatorMax","text":"IndicatorMax(equations::AbstractEquations, basis; variable)\nIndicatorMax(semi::AbstractSemidiscretization; variable)\n\nA simple indicator returning the maximum of variable in an element. When constructed to be used for AMR, pass the semi. Pass the equations, and basis if this indicator should be used for shock capturing.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.InviscidBurgersEquation1D","page":"Trixi.jl","title":"Trixi.InviscidBurgersEquation1D","text":"InviscidBurgersEquation1D\n\nThe inviscid Burgers' equation\n\npartial_t u + frac12 partial_1 u^2 = 0\n\nin one space dimension.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.Isothermal","page":"Trixi.jl","title":"Trixi.Isothermal","text":"struct Isothermal\n\nUsed to create a no-slip boundary condition with BoundaryConditionNavierStokesWall. The field boundary_value_function should be a function with signature boundary_value_function(x, t, equations) and return a scalar value for the temperature at point x and time t.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LaplaceDiffusion1D","page":"Trixi.jl","title":"Trixi.LaplaceDiffusion1D","text":"LaplaceDiffusion1D(diffusivity, equations)\n\nLaplaceDiffusion1D represents a scalar diffusion term nabla cdot (kappanabla u)) with diffusivity kappa applied to each solution component defined by equations.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LaplaceDiffusion2D","page":"Trixi.jl","title":"Trixi.LaplaceDiffusion2D","text":"LaplaceDiffusion2D(diffusivity, equations)\n\nLaplaceDiffusion2D represents a scalar diffusion term nabla cdot (kappanabla u)) with diffusivity kappa applied to each solution component defined by equations.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LaplaceDiffusion3D","page":"Trixi.jl","title":"Trixi.LaplaceDiffusion3D","text":"LaplaceDiffusion3D(diffusivity, equations)\n\nLaplaceDiffusion3D represents a scalar diffusion term nabla cdot (kappanabla u)) with diffusivity kappa applied to each solution component defined by equations.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LatticeBoltzmannEquations2D","page":"Trixi.jl","title":"Trixi.LatticeBoltzmannEquations2D","text":"LatticeBoltzmannEquations2D(; Ma, Re, collision_op=collision_bgk,\n c=1, L=1, rho0=1, u0=nothing, nu=nothing)\n\nThe Lattice-Boltzmann equations\n\npartial_t u_alpha + v_alpha1 partial_1 u_alpha + v_alpha2 partial_2 u_alpha = 0\n\nin two space dimensions for the D2Q9 scheme.\n\nThe characteristic Mach number and Reynolds numbers are specified as Ma and Re. By the default, the collision operator collision_op is set to the BGK model. c, L, and rho0 specify the mean thermal molecular velocity, the characteristic length, and the reference density, respectively. They can usually be left to the default values. If desired, instead of the Mach number, one can set the macroscopic reference velocity u0 directly (Ma needs to be set to nothing in this case). Likewise, instead of the Reynolds number one can specify the kinematic viscosity nu directly (in this case, Re needs to be set to nothing).\n\nThe nine discrete velocity directions of the D2Q9 scheme are sorted as follows [4]:\n\n 6 2 5 y\n ┌───┼───┐ │\n │ │ │\n 3 ┼ 9 ┼ 1 ──── x\n │ │ ╱\n └───┼───┘ ╱\n 7 4 8 z\n\nNote that usually the velocities are numbered from 0 to 8, where 0 corresponds to the zero velocity. Due to Julia using 1-based indexing, here we use indices from 1 to 9, where 1 through 8 correspond to the velocity directions in [4] and 9 is the zero velocity.\n\nThe corresponding opposite directions are:\n\n1 ←→ 3\n2 ←→ 4\n3 ←→ 1\n4 ←→ 2\n5 ←→ 7\n6 ←→ 8\n7 ←→ 5\n8 ←→ 6\n9 ←→ 9\n\nThe main sources for the base implementation were\n\nMisun Min, Taehun Lee, A spectral-element discontinuous Galerkin lattice Boltzmann method for nearly incompressible flows, J Comput Phys 230(1), 2011 doi:10.1016/j.jcp.2010.09.024\nKarsten Golly, Anwendung der Lattice-Boltzmann Discontinuous Galerkin Spectral Element Method (LB-DGSEM) auf laminare und turbulente nahezu inkompressible Strömungen im dreidimensionalen Raum, Master Thesis, University of Cologne, 2018.\nDieter Hänel, Molekulare Gasdynamik, Springer-Verlag Berlin Heidelberg, 2004 doi:10.1007/3-540-35047-0\nDieter Krüger et al., The Lattice Boltzmann Method, Springer International Publishing, 2017 doi:10.1007/978-3-319-44649-3\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LatticeBoltzmannEquations3D","page":"Trixi.jl","title":"Trixi.LatticeBoltzmannEquations3D","text":"LatticeBoltzmannEquations3D(; Ma, Re, collision_op=collision_bgk,\n c=1, L=1, rho0=1, u0=nothing, nu=nothing)\n\nThe Lattice-Boltzmann equations\n\npartial_t u_alpha + v_alpha1 partial_1 u_alpha + v_alpha2 partial_2 u_alpha + v_alpha3 partial_3 u_alpha = 0\n\nin three space dimensions for the D3Q27 scheme.\n\nThe characteristic Mach number and Reynolds numbers are specified as Ma and Re. By the default, the collision operator collision_op is set to the BGK model. c, L, and rho0 specify the mean thermal molecular velocity, the characteristic length, and the reference density, respectively. They can usually be left to the default values. If desired, instead of the Mach number, one can set the macroscopic reference velocity u0 directly (Ma needs to be set to nothing in this case). Likewise, instead of the Reynolds number one can specify the kinematic viscosity nu directly (in this case, Re needs to be set to nothing).\n\nThe twenty-seven discrete velocity directions of the D3Q27 scheme are sorted as follows [4]:\n\nplane at z = -1:\n 24 17 21 y\n ┌───┼───┐ │\n │ │ │\n 10 ┼ 6 ┼ 15 ──── x\n │ │ ╱\n └───┼───┘ ╱\n 20 12 26 z\nplane at z = 0:\n 14 3 7 y\n ┌───┼───┐ │\n │ │ │\n 2 ┼ 27 ┼ 1 ──── x\n │ │ ╱\n └───┼───┘ ╱\n 8 4 13 z\nplane at z = +1:\n 25 11 19 y\n ┌───┼───┐ │\n │ │ │\n 16 ┼ 5 ┼ 9 ──── x\n │ │ ╱\n └───┼───┘ ╱\n 22 18 23 z\n\nNote that usually the velocities are numbered from 0 to 26, where 0 corresponds to the zero velocity. Due to Julia using 1-based indexing, here we use indices from 1 to 27, where 1 through 26 correspond to the velocity directions in [4] and 27 is the zero velocity.\n\nThe corresponding opposite directions are:\n\n1 ←→ 2\n2 ←→ 1\n3 ←→ 4\n4 ←→ 3\n5 ←→ 6\n6 ←→ 5\n7 ←→ 8\n8 ←→ 7\n9 ←→ 10\n10 ←→ 9\n11 ←→ 12\n12 ←→ 11\n13 ←→ 14\n14 ←→ 13\n15 ←→ 16\n16 ←→ 15\n17 ←→ 18\n18 ←→ 17\n19 ←→ 20\n20 ←→ 19\n21 ←→ 22\n22 ←→ 21\n23 ←→ 24\n24 ←→ 23\n25 ←→ 26\n26 ←→ 25\n27 ←→ 27\n\nThe main sources for the base implementation were\n\nMisun Min, Taehun Lee, A spectral-element discontinuous Galerkin lattice Boltzmann method for nearly incompressible flows, J Comput Phys 230(1), 2011 doi:10.1016/j.jcp.2010.09.024\nKarsten Golly, Anwendung der Lattice-Boltzmann Discontinuous Galerkin Spectral Element Method (LB-DGSEM) auf laminare und turbulente nahezu inkompressible Strömungen im dreidimensionalen Raum, Master Thesis, University of Cologne, 2018.\nDieter Hänel, Molekulare Gasdynamik, Springer-Verlag Berlin Heidelberg, 2004 doi:10.1007/3-540-35047-0\nDieter Krüger et al., The Lattice Boltzmann Method, Springer International Publishing, 2017 doi:10.1007/978-3-319-44649-3\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LiftCoefficientPressure-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.LiftCoefficientPressure","text":"LiftCoefficientPressure(aoa, rhoinf, uinf, linf)\n\nCompute the lift coefficient\n\nC_Lp coloneqq fracoint_partial Omega p boldsymbol n cdot psi_L mathrmd S\n 05 rho_infty U_infty^2 L_infty\n\nbased on the pressure distribution along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.\n\naoa::Real: Angle of attack in radians (for airfoils etc.)\nrhoinf::Real: Free-stream density\nuinf::Real: Free-stream velocity\nlinf::Real: Reference length of geometry (e.g. airfoil chord length)\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.LiftCoefficientShearStress-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.LiftCoefficientShearStress","text":"LiftCoefficientShearStress(aoa, rhoinf, uinf, linf)\n\nCompute the lift coefficient\n\nC_Lf coloneqq fracoint_partial Omega boldsymbol tau_w cdot psi_L mathrmd S\n 05 rho_infty U_infty^2 L_infty\n\nbased on the wall shear stress vector tau_w along a boundary. Supposed to be used in conjunction with AnalysisSurfaceIntegral which stores the boundary information and semidiscretization.\n\naoa::Real: Angle of attack in radians (for airfoils etc.)\nrhoinf::Real: Free-stream density\nuinf::Real: Free-stream velocity\nlinf::Real: Reference length of geometry (e.g. airfoil chord length)\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.LinearScalarAdvectionEquation1D","page":"Trixi.jl","title":"Trixi.LinearScalarAdvectionEquation1D","text":"LinearScalarAdvectionEquation1D\n\nThe linear scalar advection equation\n\npartial_t u + a partial_1 u = 0\n\nin one space dimension with constant velocity a.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LinearScalarAdvectionEquation2D","page":"Trixi.jl","title":"Trixi.LinearScalarAdvectionEquation2D","text":"LinearScalarAdvectionEquation2D\n\nThe linear scalar advection equation\n\npartial_t u + a_1 partial_1 u + a_2 partial_2 u = 0\n\nin two space dimensions with constant velocity a.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LinearScalarAdvectionEquation3D","page":"Trixi.jl","title":"Trixi.LinearScalarAdvectionEquation3D","text":"LinearScalarAdvectionEquation3D\n\nThe linear scalar advection equation\n\npartial_t u + a_1 partial_1 u + a_2 partial_2 u + a_3 partial_3 u = 0\n\nin three space dimensions with constant velocity a.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LinearizedEulerEquations1D","page":"Trixi.jl","title":"Trixi.LinearizedEulerEquations1D","text":"LinearizedEulerEquations1D(v_mean_global, c_mean_global, rho_mean_global)\n\nLinearized Euler equations in one space dimension. The equations are given by\n\npartial_t\nbeginpmatrix\n rho v_1 p\nendpmatrix\n+\npartial_x\nbeginpmatrix\n barrho v_1 + barv_1 rho barv_1 v_1 + fracpbarrho barv_1 p + c^2 barrho v_1\nendpmatrix\n=\nbeginpmatrix\n 0 0 0\nendpmatrix\n\nThe bar bar(cdot) indicates uniform mean flow variables and c is the speed of sound. The unknowns are the perturbation quantities of the acoustic velocity v_1, the pressure p and the density rho.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LinearizedEulerEquations2D","page":"Trixi.jl","title":"Trixi.LinearizedEulerEquations2D","text":"LinearizedEulerEquations2D(v_mean_global, c_mean_global, rho_mean_global)\n\nLinearized Euler equations in two space dimensions. The equations are given by\n\npartial_t\nbeginpmatrix\n rho v_1 v_2 p\nendpmatrix\n+\npartial_x\nbeginpmatrix\n barrho v_1 + barv_1 rho barv_1 v_1 + fracpbarrho barv_1 v_2 barv_1 p + c^2 barrho v_1\nendpmatrix\n+\npartial_y\nbeginpmatrix\n barrho v_2 + barv_2 rho barv_2 v_1 barv_2 v_2 + fracpbarrho barv_2 p + c^2 barrho v_2\nendpmatrix\n=\nbeginpmatrix\n 0 0 0 0\nendpmatrix\n\nThe bar bar(cdot) indicates uniform mean flow variables and c is the speed of sound. The unknowns are the acoustic velocities v = (v_1 v_2), the pressure p and the density rho.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LinearizedEulerEquations3D","page":"Trixi.jl","title":"Trixi.LinearizedEulerEquations3D","text":"LinearizedEulerEquations3D(v_mean_global, c_mean_global, rho_mean_global)\n\nLinearized Euler equations in three space dimensions. The equations are given by\n\npartial_t\nbeginpmatrix\n rho v_1 v_2 v_3 p\nendpmatrix\n+\npartial_x\nbeginpmatrix\n barrho v_1 + barv_1 rho \n barv_1 v_1 + fracpbarrho \n barv_1 v_2 \n barv_1 v_3 \n barv_1 p + c^2 barrho v_1\nendpmatrix\n+\npartial_y\nbeginpmatrix\n barrho v_2 + barv_2 rho \n barv_2 v_1 \n barv_2 v_2 + fracpbarrho \n barv_2 v_3 \n barv_2 p + c^2 barrho v_2\nendpmatrix\n+ \npartial_z\nbeginpmatrix\n barrho v_3 + barv_3 rho \n barv_3 v_1 \n barv_3 v_2 \n barv_3 v_3 + fracpbarrho \n barv_3 p + c^2 barrho v_3\nendpmatrix\n=\nbeginpmatrix\n 0 0 0 0 0\nendpmatrix\n\nThe bar bar(cdot) indicates uniform mean flow variables and c is the speed of sound. The unknowns are the acoustic velocities v = (v_1 v_2 v_3), the pressure p and the density rho.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.LobattoLegendreBasis","page":"Trixi.jl","title":"Trixi.LobattoLegendreBasis","text":"LobattoLegendreBasis([RealT=Float64,] polydeg::Integer)\n\nCreate a nodal Lobatto-Legendre basis for polynomials of degree polydeg.\n\nFor the special case polydeg=0 the DG method reduces to a finite volume method. Therefore, this function sets the center point of the cell as single node. This exceptional case is currently only supported for TreeMesh!\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.MaxwellEquations1D","page":"Trixi.jl","title":"Trixi.MaxwellEquations1D","text":"MaxwellEquations1D(c = 299_792_458.0)\n\nThe Maxwell equations of electro dynamics\n\nfracpartialpartial t\nbeginpmatrix\nE B\nendpmatrix\n+ \nfracpartialpartial x\nbeginpmatrix\nc^2 B E\nendpmatrix\n=\nbeginpmatrix\n0 0 \nendpmatrix\n\nin one dimension with speed of light c = 299792458 m/s (in vacuum). In one dimension the Maxwell equations reduce to a wave equation. The orthogonal magnetic (e.g.B_y) and electric field (E_z) propagate as waves through the domain in x-direction. For reference, see \n\ne.g. p.15 of Numerical Methods for Conservation Laws: From Analysis to Algorithms https://doi.org/10.1137/1.9781611975109\nor equation (1) in https://inria.hal.science/hal-01720293/document\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.NoSlip","page":"Trixi.jl","title":"Trixi.NoSlip","text":"struct NoSlip\n\nUse to create a no-slip boundary condition with BoundaryConditionNavierStokesWall. The field boundary_value_function should be a function with signature boundary_value_function(x, t, equations) and should return a SVector{NDIMS} whose entries are the velocity vector at a point x and time t.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.NonConservativeLocal","page":"Trixi.jl","title":"Trixi.NonConservativeLocal","text":"NonConservativeLocal()\n\nStruct used for multiple dispatch on non-conservative flux functions in the format of \"local * symmetric\". When the argument nonconservative_type is of type NonConservativeLocal, the function returns the local part of the non-conservative term.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.NonConservativeSymmetric","page":"Trixi.jl","title":"Trixi.NonConservativeSymmetric","text":"NonConservativeSymmetric()\n\nStruct used for multiple dispatch on non-conservative flux functions in the format of \"local * symmetric\". When the argument nonconservative_type is of type NonConservativeSymmetric, the function returns the symmetric part of the non-conservative term.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.P4estMesh","page":"Trixi.jl","title":"Trixi.P4estMesh","text":"P4estMesh{NDIMS} <: AbstractMesh{NDIMS}\n\nAn unstructured curved mesh based on trees that uses the C library p4est to manage trees and mesh refinement.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.P4estMesh-Tuple{Any}","page":"Trixi.jl","title":"Trixi.P4estMesh","text":"P4estMesh(trees_per_dimension; polydeg,\n mapping=nothing, faces=nothing, coordinates_min=nothing, coordinates_max=nothing,\n RealT=Float64, initial_refinement_level=0, periodicity=true, unsaved_changes=true,\n p4est_partition_allow_for_coarsening=true)\n\nCreate a structured curved P4estMesh of the specified size.\n\nThere are three ways to map the mesh to the physical domain.\n\nDefine a mapping that maps the hypercube [-1, 1]^n.\nSpecify a Tuple faces of functions that parametrize each face.\nCreate a rectangular mesh by specifying coordinates_min and coordinates_max.\n\nNon-periodic boundaries will be called :x_neg, :x_pos, :y_neg, :y_pos, :z_neg, :z_pos.\n\nArguments\n\ntrees_per_dimension::NTupleE{NDIMS, Int}: the number of trees in each dimension.\npolydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.\nmapping: a function of NDIMS variables to describe the mapping that transforms the reference mesh ([-1, 1]^n) to the physical domain. Use only one of mapping, faces and coordinates_min/coordinates_max.\nfaces::NTuple{2*NDIMS}: a tuple of 2 * NDIMS functions that describe the faces of the domain. Each function must take NDIMS-1 arguments. faces[1] describes the face onto which the face in negative x-direction of the unit hypercube is mapped. The face in positive x-direction of the unit hypercube will be mapped onto the face described by faces[2]. faces[3:4] describe the faces in positive and negative y-direction respectively (in 2D and 3D). faces[5:6] describe the faces in positive and negative z-direction respectively (in 3D). Use only one of mapping, faces and coordinates_min/coordinates_max.\ncoordinates_min: vector or tuple of the coordinates of the corner in the negative direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.\ncoordinates_max: vector or tuple of the coordinates of the corner in the positive direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.\nRealT::Type: the type that should be used for coordinates.\ninitial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.\nperiodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.\nunsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.\np4est_partition_allow_for_coarsening::Bool: Must be true when using AMR to make mesh adaptivity independent of domain partitioning. Should be false for static meshes to permit more fine-grained partitioning.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.P4estMesh-Union{Tuple{String}, Tuple{NDIMS}} where NDIMS","page":"Trixi.jl","title":"Trixi.P4estMesh","text":"P4estMesh{NDIMS}(meshfile::String;\n mapping=nothing, polydeg=1, RealT=Float64,\n initial_refinement_level=0, unsaved_changes=true,\n p4est_partition_allow_for_coarsening=true,\n boundary_symbols = nothing)\n\nMain mesh constructor for the P4estMesh that imports an unstructured, conforming mesh from an Abaqus mesh file (.inp). Each element of the conforming mesh parsed from the meshfile is created as a p4est tree datatype.\n\nTo create a curved unstructured mesh P4estMesh two strategies are available:\n\np4est_mesh_from_hohqmesh_abaqus: High-order, curved boundary information created by HOHQMesh.jl is available in the meshfile. The mesh polynomial degree polydeg of the boundaries is provided from the meshfile. The computation of the mapped tree coordinates is done with transfinite interpolation with linear blending similar to UnstructuredMesh2D. Boundary name information is also parsed from the meshfile such that different boundary conditions can be set at each named boundary on a given tree.\np4est_mesh_from_standard_abaqus: By default, with mapping=nothing and polydeg=1, this creates a straight-sided from the information parsed from the meshfile. If a mapping function is specified then it computes the mapped tree coordinates via polynomial interpolants with degree polydeg. The mesh created by this function will only have one boundary :all if boundary_symbols is not specified. If boundary_symbols is specified the mesh file will be parsed for nodesets defining the boundary nodes from which boundary edges (2D) and faces (3D) will be assigned.\n\nNote that the mapping and polydeg keyword arguments are only used by the p4est_mesh_from_standard_abaqus function. The p4est_mesh_from_hohqmesh_abaqus function obtains the mesh polydeg directly from the meshfile and constructs the transfinite mapping internally.\n\nThe particular strategy is selected according to the header present in the meshfile where the constructor checks whether or not the meshfile was created with HOHQMesh.jl. If the Abaqus file header is not present in the meshfile then the P4estMesh is created with the function p4est_mesh_from_standard_abaqus.\n\nThe default keyword argument initial_refinement_level=0 corresponds to a forest where the number of trees is the same as the number of elements in the original meshfile. Increasing the initial_refinement_level allows one to uniformly refine the base mesh given in the meshfile to create a forest with more trees before the simulation begins. For example, if a two-dimensional base mesh contains 25 elements then setting initial_refinement_level=1 creates an initial forest of 2^2 * 25 = 100 trees.\n\nArguments\n\nmeshfile::String: an uncurved Abaqus mesh file that can be imported by p4est.\nmapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: the type that should be used for coordinates.\ninitial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.\nunsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.\np4est_partition_allow_for_coarsening::Bool: Must be true when using AMR to make mesh adaptivity independent of domain partitioning. Should be false for static meshes to permit more fine-grained partitioning.\nboundary_symbols::Vector{Symbol}: A vector of symbols that correspond to the boundary names in the meshfile. If nothing is passed then all boundaries are named :all. \n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.PairedExplicitRK2","page":"Trixi.jl","title":"Trixi.PairedExplicitRK2","text":"PairedExplicitRK2(num_stages, base_path_monomial_coeffs::AbstractString,\n bS = 1.0, cS = 0.5)\nPairedExplicitRK2(num_stages, tspan, semi::AbstractSemidiscretization;\n verbose = false, bS = 1.0, cS = 0.5)\nPairedExplicitRK2(num_stages, tspan, eig_vals::Vector{ComplexF64};\n verbose = false, bS = 1.0, cS = 0.5)\nParameters:\n- `num_stages` (`Int`): Number of stages in the PERK method.\n- `base_path_monomial_coeffs` (`AbstractString`): Path to a file containing \n monomial coefficients of the stability polynomial of PERK method.\n The coefficients should be stored in a text file at `joinpath(base_path_monomial_coeffs, \"gamma_$(num_stages).txt\")` and separated by line breaks.\n- `tspan`: Time span of the simulation.\n- `semi` (`AbstractSemidiscretization`): Semidiscretization setup.\n- `eig_vals` (`Vector{ComplexF64}`): Eigenvalues of the Jacobian of the right-hand side (rhs) of the ODEProblem after the\n equation has been semidiscretized.\n- `verbose` (`Bool`, optional): Verbosity flag, default is false.\n- `bS` (`Float64`, optional): Value of b in the Butcher tableau at b_s, when \n s is the number of stages, default is 1.0.\n- `cS` (`Float64`, optional): Value of c in the Butcher tableau at c_s, when\n s is the number of stages, default is 0.5.\n\nThe following structures and methods provide a minimal implementation of the second-order paired explicit Runge-Kutta (PERK) method optimized for a certain simulation setup (PDE, IC & BC, Riemann Solver, DG Solver).\n\nBrian Vermeire (2019). Paired explicit Runge-Kutta schemes for stiff systems of equations DOI: 10.1016/j.jcp.2019.05.014\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ParametersEulerGravity","page":"Trixi.jl","title":"Trixi.ParametersEulerGravity","text":"ParametersEulerGravity(; background_density=0.0,\n gravitational_constant=1.0,\n cfl=1.0,\n resid_tol=1.0e-4,\n n_iterations_max=10^4,\n timestep_gravity=timestep_gravity_erk52_3Sstar!)\n\nSet up parameters for the gravitational part of a SemidiscretizationEulerGravity.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ParsaniKetchesonDeconinck3Sstar32","page":"Trixi.jl","title":"Trixi.ParsaniKetchesonDeconinck3Sstar32","text":"ParsaniKetchesonDeconinck3Sstar32()\n\nParsani, Ketcheson, Deconinck (2013) Optimized explicit RK schemes for the spectral difference method applied to wave propagation problems DOI: 10.1137/120885899\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ParsaniKetchesonDeconinck3Sstar94","page":"Trixi.jl","title":"Trixi.ParsaniKetchesonDeconinck3Sstar94","text":"ParsaniKetchesonDeconinck3Sstar94()\n\nParsani, Ketcheson, Deconinck (2013) Optimized explicit RK schemes for the spectral difference method applied to wave propagation problems DOI: 10.1137/120885899\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.PerformanceCounter","page":"Trixi.jl","title":"Trixi.PerformanceCounter","text":"PerformanceCounter()\n\nA PerformanceCounter can be used to track the runtime performance of some calls. Add a new runtime measurement via put!(counter, runtime) and get the averaged runtime of all measurements added so far via take!(counter), resetting the counter.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.PerformanceCounterList","page":"Trixi.jl","title":"Trixi.PerformanceCounterList","text":"PerformanceCounterList{N}()\n\nA PerformanceCounterList{N} can be used to track the runtime performance of calls to multiple functions, adding them up. Add a new runtime measurement via put!(counter.counters[i], runtime) and get the averaged runtime of all measurements added so far via take!(counter), resetting the counter.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.PlotData1D","page":"Trixi.jl","title":"Trixi.PlotData1D","text":"PlotData1D\n\nHolds all relevant data for creating 1D plots of multiple solution variables and to visualize the mesh.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.PlotData1D-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.PlotData1D","text":"PlotData1D(u, semi [or mesh, equations, solver, cache];\n solution_variables=nothing, nvisnodes=nothing)\n\nCreate a new PlotData1D object that can be used for visualizing 1D DGSEM solution data array u with Plots.jl. All relevant geometrical information is extracted from the semidiscretization semi. By default, the primitive variables (if existent) or the conservative variables (otherwise) from the solution are used for plotting. This can be changed by passing an appropriate conversion function to solution_variables.\n\nnvisnodes specifies the number of visualization nodes to be used. If it is nothing, twice the number of solution DG nodes are used for visualization, and if set to 0, exactly the number of nodes in the DG elements are used.\n\nWhen visualizing data from a two-dimensional simulation, a 1D slice is extracted for plotting. slice specifies the axis along which the slice is extracted and may be :x, or :y. The slice position is specified by a point that lies on it, which defaults to (0.0, 0.0). Both of these values are ignored when visualizing 1D data. This applies analogously to three-dimensional simulations, where slice may be :xy, :xz, or :yz.\n\nAnother way to visualize 2D/3D data is by creating a plot along a given curve. This is done with the keyword argument curve. It can be set to a list of 2D/3D points which define the curve. When using curve any other input from slice or point will be ignored.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.PlotData1D-Tuple{Union{ODESolution{T, N, uType, uType2, DType, tType, rateType, P} where {T, N, uType, uType2, DType, tType, rateType, P<:(ODEProblem{uType_, tType_, isinplace, P_} where {uType_, tType_, isinplace, P_<:Trixi.AbstractSemidiscretization})}, Trixi.TimeIntegratorSolution}}","page":"Trixi.jl","title":"Trixi.PlotData1D","text":"PlotData1D(sol; kwargs...)\n\nCreate a PlotData1D object from a solution object created by either OrdinaryDiffEq.solve! (which returns a SciMLBase.ODESolution) or Trixi.jl's own solve! (which returns a TimeIntegratorSolution).\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.PlotData2DCartesian","page":"Trixi.jl","title":"Trixi.PlotData2DCartesian","text":"PlotData2D\n\nHolds all relevant data for creating 2D plots of multiple solution variables and to visualize the mesh.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.PolytropicEulerEquations2D","page":"Trixi.jl","title":"Trixi.PolytropicEulerEquations2D","text":"PolytropicEulerEquations2D(gamma, kappa)\n\nThe polytropic Euler equations\n\nfracpartialpartial t\nbeginpmatrix\nrho rho v_1 rho v_2\nendpmatrix\n+\nfracpartialpartial x\nbeginpmatrix\n rho v_1 rho v_1^2 + kapparho^gamma rho v_1 v_2\nendpmatrix\n+\nfracpartialpartial y\nbeginpmatrix\nrho v_2 rho v_1 v_2 rho v_2^2 + kapparho^gamma\nendpmatrix\n=\nbeginpmatrix\n0 0 0\nendpmatrix\n\nfor an ideal gas with ratio of specific heats gamma in two space dimensions. Here, rho is the density and v_1 andv_2 the velocities and\n\np = kapparho^gamma\n\nthe pressure, which we replaced using this relation.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.PositivityPreservingLimiterZhangShu","page":"Trixi.jl","title":"Trixi.PositivityPreservingLimiterZhangShu","text":"PositivityPreservingLimiterZhangShu(; threshold, variables)\n\nThe fully-discrete positivity-preserving limiter of\n\nZhang, Shu (2011) Maximum-principle-satisfying and positivity-preserving high-order schemes for conservation laws: survey and new developments doi: 10.1098/rspa.2011.0153\n\nThe limiter is applied to all scalar variables in their given order using the associated thresholds to determine the minimal acceptable values. The order of the variables is important and might have a strong influence on the robustness.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SaveRestartCallback","page":"Trixi.jl","title":"Trixi.SaveRestartCallback","text":"SaveRestartCallback(; interval=0,\n save_final_restart=true,\n output_directory=\"out\")\n\nSave the current numerical solution in a restart file every interval time steps.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SaveSolutionCallback","page":"Trixi.jl","title":"Trixi.SaveSolutionCallback","text":"SaveSolutionCallback(; interval::Integer=0,\n dt=nothing,\n save_initial_solution=true,\n save_final_solution=true,\n output_directory=\"out\",\n solution_variables=cons2prim)\n\nSave the current numerical solution in regular intervals. Either pass interval to save every interval time steps or pass dt to save in intervals of dt in terms of integration time by adding additional (shortened) time steps where necessary (note that this may change the solution). solution_variables can be any callable that converts the conservative variables at a single point to a set of solution variables. The first parameter passed to solution_variables will be the set of conservative variables and the second parameter is the equation struct.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SemidiscretizationCoupled","page":"Trixi.jl","title":"Trixi.SemidiscretizationCoupled","text":"SemidiscretizationCoupled\n\nA struct used to bundle multiple semidiscretizations. semidiscretize will return an ODEProblem that synchronizes time steps between the semidiscretizations. Each call of rhs! will call rhs! for each semidiscretization individually. The semidiscretizations can be coupled by gluing meshes together using BoundaryConditionCoupled.\n\nwarning: Experimental code\nThis is an experimental feature and can change any time.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SemidiscretizationCoupled-Tuple","page":"Trixi.jl","title":"Trixi.SemidiscretizationCoupled","text":"SemidiscretizationCoupled(semis...)\n\nCreate a coupled semidiscretization that consists of the semidiscretizations passed as arguments.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.SemidiscretizationEulerAcoustics","page":"Trixi.jl","title":"Trixi.SemidiscretizationEulerAcoustics","text":"SemidiscretizationEulerAcoustics(semi_acoustics::SemiAcoustics, semi_euler::SemiEuler;\n source_region=x->true, weights=x->1.0)\n\nwarning: Experimental code\nThis semidiscretization is experimental and may change in any future release.\n\nConstruct a semidiscretization of the acoustic perturbation equations that is coupled with the compressible Euler equations via source terms for the perturbed velocity. Both semidiscretizations have to use the same mesh and solvers with a shared basis. The coupling region is described by a function source_region that maps the coordinates of a single node to true or false depending on whether the point lies within the coupling region or not. A weighting function weights that maps coordinates to weights is applied to the acoustic source terms. Note that this semidiscretization should be used in conjunction with EulerAcousticsCouplingCallback and only works in two dimensions.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SemidiscretizationEulerGravity","page":"Trixi.jl","title":"Trixi.SemidiscretizationEulerGravity","text":"SemidiscretizationEulerGravity\n\nA struct containing everything needed to describe a spatial semidiscretization of a the compressible Euler equations with self-gravity, reformulating the Poisson equation for the gravitational potential as steady-state problem of the hyperblic diffusion equations.\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) \"A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics\" arXiv: 2008.10593\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SemidiscretizationEulerGravity-Union{Tuple{SemiGravity}, Tuple{SemiEuler}, Tuple{Mesh}, Tuple{SemiEuler, SemiGravity, Any}} where {Mesh, SemiEuler<:(SemidiscretizationHyperbolic{Mesh, <:Trixi.AbstractCompressibleEulerEquations}), SemiGravity<:(SemidiscretizationHyperbolic{Mesh, <:Trixi.AbstractHyperbolicDiffusionEquations})}","page":"Trixi.jl","title":"Trixi.SemidiscretizationEulerGravity","text":"SemidiscretizationEulerGravity(semi_euler::SemiEuler, semi_gravity::SemiGravity, parameters)\n\nConstruct a semidiscretization of the compressible Euler equations with self-gravity. parameters should be given as ParametersEulerGravity.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.SemidiscretizationHyperbolic","page":"Trixi.jl","title":"Trixi.SemidiscretizationHyperbolic","text":"SemidiscretizationHyperbolic\n\nA struct containing everything needed to describe a spatial semidiscretization of a hyperbolic conservation law.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SemidiscretizationHyperbolic-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.SemidiscretizationHyperbolic","text":"SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;\n source_terms=nothing,\n boundary_conditions=boundary_condition_periodic,\n RealT=real(solver),\n uEltype=RealT,\n initial_cache=NamedTuple())\n\nConstruct a semidiscretization of a hyperbolic PDE.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.SemidiscretizationHyperbolicParabolic","page":"Trixi.jl","title":"Trixi.SemidiscretizationHyperbolicParabolic","text":"SemidiscretizationHyperbolicParabolic\n\nA struct containing everything needed to describe a spatial semidiscretization of a mixed hyperbolic-parabolic conservation law.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SemidiscretizationHyperbolicParabolic-Tuple{Any, Tuple, Any, Any}","page":"Trixi.jl","title":"Trixi.SemidiscretizationHyperbolicParabolic","text":"SemidiscretizationHyperbolicParabolic(mesh, both_equations, initial_condition, solver;\n solver_parabolic=default_parabolic_solver(),\n source_terms=nothing,\n both_boundary_conditions=(boundary_condition_periodic, boundary_condition_periodic),\n RealT=real(solver),\n uEltype=RealT,\n both_initial_caches=(NamedTuple(), NamedTuple()))\n\nConstruct a semidiscretization of a hyperbolic-parabolic PDE.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ShallowWaterEquations1D","page":"Trixi.jl","title":"Trixi.ShallowWaterEquations1D","text":"ShallowWaterEquations1D(; gravity, H0 = 0)\n\nShallow water equations (SWE) in one space dimension. The equations are given by\n\nbeginaligned\n fracpartial hpartial t + fracpartialpartial x(h v) = 0 \n fracpartialpartial t(h v) + fracpartialpartial xleft(h v^2 + fracg2h^2right)\n + g h fracpartial bpartial x = 0\nendaligned\n\nThe unknown quantities of the SWE are the water height h and the velocity v. The gravitational constant is denoted by g and the (possibly) variable bottom topography function b(x). Conservative variable water height h is measured from the bottom topography b, therefore one also defines the total water height as H = h + b.\n\nThe additional quantity H_0 is also available to store a reference value for the total water height that is useful to set initial conditions or test the \"lake-at-rest\" well-balancedness.\n\nThe bottom topography function b(x) is set inside the initial condition routine for a particular problem setup. To test the conservative form of the SWE one can set the bottom topography variable b to zero.\n\nIn addition to the unknowns, Trixi.jl currently stores the bottom topography values at the approximation points despite being fixed in time. This is done for convenience of computing the bottom topography gradients on the fly during the approximation as well as computing auxiliary quantities like the total water height H or the entropy variables. This affects the implementation and use of these equations in various ways:\n\nThe flux values corresponding to the bottom topography must be zero.\nThe bottom topography values must be included when defining initial conditions, boundary conditions or source terms.\nAnalysisCallback analyzes this variable.\nTrixi.jl's visualization tools will visualize the bottom topography by default.\n\nReferences for the SWE are many but a good introduction is available in Chapter 13 of the book:\n\nRandall J. LeVeque (2002) Finite Volume Methods for Hyperbolic Problems DOI: 10.1017/CBO9780511791253\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ShallowWaterEquations2D","page":"Trixi.jl","title":"Trixi.ShallowWaterEquations2D","text":"ShallowWaterEquations2D(; gravity, H0 = 0)\n\nShallow water equations (SWE) in two space dimensions. The equations are given by\n\nbeginaligned\n fracpartial hpartial t + fracpartialpartial x(h v_1)\n + fracpartialpartial y(h v_2) = 0 \n fracpartialpartial t(h v_1) + fracpartialpartial xleft(h v_1^2 + fracg2h^2right)\n + fracpartialpartial y(h v_1 v_2) + g h fracpartial bpartial x = 0 \n fracpartialpartial t(h v_2) + fracpartialpartial x(h v_1 v_2)\n + fracpartialpartial yleft(h v_2^2 + fracg2h^2right) + g h fracpartial bpartial y = 0\nendaligned\n\nThe unknown quantities of the SWE are the water height h and the velocities mathbfv = (v_1 v_2)^T. The gravitational constant is denoted by g and the (possibly) variable bottom topography function b(xy). Conservative variable water height h is measured from the bottom topography b, therefore one also defines the total water height as H = h + b.\n\nThe additional quantity H_0 is also available to store a reference value for the total water height that is useful to set initial conditions or test the \"lake-at-rest\" well-balancedness.\n\nThe bottom topography function b(xy) is set inside the initial condition routine for a particular problem setup. To test the conservative form of the SWE one can set the bottom topography variable b to zero.\n\nIn addition to the unknowns, Trixi.jl currently stores the bottom topography values at the approximation points despite being fixed in time. This is done for convenience of computing the bottom topography gradients on the fly during the approximation as well as computing auxiliary quantities like the total water height H or the entropy variables. This affects the implementation and use of these equations in various ways:\n\nThe flux values corresponding to the bottom topography must be zero.\nThe bottom topography values must be included when defining initial conditions, boundary conditions or source terms.\nAnalysisCallback analyzes this variable.\nTrixi.jl's visualization tools will visualize the bottom topography by default.\n\nReferences for the SWE are many but a good introduction is available in Chapter 13 of the book:\n\nRandall J. LeVeque (2002) Finite Volume Methods for Hyperbolic Problems DOI: 10.1017/CBO9780511791253\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ShallowWaterEquationsQuasi1D","page":"Trixi.jl","title":"Trixi.ShallowWaterEquationsQuasi1D","text":"ShallowWaterEquationsQuasi1D(; gravity, H0 = 0, threshold_limiter = nothing threshold_wet = nothing)\n\nThe quasi-1D shallow water equations (SWE). The equations are given by\n\nbeginaligned\n fracpartialpartial t(a h) + fracpartialpartial x(a h v) = 0 \n fracpartialpartial t(a h v) + fracpartialpartial x(a h v^2)\n + g a h fracpartialpartial x(h + b) = 0\nendaligned\n\nThe unknown quantities of the Quasi-1D SWE are the water height h and the scaled velocity v. The gravitational constant is denoted by g, the (possibly) variable bottom topography function b(x), and (possibly) variable channel width a(x). The water height h is measured from the bottom topography b, therefore one also defines the total water height as H = h + b.\n\nThe additional quantity H_0 is also available to store a reference value for the total water height that is useful to set initial conditions or test the \"lake-at-rest\" well-balancedness.\n\nThe bottom topography function b(x) and channel width a(x) are set inside the initial condition routine for a particular problem setup. To test the conservative form of the SWE one can set the bottom topography variable b to zero and a to one. \n\nIn addition to the unknowns, Trixi.jl currently stores the bottom topography and channel width values at the approximation points despite being fixed in time. This is done for convenience of computing the bottom topography gradients on the fly during the approximation as well as computing auxiliary quantities like the total water height H or the entropy variables. This affects the implementation and use of these equations in various ways:\n\nThe flux values corresponding to the bottom topography and channel width must be zero.\nThe bottom topography and channel width values must be included when defining initial conditions, boundary conditions or source terms.\nAnalysisCallback analyzes this variable.\nTrixi.jl's visualization tools will visualize the bottom topography and channel width by default.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SimpleSSPRK33","page":"Trixi.jl","title":"Trixi.SimpleSSPRK33","text":"SimpleSSPRK33(; stage_callbacks=())\n\nThe third-order SSP Runge-Kutta method of Shu and Osher.\n\nReferences\n\nShu, Osher (1988) \"Efficient Implementation of Essentially Non-oscillatory Shock-Capturing Schemes\" (Eq. 2.18) DOI: 10.1016/0021-9991(88)90177-5\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SteadyStateCallback","page":"Trixi.jl","title":"Trixi.SteadyStateCallback","text":"SteadyStateCallback(; abstol=1.0e-8, reltol=1.0e-6)\n\nTerminates the integration when the residual_steady_state(du, equations) falls below the threshold specified by abstol, reltol.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.StepsizeCallback","page":"Trixi.jl","title":"Trixi.StepsizeCallback","text":"StepsizeCallback(; cfl=1.0)\n\nSet the time step size according to a CFL condition with CFL number cfl if the time integration method isn't adaptive itself.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.StructuredMesh","page":"Trixi.jl","title":"Trixi.StructuredMesh","text":"StructuredMesh{NDIMS} <: AbstractMesh{NDIMS}\n\nA structured curved mesh.\n\nDifferent numbers of cells per dimension are possible and arbitrary functions can be used as domain faces.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.StructuredMesh-Tuple{Any, Any, Any}","page":"Trixi.jl","title":"Trixi.StructuredMesh","text":"StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max; periodicity=true)\n\nCreate a StructuredMesh that represents a uncurved structured mesh with a rectangular domain.\n\nArguments\n\ncells_per_dimension::NTuple{NDIMS, Int}: the number of cells in each dimension.\ncoordinates_min::NTuple{NDIMS, RealT}: coordinate of the corner in the negative direction of each dimension.\ncoordinates_max::NTuple{NDIMS, RealT}: coordinate of the corner in the positive direction of each dimension.\nperiodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.StructuredMesh-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.StructuredMesh","text":"StructuredMesh(cells_per_dimension, mapping; RealT=Float64, unsaved_changes=true, mapping_as_string=mapping2string(mapping, length(cells_per_dimension)))\n\nCreate a StructuredMesh of the given size and shape that uses RealT as coordinate type.\n\nArguments\n\ncells_per_dimension::NTupleE{NDIMS, Int}: the number of cells in each dimension.\nmapping: a function of NDIMS variables to describe the mapping, which transforms the reference mesh to the physical domain. If no mapping_as_string is defined, this function must be defined with the name mapping to allow for restarts. This will be changed in the future, see https://github.com/trixi-framework/Trixi.jl/issues/541.\nRealT::Type: the type that should be used for coordinates.\nperiodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.\nunsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.\nmapping_as_string::String: the code that defines the mapping. If CodeTracking can't find the function definition, it can be passed directly here. The code string must define the mapping function with the name mapping. This will be changed in the future, see https://github.com/trixi-framework/Trixi.jl/issues/541.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.StructuredMesh-Tuple{Any, Tuple}","page":"Trixi.jl","title":"Trixi.StructuredMesh","text":"StructuredMesh(cells_per_dimension, faces; RealT=Float64, unsaved_changes=true, faces_as_string=faces2string(faces))\n\nCreate a StructuredMesh of the given size and shape that uses RealT as coordinate type.\n\nArguments\n\ncells_per_dimension::NTupleE{NDIMS, Int}: the number of cells in each dimension.\nfaces::NTuple{2*NDIMS}: a tuple of 2 * NDIMS functions that describe the faces of the domain. Each function must take NDIMS-1 arguments. faces[1] describes the face onto which the face in negative x-direction of the unit hypercube is mapped. The face in positive x-direction of the unit hypercube will be mapped onto the face described by faces[2]. faces[3:4] describe the faces in positive and negative y-direction respectively (in 2D and 3D). faces[5:6] describe the faces in positive and negative z-direction respectively (in 3D).\nRealT::Type: the type that should be used for coordinates.\nperiodicity: either a Bool deciding if all of the boundaries are periodic or an NTuple{NDIMS, Bool} deciding for each dimension if the boundaries in this dimension are periodic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.StructuredMeshView","page":"Trixi.jl","title":"Trixi.StructuredMeshView","text":"StructuredMeshView{NDIMS, RealT <: Real} <: AbstractMesh{NDIMS}\n\nA view on a structured curved mesh.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.StructuredMeshView-Union{Tuple{StructuredMesh{NDIMS, RealT}}, Tuple{RealT}, Tuple{NDIMS}} where {NDIMS, RealT}","page":"Trixi.jl","title":"Trixi.StructuredMeshView","text":"StructuredMeshView(parent; indices_min, indices_max)\n\nCreate a StructuredMeshView on a StructuredMesh parent.\n\nArguments\n\nparent: the parent StructuredMesh.\nindices_min: starting indices of the parent mesh.\nindices_max: ending indices of the parent mesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.SubcellLimiterIDP","page":"Trixi.jl","title":"Trixi.SubcellLimiterIDP","text":"SubcellLimiterIDP(equations::AbstractEquations, basis;\n local_twosided_variables_cons = String[],\n positivity_variables_cons = String[],\n positivity_variables_nonlinear = [],\n positivity_correction_factor = 0.1,\n local_onesided_variables_nonlinear = [],\n max_iterations_newton = 10,\n newton_tolerances = (1.0e-12, 1.0e-14),\n gamma_constant_newton = 2 * ndims(equations))\n\nSubcell invariant domain preserving (IDP) limiting used with VolumeIntegralSubcellLimiting including:\n\nLocal two-sided Zalesak-type limiting for conservative variables (local_twosided_variables_cons)\nPositivity limiting for conservative variables (positivity_variables_cons) and nonlinear variables\n\n(positivity_variables_nonlinear)\n\nLocal one-sided limiting for nonlinear variables, e.g. entropy_guermond_etal and entropy_math\n\nwith local_onesided_variables_nonlinear\n\nTo use these three limiting options use the following structure:\n\n***Conservative variables*** to be limited are passed as a vector of strings, e.g. local_twosided_variables_cons = [\"rho\"] and positivity_variables_cons = [\"rho\"]. For ***nonlinear variables***, the wanted variable functions are passed within a vector: To ensure positivity use a plain vector including the desired variables, e.g. positivity_variables_nonlinear = [pressure]. For local one-sided limiting pass the variable function combined with the requested bound (min or max) as a tuple. For instance, to impose a lower local bound on the modified specific entropy by Guermond et al. use local_onesided_variables_nonlinear = [(Trixi.entropy_guermond_etal, min)].\n\nThe bounds are calculated using the low-order FV solution. The positivity limiter uses positivity_correction_factor such that u^new >= positivity_correction_factor * u^FV. Local and global limiting of nonlinear variables uses a Newton-bisection method with a maximum of max_iterations_newton iterations, relative and absolute tolerances of newton_tolerances and a provisional update constant gamma_constant_newton (gamma_constant_newton>=2*d, where d = #dimensions). See equation (20) of Pazner (2020) and equation (30) of Rueda-Ramírez et al. (2022).\n\nnote: Note\nThis limiter and the correction callback SubcellLimiterIDPCorrection only work together. Without the callback, no correction takes place, leading to a standard low-order FV scheme.\n\nReferences\n\nRueda-Ramírez, Pazner, Gassner (2022) Subcell Limiting Strategies for Discontinuous Galerkin Spectral Element Methods DOI: 10.1016/j.compfluid.2022.105627\nPazner (2020) Sparse invariant domain preserving discontinuous Galerkin methods with subcell convex limiting DOI: 10.1016/j.cma.2021.113876\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SubcellLimiterIDPCorrection","page":"Trixi.jl","title":"Trixi.SubcellLimiterIDPCorrection","text":"SubcellLimiterIDPCorrection()\n\nPerform antidiffusive correction stage for the a posteriori IDP limiter SubcellLimiterIDP called with VolumeIntegralSubcellLimiting.\n\nnote: Note\nThis callback and the actual limiter SubcellLimiterIDP only work together. This is not a replacement but a necessary addition.\n\nReferences\n\nRueda-Ramírez, Pazner, Gassner (2022) Subcell Limiting Strategies for Discontinuous Galerkin Spectral Element Methods DOI: 10.1016/j.compfluid.2022.105627\nPazner (2020) Sparse invariant domain preserving discontinuous Galerkin methods with subcell convex limiting DOI: 10.1016/j.cma.2021.113876\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SurfaceIntegralStrongForm","page":"Trixi.jl","title":"Trixi.SurfaceIntegralStrongForm","text":"SurfaceIntegralStrongForm(surface_flux=flux_central)\n\nThe classical strong form surface integral type for FD/DG methods.\n\nSee also VolumeIntegralStrongForm.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SurfaceIntegralUpwind","page":"Trixi.jl","title":"Trixi.SurfaceIntegralUpwind","text":"SurfaceIntegralUpwind(splitting)\n\nCouple elements with upwind simultaneous approximation terms (SATs) that use a particular flux splitting, e.g., splitting_steger_warming.\n\nSee also VolumeIntegralUpwind.\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.SurfaceIntegralWeakForm","page":"Trixi.jl","title":"Trixi.SurfaceIntegralWeakForm","text":"SurfaceIntegralWeakForm(surface_flux=flux_central)\n\nThe classical weak form surface integral type for DG methods as explained in standard textbooks.\n\nSee also VolumeIntegralWeakForm.\n\nReferences\n\nKopriva (2009) Implementing Spectral Methods for Partial Differential Equations: Algorithms for Scientists and Engineers doi: 10.1007/978-90-481-2261-5\nHesthaven, Warburton (2007) Nodal Discontinuous Galerkin Methods: Algorithms, Analysis, and Applications doi: 10.1007/978-0-387-72067-8\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.T8codeMesh","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh{NDIMS} <: AbstractMesh{NDIMS}\n\nAn unstructured curved mesh based on trees that uses the C library 't8code' to manage trees and mesh refinement.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.T8codeMesh-Tuple{Any}","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(trees_per_dimension; polydeg, mapping=identity,\n RealT=Float64, initial_refinement_level=0, periodicity=true)\n\nCreate a structured potentially curved 'T8codeMesh' of the specified size.\n\nNon-periodic boundaries will be called ':xneg', ':xpos', ':yneg', ':ypos', ':zneg', ':zpos'.\n\nArguments\n\n'treesperdimension::NTupleE{NDIMS, Int}': the number of trees in each dimension.\n'polydeg::Integer': polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.\nmapping: a function of NDIMS variables to describe the mapping that transforms the reference mesh ([-1, 1]^n) to the physical domain. Use only one of mapping, faces and coordinates_min/coordinates_max.\nfaces::NTuple{2*NDIMS}: a tuple of 2 * NDIMS functions that describe the faces of the domain. Each function must take NDIMS-1 arguments. faces[1] describes the face onto which the face in negative x-direction of the unit hypercube is mapped. The face in positive x-direction of the unit hypercube will be mapped onto the face described by faces[2]. faces[3:4] describe the faces in positive and negative y-direction respectively (in 2D and 3D). faces[5:6] describe the faces in positive and negative z-direction respectively (in 3D). Use only one of mapping, faces and coordinates_min/coordinates_max.\ncoordinates_min: vector or tuple of the coordinates of the corner in the negative direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.\ncoordinates_max: vector or tuple of the coordinates of the corner in the positive direction of each dimension to create a rectangular mesh. Use only one of mapping, faces and coordinates_min/coordinates_max.\n'RealT::Type': the type that should be used for coordinates.\n'initialrefinementlevel::Integer': refine the mesh uniformly to this level before the simulation starts.\n'periodicity': either a 'Bool' deciding if all of the boundaries are periodic or an 'NTuple{NDIMS, Bool}' deciding for each dimension if the boundaries in this dimension are periodic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Tuple{Ptr{P4est.LibP4est.p4est_connectivity}}","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(conn::Ptr{p4est_connectivity}; kwargs...)\n\nMain mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a p4est_connectivity data structure.\n\nArguments\n\nconn::Ptr{p4est_connectivity}: Pointer to a P4est connectivity object.\nmapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: the type that should be used for coordinates.\ninitial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Tuple{Ptr{P4est.LibP4est.p8est_connectivity}}","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(conn::Ptr{p8est_connectivity}; kwargs...)\n\nMain mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a p4est_connectivity data structure.\n\nArguments\n\nconn::Ptr{p4est_connectivity}: Pointer to a P4est connectivity object.\nmapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: the type that should be used for coordinates.\ninitial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Tuple{Ptr{T8code.Libt8.t8_cmesh}}","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(cmesh::Ptr{t8_cmesh},\n mapping=nothing, polydeg=1, RealT=Float64,\n initial_refinement_level=0)\n\nMain mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a t8_cmesh data structure.\n\nArguments\n\ncmesh::Ptr{t8_cmesh}: Pointer to a cmesh object.\nmapping: a function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: the type that should be used for coordinates.\ninitial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Tuple{String, Any}","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(meshfile::String, NDIMS; kwargs...)\n\nMain mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from either a Gmsh mesh file (.msh) or Abaqus mesh file (.inp) which is determined by the file extension.\n\nArguments\n\nfilepath::String: path to a Gmsh or Abaqus mesh file.\nndims: Mesh file dimension: 2 or 3.\n\nOptional Keyword Arguments\n\nmapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: The type that should be used for coordinates.\ninitial_refinement_level::Integer: Refine the mesh uniformly to this level before the simulation starts.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Union{Tuple{RealT}, Tuple{NDIMS}, Tuple{Ptr{T8code.Libt8.t8_forest}, Any}} where {NDIMS, RealT}","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh{NDIMS, RealT}(forest, boundary_names; polydeg = 1, mapping = nothing)\n\nMain mesh constructor for the T8codeMesh wrapping around a given t8code forest object. This constructor is typically called by other T8codeMesh constructors.\n\nArguments\n\nforest: Pointer to a t8code forest.\nboundary_names: List of boundary names.\npolydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.\nmapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Union{Tuple{Trixi.AbaqusFile{NDIMS}}, Tuple{NDIMS}} where NDIMS","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(meshfile::AbaqusFile{NDIMS};\n mapping=nothing, polydeg=1, RealT=Float64,\n initial_refinement_level=0, unsaved_changes=true,\n boundary_symbols = nothing)\n\nMain mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from an Abaqus mesh file (.inp).\n\nTo create a curved unstructured T8codeMesh two strategies are available:\n\nHOHQMesh Abaqus: High-order, curved boundary information created by HOHQMesh.jl is available in the meshfile. The mesh polynomial degree polydeg of the boundaries is provided from the meshfile. The computation of the mapped tree coordinates is done with transfinite interpolation with linear blending similar to UnstructuredMesh2D. Boundary name information is also parsed from the meshfile such that different boundary conditions can be set at each named boundary on a given tree.\nStandard Abaqus: By default, with mapping=nothing and polydeg=1, this creates a straight-sided mesh from the information parsed from the meshfile. If a mapping function is specified then it computes the mapped tree coordinates via polynomial interpolants with degree polydeg. The mesh created by this function will only have one boundary :all if boundary_symbols is not specified. If boundary_symbols is specified the mesh file will be parsed for nodesets defining the boundary nodes from which boundary edges (2D) and faces (3D) will be assigned.\n\nNote that the mapping and polydeg keyword arguments are only used by the HOHQMesh Abaqus option. The Standard Abaqus routine obtains the mesh polydeg directly from the meshfile and constructs the transfinite mapping internally.\n\nThe particular strategy is selected according to the header present in the meshfile where the constructor checks whether or not the meshfile was created with HOHQMesh.jl. If the Abaqus file header is not present in the meshfile then the T8codeMesh is created by Standard Abaqus.\n\nThe default keyword argument initial_refinement_level=0 corresponds to a forest where the number of trees is the same as the number of elements in the original meshfile. Increasing the initial_refinement_level allows one to uniformly refine the base mesh given in the meshfile to create a forest with more trees before the simulation begins. For example, if a two-dimensional base mesh contains 25 elements then setting initial_refinement_level=1 creates an initial forest of 2^2 * 25 = 100 trees.\n\nArguments\n\nmeshfile::AbaqusFile{NDIMS}: Abaqus mesh file object of dimension NDIMS and given path to the file.\n\nOptional Keyword Arguments\n\nmapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: The type that should be used for coordinates.\ninitial_refinement_level::Integer: Refine the mesh uniformly to this level before the simulation starts.\nboundary_symbols::Vector{Symbol}: A vector of symbols that correspond to the boundary names in the meshfile. If nothing is passed then all boundaries are named :all. \n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.T8codeMesh-Union{Tuple{Trixi.GmshFile{NDIMS}}, Tuple{NDIMS}} where NDIMS","page":"Trixi.jl","title":"Trixi.T8codeMesh","text":"T8codeMesh(meshfile::GmshFile{NDIMS}; kwargs...)\n\nMain mesh constructor for the T8codeMesh that imports an unstructured, conforming mesh from a Gmsh mesh file (.msh).\n\nArguments\n\nmeshfile::GmshFile{NDIMS}: Gmsh mesh file object of dimension NDIMS and give path to the file.\n\nOptional Keyword Arguments\n\nmapping: A function of NDIMS variables to describe the mapping that transforms the imported mesh to the physical domain. Use nothing for the identity map.\npolydeg::Integer: Polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree. The default of 1 creates an uncurved geometry. Use a higher value if the mapping will curve the imported uncurved mesh.\nRealT::Type: The type that should be used for coordinates.\ninitial_refinement_level::Integer: Refine the mesh uniformly to this level before the simulation starts.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.TimeSeriesCallback","page":"Trixi.jl","title":"Trixi.TimeSeriesCallback","text":"TimeSeriesCallback(semi, point_coordinates;\n interval=1, solution_variables=cons2cons,\n output_directory=\"out\", filename=\"time_series.h5\",\n RealT=real(solver), uEltype=eltype(cache.elements))\n\nCreate a callback that records point-wise data at points given in point_coordinates every interval time steps. The point coordinates are to be specified either as a vector of coordinate tuples or as a two-dimensional array where the first dimension is the point number and the second dimension is the coordinate dimension. By default, the conservative variables are recorded, but this can be controlled by passing a different conversion function to solution_variables.\n\nAfter the last time step, the results are stored in an HDF5 file filename in directory output_directory.\n\nThe real data type RealT and data type for solution variables uEltype default to the respective types used in the solver and the cache.\n\nCurrently this callback is only implemented for TreeMesh and UnstructuredMesh2D.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.TrafficFlowLWREquations1D","page":"Trixi.jl","title":"Trixi.TrafficFlowLWREquations1D","text":"TrafficFlowLWREquations1D\n\nThe classic Lighthill-Witham Richards (LWR) model for 1D traffic flow. The car density is denoted by u in 0 1 and the maximum possible speed (e.g. due to speed limits) is v_textmax.\n\npartial_t u + v_textmax partial_1 u (1 - u) = 0\n\nFor more details see e.g. Section 11.1 of \n\nRandall LeVeque (2002)\n\nFinite Volume Methods for Hyperbolic Problems [DOI: 10.1017/CBO9780511791253]https://doi.org/10.1017/CBO9780511791253\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.TreeMesh","page":"Trixi.jl","title":"Trixi.TreeMesh","text":"TreeMesh{NDIMS} <: AbstractMesh{NDIMS}\n\nA Cartesian mesh based on trees of hypercubes to support adaptive mesh refinement.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.UnstructuredMesh2D","page":"Trixi.jl","title":"Trixi.UnstructuredMesh2D","text":"UnstructuredMesh2D <: AbstractMesh{2}\n\nAn unstructured (possibly curved) quadrilateral mesh.\n\nUnstructuredMesh2D(filename; RealT=Float64, periodicity=false)\n\nAll mesh information, neighbour coupling, and boundary curve information is read in from a mesh file filename.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.UnstructuredSortedBoundaryTypes","page":"Trixi.jl","title":"Trixi.UnstructuredSortedBoundaryTypes","text":"UnstructuredSortedBoundaryTypes\n\nGeneral container to sort the boundary conditions by type and name for some unstructured meshes/solvers. It stores a set of global indices for each boundary condition type and name to expedite computation during the call to calc_boundary_flux!. The original dictionary form of the boundary conditions set by the user in the elixir file is also stored for printing.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ViscousFormulationBassiRebay1","page":"Trixi.jl","title":"Trixi.ViscousFormulationBassiRebay1","text":"ViscousFormulationBassiRebay1()\n\nThe classical BR1 flux from\n\nF. Bassi, S. Rebay (1997) A High-Order Accurate Discontinuous Finite Element Method for the Numerical Solution of the Compressible Navier-Stokes Equations DOI: 10.1006/jcph.1996.5572\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.ViscousFormulationLocalDG","page":"Trixi.jl","title":"Trixi.ViscousFormulationLocalDG","text":"ViscousFormulationLocalDG(penalty_parameter)\n\nThe local DG (LDG) flux from \"The Local Discontinuous Galerkin Method for Time-Dependent Convection-Diffusion Systems\" by Cockburn and Shu (1998).\n\nNote that, since this implementation does not involve the parabolic \"upwinding\" vector, the LDG solver is equivalent to ViscousFormulationBassiRebay1 with an LDG-type penalization.\n\nCockburn and Shu (1998). The Local Discontinuous Galerkin Method for Time-Dependent Convection-Diffusion Systems DOI: 10.1137/S0036142997316712\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VisualizationCallback-Tuple{}","page":"Trixi.jl","title":"Trixi.VisualizationCallback","text":"VisualizationCallback(; interval=0,\n solution_variables=cons2prim,\n variable_names=[],\n show_mesh=false,\n plot_data_creator=PlotData2D,\n plot_creator=show_plot,\n plot_arguments...)\n\nCreate a callback that visualizes results during a simulation, also known as in-situ visualization.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in any future releases.\n\nThe interval specifies the number of time step iterations after which a new plot is generated. The available variables to plot are configured with the solution_variables parameter, which acts the same way as for the SaveSolutionCallback. The variables to be actually plotted can be selected by providing a single string or a list of strings to variable_names, and if show_mesh is true, an additional plot with the mesh will be generated.\n\nTo customize the generated figure, plot_data_creator allows to use different plot data types. With plot_creator you can further specify an own function to visualize results, which must support the same interface as the default implementation show_plot. All remaining keyword arguments are collected and passed as additional arguments to the plotting command.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.VolumeIntegralFluxDifferencing","page":"Trixi.jl","title":"Trixi.VolumeIntegralFluxDifferencing","text":"VolumeIntegralFluxDifferencing(volume_flux)\n\nVolume integral type for DG methods based on SBP operators and flux differencing using a symmetric two-point volume_flux. This volume_flux needs to satisfy the interface of numerical fluxes in Trixi.jl.\n\nReferences\n\nLeFloch, Mercier, Rohde (2002) Fully Discrete, Entropy Conservative Schemes of Arbitrary Order doi: 10.1137/S003614290240069X\nFisher, Carpenter (2013) High-order entropy stable finite difference schemes for nonlinear conservation laws: Finite domains doi: 10.1016/j.jcp.2013.06.014\nHendrik Ranocha (2017) Comparison of Some Entropy Conservative Numerical Fluxes for the Euler Equations arXiv: 1701.02264 doi: 10.1007/s10915-017-0618-1\nChen, Shu (2017) Entropy stable high order discontinuous Galerkin methods with suitable quadrature rules for hyperbolic conservation laws doi: 10.1016/j.jcp.2017.05.025\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VolumeIntegralPureLGLFiniteVolume","page":"Trixi.jl","title":"Trixi.VolumeIntegralPureLGLFiniteVolume","text":"VolumeIntegralPureLGLFiniteVolume(volume_flux_fv)\n\nA volume integral that only uses the subcell finite volume schemes of the VolumeIntegralShockCapturingHG.\n\nThis gives a formally O(1)-accurate finite volume scheme on an LGL-type subcell mesh (LGL = Legendre-Gauss-Lobatto).\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nHennemann, Gassner (2020) \"A provably entropy stable subcell shock capturing approach for high order split form DG\" arXiv: 2008.12044\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VolumeIntegralShockCapturingHG","page":"Trixi.jl","title":"Trixi.VolumeIntegralShockCapturingHG","text":"VolumeIntegralShockCapturingHG(indicator; volume_flux_dg=flux_central,\n volume_flux_fv=flux_lax_friedrichs)\n\nShock-capturing volume integral type for DG methods using a convex blending of the finite volume method with numerical flux volume_flux_fv and the VolumeIntegralFluxDifferencing with volume flux volume_flux_dg. The amount of blending is determined by the indicator, e.g., IndicatorHennemannGassner.\n\nReferences\n\nHennemann, Gassner (2020) \"A provably entropy stable subcell shock capturing approach for high order split form DG\" arXiv: 2008.12044\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VolumeIntegralStrongForm","page":"Trixi.jl","title":"Trixi.VolumeIntegralStrongForm","text":"VolumeIntegralStrongForm()\n\nThe classical strong form volume integral type for FD/DG methods.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VolumeIntegralSubcellLimiting","page":"Trixi.jl","title":"Trixi.VolumeIntegralSubcellLimiting","text":"VolumeIntegralSubcellLimiting(limiter;\n volume_flux_dg, volume_flux_fv)\n\nA subcell limiting volume integral type for DG methods based on subcell blending approaches with a low-order FV method. Used with limiter SubcellLimiterIDP.\n\nnote: Note\nSubcell limiting methods are not fully functional on non-conforming meshes. This is mainly because the implementation assumes that low- and high-order schemes have the same surface terms, which is not guaranteed for non-conforming meshes. The low-order scheme with a high-order mortar is not invariant domain preserving.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VolumeIntegralUpwind","page":"Trixi.jl","title":"Trixi.VolumeIntegralUpwind","text":"VolumeIntegralUpwind(splitting)\n\nSpecialized volume integral for finite difference summation-by-parts (FDSBP) solvers. Can be used together with the upwind SBP operators of Mattsson (2017) implemented in SummationByPartsOperators.jl. The splitting controls the discretization.\n\nSee also splitting_steger_warming, splitting_lax_friedrichs, splitting_vanleer_haenel.\n\nReferences\n\nMattsson (2017) Diagonal-norm upwind SBP operators doi: 10.1016/j.jcp.2017.01.042\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Trixi.VolumeIntegralWeakForm","page":"Trixi.jl","title":"Trixi.VolumeIntegralWeakForm","text":"VolumeIntegralWeakForm()\n\nThe classical weak form volume integral type for DG methods as explained in standard textbooks.\n\nReferences\n\nKopriva (2009) Implementing Spectral Methods for Partial Differential Equations: Algorithms for Scientists and Engineers doi: 10.1007/978-90-481-2261-5\nHesthaven, Warburton (2007) Nodal Discontinuous Galerkin Methods: Algorithms, Analysis, and Applications doi: 10.1007/978-0-387-72067-8\n\nVolumeIntegralWeakForm() is only implemented for conserved terms as non-conservative terms should always be discretized in conjunction with a flux-splitting scheme, see VolumeIntegralFluxDifferencing. This treatment is required to achieve, e.g., entropy-stability or well-balancedness.\n\n\n\n\n\n","category":"type"},{"location":"reference-trixi/#Base.getindex-Tuple{Trixi.AbstractPlotData, Any}","page":"Trixi.jl","title":"Base.getindex","text":"Base.getindex(pd::AbstractPlotData, variable_name)\n\nExtract a single variable variable_name from pd for plotting with Plots.plot.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Base.resize!-Tuple{Trixi.AbstractContainer, Any}","page":"Trixi.jl","title":"Base.resize!","text":"resize!(c::AbstractContainer, new_length) -> AbstractContainer\n\nResize c to contain new_length elements. If new_length is smaller than the current container length, the first new_length elements will be retained. If new_length is larger, the new elements are invalidated.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#PolynomialBases.compute_coefficients!-Tuple{Any, Any, Any, Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"PolynomialBases.compute_coefficients!","text":"compute_coefficients!(u_ode, func, t, semi::AbstractSemidiscretization)\n\nSame as compute_coefficients but stores the result in u_ode.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#PolynomialBases.compute_coefficients-Tuple{Any, Any, Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"PolynomialBases.compute_coefficients","text":"compute_coefficients(func, t, semi::AbstractSemidiscretization)\n\nCompute the discrete coefficients of the continuous function func at time t associated with the semidiscretization semi. For example, the discrete coefficients of func for a discontinuous Galerkin spectral element method (DGSEM) are the values of func at the Lobatto-Legendre nodes. Similarly, a classical finite difference method will use the values of func at the nodes of the grid assoociated with the semidiscretization semi.\n\nFor semidiscretizations semi associated with an initial condition, func can be omitted to use the given initial condition at time t.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#PolynomialBases.integrate-Tuple{Any, Any, LobattoLegendreBasis}","page":"Trixi.jl","title":"PolynomialBases.integrate","text":"integrate(f, u, basis::LobattoLegendreBasis)\n\nMap the function f to the coefficients u and integrate with respect to the quadrature rule given by basis.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#PolynomialBases.integrate-Union{Tuple{Func}, Tuple{Func, Any, Trixi.AbstractSemidiscretization}} where Func","page":"Trixi.jl","title":"PolynomialBases.integrate","text":"integrate([func=(u_node,equations)->u_node,] u_ode, semi::AbstractSemidiscretization; normalize=true)\n\nCall func(u_node, equations) for each vector of nodal variables u_node in u_ode and integrate the result using a quadrature associated with the semidiscretization semi.\n\nIf normalize is true, the result is divided by the total volume of the computational domain.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#SciMLBase.add_tstop!-Tuple{Trixi.PairedExplicitRK2Integrator, Any}","page":"Trixi.jl","title":"SciMLBase.add_tstop!","text":"add_tstop!(integrator::PairedExplicitRK2Integrator, t)\n\nAdd a time stop during the time integration process. This function is called after the periodic SaveSolutionCallback to specify the next stop to save the solution.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#SciMLBase.add_tstop!-Tuple{Trixi.SimpleIntegratorSSP, Any}","page":"Trixi.jl","title":"SciMLBase.add_tstop!","text":"add_tstop!(integrator::SimpleIntegratorSSP, t)\n\nAdd a time stop during the time integration process. This function is called after the periodic SaveSolutionCallback to specify the next stop to save the solution.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#SummationByPartsOperators.semidiscretize-Tuple{SemidiscretizationHyperbolicParabolic, Any}","page":"Trixi.jl","title":"SummationByPartsOperators.semidiscretize","text":"semidiscretize(semi::SemidiscretizationHyperbolicParabolic, tspan)\n\nWrap the semidiscretization semi as a split ODE problem in the time interval tspan that can be passed to solve from the SciML ecosystem. The parabolic right-hand side is the first function of the split ODE problem and will be used by default by the implicit part of IMEX methods from the SciML ecosystem.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#SummationByPartsOperators.semidiscretize-Tuple{Trixi.AbstractSemidiscretization, Any, AbstractString}","page":"Trixi.jl","title":"SummationByPartsOperators.semidiscretize","text":"semidiscretize(semi::AbstractSemidiscretization, tspan, restart_file::AbstractString)\n\nWrap the semidiscretization semi as an ODE problem in the time interval tspan that can be passed to solve from the SciML ecosystem. The initial condition etc. is taken from the restart_file.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#SummationByPartsOperators.semidiscretize-Tuple{Trixi.AbstractSemidiscretization, Any}","page":"Trixi.jl","title":"SummationByPartsOperators.semidiscretize","text":"semidiscretize(semi::AbstractSemidiscretization, tspan)\n\nWrap the semidiscretization semi as an ODE problem in the time interval tspan that can be passed to solve from the SciML ecosystem.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.DGMultiBasis-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.DGMultiBasis","text":"DGMultiBasis(element_type, polydeg; approximation_type = Polynomial(), kwargs...)\n\nConstructs a basis for DGMulti solvers. Returns a \"StartUpDG.RefElemData\" object. The kwargs arguments are additional keyword arguments for RefElemData, such as quad_rule_vol. These are the same as the RefElemData_kwargs used in DGMulti. For more info, see the StartUpDG.jl docs.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.LBMCollisionCallback-Tuple{}","page":"Trixi.jl","title":"Trixi.LBMCollisionCallback","text":"LBMCollisionCallback()\n\nApply the Lattice-Boltzmann method (LBM) collision operator before each time step. See LatticeBoltzmannEquations2D for further details.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.P4estMeshCubedSphere-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.P4estMeshCubedSphere","text":"P4estMeshCubedSphere(trees_per_face_dimension, layers, inner_radius, thickness;\n polydeg, RealT=Float64,\n initial_refinement_level=0, unsaved_changes=true,\n p4est_partition_allow_for_coarsening=true)\n\nBuild a \"Cubed Sphere\" mesh as P4estMesh with 6 * trees_per_face_dimension^2 * layers trees.\n\nThe mesh will have two boundaries, :inside and :outside.\n\nArguments\n\ntrees_per_face_dimension::Integer: the number of trees in the first two local dimensions of each face.\nlayers::Integer: the number of trees in the third local dimension of each face, i.e., the number of layers of the sphere.\ninner_radius::Integer: the inner radius of the sphere.\nthickness::Integer: the thickness of the sphere. The outer radius will be inner_radius + thickness.\npolydeg::Integer: polynomial degree used to store the geometry of the mesh. The mapping will be approximated by an interpolation polynomial of the specified degree for each tree.\nRealT::Type: the type that should be used for coordinates.\ninitial_refinement_level::Integer: refine the mesh uniformly to this level before the simulation starts.\nunsaved_changes::Bool: if set to true, the mesh will be saved to a mesh file.\np4est_partition_allow_for_coarsening::Bool: Must be true when using AMR to make mesh adaptivity independent of domain partitioning. Should be false for static meshes to permit more fine-grained partitioning.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.PlotData2D-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.PlotData2D","text":"PlotData2D(u, semi [or mesh, equations, solver, cache];\n solution_variables=nothing,\n grid_lines=true, max_supported_level=11, nvisnodes=nothing,\n slice=:xy, point=(0.0, 0.0, 0.0))\n\nCreate a new PlotData2D object that can be used for visualizing 2D/3D DGSEM solution data array u with Plots.jl. All relevant geometrical information is extracted from the semidiscretization semi. By default, the primitive variables (if existent) or the conservative variables (otherwise) from the solution are used for plotting. This can be changed by passing an appropriate conversion function to solution_variables.\n\nIf grid_lines is true, also extract grid vertices for visualizing the mesh. The output resolution is indirectly set via max_supported_level: all data is interpolated to 2^max_supported_level uniformly distributed points in each spatial direction, also setting the maximum allowed refinement level in the solution. nvisnodes specifies the number of visualization nodes to be used. If it is nothing, twice the number of solution DG nodes are used for visualization, and if set to 0, exactly the number of nodes in the DG elements are used.\n\nWhen visualizing data from a three-dimensional simulation, a 2D slice is extracted for plotting. slice specifies the plane that is being sliced and may be :xy, :xz, or :yz. The slice position is specified by a point that lies on it, which defaults to (0.0, 0.0, 0.0). Both of these values are ignored when visualizing 2D data.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\nExamples\n\njulia> using Trixi, Plots\n\njulia> trixi_include(default_example())\n[...]\n\njulia> pd = PlotData2D(sol)\nPlotData2D(...)\n\njulia> plot(pd) # To plot all available variables\n\njulia> plot(pd[\"scalar\"]) # To plot only a single variable\n\njulia> plot!(getmesh(pd)) # To add grid lines to the plot\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.PlotData2D-Tuple{Union{ODESolution{T, N, uType, uType2, DType, tType, rateType, P} where {T, N, uType, uType2, DType, tType, rateType, P<:(ODEProblem{uType_, tType_, isinplace, P_} where {uType_, tType_, isinplace, P_<:Trixi.AbstractSemidiscretization})}, Trixi.TimeIntegratorSolution}}","page":"Trixi.jl","title":"Trixi.PlotData2D","text":"PlotData2D(sol; kwargs...)\n\nCreate a PlotData2D object from a solution object created by either OrdinaryDiffEq.solve! (which returns a SciMLBase.ODESolution) or Trixi.jl's own solve! (which returns a TimeIntegratorSolution).\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ScalarPlotData2D-Tuple{Any, Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"Trixi.ScalarPlotData2D","text":"ScalarPlotData2D(u, semi::AbstractSemidiscretization; kwargs...)\n\nReturns an PlotData2DTriangulated object which is used to visualize a single scalar field. u should be an array whose entries correspond to values of the scalar field at nodal points.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.SummaryCallback","page":"Trixi.jl","title":"Trixi.SummaryCallback","text":"SummaryCallback()\n\nCreate and return a callback that prints a human-readable summary of the simulation setup at the beginning of a simulation and then resets the timer. When the returned callback is executed directly, the current timer values are shown.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.TrivialCallback-Tuple{}","page":"Trixi.jl","title":"Trixi.TrivialCallback","text":"TrivialCallback()\n\nA callback that does nothing. This can be useful to disable some callbacks easily via trixi_include.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.adapt!-Tuple{T8codeMesh, Any}","page":"Trixi.jl","title":"Trixi.adapt!","text":"Trixi.adapt!(mesh::T8codeMesh, adapt_callback; kwargs...)\n\nAdapt a T8codeMesh according to a user-defined adapt_callback.\n\nArguments\n\nmesh::T8codeMesh: Initialized mesh object.\nadapt_callback: A user-defined callback which tells the adaption routines if an element should be refined, coarsened or stay unchanged.\nThe expected callback signature is as follows:\n`adapt_callback(forest, ltreeid, eclass_scheme, lelemntid, elements, is_family, user_data)`\n # Arguments\n - `forest`: Pointer to the analyzed forest.\n - `ltreeid`: Local index of the current tree where the analyzed elements are part of.\n - `eclass_scheme`: Element class of `elements`.\n - `lelemntid`: Local index of the first element in `elements`.\n - `elements`: Array of elements. If consecutive elements form a family\n they are passed together, otherwise `elements` consists of just one element.\n - `is_family`: Boolean signifying if `elements` represents a family or not.\n - `user_data`: Void pointer to some arbitrary user data. Default value is `C_NULL`.\n # Returns\n -1 : Coarsen family of elements.\n 0 : Stay unchanged.\n 1 : Refine element.\nkwargs:\nrecursive = true: Adapt the forest recursively. If true the caller must ensure that the callback returns 0 for every analyzed element at some point to stop the recursion.\nbalance = true: Make sure the adapted forest is 2^(NDIMS-1):1 balanced.\npartition = true: Partition the forest to redistribute elements evenly among MPI ranks.\nghost = true: Create a ghost layer for MPI data exchange.\nuser_data = C_NULL: Pointer to some arbitrary user-defined data.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.adapt_to_mesh_level!-Tuple{Any, Any, Any}","page":"Trixi.jl","title":"Trixi.adapt_to_mesh_level!","text":"adapt_to_mesh_level!(u_ode, semi, level)\nadapt_to_mesh_level!(sol::Trixi.TrixiODESolution, level)\n\nLike adapt_to_mesh_level, but modifies the solution and parts of the semidiscretization (mesh and caches) in place.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.adapt_to_mesh_level-Tuple{Any, Any, Any}","page":"Trixi.jl","title":"Trixi.adapt_to_mesh_level","text":"adapt_to_mesh_level(u_ode, semi, level)\nadapt_to_mesh_level(sol::Trixi.TrixiODESolution, level)\n\nUse the regular adaptive mesh refinement routines to adaptively refine/coarsen the solution u_ode with semidiscretization semi towards a uniformly refined grid with refinement level level. The solution and semidiscretization are copied such that the original objects remain unaltered.\n\nA convenience method accepts an ODE solution object, from which solution and semidiscretization are extracted as needed.\n\nSee also: adapt_to_mesh_level!\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.balance!-Tuple{T8codeMesh}","page":"Trixi.jl","title":"Trixi.balance!","text":"Trixi.balance!(mesh::T8codeMesh)\n\nBalance a T8codeMesh to ensure 2^(NDIMS-1):1 face neighbors.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.barycentric_weights-Tuple{Any}","page":"Trixi.jl","title":"Trixi.barycentric_weights","text":"barycentric_weights(nodes)\n\nCalculate the barycentric weights for a given node distribution, i.e.,\n\nw_j = frac1 prod_k neq j left( x_j - x_k right ) \n\nFor details, see (especially Section 3)\n\nJean-Paul Berrut and Lloyd N. Trefethen (2004). Barycentric Lagrange Interpolation. DOI:10.1137/S0036144502417715\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_linear_x-Tuple{Any, Any, Any, Any, Any, Any, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.boundary_condition_linear_x","text":"boundary_condition_linear_x(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equation::LinearScalarAdvectionEquation1D)\n\nBoundary conditions for initial_condition_linear_x.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_linear_x-Tuple{Any, Any, Any, Any, Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_linear_x","text":"boundary_condition_linear_x(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equation::LinearScalarAdvectionEquation2D)\n\nBoundary conditions for initial_condition_linear_x.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_linear_x_y-Tuple{Any, Any, Any, Any, Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_linear_x_y","text":"boundary_condition_linear_x_y(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equation::LinearScalarAdvectionEquation2D)\n\nBoundary conditions for initial_condition_linear_x_y.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_linear_y-Tuple{Any, Any, Any, Any, Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_linear_y","text":"boundary_condition_linear_y(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equation::LinearScalarAdvectionEquation2D)\n\nBoundary conditions for initial_condition_linear_y.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_linear_z-Tuple{Any, Any, Any, Any, Any, Any, LinearScalarAdvectionEquation3D}","page":"Trixi.jl","title":"Trixi.boundary_condition_linear_z","text":"boundary_condition_linear_z(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equation::LinearScalarAdvectionEquation1D)\n\nBoundary conditions for boundary_condition_linear_z.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_noslip_wall-Tuple{Any, Any, Any, Any, Any, Any, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_noslip_wall","text":"boundary_condition_noslip_wall(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equations::LatticeBoltzmannEquations2D)\n\nNo-slip wall boundary condition using the bounce-back approach.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_poisson_nonperiodic-Tuple{Any, Any, Any, Any, Any, Any, HyperbolicDiffusionEquations1D}","page":"Trixi.jl","title":"Trixi.boundary_condition_poisson_nonperiodic","text":"boundary_condition_poisson_nonperiodic(u_inner, orientation, direction, x, t,\n surface_flux_function,\n equations::HyperbolicDiffusionEquations1D)\n\nBoundary conditions used for convergence tests in combination with initial_condition_poisson_nonperiodic and source_terms_poisson_nonperiodic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, AbstractVector, Any, Any, Any, AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,\n equations::AcousticPerturbationEquations2D)\n\nUse an orthogonal projection of the perturbed velocities to zero out the normal velocity while retaining the possibility of a tangential velocity in the boundary state. Further details are available in the paper:\n\nMarcus Bauer, Jürgen Dierke and Roland Ewert (2011) Application of a discontinuous Galerkin method to discretize acoustic perturbation equations DOI: 10.2514/1.J050333\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, AbstractVector, Any, Any, Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, normal_direction, direction, x, t,\n surface_flux_function, equations::CompressibleEulerEquations2D)\n\nShould be used together with StructuredMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, AbstractVector, Any, Any, Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, normal_direction, direction, x, t,\n surface_flux_function, equations::CompressibleEulerEquations3D)\n\nShould be used together with StructuredMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, AbstractVector, Any, Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,\n equations::CompressibleEulerEquations2D)\n\nDetermine the boundary numerical surface flux for a slip wall condition. Imposes a zero normal velocity at the wall. Density is taken from the internal solution state and pressure is computed as an exact solution of a 1D Riemann problem. Further details about this boundary state are available in the paper:\n\nJ. J. W. van der Vegt and H. van der Ven (2002) Slip flow boundary conditions in discontinuous Galerkin discretizations of the Euler equations of gas dynamics PDF\n\nDetails about the 1D pressure Riemann solution can be found in Section 6.3.3 of the book\n\nEleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction 3rd edition DOI: 10.1007/b79761\n\nShould be used together with UnstructuredMesh2D.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, AbstractVector, Any, Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,\n equations::CompressibleEulerEquations3D)\n\nDetermine the boundary numerical surface flux for a slip wall condition. Imposes a zero normal velocity at the wall. Density is taken from the internal solution state and pressure is computed as an exact solution of a 1D Riemann problem. Further details about this boundary state are available in the paper:\n\nJ. J. W. van der Vegt and H. van der Ven (2002) Slip flow boundary conditions in discontinuous Galerkin discretizations of the Euler equations of gas dynamics PDF\n\nDetails about the 1D pressure Riemann solution can be found in Section 6.3.3 of the book\n\nEleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction 3rd edition DOI: 10.1007/b79761\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, AbstractVector, Any, Any, Any, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, normal_direction, x, t, surface_flux_function,\n equations::ShallowWaterEquations2D)\n\nCreate a boundary state by reflecting the normal velocity component and keep the tangential velocity component unchanged. The boundary water height is taken from the internal value. For details see Section 9.2.5 of the book:\n\nEleuterio F. Toro (2001) Shock-Capturing Methods for Free-Surface Shallow Flows 1st edition ISBN 0471987662\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, Any, Any, Any, Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, orientation, direction, x, t,\n surface_flux_function, equations::CompressibleEulerEquations1D)\n\nDetermine the boundary numerical surface flux for a slip wall condition. Imposes a zero normal velocity at the wall. Density is taken from the internal solution state and pressure is computed as an exact solution of a 1D Riemann problem. Further details about this boundary state are available in the paper:\n\nJ. J. W. van der Vegt and H. van der Ven (2002) Slip flow boundary conditions in discontinuous Galerkin discretizations of the Euler equations of gas dynamics PDF\nShould be used together with TreeMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, Any, Any, Any, Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, orientation, direction, x, t,\n surface_flux_function, equations::CompressibleEulerEquations2D)\n\nShould be used together with TreeMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, Any, Any, Any, Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, orientation, direction, x, t,\n surface_flux_function, equations::CompressibleEulerEquations3D)\n\nShould be used together with TreeMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, Any, Any, Any, Any, Any, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, orientation_or_normal, x, t, surface_flux_function,\n equations::ShallowWaterEquations1D)\n\nCreate a boundary state by reflecting the normal velocity component and keep the tangential velocity component unchanged. The boundary water height is taken from the internal value.\n\nFor details see Section 9.2.5 of the book:\n\nEleuterio F. Toro (2001) Shock-Capturing Methods for Free-Surface Shallow Flows 1st edition ISBN 0471987662\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_slip_wall-Tuple{Any, Any, Any, Any, Any, Any, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_slip_wall","text":"boundary_condition_slip_wall(u_inner, orientation, direction, x, t,\n surface_flux_function, equations::ShallowWaterEquations2D)\n\nShould be used together with TreeMesh.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_wall-Tuple{Any, Any, Any, Any, Any, Any, AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_wall","text":"boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,\n equations::AcousticPerturbationEquations2D)\n\nBoundary conditions for a solid wall.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_wall-Tuple{Any, Any, Any, Any, Any, Any, LinearizedEulerEquations1D}","page":"Trixi.jl","title":"Trixi.boundary_condition_wall","text":"boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,\n equations::LinearizedEulerEquations1D)\n\nBoundary conditions for a solid wall.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_wall-Tuple{Any, Any, Any, Any, Any, Any, LinearizedEulerEquations2D}","page":"Trixi.jl","title":"Trixi.boundary_condition_wall","text":"boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,\n equations::LinearizedEulerEquations2D)\n\nBoundary conditions for a solid wall.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.boundary_condition_wall-Tuple{Any, Any, Any, Any, Any, Any, LinearizedEulerEquations3D}","page":"Trixi.jl","title":"Trixi.boundary_condition_wall","text":"boundary_condition_wall(u_inner, orientation, direction, x, t, surface_flux_function,\n equations::LinearizedEulerEquations3D)\n\nBoundary conditions for a solid wall.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.calc_error_norms-Tuple{Any, Any, Any, Trixi.AbstractSemidiscretization, Any}","page":"Trixi.jl","title":"Trixi.calc_error_norms","text":"calc_error_norms([func=(u_node,equations)->u_node,] u_ode, t, analyzer, semi::AbstractSemidiscretization, cache_analysis)\n\nCalculate discrete L2 and L∞ error norms of func applied to each nodal variable u_node in u_ode. If no exact solution is available, \"errors\" are calculated using some reference state and can be useful for regression tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.calc_fast_wavespeed_roe-Tuple{Any, Any, Any, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.calc_fast_wavespeed_roe","text":"calc_fast_wavespeed_roe(u_ll, u_rr, direction, equations::IdealGlmMhdEquations1D)\n\nCompute the fast magnetoacoustic wave speed using Roe averages as given by\n\nCargo and Gallice (1997) Roe Matrices for Ideal MHD and Systematic Construction of Roe Matrices for Systems of Conservation Laws DOI: 10.1006/jcph.1997.5773\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.calc_fast_wavespeed_roe-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.calc_fast_wavespeed_roe","text":"calc_fast_wavespeed_roe(u_ll, u_rr, orientation_or_normal_direction, equations::IdealGlmMhdEquations2D)\n\nCompute the fast magnetoacoustic wave speed using Roe averages as given by\n\nCargo and Gallice (1997) Roe Matrices for Ideal MHD and Systematic Construction of Roe Matrices for Systems of Conservation Laws DOI: 10.1006/jcph.1997.5773\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.calc_fast_wavespeed_roe-Tuple{Any, Any, Integer, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.calc_fast_wavespeed_roe","text":"calc_fast_wavespeed_roe(u_ll, u_rr, orientation_or_normal_direction, equations::IdealGlmMhdEquations3D)\n\nCompute the fast magnetoacoustic wave speed using Roe averages as given by\n\nCargo and Gallice (1997) Roe Matrices for Ideal MHD and Systematic Construction of Roe Matrices for Systems of Conservation Laws DOI: 10.1006/jcph.1997.5773\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.calc_wavespeed_roe-Tuple{Any, Any, Integer, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.calc_wavespeed_roe","text":"calc_wavespeed_roe(u_ll, u_rr, direction::Integer,\n equations::ShallowWaterEquations1D)\n\nCalculate Roe-averaged velocity v_roe and wavespeed c_roe = sqrt{g * h_roe} See for instance equation (62) in \n\nPaul A. Ullrich, Christiane Jablonowski, and Bram van Leer (2010) High-order finite-volume methods for the shallow-water equations on the sphere DOI: 10.1016/j.jcp.2010.04.044\n\nOr equation (9.17) in this lecture notes.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.calc_wavespeed_roe-Tuple{Any, Any, Integer, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.calc_wavespeed_roe","text":"calc_wavespeed_roe(u_ll, u_rr, direction::Integer,\n equations::ShallowWaterEquations2D)\n\nCalculate Roe-averaged velocity v_roe and wavespeed c_roe = sqrt{g * h_roe} depending on direction. See for instance equation (62) in \n\nPaul A. Ullrich, Christiane Jablonowski, and Bram van Leer (2010) High-order finite-volume methods for the shallow-water equations on the sphere DOI: 10.1016/j.jcp.2010.04.044\n\nOr this slides, slides 8 and 9.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.collision_bgk-Tuple{Any, Any, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.collision_bgk","text":"collision_bgk(u, dt, equations::LatticeBoltzmannEquations2D)\n\nCollision operator for the Bhatnagar, Gross, and Krook (BGK) model.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.collision_bgk-Tuple{Any, Any, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.collision_bgk","text":"collision_bgk(u, dt, equations::LatticeBoltzmannEquations3D)\n\nCollision operator for the Bhatnagar, Gross, and Krook (BGK) model.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.cons2cons-Tuple{Any, Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.cons2cons","text":"cons2cons(u, equations)\n\nReturn the conserved variables u. While this function is as trivial as identity, it is also as useful.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.cons2entropy","page":"Trixi.jl","title":"Trixi.cons2entropy","text":"cons2entropy(u, equations)\n\nConvert the conserved variables u to the entropy variables for a given set of equations with chosen standard entropy.\n\nu is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by entropy2cons.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.cons2prim","page":"Trixi.jl","title":"Trixi.cons2prim","text":"cons2prim(u, equations)\n\nConvert the conserved variables u to the primitive variables for a given set of equations. u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by prim2cons.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.convergence_test-Tuple{Module, AbstractString, Any}","page":"Trixi.jl","title":"Trixi.convergence_test","text":"convergence_test([mod::Module=Main,] elixir::AbstractString, iterations; kwargs...)\n\nRun iterations Trixi.jl simulations using the setup given in elixir and compute the experimental order of convergence (EOC) in the L^2 and L^infty norm. In each iteration, the resolution of the respective mesh will be doubled. Additional keyword arguments kwargs... and the optional module mod are passed directly to trixi_include.\n\nThis function assumes that the spatial resolution is set via the keywords initial_refinement_level (an integer) or cells_per_dimension (a tuple of integers, one per spatial dimension).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.default_analysis_errors-Tuple{Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.default_analysis_errors","text":"default_analysis_errors(equations)\n\nDefault analysis errors (:l2_error and :linf_error) used by the AnalysisCallback.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.default_analysis_integrals-Tuple{Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.default_analysis_integrals","text":"default_analysis_integrals(equations)\n\nDefault analysis integrals used by the AnalysisCallback.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.default_example-Tuple{}","page":"Trixi.jl","title":"Trixi.default_example","text":"default_example()\n\nReturn the path to an example elixir that can be used to quickly see Trixi.jl in action on a TreeMesh. See also examples_dir and get_examples.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.default_example_unstructured-Tuple{}","page":"Trixi.jl","title":"Trixi.default_example_unstructured","text":"default_example_unstructured()\n\nReturn the path to an example elixir that can be used to quickly see Trixi.jl in action on an UnstructuredMesh2D. This simulation is run on the example curved, unstructured mesh given in the Trixi.jl documentation regarding unstructured meshes.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.density-Tuple{Real, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.density","text":"density(p::Real, equations::LatticeBoltzmannEquations2D)\ndensity(u, equations::LatticeBoltzmannEquations2D)\n\nCalculate the macroscopic density from the pressure p or the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.density-Tuple{Real, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.density","text":"density(p::Real, equations::LatticeBoltzmannEquations3D)\ndensity(u, equations::LatticeBoltzmannEquations3D)\n\nCalculate the macroscopic density from the pressure p or the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.download-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.download","text":"Trixi.download(src_url, file_path)\n\nDownload a file from given src_url to given file_path if file_path is not already a file. This function just returns file_path. This is a small wrapper of Downloads.download(src_url, file_path) that avoids race conditions when multiple MPI ranks are used.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.dynamic_viscosity-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.dynamic_viscosity","text":"dynamic_viscosity(u, equations)\n\nWrapper for the dynamic viscosity that calls dynamic_viscosity(u, equations.mu, equations), which dispatches on the type of equations.mu. For constant equations.mu, i.e., equations.mu is of Real-type it is returned directly. In all other cases, equations.mu is assumed to be a function with arguments u and equations and is called with these arguments.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.each_dof_global-Tuple{DGMultiMesh, DGMulti{NDIMS, ElemType, ApproxType} where {NDIMS, ElemType, ApproxType}, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.each_dof_global","text":"each_dof_global(mesh::DGMultiMesh, dg::DGMulti, other_args...)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the degrees of freedom (DOF) in dg. In particular, not the DOFs themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.each_face_node-Tuple{DGMultiMesh, DGMulti{NDIMS, ElemType, ApproxType} where {NDIMS, ElemType, ApproxType}, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.each_face_node","text":"each_face_node(mesh::DGMultiMesh, dg::DGMulti, other_args...)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the face nodes in dg. In particular, not the face_nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.each_face_node_global-Tuple{DGMultiMesh, DGMulti{NDIMS, ElemType, ApproxType} where {NDIMS, ElemType, ApproxType}, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.each_face_node_global","text":"each_face_node_global(mesh::DGMultiMesh, dg::DGMulti, other_args...)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the face nodes in mesh. In particular, not the face nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.each_quad_node-Tuple{DGMultiMesh, DGMulti{NDIMS, ElemType, ApproxType} where {NDIMS, ElemType, ApproxType}, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.each_quad_node","text":"each_quad_node(mesh::DGMultiMesh, dg::DGMulti, other_args...)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the quadrature nodes in dg. In particular, not the quadrature nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.each_quad_node_global-Tuple{DGMultiMesh, DGMulti{NDIMS, ElemType, ApproxType} where {NDIMS, ElemType, ApproxType}, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.each_quad_node_global","text":"each_quad_node_global(mesh::DGMultiMesh, dg::DGMulti, other_args...)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the global quadrature nodes in mesh. In particular, not the quadrature nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachboundary-Tuple{DG, Any}","page":"Trixi.jl","title":"Trixi.eachboundary","text":"eachboundary(dg::DG, cache)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the boundaries in cache. In particular, not the boundaries themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachcomponent-Tuple{Trixi.AbstractCompressibleEulerMulticomponentEquations}","page":"Trixi.jl","title":"Trixi.eachcomponent","text":"eachcomponent(equations::AbstractCompressibleEulerMulticomponentEquations)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the components in AbstractCompressibleEulerMulticomponentEquations. In particular, not the components themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachcomponent-Tuple{Trixi.AbstractIdealGlmMhdMulticomponentEquations}","page":"Trixi.jl","title":"Trixi.eachcomponent","text":"eachcomponent(equations::AbstractIdealGlmMhdMulticomponentEquations)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the components in AbstractIdealGlmMhdMulticomponentEquations. In particular, not the components themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachdim-Tuple{Any}","page":"Trixi.jl","title":"Trixi.eachdim","text":"eachdim(mesh)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the dimensions in AbstractTree. In particular, not the dimensions themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachdirection-Tuple{Trixi.AbstractTree}","page":"Trixi.jl","title":"Trixi.eachdirection","text":"eachdirection(tree::AbstractTree)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the directions in AbstractTree. In particular, not the directions themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachelement-Tuple{DG, Any}","page":"Trixi.jl","title":"Trixi.eachelement","text":"eachelement(dg::DG, cache)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the elements in cache. In particular, not the elements themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachelement-Tuple{DGMultiMesh, DGMulti{NDIMS, ElemType, ApproxType} where {NDIMS, ElemType, ApproxType}, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.eachelement","text":"eachelement(mesh::DGMultiMesh, dg::DGMulti, other_args...)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the elements in mesh. In particular, not the elements themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachelement-Tuple{Trixi.ElementContainer1D}","page":"Trixi.jl","title":"Trixi.eachelement","text":"eachelement(elements::ElementContainer1D)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachelement-Tuple{Trixi.ElementContainer2D}","page":"Trixi.jl","title":"Trixi.eachelement","text":"eachelement(elements::ElementContainer2D)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachelement-Tuple{Trixi.ElementContainer3D}","page":"Trixi.jl","title":"Trixi.eachelement","text":"eachelement(elements::ElementContainer3D)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachelement-Tuple{Trixi.UnstructuredElementContainer2D}","page":"Trixi.jl","title":"Trixi.eachelement","text":"eachelement(elements::UnstructuredElementContainer2D)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the elements in elements. In particular, not the elements themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachinterface-Tuple{DG, Any}","page":"Trixi.jl","title":"Trixi.eachinterface","text":"eachinterface(dg::DG, cache)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the interfaces in cache. In particular, not the interfaces themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachmortar-Tuple{DG, Any}","page":"Trixi.jl","title":"Trixi.eachmortar","text":"eachmortar(dg::DG, cache)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the mortars in cache. In particular, not the mortars themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachmpiinterface-Tuple{DG, Any}","page":"Trixi.jl","title":"Trixi.eachmpiinterface","text":"eachmpiinterface(dg::DG, cache)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the MPI interfaces in cache. In particular, not the interfaces themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachmpimortar-Tuple{DG, Any}","page":"Trixi.jl","title":"Trixi.eachmpimortar","text":"eachmpimortar(dg::DG, cache)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the MPI mortars in cache. In particular, not the mortars themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachnode-Tuple{DG}","page":"Trixi.jl","title":"Trixi.eachnode","text":"eachnode(dg::DG)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the nodes in dg. In particular, not the nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachnode-Tuple{LobattoLegendreBasis}","page":"Trixi.jl","title":"Trixi.eachnode","text":"eachnode(basis::LobattoLegendreBasis)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the nodes in basis. In particular, not the nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachnode-Tuple{Trixi.LobattoLegendreAnalyzer}","page":"Trixi.jl","title":"Trixi.eachnode","text":"eachnode(analyzer::LobattoLegendreAnalyzer)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the nodes in analyzer. In particular, not the nodes themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.eachvariable-Tuple{Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.eachvariable","text":"eachvariable(equations::AbstractEquations)\n\nReturn an iterator over the indices that specify the location in relevant data structures for the variables in equations. In particular, not the variables themselves are returned.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.energy_internal","page":"Trixi.jl","title":"Trixi.energy_internal","text":"energy_internal(u, equations)\n\nReturn the internal energy of the conserved variables u for a given set of equations, e.g., the CompressibleEulerEquations2D.\n\nu is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.energy_kinetic","page":"Trixi.jl","title":"Trixi.energy_kinetic","text":"energy_kinetic(u, equations)\n\nReturn the kinetic energy of the conserved variables u for a given set of equations, e.g., the CompressibleEulerEquations2D.\n\nu is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.energy_total","page":"Trixi.jl","title":"Trixi.energy_total","text":"energy_total(u, equations)\n\nReturn the total energy of the conserved variables u for a given set of equations, e.g., the CompressibleEulerEquations2D.\n\nu is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.entropy","page":"Trixi.jl","title":"Trixi.entropy","text":"entropy(u, equations)\n\nReturn the chosen entropy of the conserved variables u for a given set of equations.\n\nu is a vector of the conserved variables at a single node, i.e., a vector of the correct length nvariables(equations).\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.entropy2cons","page":"Trixi.jl","title":"Trixi.entropy2cons","text":"entropy2cons(w, equations)\n\nConvert the entropy variables w based on a standard entropy to the conserved variables for a given set of equations. u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by cons2entropy.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.entropy_guermond_etal-Tuple{Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.entropy_guermond_etal","text":"entropy_guermond_etal(u, equations::CompressibleEulerEquations2D)\n\nCalculate the modified specific entropy of Guermond et al. (2019):\n\ns_0 = p * rho^-gamma (gamma-1)\n\nNote: This is not the \"conventional\" specific entropy s = ln(p rho^gamma).\n\nGuermond at al. (2019) Invariant domain preserving discretization-independent schemes and convex limiting for hyperbolic systems. DOI: 10.1016/j.cma.2018.11.036\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.equilibrium_distribution-Tuple{Any, Any, Any, Any, Any, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.equilibrium_distribution","text":"equilibrium_distribution(alpha, rho, v1, v2, v3, equations::LatticeBoltzmannEquations3D)\n\nCalculate the local equilibrium distribution for the distribution function with index alpha and given the macroscopic state defined by rho, v1, v2, v3.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.equilibrium_distribution-Tuple{Any, Any, Any, Any, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.equilibrium_distribution","text":"equilibrium_distribution(alpha, rho, v1, v2, equations::LatticeBoltzmannEquations2D)\n\nCalculate the local equilibrium distribution for the distribution function with index alpha and given the macroscopic state defined by rho, v1, v2.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.examples_dir-Tuple{}","page":"Trixi.jl","title":"Trixi.examples_dir","text":"examples_dir()\n\nReturn the directory where the example files provided with Trixi.jl are located. If Trixi.jl is installed as a regular package (with ]add Trixi), these files are read-only and should not be modified. To find out which files are available, use, e.g., readdir:\n\nExamples\n\nreaddir(examples_dir())\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux","page":"Trixi.jl","title":"Trixi.flux","text":"flux(u, orientation_or_normal, equations)\n\nGiven the conservative variables u, calculate the (physical) flux in Cartesian direction orientation::Integer or in arbitrary direction normal::AbstractVector for the corresponding set of governing equations. orientation is 1, 2, and 3 for the x-, y-, and z-directions, respectively.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.flux-Tuple{Any, AbstractVector, Trixi.AbstractEquations{1}}","page":"Trixi.jl","title":"Trixi.flux","text":"flux(u, normal_direction::AbstractVector, equations::AbstractEquations{1})\n\nEnables calling flux with a non-integer argument normal_direction for one-dimensional equations. Returns the value of flux(u, 1, equations) scaled by normal_direction[1].\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_central-Tuple{Any, Any, Any, Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.flux_central","text":"flux_central(u_ll, u_rr, orientation_or_normal_direction, equations::AbstractEquations)\n\nThe classical central numerical flux f((u_ll) + f(u_rr)) / 2. When this flux is used as volume flux, the discretization is equivalent to the classical weak form DG method (except floating point errors).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chan_etal-Tuple{Any, Any, Integer, CompressibleEulerEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.flux_chan_etal","text":"@inline function fluxchanetal(ull, urr, orientation::Integer, equations::CompressibleEulerEquationsQuasi1D)\n\nConservative (symmetric) part of the entropy conservative flux for quasi 1D compressible Euler equations split form. This flux is a generalization of flux_ranocha for CompressibleEulerEquations1D. Further details are available in the paper:\n\nJesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089 \n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chan_etal-Tuple{Any, Any, Integer, ShallowWaterEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.flux_chan_etal","text":"flux_chan_etal(u_ll, u_rr, orientation,\n equations::ShallowWaterEquationsQuasi1D)\n\nTotal energy conservative (mathematical entropy for quasi 1D shallow water equations) split form. When the bottom topography is nonzero this scheme will be well-balanced when used as a volume_flux. The surface_flux should still use, e.g., FluxPlusDissipation(flux_chan_etal, DissipationLocalLaxFriedrichs()).\n\nFurther details are available in the paper:\n\nJesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chandrashekar-Tuple{Any, Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.flux_chandrashekar","text":"flux_chandrashekar(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)\n\nEntropy conserving two-point flux by\n\nChandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations DOI: 10.4208/cicp.170712.010313a\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chandrashekar-Tuple{Any, Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_chandrashekar","text":"flux_chandrashekar(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations2D)\n\nEntropy conserving two-point flux by\n\nChandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations DOI: 10.4208/cicp.170712.010313a\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chandrashekar-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.flux_chandrashekar","text":"flux_chandrashekar(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations3D)\n\nEntropy conserving two-point flux by\n\nChandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations DOI: 10.4208/cicp.170712.010313a\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chandrashekar-Tuple{Any, Any, Integer, CompressibleEulerMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.flux_chandrashekar","text":"flux_chandrashekar(u_ll, u_rr, orientation, equations::CompressibleEulerMulticomponentEquations1D)\n\nEntropy conserving two-point flux by\n\nAyoub Gouasmi, Karthik Duraisamy (2020) \"Formulation of Entropy-Stable schemes for the multicomponent compressible Euler equations\" arXiv:1904.00972v3 [math.NA] 4 Feb 2020\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_chandrashekar-Tuple{Any, Any, Integer, CompressibleEulerMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.flux_chandrashekar","text":"flux_chandrashekar(u_ll, u_rr, orientation, equations::CompressibleEulerMulticomponentEquations2D)\n\nAdaption of the entropy conserving two-point flux by\n\nAyoub Gouasmi, Karthik Duraisamy (2020) \"Formulation of Entropy-Stable schemes for the multicomponent compressible Euler equations\" arXiv:1904.00972v3 [math.NA] 4 Feb 2020\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_derigs_etal-Tuple{Any, Any, Integer, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.flux_derigs_etal","text":"flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations1D)\n\nEntropy conserving two-point flux by\n\nDerigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations DOI: 10.1016/j.jcp.2018.03.002\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_derigs_etal-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.flux_derigs_etal","text":"flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations2D)\n\nEntropy conserving two-point flux by\n\nDerigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations DOI: 10.1016/j.jcp.2018.03.002\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_derigs_etal-Tuple{Any, Any, Integer, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.flux_derigs_etal","text":"flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations3D)\n\nEntropy conserving two-point flux by\n\nDerigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations DOI: 10.1016/j.jcp.2018.03.002\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_derigs_etal-Tuple{Any, Any, Integer, IdealGlmMhdMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.flux_derigs_etal","text":"flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations1D)\n\nEntropy conserving two-point flux adapted by\n\nDerigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations for multicomponent DOI: 10.1016/j.jcp.2018.03.002\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_derigs_etal-Tuple{Any, Any, Integer, IdealGlmMhdMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.flux_derigs_etal","text":"flux_derigs_etal(u_ll, u_rr, orientation, equations::IdealGlmMhdMulticomponentEquations2D)\n\nEntropy conserving two-point flux adapted by\n\nDerigs et al. (2018) Ideal GLM-MHD: About the entropy consistent nine-wave magnetic field divergence diminishing ideal magnetohydrodynamics equations for multicomponent DOI: 10.1016/j.jcp.2018.03.002\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_fjordholm_etal-Tuple{Any, Any, Integer, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.flux_fjordholm_etal","text":"flux_fjordholm_etal(u_ll, u_rr, orientation,\n equations::ShallowWaterEquations1D)\n\nTotal energy conservative (mathematical entropy for shallow water equations). When the bottom topography is nonzero this should only be used as a surface flux otherwise the scheme will not be well-balanced. For well-balancedness in the volume flux use flux_wintermeyer_etal.\n\nDetails are available in Eq. (4.1) in the paper:\n\nUlrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_fjordholm_etal-Tuple{Any, Any, Integer, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.flux_fjordholm_etal","text":"flux_fjordholm_etal(u_ll, u_rr, orientation_or_normal_direction,\n equations::ShallowWaterEquations2D)\n\nTotal energy conservative (mathematical entropy for shallow water equations). When the bottom topography is nonzero this should only be used as a surface flux otherwise the scheme will not be well-balanced. For well-balancedness in the volume flux use flux_wintermeyer_etal.\n\nDetails are available in Eq. (4.1) in the paper:\n\nUlrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_godunov-Tuple{Any, Any, Integer, LinearizedEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_godunov","text":"flux_godunov(u_ll, u_rr, orientation_or_normal_direction,\n equations::LinearizedEulerEquations2D)\n\nAn upwind flux for the linearized Euler equations based on diagonalization of the physical flux matrix. Given the physical flux Au, A=T Lambda T^-1 with Lambda being a diagonal matrix that holds the eigenvalues of A, decompose Lambda = Lambda^+ + Lambda^- where Lambda^+ and Lambda^- are diagonal matrices holding the positive and negative eigenvalues of A, respectively. Then for left and right states u_L u_R, the numerical flux calculated by this function is given by A^+ u_L + A^- u_R where A^pm = T Lambda^pm T^-1.\n\nThe diagonalization of the flux matrix can be found in\n\nR. F. Warming, Richard M. Beam and B. J. Hyett (1975) Diagonalization and simultaneous symmetrization of the gas-dynamic matrices DOI: 10.1090/S0025-5718-1975-0388967-5\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hindenlang_gassner-Tuple{Any, Any, Integer, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.flux_hindenlang_gassner","text":"flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,\n equations::IdealGlmMhdEquations1D)\n\nEntropy conserving and kinetic energy preserving two-point flux of Hindenlang and Gassner (2019), extending flux_ranocha to the MHD equations.\n\nReferences\n\nFlorian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hindenlang_gassner-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.flux_hindenlang_gassner","text":"flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,\n equations::IdealGlmMhdEquations2D)\n\nEntropy conserving and kinetic energy preserving two-point flux of Hindenlang and Gassner (2019), extending flux_ranocha to the MHD equations.\n\nReferences\n\nFlorian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hindenlang_gassner-Tuple{Any, Any, Integer, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.flux_hindenlang_gassner","text":"flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,\n equations::IdealGlmMhdEquations3D)\n\nEntropy conserving and kinetic energy preserving two-point flux of Hindenlang and Gassner (2019), extending flux_ranocha to the MHD equations.\n\nReferences\n\nFlorian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hindenlang_gassner-Tuple{Any, Any, Integer, IdealGlmMhdMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.flux_hindenlang_gassner","text":"flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,\n equations::IdealGlmMhdMulticomponentEquations1D)\n\nAdaption of the entropy conserving and kinetic energy preserving two-point flux of Hindenlang (2019), extending flux_ranocha to the MHD equations.\n\nReferences\n\nFlorian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hindenlang_gassner-Tuple{Any, Any, Integer, IdealGlmMhdMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.flux_hindenlang_gassner","text":"flux_hindenlang_gassner(u_ll, u_rr, orientation_or_normal_direction,\n equations::IdealGlmMhdMulticomponentEquations2D)\n\nAdaption of the entropy conserving and kinetic energy preserving two-point flux of Hindenlang (2019), extending flux_ranocha to the MHD equations.\n\nReferences\n\nFlorian Hindenlang, Gregor Gassner (2019) A new entropy conservative two-point flux for ideal MHD equations derived from first principles. Presented at HONOM 2019: European workshop on high order numerical methods for evolutionary PDEs, theory and applications\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hllc-Tuple{Any, Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.flux_hllc","text":"flux_hllc(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)\n\nComputes the HLLC flux (HLL with Contact) for compressible Euler equations developed by E.F. Toro Lecture slides Signal speeds: DOI: 10.1137/S1064827593260140\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hllc-Tuple{Any, Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_hllc","text":"flux_hllc(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations2D)\n\nComputes the HLLC flux (HLL with Contact) for compressible Euler equations developed by E.F. Toro Lecture slides Signal speeds: DOI: 10.1137/S1064827593260140\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hllc-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.flux_hllc","text":"flux_hllc(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations3D)\n\nComputes the HLLC flux (HLL with Contact) for compressible Euler equations developed by E.F. Toro Lecture slides Signal speeds: DOI: 10.1137/S1064827593260140\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_hllc-Tuple{Any, Any, Integer, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.flux_hllc","text":"flux_hllc(u_ll, u_rr, orientation, equations::IdealGlmMhdEquations1D)\n\nLi (2005)\n\nAn HLLC Riemann solver for magneto-hydrodynamics DOI: 10.1016/j.jcp.2004.08.020.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_kennedy_gruber-Tuple{Any, Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.flux_kennedy_gruber","text":"flux_kennedy_gruber(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)\n\nKinetic energy preserving two-point flux by\n\nKennedy and Gruber (2008) Reduced aliasing formulations of the convective terms within the Navier-Stokes equations for a compressible fluid DOI: 10.1016/j.jcp.2007.09.020\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_kennedy_gruber-Tuple{Any, Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_kennedy_gruber","text":"flux_kennedy_gruber(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nKinetic energy preserving two-point flux by\n\nKennedy and Gruber (2008) Reduced aliasing formulations of the convective terms within the Navier-Stokes equations for a compressible fluid DOI: 10.1016/j.jcp.2007.09.020\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_kennedy_gruber-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.flux_kennedy_gruber","text":"flux_kennedy_gruber(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations3D)\n\nKinetic energy preserving two-point flux by\n\nKennedy and Gruber (2008) Reduced aliasing formulations of the convective terms within the Navier-Stokes equations for a compressible fluid DOI: 10.1016/j.jcp.2007.09.020\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_audusse_etal-Tuple{Any, Any, Integer, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_audusse_etal","text":"flux_nonconservative_audusse_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations1D)\n\nNon-symmetric two-point surface flux that discretizes the nonconservative (source) term. The discretization uses the hydrostatic_reconstruction_audusse_etal on the conservative variables.\n\nThis hydrostatic reconstruction ensures that the finite volume numerical fluxes remain well-balanced for discontinuous bottom topographies ShallowWaterEquations1D. Should be used together with FluxHydrostaticReconstruction and hydrostatic_reconstruction_audusse_etal in the surface flux to ensure consistency.\n\nFurther details on the hydrostatic reconstruction and its motivation can be found in\n\nEmmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_audusse_etal-Tuple{Any, Any, Integer, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_audusse_etal","text":"flux_nonconservative_audusse_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations2D)\nflux_nonconservative_audusse_etal(u_ll, u_rr,\n normal_direction_ll ::AbstractVector,\n normal_direction_average::AbstractVector,\n equations::ShallowWaterEquations2D)\n\nNon-symmetric two-point surface flux that discretizes the nonconservative (source) term. The discretization uses the hydrostatic_reconstruction_audusse_etal on the conservative variables.\n\nThis hydrostatic reconstruction ensures that the finite volume numerical fluxes remain well-balanced for discontinuous bottom topographies ShallowWaterEquations2D. Should be used together with FluxHydrostaticReconstruction and hydrostatic_reconstruction_audusse_etal in the surface flux to ensure consistency.\n\nFurther details for the hydrostatic reconstruction and its motivation can be found in\n\nEmmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_chan_etal-Tuple{Any, Any, Integer, CompressibleEulerEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_chan_etal","text":"flux_nonconservative_chan_etal(u_ll, u_rr, orientation::Integer,\n equations::CompressibleEulerEquationsQuasi1D)\nflux_nonconservative_chan_etal(u_ll, u_rr, normal_direction, \n equations::CompressibleEulerEquationsQuasi1D)\nflux_nonconservative_chan_etal(u_ll, u_rr, normal_ll, normal_rr,\n equations::CompressibleEulerEquationsQuasi1D)\n\nNon-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the pressure CompressibleEulerEquationsQuasi1D and the nozzle width.\n\nFurther details are available in the paper:\n\nJesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089 \n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_chan_etal-Tuple{Any, Any, Integer, ShallowWaterEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_chan_etal","text":"flux_nonconservative_chan_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquationsQuasi1D)\nflux_nonconservative_chan_etal(u_ll, u_rr, normal_direction::AbstractVector,\n equations::ShallowWaterEquationsQuasi1D) \nflux_nonconservative_chan_etal(u_ll, u_rr, \n normal_ll::AbstractVector, normal_rr::AbstractVector,\n equations::ShallowWaterEquationsQuasi1D)\n\nNon-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the bottom topography ShallowWaterEquationsQuasi1D and the channel width.\n\nFurther details are available in the paper:\n\nJesse Chan, Khemraj Shukla, Xinhui Wu, Ruofeng Liu, Prani Nalluri (2023) High order entropy stable schemes for the quasi-one-dimensional shallow water and compressible Euler equations DOI: 10.48550/arXiv.2307.12089\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_fjordholm_etal-Tuple{Any, Any, Integer, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_fjordholm_etal","text":"flux_nonconservative_fjordholm_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations1D)\n\nNon-symmetric two-point surface flux discretizing the nonconservative (source) term of that contains the gradient of the bottom topography ShallowWaterEquations1D.\n\nThis flux can be used together with flux_fjordholm_etal at interfaces to ensure entropy conservation and well-balancedness.\n\nFurther details for the original finite volume formulation are available in\n\nUlrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042\n\nand for curvilinear 2D case in the paper:\n\nNiklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_fjordholm_etal-Tuple{Any, Any, Integer, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_fjordholm_etal","text":"flux_nonconservative_fjordholm_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations2D)\nflux_nonconservative_fjordholm_etal(u_ll, u_rr,\n normal_direction_ll ::AbstractVector,\n normal_direction_average::AbstractVector,\n equations::ShallowWaterEquations2D)\n\nNon-symmetric two-point surface flux discretizing the nonconservative (source) term of that contains the gradient of the bottom topography ShallowWaterEquations2D.\n\nThis flux can be used together with flux_fjordholm_etal at interfaces to ensure entropy conservation and well-balancedness.\n\nFurther details for the original finite volume formulation are available in\n\nUlrik S. Fjordholm, Siddhartha Mishr and Eitan Tadmor (2011) Well-balanced and energy stable schemes for the shallow water equations with discontinuous topography DOI: 10.1016/j.jcp.2011.03.042\n\nand for curvilinear 2D case in the paper:\n\nNiklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_powell-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_powell","text":"flux_nonconservative_powell(u_ll, u_rr, orientation::Integer,\n equations::IdealGlmMhdEquations2D)\nflux_nonconservative_powell(u_ll, u_rr,\n normal_direction_ll ::AbstractVector,\n normal_direction_average::AbstractVector,\n equations::IdealGlmMhdEquations2D)\n\nNon-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdEquations2D.\n\nOn curvilinear meshes, this nonconservative flux depends on both the contravariant vector (normal direction) at the current node and the averaged one. This is different from numerical fluxes used to discretize conservative terms.\n\nReferences\n\nMarvin Bohm, Andrew R.Winters, Gregor J. Gassner, Dominik Derigs, Florian Hindenlang, Joachim Saur An entropy stable nodal discontinuous Galerkin method for the resistive MHD equations. Part I: Theory and numerical verification DOI: 10.1016/j.jcp.2018.06.027\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_powell-Tuple{Any, Any, Integer, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_powell","text":"flux_nonconservative_powell(u_ll, u_rr, orientation::Integer,\n equations::IdealGlmMhdEquations3D)\nflux_nonconservative_powell(u_ll, u_rr,\n normal_direction_ll ::AbstractVector,\n normal_direction_average::AbstractVector,\n equations::IdealGlmMhdEquations3D)\n\nNon-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdEquations3D.\n\nOn curvilinear meshes, this nonconservative flux depends on both the contravariant vector (normal direction) at the current node and the averaged one. This is different from numerical fluxes used to discretize conservative terms.\n\nReferences\n\nMarvin Bohm, Andrew R.Winters, Gregor J. Gassner, Dominik Derigs, Florian Hindenlang, Joachim Saur An entropy stable nodal discontinuous Galerkin method for the resistive MHD equations. Part I: Theory and numerical verification DOI: 10.1016/j.jcp.2018.06.027\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_powell-Tuple{Any, Any, Integer, IdealGlmMhdMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_powell","text":"flux_nonconservative_powell(u_ll, u_rr, orientation::Integer,\n equations::IdealGlmMhdMulticomponentEquations2D)\n\nNon-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdMulticomponentEquations2D.\n\nReferences\n\nMarvin Bohm, Andrew R.Winters, Gregor J. Gassner, Dominik Derigs, Florian Hindenlang, Joachim Saur An entropy stable nodal discontinuous Galerkin method for the resistive MHD equations. Part I: Theory and numerical verification DOI: 10.1016/j.jcp.2018.06.027\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_powell_local_symmetric-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D, Trixi.NonConservativeSymmetric, Integer}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_powell_local_symmetric","text":"flux_nonconservative_powell_local_symmetric(u_ll, orientation::Integer,\n equations::IdealGlmMhdEquations2D,\n nonconservative_type::NonConservativeSymmetric,\n nonconservative_term::Integer)\n\nSymmetric part of the Powell and GLM non-conservative terms. Needed for the calculation of the non-conservative staggered \"fluxes\" for subcell limiting. See, e.g.,\n\nRueda-Ramírez, Gassner (2023). A Flux-Differencing Formula for Split-Form Summation By Parts Discretizations of Non-Conservative Systems. https://arxiv.org/pdf/2211.14009.pdf.\n\nThis function is used to compute the subcell fluxes in dg2dsubcell_limiters.jl.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_powell_local_symmetric-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_powell_local_symmetric","text":"flux_nonconservative_powell_local_symmetric(u_ll, u_rr,\n orientation::Integer,\n equations::IdealGlmMhdEquations2D)\n\nNon-symmetric two-point flux discretizing the nonconservative (source) term of Powell and the Galilean nonconservative term associated with the GLM multiplier of the IdealGlmMhdEquations2D.\n\nThis implementation uses a non-conservative term that can be written as the product of local and symmetric parts. It is equivalent to the non-conservative flux of Bohm et al. (flux_nonconservative_powell) for conforming meshes but it yields different results on non-conforming meshes(!).\n\nThe two other flux functions with the same name return either the local or symmetric portion of the non-conservative flux based on the type of the nonconservativetype argument, employing multiple dispatch. They are used to compute the subcell fluxes in dg2dsubcelllimiters.jl.\n\nReferences\n\nRueda-Ramírez, Gassner (2023). A Flux-Differencing Formula for Split-Form Summation By Parts Discretizations of Non-Conservative Systems. https://arxiv.org/pdf/2211.14009.pdf.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_powell_local_symmetric-Tuple{Any, Integer, IdealGlmMhdEquations2D, Trixi.NonConservativeLocal, Integer}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_powell_local_symmetric","text":"flux_nonconservative_powell_local_symmetric(u_ll, orientation::Integer,\n equations::IdealGlmMhdEquations2D,\n nonconservative_type::NonConservativeLocal,\n nonconservative_term::Integer)\n\nLocal part of the Powell and GLM non-conservative terms. Needed for the calculation of the non-conservative staggered \"fluxes\" for subcell limiting. See, e.g.,\n\nRueda-Ramírez, Gassner (2023). A Flux-Differencing Formula for Split-Form Summation By Parts Discretizations of Non-Conservative Systems. https://arxiv.org/pdf/2211.14009.pdf.\n\nThis function is used to compute the subcell fluxes in dg2dsubcell_limiters.jl.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_wintermeyer_etal-Tuple{Any, Any, Integer, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_wintermeyer_etal","text":"flux_nonconservative_wintermeyer_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations1D)\n\nNon-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the bottom topography ShallowWaterEquations1D.\n\nGives entropy conservation and well-balancedness on both the volume and surface when combined with flux_wintermeyer_etal.\n\nFurther details are available in the papers:\n\nNiklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036\nPatrick Ersing, Andrew R. Winters (2023) An entropy stable discontinuous Galerkin method for the two-layer shallow water equations on curvilinear meshes DOI: 10.48550/arXiv.2306.12699\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_nonconservative_wintermeyer_etal-Tuple{Any, Any, Integer, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.flux_nonconservative_wintermeyer_etal","text":"flux_nonconservative_wintermeyer_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations2D)\nflux_nonconservative_wintermeyer_etal(u_ll, u_rr,\n normal_direction_ll ::AbstractVector,\n normal_direction_average::AbstractVector,\n equations::ShallowWaterEquations2D)\n\nNon-symmetric two-point volume flux discretizing the nonconservative (source) term that contains the gradient of the bottom topography ShallowWaterEquations2D.\n\nFor the surface_flux either flux_wintermeyer_etal or flux_fjordholm_etal can be used to ensure well-balancedness and entropy conservation.\n\nFurther details are available in the papers:\n\nNiklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036\nPatrick Ersing, Andrew R. Winters (2023) An entropy stable discontinuous Galerkin method for the two-layer shallow water equations on curvilinear meshes DOI: 10.48550/arXiv.2306.12699\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_ranocha-Tuple{Any, Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.flux_ranocha","text":"flux_ranocha(u_ll, u_rr, orientation_or_normal_direction, equations::CompressibleEulerEquations1D)\n\nEntropy conserving and kinetic energy preserving two-point flux by\n\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\n\nSee also\n\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_ranocha-Tuple{Any, Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_ranocha","text":"flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nEntropy conserving and kinetic energy preserving two-point flux by\n\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\n\nSee also\n\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_ranocha-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.flux_ranocha","text":"flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations3D)\n\nEntropy conserving and kinetic energy preserving two-point flux by\n\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\n\nSee also\n\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_ranocha-Tuple{Any, Any, Integer, CompressibleEulerMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.flux_ranocha","text":"flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerMulticomponentEquations1D)\n\nAdaption of the entropy conserving and kinetic energy preserving two-point flux by\n\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\n\nSee also\n\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_ranocha-Tuple{Any, Any, Integer, CompressibleEulerMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.flux_ranocha","text":"flux_ranocha(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerMulticomponentEquations2D)\n\nAdaption of the entropy conserving and kinetic energy preserving two-point flux by\n\nHendrik Ranocha (2018) Generalised Summation-by-Parts Operators and Entropy Stability of Numerical Methods for Hyperbolic Balance Laws PhD thesis, TU Braunschweig\n\nSee also\n\nHendrik Ranocha (2020) Entropy Conserving and Kinetic Energy Preserving Numerical Methods for the Euler Equations Using Summation-by-Parts Operators Proceedings of ICOSAHOM 2018\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_ranocha_turbo-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.flux_ranocha_turbo","text":"flux_ranocha_turbo(u_ll, u_rr, orientation_or_normal_direction, equations)\n\nEquivalent to flux_ranocha except that it may use specialized methods, e.g., when used with VolumeIntegralFluxDifferencing. These specialized methods may enable better use of SIMD instructions to increase runtime efficiency on modern hardware.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_shima_etal-Tuple{Any, Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.flux_shima_etal","text":"flux_shima_etal(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)\n\nThis flux is is a modification of the original kinetic energy preserving two-point flux by\n\nYuichi Kuya, Kosuke Totani and Soshi Kawai (2018) Kinetic energy and entropy preserving schemes for compressible flows by split convective forms DOI: 10.1016/j.jcp.2018.08.058\n\nThe modification is in the energy flux to guarantee pressure equilibrium and was developed by\n\nNao Shima, Yuichi Kuya, Yoshiharu Tamaki, Soshi Kawai (JCP 2020) Preventing spurious pressure oscillations in split convective form discretizations for compressible flows DOI: 10.1016/j.jcp.2020.110060\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_shima_etal-Tuple{Any, Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_shima_etal","text":"flux_shima_etal(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nThis flux is is a modification of the original kinetic energy preserving two-point flux by\n\nYuichi Kuya, Kosuke Totani and Soshi Kawai (2018) Kinetic energy and entropy preserving schemes for compressible flows by split convective forms DOI: 10.1016/j.jcp.2018.08.058\n\nThe modification is in the energy flux to guarantee pressure equilibrium and was developed by\n\nNao Shima, Yuichi Kuya, Yoshiharu Tamaki, Soshi Kawai (JCP 2020) Preventing spurious pressure oscillations in split convective form discretizations for compressible flows DOI: 10.1016/j.jcp.2020.110060\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_shima_etal-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.flux_shima_etal","text":"flux_shima_etal(u_ll, u_rr, orientation_or_normal_direction,\n equations::CompressibleEulerEquations3D)\n\nThis flux is is a modification of the original kinetic energy preserving two-point flux by\n\nYuichi Kuya, Kosuke Totani and Soshi Kawai (2018) Kinetic energy and entropy preserving schemes for compressible flows by split convective forms DOI: 10.1016/j.jcp.2018.08.058\n\nThe modification is in the energy flux to guarantee pressure equilibrium and was developed by\n\nNao Shima, Yuichi Kuya, Yoshiharu Tamaki, Soshi Kawai (JCP 2020) Preventing spurious pressure oscillations in split convective form discretizations for compressible flows DOI: 10.1016/j.jcp.2020.110060\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_shima_etal_turbo-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.flux_shima_etal_turbo","text":"flux_shima_etal_turbo(u_ll, u_rr, orientation_or_normal_direction, equations)\n\nEquivalent to flux_shima_etal except that it may use specialized methods, e.g., when used with VolumeIntegralFluxDifferencing. These specialized methods may enable better use of SIMD instructions to increase runtime efficiency on modern hardware.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_wintermeyer_etal-Tuple{Any, Any, Integer, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.flux_wintermeyer_etal","text":"flux_wintermeyer_etal(u_ll, u_rr, orientation,\n equations::ShallowWaterEquations1D)\n\nTotal energy conservative (mathematical entropy for shallow water equations) split form. When the bottom topography is nonzero this scheme will be well-balanced when used as a volume_flux. For the surface_flux either flux_wintermeyer_etal or flux_fjordholm_etal can be used to ensure well-balancedness and entropy conservation.\n\nFurther details are available in Theorem 1 of the paper:\n\nNiklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_wintermeyer_etal-Tuple{Any, Any, Integer, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.flux_wintermeyer_etal","text":"flux_wintermeyer_etal(u_ll, u_rr, orientation_or_normal_direction,\n equations::ShallowWaterEquations2D)\n\nTotal energy conservative (mathematical entropy for shallow water equations) split form. When the bottom topography is nonzero this scheme will be well-balanced when used as a volume_flux. For the surface_flux either flux_wintermeyer_etal or flux_fjordholm_etal can be used to ensure well-balancedness and entropy conservation.\n\nFurther details are available in Theorem 1 of the paper:\n\nNiklas Wintermeyer, Andrew R. Winters, Gregor J. Gassner and David A. Kopriva (2017) An entropy stable nodal discontinuous Galerkin method for the two dimensional shallow water equations on unstructured curvilinear meshes with discontinuous bathymetry DOI: 10.1016/j.jcp.2017.03.036\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.flux_winters_etal-Tuple{Any, Any, AbstractVector, PolytropicEulerEquations2D}","page":"Trixi.jl","title":"Trixi.flux_winters_etal","text":"flux_winters_etal(u_ll, u_rr, orientation_or_normal_direction,\n equations::PolytropicEulerEquations2D)\n\nEntropy conserving two-point flux for isothermal or polytropic gases. Requires a special weighted Stolarsky mean for the evaluation of the density denoted here as stolarsky_mean. Note, for isothermal gases where gamma = 1 this stolarsky_mean becomes the ln_mean.\n\nFor details see Section 3.2 of the following reference\n\nAndrew R. Winters, Christof Czernik, Moritz B. Schily & Gregor J. Gassner (2020) Entropy stable numerical approximations for the isothermal and polytropic Euler equations DOI: 10.1007/s10543-019-00789-w\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.gauss_nodes_weights-Tuple{Integer}","page":"Trixi.jl","title":"Trixi.gauss_nodes_weights","text":"gauss_nodes_weights(n_nodes::Integer)\n\nComputes nodes x_j and weights w_j for the Gauss-Legendre quadrature. This implements algorithm 23 \"LegendreGaussNodesAndWeights\" from the book\n\nDavid A. Kopriva, (2009). Implementing spectral methods for partial differential equations: Algorithms for scientists and engineers. DOI:10.1007/978-90-481-2261-5\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.get_boundary_outer_state-Tuple{BoundaryConditionDirichlet, Any, Any, Any, Any, Vararg{Any}}","page":"Trixi.jl","title":"Trixi.get_boundary_outer_state","text":"get_boundary_outer_state(boundary_condition::BoundaryConditionDirichlet,\n cache, t, equations, dg, indices...)\n\nFor subcell limiting, the calculation of local bounds for non-periodic domains require the boundary outer state. This function returns the boundary value at time t and for node with spatial indices indices.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.get_examples-Tuple{}","page":"Trixi.jl","title":"Trixi.get_examples","text":"get_examples()\n\nReturn a list of all example elixirs that are provided by Trixi.jl. See also examples_dir and default_example.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.get_name-Tuple{Any}","page":"Trixi.jl","title":"Trixi.get_name","text":"get_name(x)\n\nReturns a name of x ready for pretty printing. By default, return string(y) if x isa Val{y} and return string(x) otherwise.\n\nExamples\n\njulia> Trixi.get_name(\"test\")\n\"test\"\n\njulia> Trixi.get_name(Val(:test))\n\"test\"\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.get_name-Tuple{Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.get_name","text":"get_name(equations::AbstractEquations)\n\nReturns the canonical, human-readable name for the given system of equations.\n\nExamples\n\njulia> Trixi.get_name(CompressibleEulerEquations1D(1.4))\n\"CompressibleEulerEquations1D\"\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.getmesh-Tuple{Trixi.AbstractPlotData}","page":"Trixi.jl","title":"Trixi.getmesh","text":"getmesh(pd::AbstractPlotData)\n\nExtract grid lines from pd for plotting with Plots.plot.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.global_mean_vars-Tuple{AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.global_mean_vars","text":"global_mean_vars(equations::AcousticPerturbationEquations2D)\n\nReturns the global mean variables stored in equations. This makes it easier to define flexible initial conditions for problems with constant mean flow.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.have_nonconservative_terms-Tuple{Trixi.AbstractEquations}","page":"Trixi.jl","title":"Trixi.have_nonconservative_terms","text":"have_nonconservative_terms(equations)\n\nTrait function determining whether equations represent a conservation law with or without nonconservative terms. Classical conservation laws such as the CompressibleEulerEquations2D do not have nonconservative terms. The ShallowWaterEquations2D with non-constant bottom topography are an example of equations with nonconservative terms. The return value will be True() or False() to allow dispatching on the return type.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.hydrostatic_reconstruction_audusse_etal-Tuple{Any, Any, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.hydrostatic_reconstruction_audusse_etal","text":"hydrostatic_reconstruction_audusse_etal(u_ll, u_rr, orientation::Integer,\n equations::ShallowWaterEquations1D)\n\nA particular type of hydrostatic reconstruction on the water height to guarantee well-balancedness for a general bottom topography ShallowWaterEquations1D. The reconstructed solution states u_ll_star and u_rr_star variables are then used to evaluate the surface numerical flux at the interface. Use in combination with the generic numerical flux routine FluxHydrostaticReconstruction.\n\nFurther details on this hydrostatic reconstruction and its motivation can be found in\n\nEmmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.hydrostatic_reconstruction_audusse_etal-Tuple{Any, Any, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.hydrostatic_reconstruction_audusse_etal","text":"hydrostatic_reconstruction_audusse_etal(u_ll, u_rr, orientation_or_normal_direction,\n equations::ShallowWaterEquations2D)\n\nA particular type of hydrostatic reconstruction on the water height to guarantee well-balancedness for a general bottom topography ShallowWaterEquations2D. The reconstructed solution states u_ll_star and u_rr_star variables are used to evaluate the surface numerical flux at the interface. Use in combination with the generic numerical flux routine FluxHydrostaticReconstruction.\n\nFurther details for the hydrostatic reconstruction and its motivation can be found in\n\nEmmanuel Audusse, François Bouchut, Marie-Odile Bristeau, Rupert Klein, and Benoit Perthame (2004) A fast and stable well-balanced scheme with hydrostatic reconstruction for shallow water flows DOI: 10.1137/S1064827503431090\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.init_mpi-Tuple{}","page":"Trixi.jl","title":"Trixi.init_mpi","text":"init_mpi()\n\nInitialize MPI by calling MPI.Initialized(). The function will check if MPI is already initialized and if yes, do nothing, thus it is safe to call it multiple times.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.init_p4est-Tuple{}","page":"Trixi.jl","title":"Trixi.init_p4est","text":"init_p4est()\n\nInitialize p4est by calling p4est_init and setting the log level to SC_LP_ERROR. This function will check if p4est is already initialized and if yes, do nothing, thus it is safe to call it multiple times.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.init_t8code-Tuple{}","page":"Trixi.jl","title":"Trixi.init_t8code","text":"init_t8code()\n\nInitialize t8code by calling sc_init, p4est_init, and t8_init while setting the log level to SC_LP_ERROR. This function will check if t8code is already initialized and if yes, do nothing, thus it is safe to call it multiple times.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::AcousticPerturbationEquations2D)\n\nA constant initial condition where the state variables are zero and the mean flow is constant. Uses the global mean values from equations.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::CompressibleEulerEquations1D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::CompressibleEulerEquations2D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::CompressibleEulerEquations3D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::IdealGlmMhdEquations1D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::IdealGlmMhdEquations2D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::IdealGlmMhdEquations3D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, InviscidBurgersEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::InviscidBurgersEquation1D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::LatticeBoltzmannEquations2D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::LatticeBoltzmannEquations3D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::LinearScalarAdvectionEquation2D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_constant-Tuple{Any, Any, LinearScalarAdvectionEquation3D}","page":"Trixi.jl","title":"Trixi.initial_condition_constant","text":"initial_condition_constant(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA constant initial condition to test free-stream preservation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::AcousticPerturbationEquations2D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test. Uses the global mean values from equations.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::CompressibleEulerEquations1D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::CompressibleEulerEquations2D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::CompressibleEulerEquations3D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, CompressibleEulerEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::CompressibleEulerEquationsQuasi1D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, CompressibleEulerMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::CompressibleEulerMulticomponentEquations1D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, CompressibleEulerMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::CompressibleEulerMulticomponentEquations2D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::IdealGlmMhdEquations1D)\n\nAn Alfvén wave as smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::IdealGlmMhdEquations2D)\n\nAn Alfvén wave as smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::IdealGlmMhdEquations3D)\n\nAn Alfvén wave as smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, IdealGlmMhdMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::IdealGlmMhdMulticomponentEquations1D)\n\nAn Alfvén wave as smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, IdealGlmMhdMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::IdealGlmMhdMulticomponentEquations2D)\n\nAn Alfvén wave as smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, InviscidBurgersEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::InviscidBurgersEquation1D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA smooth initial condition used for convergence tests (in combination with BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::LinearScalarAdvectionEquation2D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, LinearScalarAdvectionEquation3D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, LinearizedEulerEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::LinearizedEulerEquations1D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, LinearizedEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::LinearizedEulerEquations2D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, LinearizedEulerEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::LinearizedEulerEquations3D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, MaxwellEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::MaxwellEquations1D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, PolytropicEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::PolytropicEulerEquations2D)\n\nManufactured smooth initial condition used for convergence tests in combination with source_terms_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::ShallowWaterEquations1D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::ShallowWaterEquations2D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, ShallowWaterEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::ShallowWaterEquationsQuasi1D)\n\nA smooth initial condition used for convergence tests in combination with source_terms_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_convergence_test-Tuple{Any, Any, TrafficFlowLWREquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_convergence_test","text":"initial_condition_convergence_test(x, t, equations::TrafficFlowLWREquations1D)\n\nA smooth initial condition used for convergence tests.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_density_wave-Tuple{Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_density_wave","text":"initial_condition_density_wave(x, t, equations::CompressibleEulerEquations1D)\n\nA sine wave in the density with constant velocity and pressure; reduces the compressible Euler equations to the linear advection equations. This setup is the test case for stability of EC fluxes from paper\n\nGregor J. Gassner, Magnus Svärd, Florian J. Hindenlang (2020) Stability issues of entropy-stable and/or split-form high-order schemes arXiv: 2007.09026\n\nwith the following parameters\n\ndomain [-1, 1]\nmesh = 4x4\npolydeg = 5\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_density_wave-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_density_wave","text":"initial_condition_density_wave(x, t, equations::CompressibleEulerEquations2D)\n\nA sine wave in the density with constant velocity and pressure; reduces the compressible Euler equations to the linear advection equations. This setup is the test case for stability of EC fluxes from paper\n\nGregor J. Gassner, Magnus Svärd, Florian J. Hindenlang (2020) Stability issues of entropy-stable and/or split-form high-order schemes arXiv: 2007.09026\n\nwith the following parameters\n\ndomain [-1, 1]\nmesh = 4x4\npolydeg = 5\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_eoc_test_coupled_euler_gravity-Tuple{Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_eoc_test_coupled_euler_gravity","text":"initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::CompressibleEulerEquations1D)\n\nOne dimensional variant of the setup used for convergence tests of the Euler equations with self-gravity from\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nnote: Note\nThere is no additional source term necessary for the manufactured solution in one spatial dimension. Thus, source_terms_eoc_test_coupled_euler_gravity is not present there.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_eoc_test_coupled_euler_gravity-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_eoc_test_coupled_euler_gravity","text":"initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::CompressibleEulerEquations2D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with source_terms_eoc_test_coupled_euler_gravity or source_terms_eoc_test_euler.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_eoc_test_coupled_euler_gravity-Tuple{Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_eoc_test_coupled_euler_gravity","text":"initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::CompressibleEulerEquations3D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with source_terms_eoc_test_coupled_euler_gravity or source_terms_eoc_test_euler.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_eoc_test_coupled_euler_gravity-Tuple{Any, Any, HyperbolicDiffusionEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_eoc_test_coupled_euler_gravity","text":"initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::HyperbolicDiffusionEquations1D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with source_terms_harmonic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_eoc_test_coupled_euler_gravity-Tuple{Any, Any, HyperbolicDiffusionEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_eoc_test_coupled_euler_gravity","text":"initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::HyperbolicDiffusionEquations2D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with source_terms_harmonic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_eoc_test_coupled_euler_gravity-Tuple{Any, Any, HyperbolicDiffusionEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_eoc_test_coupled_euler_gravity","text":"initial_condition_eoc_test_coupled_euler_gravity(x, t, equations::HyperbolicDiffusionEquations3D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with source_terms_harmonic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_gauss-Tuple{Any, Any, AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_gauss","text":"initial_condition_gauss(x, t, equations::AcousticPerturbationEquations2D)\n\nA Gaussian pulse in a constant mean flow. Uses the global mean values from equations.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_gauss-Tuple{Any, Any, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_gauss","text":"initial_condition_gauss(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA Gaussian pulse used together with BoundaryConditionDirichlet(initial_condition_gauss).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_gauss-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_gauss","text":"initial_condition_gauss(x, t, equation::LinearScalarAdvectionEquation2D)\n\nA Gaussian pulse used together with BoundaryConditionDirichlet(initial_condition_gauss).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_gauss-Tuple{Any, Any, LinearScalarAdvectionEquation3D}","page":"Trixi.jl","title":"Trixi.initial_condition_gauss","text":"initial_condition_gauss(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA Gaussian pulse.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_linear_x-Tuple{Any, Any, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_linear_x","text":"initial_condition_linear_x(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA linear function of x[1] used together with boundary_condition_linear_x.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_linear_x-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_linear_x","text":"initial_condition_linear_x(x, t, equations::LinearScalarAdvectionEquation2D)\n\nA linear function of x[1] used together with boundary_condition_linear_x.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_linear_x_y-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_linear_x_y","text":"initial_condition_linear_x_y(x, t, equations::LinearScalarAdvectionEquation2D)\n\nA linear function of x[1] + x[2] used together with boundary_condition_linear_x_y.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_linear_y-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_linear_y","text":"initial_condition_linear_y(x, t, equations::LinearScalarAdvectionEquation2D)\n\nA linear function of x[1] used together with boundary_condition_linear_y.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_linear_z-Tuple{Any, Any, LinearScalarAdvectionEquation3D}","page":"Trixi.jl","title":"Trixi.initial_condition_linear_z","text":"initial_condition_linear_z(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA linear function of x[3] used together with boundary_condition_linear_z.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_poisson_nonperiodic-Tuple{Any, Any, HyperbolicDiffusionEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_poisson_nonperiodic","text":"initial_condition_poisson_nonperiodic(x, t, equations::HyperbolicDiffusionEquations1D)\n\nA non-priodic smooth initial condition. Can be used for convergence tests in combination with source_terms_poisson_nonperiodic and boundary_condition_poisson_nonperiodic.\n\nnote: Note\nThe solution is periodic but the initial guess is not.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_sin-Tuple{Any, Any, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.initial_condition_sin","text":"initial_condition_sin(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA sine wave in the conserved variable.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_sin-Tuple{Any, Any, LinearScalarAdvectionEquation3D}","page":"Trixi.jl","title":"Trixi.initial_condition_sin","text":"initial_condition_sin(x, t, equations::LinearScalarAdvectionEquation1D)\n\nA sine wave in the conserved variable.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_sin_sin-Tuple{Any, Any, LinearScalarAdvectionEquation2D}","page":"Trixi.jl","title":"Trixi.initial_condition_sin_sin","text":"initial_condition_sin_sin(x, t, equations::LinearScalarAdvectionEquation2D)\n\nA sine wave in the conserved variable.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations1D)\n\nA weak blast wave taken from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations2D)\n\nA weak blast wave taken from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations3D)\n\nA weak blast wave taken from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, CompressibleEulerMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerMulticomponentEquations1D)\n\nA for multicomponent adapted weak blast wave adapted to multicomponent and taken from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, CompressibleEulerMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerMulticomponentEquations2D)\n\nA for multicomponent adapted weak blast wave taken from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdEquations1D)\n\nA weak blast wave adapted from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdEquations2D)\n\nA weak blast wave adapted from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdEquations3D)\n\nA weak blast wave adapted from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, IdealGlmMhdMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdMulticomponentEquations1D)\n\nA weak blast wave adapted from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, IdealGlmMhdMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::IdealGlmMhdMulticomponentEquations2D)\n\nA weak blast wave adapted from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, PolytropicEulerEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::PolytropicEulerEquations2D)\n\nA weak blast wave adapted from\n\nSebastian Hennemann, Gregor J. Gassner (2020) A provably entropy stable subcell shock capturing approach for high order split form DG arXiv: 2008.12044\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::ShallowWaterEquations1D)\n\nA weak blast wave discontinuity useful for testing, e.g., total energy conservation. Note for the shallow water equations to the total energy acts as a mathematical entropy function.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.initial_condition_weak_blast_wave-Tuple{Any, Any, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.initial_condition_weak_blast_wave","text":"initial_condition_weak_blast_wave(x, t, equations::ShallowWaterEquations2D)\n\nA weak blast wave discontinuity useful for testing, e.g., total energy conservation. Note for the shallow water equations to the total energy acts as a mathematical entropy function.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.integrate_via_indices-Union{Tuple{Func}, Tuple{Func, Any, Trixi.AbstractSemidiscretization, Vararg{Any}}} where Func","page":"Trixi.jl","title":"Trixi.integrate_via_indices","text":"integrate_via_indices(func, u_ode, semi::AbstractSemidiscretization, args...; normalize=true)\n\nCall func(u, i..., element, equations, solver, args...) for all nodal indices i..., element and integrate the result using a quadrature associated with the semidiscretization semi.\n\nIf normalize is true, the result is divided by the total volume of the computational domain.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.inv_ln_mean-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.inv_ln_mean","text":"inv_ln_mean(x, y)\n\nCompute the inverse 1 / ln_mean(x, y) of the logarithmic mean ln_mean.\n\nThis function may be used to increase performance where the inverse of the logarithmic mean is needed, by replacing a (slow) division by a (fast) multiplication.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.jacobian_ad_forward-Tuple{Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"Trixi.jacobian_ad_forward","text":"jacobian_ad_forward(semi::AbstractSemidiscretization;\n t0=zero(real(semi)),\n u0_ode=compute_coefficients(t0, semi))\n\nUses the right-hand side operator of the semidiscretization semi and forward mode automatic differentiation to compute the Jacobian J of the semidiscretization semi at state u0_ode.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.jacobian_fd-Tuple{Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"Trixi.jacobian_fd","text":"jacobian_fd(semi::AbstractSemidiscretization;\n t0=zero(real(semi)),\n u0_ode=compute_coefficients(t0, semi))\n\nUses the right-hand side operator of the semidiscretization semi and simple second order finite difference to compute the Jacobian J of the semidiscretization semi at state u0_ode.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.lagrange_interpolating_polynomials-Tuple{Any, Any, Any}","page":"Trixi.jl","title":"Trixi.lagrange_interpolating_polynomials","text":"lagrange_interpolating_polynomials(x, nodes, wbary)\n\nCalculate Lagrange polynomials for a given node distribution with associated barycentric weights wbary at a given point x on the reference interval -1 1.\n\nThis returns all l_j(x), i.e., the Lagrange polynomials for each node x_j. Thus, to obtain the interpolating polynomial p(x) at x, one has to multiply the Lagrange polynomials with the nodal values u_j and sum them up: p(x) = sum_j=1^n u_j l_j(x).\n\nFor details, see e.g. Section 2 of \n\nJean-Paul Berrut and Lloyd N. Trefethen (2004). Barycentric Lagrange Interpolation. DOI:10.1137/S0036144502417715\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.legendre_polynomial_and_derivative-Tuple{Int64, Real}","page":"Trixi.jl","title":"Trixi.legendre_polynomial_and_derivative","text":"legendre_polynomial_and_derivative(N::Int, x::Real)\n\nComputes the Legendre polynomial of degree N and its derivative at x. This implements algorithm 22 \"LegendrePolynomialAndDerivative\" from the book\n\nDavid A. Kopriva, (2009). Implementing spectral methods for partial differential equations: Algorithms for scientists and engineers. DOI:10.1007/978-90-481-2261-5\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.linear_structure-Tuple{Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"Trixi.linear_structure","text":"linear_structure(semi::AbstractSemidiscretization;\n t0=zero(real(semi)))\n\nWraps the right-hand side operator of the semidiscretization semi at time t0 as an affine-linear operator given by a linear operator A and a vector b.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ln_mean-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.ln_mean","text":"ln_mean(x, y)\n\nCompute the logarithmic mean\n\nln_mean(x, y) = (y - x) / (log(y) - log(x)) = (y - x) / log(y / x)\n\nProblem: The formula above has a removable singularity at x == y. Thus, some care must be taken to implement it correctly without problems or loss of accuracy when x ≈ y. Here, we use the approach proposed by Ismail and Roe (2009). Set ξ = y / x. Then, we have\n\n(y - x) / log(y / x) = (x + y) / log(ξ) * (ξ - 1) / (ξ + 1)\n\nSet f = (ξ - 1) / (ξ + 1) = (y - x) / (x + y). Then, we use the expansion\n\nlog(ξ) = 2 * f * (1 + f^2 / 3 + f^4 / 5 + f^6 / 7) + O(ξ^9)\n\nInserting the first few terms of this expansion yields\n\n(y - x) / log(ξ) ≈ (x + y) * f / (2 * f * (1 + f^2 / 3 + f^4 / 5 + f^6 / 7))\n = (x + y) / (2 + 2/3 * f^2 + 2/5 * f^4 + 2/7 * f^6)\n\nSince divisions are usually more expensive on modern hardware than multiplications (Agner Fog), we try to avoid computing two divisions. Thus, we use\n\nf^2 = (y - x)^2 / (x + y)^2\n = (x * (x - 2 * y) + y * y) / (x * (x + 2 * y) + y * y)\n\nGiven ε = 1.0e-4, we use the following algorithm.\n\nif f^2 < ε\n # use the expansion above\nelse\n # use the direct formula (y - x) / log(y / x)\nend\n\nReferences\n\nIsmail, Roe (2009). Affordable, entropy-consistent Euler flux functions II: Entropy production at shocks. DOI: 10.1016/j.jcp.2009.04.021\nAgner Fog. Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD, and VIA CPUs. https://www.agner.org/optimize/instruction_tables.pdf\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.load_adaptive_time_integrator!-Tuple{Any, AbstractString}","page":"Trixi.jl","title":"Trixi.load_adaptive_time_integrator!","text":"load_adaptive_time_integrator!(integrator, restart_file::AbstractString)\n\nLoad the context information for time integrators with error-based step size control saved in a restart_file.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.load_dt-Tuple{AbstractString}","page":"Trixi.jl","title":"Trixi.load_dt","text":"load_dt(restart_file::AbstractString)\n\nLoad the time step size (dt in OrdinaryDiffEq.jl) saved in a restart_file.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.load_mesh-Tuple{AbstractString}","page":"Trixi.jl","title":"Trixi.load_mesh","text":"load_mesh(restart_file::AbstractString; n_cells_max)\n\nLoad the mesh from the restart_file.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.load_time-Tuple{AbstractString}","page":"Trixi.jl","title":"Trixi.load_time","text":"load_time(restart_file::AbstractString)\n\nLoad the time saved in a restart_file.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.load_timestep!-Tuple{Any, AbstractString}","page":"Trixi.jl","title":"Trixi.load_timestep!","text":"load_timestep!(integrator, restart_file::AbstractString)\n\nLoad the time step number saved in a restart_file and assign it to both the time step number and and the number of accepted steps (iter and stats.naccept in OrdinaryDiffEq.jl, respectively) in integrator.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.load_timestep-Tuple{AbstractString}","page":"Trixi.jl","title":"Trixi.load_timestep","text":"load_timestep(restart_file::AbstractString)\n\nLoad the time step number (iter in OrdinaryDiffEq.jl) saved in a restart_file.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.max-Tuple","page":"Trixi.jl","title":"Trixi.max","text":"max(x, y, ...)\n\nReturn the maximum of the arguments. See also the maximum function to take the maximum element from a collection.\n\nThis version in Trixi.jl is semantically equivalent to Base.max but may be implemented differently. In particular, it may avoid potentially expensive checks necessary in the presence of NaNs (or signed zeros).\n\nExamples\n\njulia> max(2, 5, 1)\n5\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.max_abs_speed_naive","page":"Trixi.jl","title":"Trixi.max_abs_speed_naive","text":"max_abs_speed_naive(u_ll, u_rr, orientation::Integer, equations)\nmax_abs_speed_naive(u_ll, u_rr, normal_direction::AbstractVector, equations)\n\nSimple and fast estimate of the maximal wave speed of the Riemann problem with left and right states u_ll, u_rr, based only on the local wave speeds associated to u_ll and u_rr.\n\nFor non-integer arguments normal_direction in one dimension, max_abs_speed_naive returns abs(normal_direction[1]) * max_abs_speed_naive(u_ll, u_rr, 1, equations).\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.min-Tuple","page":"Trixi.jl","title":"Trixi.min","text":"min(x, y, ...)\n\nReturn the minimum of the arguments. See also the minimum function to take the minimum element from a collection.\n\nThis version in Trixi.jl is semantically equivalent to Base.min but may be implemented differently. In particular, it may avoid potentially expensive checks necessary in the presence of NaNs (or signed zeros).\n\nExamples\n\njulia> min(2, 5, 1)\n1\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_davis","page":"Trixi.jl","title":"Trixi.min_max_speed_davis","text":"min_max_speed_davis(u_ll, u_rr, orientation::Integer, equations)\nmin_max_speed_davis(u_ll, u_rr, normal_direction::AbstractVector, equations)\n\nSimple and fast estimates of the minimal and maximal wave speed of the Riemann problem with left and right states u_ll, u_rr, usually based only on the local wave speeds associated to u_ll and u_rr.\n\nS.F. Davis (1988) Simplified Second-Order Godunov-Type Methods DOI: 10.1137/0909030\n\nSee eq. (10.38) from\n\nEleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction DOI: 10.1007/b79761\n\nSee also FluxHLL, min_max_speed_naive, min_max_speed_einfeldt.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation::Integer, equations)\nmin_max_speed_einfeldt(u_ll, u_rr, normal_direction::AbstractVector, equations)\n\nMore advanced mininmal and maximal wave speed computation based on\n\nBernd Einfeldt (1988) On Godunov-type methods for gas dynamics. DOI: 10.1137/0725021\nBernd Einfeldt, Claus-Dieter Munz, Philip L. Roe and Björn Sjögreen (1991) On Godunov-type methods near low densities. DOI: 10.1016/0021-9991(91)90211-3\n\noriginally developed for the compressible Euler equations. A compact representation can be found in this lecture notes, eq. (9.28).\n\nSee also FluxHLL, min_max_speed_naive, min_max_speed_davis.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, AbstractVector, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, normal_direction, equations::CompressibleEulerEquations2D)\n\nComputes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.\n\nBernd Einfeldt (1988) On Godunov-type methods for gas dynamics. DOI: 10.1137/0725021\nBernd Einfeldt, Claus-Dieter Munz, Philip L. Roe and Björn Sjögreen (1991) On Godunov-type methods near low densities. DOI: 10.1016/0021-9991(91)90211-3\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, AbstractVector, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, normal_direction, equations::CompressibleEulerEquations3D)\n\nComputes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.\n\nBernd Einfeldt (1988) On Godunov-type methods for gas dynamics. DOI: 10.1137/0725021\nBernd Einfeldt, Claus-Dieter Munz, Philip L. Roe and Björn Sjögreen (1991) On Godunov-type methods near low densities. DOI: 10.1016/0021-9991(91)90211-3\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation, equations::CompressibleEulerEquations1D)\n\nComputes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.\n\nOriginal publication:\n\nBernd Einfeldt (1988) On Godunov-type methods for gas dynamics. DOI: 10.1137/0725021\n\nCompactly summarized:\n\nSiddhartha Mishra, Ulrik Skre Fjordholm and Rémi Abgrall Numerical methods for conservation laws and related equations. Link\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation, equations::CompressibleEulerEquations2D)\n\nComputes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.\n\nBernd Einfeldt (1988) On Godunov-type methods for gas dynamics. DOI: 10.1137/0725021\nBernd Einfeldt, Claus-Dieter Munz, Philip L. Roe and Björn Sjögreen (1991) On Godunov-type methods near low densities. DOI: 10.1016/0021-9991(91)90211-3\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation, equations::CompressibleEulerEquations3D)\n\nComputes the HLLE (Harten-Lax-van Leer-Einfeldt) flux for the compressible Euler equations. Special estimates of the signal velocites and linearization of the Riemann problem developed by Einfeldt to ensure that the internal energy and density remain positive during the computation of the numerical flux.\n\nBernd Einfeldt (1988) On Godunov-type methods for gas dynamics. DOI: 10.1137/0725021\nBernd Einfeldt, Claus-Dieter Munz, Philip L. Roe and Björn Sjögreen (1991) On Godunov-type methods near low densities. DOI: 10.1016/0021-9991(91)90211-3\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, Integer, IdealGlmMhdEquations1D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation::Integer, equations::IdealGlmMhdEquations1D)\n\nCalculate minimum and maximum wave speeds for HLL-type fluxes as in\n\nLi (2005) An HLLC Riemann solver for magneto-hydrodynamics DOI: 10.1016/j.jcp.2004.08.020.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, Integer, IdealGlmMhdEquations2D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation::Integer, equations::IdealGlmMhdEquations2D)\n\nCalculate minimum and maximum wave speeds for HLL-type fluxes as in\n\nLi (2005) An HLLC Riemann solver for magneto-hydrodynamics DOI: 10.1016/j.jcp.2004.08.020.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_einfeldt-Tuple{Any, Any, Integer, IdealGlmMhdEquations3D}","page":"Trixi.jl","title":"Trixi.min_max_speed_einfeldt","text":"min_max_speed_einfeldt(u_ll, u_rr, orientation_or_normal_direction, equations::IdealGlmMhdEquations3D)\n\nCalculate minimum and maximum wave speeds for HLL-type fluxes as in\n\nLi (2005) An HLLC Riemann solver for magneto-hydrodynamics DOI: 10.1016/j.jcp.2004.08.020\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.min_max_speed_naive","page":"Trixi.jl","title":"Trixi.min_max_speed_naive","text":"min_max_speed_naive(u_ll, u_rr, orientation::Integer, equations)\nmin_max_speed_naive(u_ll, u_rr, normal_direction::AbstractVector, equations)\n\nSimple and fast estimate(!) of the minimal and maximal wave speed of the Riemann problem with left and right states u_ll, u_rr, usually based only on the local wave speeds associated to u_ll and u_rr. Slightly more diffusive than min_max_speed_davis.\n\nAmiram Harten, Peter D. Lax, Bram van Leer (1983) On Upstream Differencing and Godunov-Type Schemes for Hyperbolic Conservation Laws DOI: 10.1137/1025002\n\nSee eq. (10.37) from\n\nEleuterio F. Toro (2009) Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction DOI: 10.1007/b79761\n\nSee also FluxHLL, min_max_speed_davis, min_max_speed_einfeldt.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.modify_dt_for_tstops!-Tuple{Trixi.PairedExplicitRK}","page":"Trixi.jl","title":"Trixi.modify_dt_for_tstops!","text":"modify_dt_for_tstops!(integrator::PairedExplicitRK)\n\nModify the time-step size to match the time stops specified in integrator.opts.tstops. To avoid adding OrdinaryDiffEq to Trixi's dependencies, this routine is a copy of https://github.com/SciML/OrdinaryDiffEq.jl/blob/d76335281c540ee5a6d1bd8bb634713e004f62ee/src/integrators/integrator_utils.jl#L38-L54\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.modify_dt_for_tstops!-Tuple{Trixi.SimpleIntegratorSSP}","page":"Trixi.jl","title":"Trixi.modify_dt_for_tstops!","text":"modify_dt_for_tstops!(integrator::SimpleIntegratorSSP)\n\nModify the time-step size to match the time stops specified in integrator.opts.tstops. To avoid adding OrdinaryDiffEq to Trixi's dependencies, this routine is a copy of https://github.com/SciML/OrdinaryDiffEq.jl/blob/d76335281c540ee5a6d1bd8bb634713e004f62ee/src/integrators/integrator_utils.jl#L38-L54\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.multiply_dimensionwise-Tuple{AbstractMatrix, AbstractMatrix}","page":"Trixi.jl","title":"Trixi.multiply_dimensionwise","text":"multiply_dimensionwise(matrix::AbstractMatrix, data_in::AbstractArray{<:Any, NDIMS+1})\n\nMultiply the array data_in by matrix in each coordinate direction, where data_in is assumed to have the first coordinate for the number of variables and the remaining coordinates are multiplied by matrix.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.n_nonconservative_terms","page":"Trixi.jl","title":"Trixi.n_nonconservative_terms","text":"n_nonconservative_terms(equations)\n\nNumber of nonconservative terms in the form local * symmetric for a particular equation. This function needs to be specialized only if equations with nonconservative terms are combined with certain solvers (e.g., subcell limiting).\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.ndofs-Tuple{Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"Trixi.ndofs","text":"ndofs(semi::AbstractSemidiscretization)\n\nReturn the number of degrees of freedom associated with each scalar variable.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ndofsglobal-Tuple{SemidiscretizationCoupled}","page":"Trixi.jl","title":"Trixi.ndofsglobal","text":"ndofsglobal(semi::SemidiscretizationCoupled)\n\nReturn the global number of degrees of freedom associated with each scalar variable across all MPI ranks, and summed up over all coupled systems. This is the same as ndofs for simulations running in serial or parallelized via threads. It will in general be different for simulations running in parallel with MPI.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ndofsglobal-Tuple{Trixi.AbstractSemidiscretization}","page":"Trixi.jl","title":"Trixi.ndofsglobal","text":"ndofsglobal(semi::AbstractSemidiscretization)\n\nReturn the global number of degrees of freedom associated with each scalar variable across all MPI ranks. This is the same as ndofs for simulations running in serial or parallelized via threads. It will in general be different for simulations running in parallel with MPI.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.negative_part-Tuple{Any}","page":"Trixi.jl","title":"Trixi.negative_part","text":"negative_part(x)\n\nReturn x if x is negative, else zero. In other words, return (x - abs(x)) / 2 for real numbers x.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ode_default_options-Tuple{}","page":"Trixi.jl","title":"Trixi.ode_default_options","text":"ode_default_options()\n\nReturn the default options for OrdinaryDiffEq's solve. Pass ode_default_options()... to solve to only return the solution at the final time and enable MPI aware error-based step size control, whenever MPI is used. For example, use solve(ode, alg; ode_default_options()...).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ode_norm-Tuple{Number, Any}","page":"Trixi.jl","title":"Trixi.ode_norm","text":"ode_norm(u, t)\n\nImplementation of the weighted L2 norm of Hairer and Wanner used for error-based step size control in OrdinaryDiffEq.jl. This function is aware of MPI and uses global MPI communication when running in parallel.\n\nYou must pass this function as a keyword argument internalnorm=ode_norm to OrdinaryDiffEq.jl's solve when using error-based step size control with MPI parallel execution of Trixi.jl.\n\nSee the \"Advanced Adaptive Stepsize Control\" section of the documentation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.ode_unstable_check-NTuple{4, Any}","page":"Trixi.jl","title":"Trixi.ode_unstable_check","text":"ode_unstable_check(dt, u, semi, t)\n\nImplementation of the basic check for instability used in OrdinaryDiffEq.jl. Instead of checking something like any(isnan, u), this function just checks isnan(dt). This helps when using MPI parallelization, since no additional global communication is required and all ranks will return the same result.\n\nYou should pass this function as a keyword argument unstable_check=ode_unstable_check to OrdinaryDiffEq.jl's solve when using error-based step size control with MPI parallel execution of Trixi.jl.\n\nSee the \"Miscellaneous\" section of the documentation.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.partition!-Tuple{T8codeMesh}","page":"Trixi.jl","title":"Trixi.partition!","text":"Trixi.partition!(mesh::T8codeMesh)\n\nPartition a T8codeMesh in order to redistribute elements evenly among MPI ranks.\n\nArguments\n\nmesh::T8codeMesh: Initialized mesh object.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.partition!-Tuple{TreeMesh{NDIMS, <:Trixi.ParallelTree{NDIMS}} where NDIMS}","page":"Trixi.jl","title":"Trixi.partition!","text":"partition!(mesh::ParallelTreeMesh, allow_coarsening=true)\n\nPartition mesh using a static domain decomposition algorithm based on leaf cell count and tree structure. If allow_coarsening is true, the algorithm will keep leaf cells together on one rank when needed for local coarsening (i.e. when all children of a cell are leaves).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.positive_part-Tuple{Any}","page":"Trixi.jl","title":"Trixi.positive_part","text":"positive_part(x)\n\nReturn x if x is positive, else zero. In other words, return (x + abs(x)) / 2 for real numbers x.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.pressure-Tuple{Real, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.pressure","text":"pressure(rho::Real, equations::LatticeBoltzmannEquations2D)\npressure(u, equations::LatticeBoltzmannEquations2D)\n\nCalculate the macroscopic pressure from the density rho or the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.pressure-Tuple{Real, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.pressure","text":"pressure(rho::Real, equations::LatticeBoltzmannEquations3D)\npressure(u, equations::LatticeBoltzmannEquations3D)\n\nCalculate the macroscopic pressure from the density rho or the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.prim2cons","page":"Trixi.jl","title":"Trixi.prim2cons","text":"prim2cons(u, equations)\n\nConvert the primitive variables u to the conserved variables for a given set of equations. u is a vector type of the correct length nvariables(equations). Notice the function doesn't include any error checks for the purpose of efficiency, so please make sure your input is correct. The inverse conversion is performed by cons2prim.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.residual_steady_state-Tuple{Any, HyperbolicDiffusionEquations3D}","page":"Trixi.jl","title":"Trixi.residual_steady_state","text":"residual_steady_state(du, ::AbstractHyperbolicDiffusionEquations)\n\nUsed to determine the termination criterion of a SteadyStateCallback. For hyperbolic diffusion, this checks convergence of the potential phi.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.rotate_from_x","page":"Trixi.jl","title":"Trixi.rotate_from_x","text":"rotate_from_x(u, normal, equations)\n\nApply the rotation that maps the x-axis onto normal to the convservative variables u. This is used by FluxRotated to calculate the numerical flux of rotationally invariant equations in arbitrary normal directions.\n\nSee also: rotate_to_x\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.rotate_to_x","page":"Trixi.jl","title":"Trixi.rotate_to_x","text":"rotate_to_x(u, normal, equations)\n\nApply the rotation that maps normal onto the x-axis to the convservative variables u. This is used by FluxRotated to calculate the numerical flux of rotationally invariant equations in arbitrary normal directions.\n\nSee also: rotate_from_x\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.save_plot-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.save_plot","text":"save_plot(plot_data, variable_names;\n show_mesh=true, plot_arguments=Dict{Symbol,Any}(),\n time=nothing, timestep=nothing)\n\nVisualize the plot data object provided in plot_data and save result as a PNG file in the out directory, plotting only the variables in variable_names and, optionally, the mesh (if show_mesh is true). Additionally, plot_arguments will be unpacked and passed as keyword arguments to the Plots.plot command.\n\nThe timestep is used in the filename. time is currently unused by this function.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\nSee also: VisualizationCallback, show_plot\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.set_log_type!-Tuple{Any}","page":"Trixi.jl","title":"Trixi.set_log_type!","text":"Trixi.set_log_type!(type; force = true)\n\nSet the type of the (natural) log function to be used in Trixi.jl. The default is \"sqrt_Trixi_NaN\" which returns NaN for negative arguments instead of throwing an error. Alternatively, you can set type to \"sqrt_Base\" to use the Julia built-in sqrt function which provides a stack-trace of the error which might come in handy when debugging code.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.set_polyester!-Tuple{Bool}","page":"Trixi.jl","title":"Trixi.set_polyester!","text":"Trixi.set_polyester!(toggle::Bool; force = true)\n\nToggle the usage of Polyester.jl for multithreading. By default, Polyester.jl is enabled, but it can be useful for performance comparisons to switch to the Julia core backend.\n\nThis does not fully disable Polyester.jl, buy only its use as part of Trixi.jl's @threaded macro.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.set_sqrt_type!-Tuple{Any}","page":"Trixi.jl","title":"Trixi.set_sqrt_type!","text":"Trixi.set_sqrt_type!(type; force = true)\n\nSet the type of the square root function to be used in Trixi.jl. The default is \"sqrt_Trixi_NaN\" which returns NaN for negative arguments instead of throwing an error. Alternatively, you can set type to \"sqrt_Base\" to use the Julia built-in sqrt function which provides a stack-trace of the error which might come in handy when debugging code.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.show_plot-Tuple{Any, Any}","page":"Trixi.jl","title":"Trixi.show_plot","text":"show_plot(plot_data, variable_names;\n show_mesh=true, plot_arguments=Dict{Symbol,Any}(),\n time=nothing, timestep=nothing)\n\nVisualize the plot data object provided in plot_data and display result, plotting only the variables in variable_names and, optionally, the mesh (if show_mesh is true). Additionally, plot_arguments will be unpacked and passed as keyword arguments to the Plots.plot command.\n\nThis function is the default plot_creator argument for the VisualizationCallback. time and timestep are currently unused by this function.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\nSee also: VisualizationCallback, save_plot\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.solve","page":"Trixi.jl","title":"Trixi.solve","text":"solve(ode, alg; dt, callbacks, kwargs...)\n\nThe following structures and methods provide the infrastructure for SSP Runge-Kutta methods of type SimpleAlgorithmSSP.\n\nwarning: Experimental implementation\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, AcousticPerturbationEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::AcousticPerturbationEquations2D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::CompressibleEulerEquations1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::CompressibleEulerEquations2D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::CompressibleEulerEquations3D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, CompressibleEulerEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::CompressibleEulerEquationsQuasi1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\nThis manufactured solution source term is specifically designed for the mozzle width 'a(x) = 1.5 - 0.5 * cos(x[1] * pi)' as defined in initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, CompressibleEulerMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::CompressibleEulerMulticomponentEquations1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, CompressibleEulerMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::CompressibleEulerMulticomponentEquations2D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, InviscidBurgersEquation1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::InviscidBurgersEquation1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, PolytropicEulerEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::PolytropicEulerEquations2D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, ShallowWaterEquations1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::ShallowWaterEquations1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\nThis manufactured solution source term is specifically designed for the bottom topography function b(x) = 2.0 + 0.5 * sinpi(sqrt(2.0) * x[1]) as defined in initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, ShallowWaterEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::ShallowWaterEquations2D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\nThis manufactured solution source term is specifically designed for the bottom topography function b(x,y) = 2 + 0.5 * sinpi(sqrt(2) * x) + 0.5 * sinpi(sqrt(2) * y) as defined in initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, ShallowWaterEquationsQuasi1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::ShallowWaterEquationsQuasi1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test (and BoundaryConditionDirichlet(initial_condition_convergence_test) in non-periodic domains).\n\nThis manufactured solution source term is specifically designed for the bottom topography function b(x) = 0.2 - 0.05 * sinpi(sqrt(2) * x[1]) and channel width 'a(x)= 1 + 0.1 * cospi(sqrt(2) * x[1])' as defined in initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_convergence_test-Tuple{Any, Any, Any, TrafficFlowLWREquations1D}","page":"Trixi.jl","title":"Trixi.source_terms_convergence_test","text":"source_terms_convergence_test(u, x, t, equations::TrafficFlowLWREquations1D)\n\nSource terms used for convergence tests in combination with initial_condition_convergence_test.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_eoc_test_coupled_euler_gravity-Tuple{Any, Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_eoc_test_coupled_euler_gravity","text":"source_terms_eoc_test_coupled_euler_gravity(u, x, t, equations::CompressibleEulerEquations2D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with initial_condition_eoc_test_coupled_euler_gravity.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_eoc_test_coupled_euler_gravity-Tuple{Any, Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.source_terms_eoc_test_coupled_euler_gravity","text":"source_terms_eoc_test_coupled_euler_gravity(u, x, t, equations::CompressibleEulerEquations3D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with initial_condition_eoc_test_coupled_euler_gravity.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_eoc_test_euler-Tuple{Any, Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_eoc_test_euler","text":"source_terms_eoc_test_euler(u, x, t, equations::CompressibleEulerEquations2D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with initial_condition_eoc_test_coupled_euler_gravity.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_eoc_test_euler-Tuple{Any, Any, Any, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.source_terms_eoc_test_euler","text":"source_terms_eoc_test_euler(u, x, t, equations::CompressibleEulerEquations3D)\n\nSetup used for convergence tests of the Euler equations with self-gravity used in\n\nMichael Schlottke-Lakemper, Andrew R. Winters, Hendrik Ranocha, Gregor J. Gassner (2020) A purely hyperbolic discontinuous Galerkin approach for self-gravitating gas dynamics arXiv: 2008.10593\n\nin combination with initial_condition_eoc_test_coupled_euler_gravity.\n\nnote: Note\nThis method is to be used for testing pure Euler simulations with analytic self-gravity. If you intend to do coupled Euler-gravity simulations, you need to use source_terms_eoc_test_coupled_euler_gravity instead.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_harmonic-Tuple{Any, Any, Any, HyperbolicDiffusionEquations1D}","page":"Trixi.jl","title":"Trixi.source_terms_harmonic","text":"source_terms_harmonic(u, x, t, equations::HyperbolicDiffusionEquations1D)\n\nSource term that only includes the forcing from the hyperbolic diffusion system.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_harmonic-Tuple{Any, Any, Any, HyperbolicDiffusionEquations2D}","page":"Trixi.jl","title":"Trixi.source_terms_harmonic","text":"source_terms_harmonic(u, x, t, equations::HyperbolicDiffusionEquations2D)\n\nSource term that only includes the forcing from the hyperbolic diffusion system.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_harmonic-Tuple{Any, Any, Any, HyperbolicDiffusionEquations3D}","page":"Trixi.jl","title":"Trixi.source_terms_harmonic","text":"source_terms_harmonic(u, x, t, equations::HyperbolicDiffusionEquations3D)\n\nSource term that only includes the forcing from the hyperbolic diffusion system.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.source_terms_poisson_nonperiodic-Tuple{Any, Any, Any, HyperbolicDiffusionEquations1D}","page":"Trixi.jl","title":"Trixi.source_terms_poisson_nonperiodic","text":"source_terms_poisson_nonperiodic(u, x, t,\n equations::HyperbolicDiffusionEquations1D)\n\nSource terms that include the forcing function f(x) and right hand side for the hyperbolic diffusion system that is used with initial_condition_poisson_nonperiodic and boundary_condition_poisson_nonperiodic.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_coirier_vanleer-Tuple{Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.splitting_coirier_vanleer","text":"splitting_coirier_vanleer(u, orientation::Integer,\n equations::CompressibleEulerEquations1D)\nsplitting_coirier_vanleer(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::CompressibleEulerEquations1D)\n\nSplitting of the compressible Euler flux from Coirier and van Leer. The splitting has correction terms in the pressure splitting as well as the mass and energy flux components. The motivation for these corrections are to handle flows at the low Mach number limit.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nWilliam Coirier and Bram van Leer (1991) Numerical flux formulas for the Euler and Navier-Stokes equations. II - Progress in flux-vector splitting DOI: 10.2514/6.1991-1566\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_drikakis_tsangaris-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.splitting_drikakis_tsangaris","text":"splitting_drikakis_tsangaris(u, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\nsplitting_drikakis_tsangaris(u, which::Union{Val{:minus}, Val{:plus}}\n orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nImproved variant of the Steger-Warming flux vector splitting splitting_steger_warming for generalized coordinates. This splitting also reformulates the energy flux as in Hänel et al. to obtain conservation of the total temperature for inviscid flows.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nD. Drikakis and S. Tsangaris (1993) On the solution of the compressible Navier-Stokes equations using improved flux vector splitting methods DOI: 10.1016/0307-904X(93)90054-K\nD. Hänel, R. Schwane and G. Seider (1987) On the accuracy of upwind schemes for the solution of the Navier-Stokes equations DOI: 10.2514/6.1987-1105\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_lax_friedrichs-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.splitting_lax_friedrichs","text":"splitting_lax_friedrichs(u, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\nsplitting_lax_friedrichs(u, which::Union{Val{:minus}, Val{:plus}}\n orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nNaive local Lax-Friedrichs style flux splitting of the form f⁺ = 0.5 (f + λ u) and f⁻ = 0.5 (f - λ u) similar to a flux splitting one would apply, e.g., to Burgers' equation.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_lax_friedrichs-Tuple{Any, Integer, InviscidBurgersEquation1D}","page":"Trixi.jl","title":"Trixi.splitting_lax_friedrichs","text":"splitting_lax_friedrichs(u, orientation::Integer,\n equations::InviscidBurgersEquation1D)\nsplitting_lax_friedrichs(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::InviscidBurgersEquation1D)\n\nNaive local Lax-Friedrichs style flux splitting of the form f⁺ = 0.5 (f + λ u) and f⁻ = 0.5 (f - λ u) where λ = abs(u).\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_lax_friedrichs-Tuple{Any, Integer, LinearScalarAdvectionEquation1D}","page":"Trixi.jl","title":"Trixi.splitting_lax_friedrichs","text":"splitting_lax_friedrichs(u, orientation::Integer,\n equations::LinearScalarAdvectionEquation1D)\nsplitting_lax_friedrichs(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::LinearScalarAdvectionEquation1D)\n\nNaive local Lax-Friedrichs style flux splitting of the form f⁺ = 0.5 (f + λ u) and f⁻ = 0.5 (f - λ u) where λ is the absolute value of the advection velocity.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_steger_warming-Tuple{Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.splitting_steger_warming","text":"splitting_steger_warming(u, orientation::Integer,\n equations::CompressibleEulerEquations1D)\nsplitting_steger_warming(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::CompressibleEulerEquations1D)\n\nSplitting of the compressible Euler flux of Steger and Warming.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nJoseph L. Steger and R. F. Warming (1979) Flux Vector Splitting of the Inviscid Gasdynamic Equations With Application to Finite Difference Methods NASA Technical Memorandum\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_steger_warming-Tuple{Any, Integer, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.splitting_steger_warming","text":"splitting_steger_warming(u, orientation::Integer,\n equations::CompressibleEulerEquations2D)\nsplitting_steger_warming(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::CompressibleEulerEquations2D)\n\nSplitting of the compressible Euler flux of Steger and Warming. For curvilinear coordinates use the improved Steger-Warming-type splitting splitting_drikakis_tsangaris.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nJoseph L. Steger and R. F. Warming (1979) Flux Vector Splitting of the Inviscid Gasdynamic Equations With Application to Finite Difference Methods NASA Technical Memorandum\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_steger_warming-Tuple{Any, Integer, CompressibleEulerEquations3D}","page":"Trixi.jl","title":"Trixi.splitting_steger_warming","text":"splitting_steger_warming(u, orientation::Integer,\n equations::CompressibleEulerEquations3D)\nsplitting_steger_warming(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::CompressibleEulerEquations3D)\n\nSplitting of the compressible Euler flux of Steger and Warming.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nJoseph L. Steger and R. F. Warming (1979) Flux Vector Splitting of the Inviscid Gasdynamic Equations With Application to Finite Difference Methods NASA Technical Memorandum\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_vanleer_haenel-Tuple{Any, Any, CompressibleEulerEquations2D}","page":"Trixi.jl","title":"Trixi.splitting_vanleer_haenel","text":"splitting_vanleer_haenel(u, orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\nsplitting_vanleer_haenel(u, which::Union{Val{:minus}, Val{:plus}}\n orientation_or_normal_direction,\n equations::CompressibleEulerEquations2D)\n\nSplitting of the compressible Euler flux from van Leer. This splitting further contains a reformulation due to Hänel et al. where the energy flux uses the enthalpy. The pressure splitting is independent from the splitting of the convective terms. As such there are many pressure splittings suggested across the literature. We implement the 'p4' variant suggested by Liou and Steffen as it proved the most robust in practice. For details on the curvilinear variant of this flux vector splitting see Anderson et al.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nBram van Leer (1982) Flux-Vector Splitting for the Euler Equation DOI: 10.1007/978-3-642-60543-7_5\nD. Hänel, R. Schwane and G. Seider (1987) On the accuracy of upwind schemes for the solution of the Navier-Stokes equations DOI: 10.2514/6.1987-1105\nMeng-Sing Liou and Chris J. Steffen, Jr. (1991) High-Order Polynomial Expansions (HOPE) for Flux-Vector Splitting NASA Technical Memorandum\nW. Kyle Anderson, James L. Thomas, and Bram van Leer (1986) Comparison of Finite Volume Flux Vector Splittings for the Euler Equations DOI: 10.2514/3.9465\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.splitting_vanleer_haenel-Tuple{Any, Integer, CompressibleEulerEquations1D}","page":"Trixi.jl","title":"Trixi.splitting_vanleer_haenel","text":"splitting_vanleer_haenel(u, orientation::Integer,\n equations::CompressibleEulerEquations1D)\nsplitting_vanleer_haenel(u, which::Union{Val{:minus}, Val{:plus}}\n orientation::Integer,\n equations::CompressibleEulerEquations1D)\n\nSplitting of the compressible Euler flux from van Leer. This splitting further contains a reformulation due to Hänel et al. where the energy flux uses the enthalpy. The pressure splitting is independent from the splitting of the convective terms. As such there are many pressure splittings suggested across the literature. We implement the 'p4' variant suggested by Liou and Steffen as it proved the most robust in practice.\n\nReturns a tuple of the fluxes \"minus\" (associated with waves going into the negative axis direction) and \"plus\" (associated with waves going into the positive axis direction). If only one of the fluxes is required, use the function signature with argument which set to Val{:minus}() or Val{:plus}().\n\nwarning: Experimental implementation (upwind SBP)\nThis is an experimental feature and may change in future releases.\n\nReferences\n\nBram van Leer (1982) Flux-Vector Splitting for the Euler Equation DOI: 10.1007/978-3-642-60543-7_5\nD. Hänel, R. Schwane and G. Seider (1987) On the accuracy of upwind schemes for the solution of the Navier-Stokes equations DOI: 10.2514/6.1987-1105\nMeng-Sing Liou and Chris J. Steffen, Jr. (1991) High-Order Polynomial Expansions (HOPE) for Flux-Vector Splitting NASA Technical Memorandum\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.stolarsky_mean-Tuple{Any, Any, Any}","page":"Trixi.jl","title":"Trixi.stolarsky_mean","text":"stolarsky_mean(x, y, gamma)\n\nCompute an instance of a weighted Stolarsky mean of the form\n\nstolarsky_mean(x, y, gamma) = (gamma - 1)/gamma * (y^gamma - x^gamma) / (y^(gamma-1) - x^(gamma-1))\n\nwhere gamma > 1.\n\nProblem: The formula above has a removable singularity at x == y. Thus, some care must be taken to implement it correctly without problems or loss of accuracy when x ≈ y. Here, we use the approach proposed by Winters et al. (2020). Set f = (y - x) / (y + x) and g = gamma (for compact notation). Then, we use the expansions\n\n((1+f)^g - (1-f)^g) / g = 2*f + (g-1)(g-2)/3 * f^3 + (g-1)(g-2)(g-3)(g-4)/60 * f^5 + O(f^7)\n\nand\n\n((1+f)^(g-1) - (1-f)^(g-1)) / (g-1) = 2*f + (g-2)(g-3)/3 * f^3 + (g-2)(g-3)(g-4)(g-5)/60 * f^5 + O(f^7)\n\nInserting the first few terms of these expansions and performing polynomial long division we find that\n\nstolarsky_mean(x, y, gamma) ≈ (y + x) / 2 * (1 + (g-2)/3 * f^2 - (g+1)(g-2)(g-3)/45 * f^4 + (g+1)(g-2)(g-3)(2g(g-2)-9)/945 * f^6)\n\nSince divisions are usually more expensive on modern hardware than multiplications (Agner Fog), we try to avoid computing two divisions. Thus, we use\n\nf^2 = (y - x)^2 / (x + y)^2\n = (x * (x - 2 * y) + y * y) / (x * (x + 2 * y) + y * y)\n\nGiven ε = 1.0e-4, we use the following algorithm.\n\nif f^2 < ε\n # use the expansion above\nelse\n # use the direct formula (gamma - 1)/gamma * (y^gamma - x^gamma) / (y^(gamma-1) - x^(gamma-1))\nend\n\nReferences\n\nAndrew R. Winters, Christof Czernik, Moritz B. Schily & Gregor J. Gassner (2020) Entropy stable numerical approximations for the isothermal and polytropic Euler equations DOI: 10.1007/s10543-019-00789-w\nAgner Fog. Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD, and VIA CPUs. https://www.agner.org/optimize/instruction_tables.pdf\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.totalgamma-Tuple{Any, CompressibleEulerMulticomponentEquations1D}","page":"Trixi.jl","title":"Trixi.totalgamma","text":"totalgamma(u, equations::CompressibleEulerMulticomponentEquations1D)\n\nFunction that calculates the total gamma out of all partial gammas using the partial density fractions as well as the partial specific heats at constant volume.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.totalgamma-Tuple{Any, CompressibleEulerMulticomponentEquations2D}","page":"Trixi.jl","title":"Trixi.totalgamma","text":"totalgamma(u, equations::CompressibleEulerMulticomponentEquations2D)\n\nFunction that calculates the total gamma out of all partial gammas using the partial density fractions as well as the partial specific heats at constant volume.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.uses_amr-Tuple{Any}","page":"Trixi.jl","title":"Trixi.uses_amr","text":"uses_amr(callback)\n\nChecks whether the provided callback or CallbackSet is an AMRCallback or contains one.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.varnames","page":"Trixi.jl","title":"Trixi.varnames","text":"varnames(conversion_function, equations)\n\nReturn the list of variable names when applying conversion_function to the conserved variables associated to equations. This function is mainly used internally to determine output to screen and for IO, e.g., for the AnalysisCallback and the SaveSolutionCallback. Common choices of the conversion_function are cons2cons and cons2prim.\n\n\n\n\n\n","category":"function"},{"location":"reference-trixi/#Trixi.velocity-Tuple{Any, Integer, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.velocity","text":"velocity(u, orientation, equations::LatticeBoltzmannEquations2D)\n\nCalculate the macroscopic velocity for the given orientation (1 -> x, 2 -> y) from the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.velocity-Tuple{Any, Integer, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.velocity","text":"velocity(u, orientation, equations::LatticeBoltzmannEquations3D)\n\nCalculate the macroscopic velocity for the given orientation (1 -> x, 2 -> y, 3 -> z) from the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.velocity-Tuple{Any, LatticeBoltzmannEquations2D}","page":"Trixi.jl","title":"Trixi.velocity","text":"velocity(u, equations::LatticeBoltzmannEquations2D)\n\nCalculate the macroscopic velocity vector from the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.velocity-Tuple{Any, LatticeBoltzmannEquations3D}","page":"Trixi.jl","title":"Trixi.velocity","text":"velocity(u, equations::LatticeBoltzmannEquations3D)\n\nCalculate the macroscopic velocity vector from the particle distribution functions u.\n\n\n\n\n\n","category":"method"},{"location":"reference-trixi/#Trixi.@autoinfiltrate","page":"Trixi.jl","title":"Trixi.@autoinfiltrate","text":"@autoinfiltrate\n@autoinfiltrate condition::Bool\n\nInvoke the @infiltrate macro of the package Infiltrator.jl to create a breakpoint for ad-hoc interactive debugging in the REPL. If the optional argument condition is given, the breakpoint is only enabled if condition evaluates to true.\n\nAs opposed to using Infiltrator.@infiltrate directly, this macro does not require Infiltrator.jl to be added as a dependency to Trixi.jl. As a bonus, the macro will also attempt to load the Infiltrator module if it has not yet been loaded manually.\n\nNote: For this macro to work, the Infiltrator.jl package needs to be installed in your current Julia environment stack.\n\nSee also: Infiltrator.jl\n\nwarning: Internal use only\nPlease note that this macro is intended for internal use only. It is not part of the public API of Trixi.jl, and it thus can altered (or be removed) at any time without it being considered a breaking change.\n\n\n\n\n\n","category":"macro"},{"location":"reference-trixi/#Trixi.@threaded-Tuple{Any}","page":"Trixi.jl","title":"Trixi.@threaded","text":"@threaded for ... end\n\nSemantically the same as Threads.@threads when iterating over a AbstractUnitRange but without guarantee that the underlying implementation uses Threads.@threads or works for more general for loops. In particular, there may be an additional check whether only one thread is used to reduce the overhead of serial execution or the underlying threading capabilities might be provided by other packages such as Polyester.jl.\n\nwarn: Warn\nThis macro does not necessarily work for general for loops. For example, it does not necessarily support general iterables such as eachline(filename).\n\nSome discussion can be found at https://discourse.julialang.org/t/overhead-of-threads-threads/53964 and https://discourse.julialang.org/t/threads-threads-with-one-thread-how-to-remove-the-overhead/58435.\n\n\n\n\n\n","category":"macro"},{"location":"styleguide/#Style-guide","page":"Style guide","title":"Style guide","text":"","category":"section"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"Coding style is an inherently personal - and thus hotly contested - issue. Since code is usually \"written once, read often\", it helps regular developers, new users, and reviewers if code is formatted consistently. We therefore believe in the merit of using a common coding style throughout Trixi.jl, even at the expense that not everyone can be happy with every detailed style decision. If you came here because you are furious about our code formatting rules, here is a happy little whale for you to calm you down: 🐳","category":"page"},{"location":"styleguide/#Conventions","page":"Style guide","title":"Conventions","text":"","category":"section"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"The following lists a few coding conventions for Trixi.jl. Note that in addition to these conventions, we apply and enforce automated source code formatting (see below for more details):","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"Modules, types, structs with CamelCase.\nFunctions, variables with lowercase snake_case.\nIndentation with 4 spaces (never tabs!)\nMaximum line length (strictly): 92.\nFunctions that mutate their input are named with a trailing !.\nFunctions order their parameters similar to Julia Base.\nThe main modified argument comes first. For example, if the right-hand side du is modified, it should come first. If only the cache is modified, e.g., in prolong2interfaces! and its siblings, put the cache first.\nOtherwise, use the order mesh, equations, solver, cache.\nIf something needs to be specified in more detail for dispatch, put the additional argument before the general one that is specified in more detail. For example, we use have_nonconservative_terms(equations), equations and dg.mortar, dg.\nPrefer for i in ... to for i = ... for better semantic clarity and greater flexibility.\nExecutable code should only use ASCII characters.\nDocstrings and comments can and should use Unicode characters where it helps understanding.\nMultiline expressions should be explicitly grouped by parentheses and not rely on Julia's implicit line continuation syntax.\nWhen naming multiple functions of a single or similar category, prefer to put the general classification first and the specialization second. Example: Use flux_central instead of central_flux. This helps when searching for available functions on the REPL (e.g., when trying to find all flux functions).","category":"page"},{"location":"styleguide/#automated-source-code-formatting","page":"Style guide","title":"Automated source code formatting","text":"","category":"section"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"We use JuliaFormatter.jl to format the source code of Trixi.jl, which will also enforce some of the Conventions listed above (e.g., line length or indentation with 4 spaces are automatically handled, while capitalization of names is not). Our format is mostly based on the SciML-style formatting rules. For more details you can have a look at the current .JuliaFormatter.toml file that holds the configuration options we use for JuliaFormatter.jl.","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"Note that we expect all contributions to Trixi.jl to be formatted with JuliaFormatter.jl before being merged to the main branch. We ensure this by running a automated check on all PRs that verify that running JuliaFormatter.jl again will not change the source code.","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"To format your contributions before created a PR (or, at least, before requesting a review of your PR), you need to install JuliaFormatter.jl first by running","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"julia -e 'using Pkg; Pkg.add(PackageSpec(name = \"JuliaFormatter\", version=\"1.0.45\"))'","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"You can then recursively format the core Julia files in the Trixi.jl repo by executing","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"julia -e 'using JuliaFormatter; format([\"benchmark\", \"examples\", \"ext\", \"src\", \"test\", \"utils\"])'","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"from inside the Trixi.jl repository. For convenience, there is also a script you can directly run from your terminal shell, which will automatically install JuliaFormatter in a temporary environment and then run it:","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"utils/trixi-format.jl","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"You can get more information about using the convenience script by running it with the --help/-h flag.","category":"page"},{"location":"styleguide/#Checking-formatting-before-committing","page":"Style guide","title":"Checking formatting before committing","text":"","category":"section"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"It can be convenient to check the formatting of source code automatically before each commit. We use git-hooks for it and provide a pre-commit script in the utils folder. The script uses JuliaFormatter.jl just like formatting script that runs over the whole Trixi.jl directory. You can copy the pre-commit-script into .git/hooks/pre-commit and it will check your formatting before each commit. If errors are found the commit is aborted and you can add the corrections via","category":"page"},{"location":"styleguide/","page":"Style guide","title":"Style guide","text":"git add -p","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"EditURL = \"../../literate/src/files/scalar_linear_advection_1d.jl\"","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#scalar_linear_advection_1d","page":"3 Introduction to DG methods","title":"3: Introduction to DG methods","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"(Image: ) (Image: ) (Image: )","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"This tutorial is about how to set up a simple way to approximate the solution of a hyperbolic partial differential equation. First, we will implement a basic and naive algorithm. Then, we will use predefined features from Trixi.jl to show how you can use Trixi.jl on your own.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We will implement the scalar linear advection equation in 1D with the advection velocity 1.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u_t + u_x = 0 textfor tin mathbbR^+ xinOmega=-11","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We define the domain Omega by setting the boundaries.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"coordinates_min = -1.0 # minimum coordinate\ncoordinates_max = 1.0 # maximum coordinate","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We assume periodic boundaries and the following initial condition.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"initial_condition_sine_wave(x) = 1.0 + 0.5 * sin(pi * x)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#The-discontinuous-Galerkin-collocation-spectral-element-method-(DGSEM)","page":"3 Introduction to DG methods","title":"The discontinuous Galerkin collocation spectral element method (DGSEM)","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/#i.-Discretization-of-the-physical-domain","page":"3 Introduction to DG methods","title":"i. Discretization of the physical domain","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"To improve precision we want to approximate the solution on small parts of the physical domain. So, we split the domain Omega=-1 1 into elements Q_l of length dx.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"n_elements = 16 # number of elements\n\ndx = (coordinates_max - coordinates_min) / n_elements # length of one element","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"To make the calculation more efficient and storing less information, we transform each element Q_l with center point x_l to a reference element E=-1 1","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Q_l=Bigx_l-fracdx2 x_l+fracdx2Big undersetx(xi)oversetxi(x)rightleftarrows -1 1","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"So, for every element the transformation from the reference domain to the physical domain is defined by","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"x(xi) = x_l + fracdx2 xi xiin-1 1","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Therefore,","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"beginalign*\nu = u(x(xi) t) \nu_x = u_xi fracdxidx 3pt\nfracdxidx = (x_xi)^-1 = frac2dx = J^-1 \nendalign*","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Here, J is the Jacobian determinant of the transformation.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Using this transformation, we can transform our equation for each element Q_l.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"fracdx2 u_t^Q_l + u_xi^Q_l = 0 text for tinmathbbR^+ xiin-1 1","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Here, u_t^Q_l and u_xi^Q_l denote the time and spatial derivatives of the solution on the element Q_l.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#ii.-Polynomial-approach","page":"3 Introduction to DG methods","title":"ii. Polynomial approach","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Now, we want to approximate the solution in each element Q_l by a polynomial of degree N. Since we transformed the equation, we can use the same polynomial approach for the reference coordinate xiin-1 1 in every physical element Q_l. This saves a lot of resources by reducing the amount of calculations needed and storing less information.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"For DGSEM we choose Lagrange basis functions l_j_j=0^N as our polynomial basis of degree N in -1 1. The solution in element Q_l can be approximated by","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u(x(xi) t)big_Q_l approx u^Q_l(xi t) = sum_j=0^N u_j^Q_l(t) l_j(xi)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"with N+1 coefficients u_j^Q_l_j=0^N. By construction the Lagrange basis has some useful advantages. This basis is defined by N+1 nodes, which fulfill a Kronecker property at the exact same nodes. Let xi_i_i=0^N be these nodes.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"l_j(xi_i) = delta_ij =\nbegincases\n1 textif i=j \n0 textelse\nendcases","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Because of this property, the polynomial coefficients are exact the values of u^Q_l at the nodes","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u^Q_l(xi_i t) = sum_j=0^N u_j^Q_l(t) underbracel_j(xi_i)_=delta_ij = u_i^Q_l(t)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Next, we want to select the nodes xi_i_i=0^N, which we use for the construction of the Lagrange polynomials. We choose the N+1 Gauss-Lobatto nodes, which are used for the Gaussian-Lobatto quadrature. These always contain the boundary points at -1 and +1 and are well suited as interpolation nodes. The corresponding weights will be referred to as w_j_j=0^N. In Trixi.jl the basis with Lagrange polynomials on Gauss-Lobatto nodes is already defined.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using Trixi\npolydeg = 3 #= polynomial degree = N =#\nbasis = LobattoLegendreBasis(polydeg)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"The Gauss-Lobatto nodes are","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"nodes = basis.nodes","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"with the corresponding weights","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"weights = basis.weights","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"To illustrate how you can integrate using numerical quadrature with this Legendre-Gauss-Lobatto nodes, we give an example for f(x)=x^3. Since f is of degree 3, a polynomial interpolation with N=3 is exact. Therefore, the integral on -1 1 can be calculated by","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"beginalign*\nint_-1^1 f(x) dx = int_-1^1 Big( sum_j=0^3 f(xi_j)l_j(x) Big) dx\n= sum_j=0^3 f(xi_j) int_-1^1 l_j(x)dx \n= sum_j=0^3 f(xi_j) w_j\n= sum_j=0^3 xi_j^3 w_j\nendalign*","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Let's use our nodes and weights for N=3 and plug in","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"integral = sum(nodes.^3 .* weights)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Using this polynomial approach leads to the equation","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"fracdx2 dotu^Q_l(xi t) + u^Q_l(xi t) = 0","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"with dotu=fracpartialpartial tu and u=fracpartialpartial xu. To approximate the solution, we need to get the polynomial coefficients u_j^Q_l_j=0^N for every element Q_l.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"After defining all nodes, we can implement the spatial coordinate x and its initial value u0 = u(t_0) for every node.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"x = Matrix{Float64}(undef, length(nodes), n_elements)\nfor element in 1:n_elements\n x_l = coordinates_min + (element - 1) * dx + dx/2\n for i in eachindex(nodes)\n ξ = nodes[i] # nodes in [-1, 1]\n x[i, element] = x_l + dx/2 * ξ\n end\nend\n\nu0 = initial_condition_sine_wave.(x)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"To have a look at the initial sinus curve, we plot it.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using Plots\nplot(vec(x), vec(u0), label=\"initial condition\", legend=:topleft)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#iii.-Variational-formulation","page":"3 Introduction to DG methods","title":"iii. Variational formulation","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"After defining the equation and initial condition, we want to implement an algorithm to approximate the solution.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"From now on, we only write u instead of u^Q_l for simplicity, but consider that all the following calculation only concern one element. Multiplying the new equation with the smooth Lagrange polynomials l_i_i=0^N (test functions) and integrating over the reference element E=-11, we get the variational formulation of our transformed partial differential equation for i=0N:","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"beginalign*\nint_-1^1 Big( fracdx2 dotu(xi t) + u(xi t) Big) l_i(xi)dxi\n = underbracefracdx2 int_-1^1 dotu(xi t) l_i(xi)dxi_textTerm I + underbraceint_-1^1 u(xi t) l_i(xi)dxi_textTerm II = 0\nendalign*","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We deal with the two terms separately. We write int_-1 N^1 cdot dxi for the approximation of the integral using numerical quadrature with N+1 basis points. We use the Gauss-Lobatto nodes again. The numerical scalar product langlecdot cdotrangle_N is defined by langle f grangle_N = int_-1 N^1 f(xi) g(xi) dxi.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Term-I:","page":"3 Introduction to DG methods","title":"Term I:","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"In the following calculation we approximate the integral numerically with quadrature on the Gauss-Lobatto nodes xi_i_i=0^N and then use the Kronecker property of the Lagrange polynomials. This approach of using the same nodes for the interpolation and quadrature is called collocation.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"beginalign*\nfracdx2 int_-1^1 dotu(xi t) l_i(xi)dxi\napprox fracdx2 int_-1 N^1 dotu(xi t) l_i(xi)dxi \n= fracdx2 sum_k=0^N underbracedotu(xi_k t)_=dotu_k(t) underbracel_i(xi_k)_=delta_kiw_k \n= fracdx2 dotu_i(t) w_i\nendalign*","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We define the Legendre-Gauss-Lobatto (LGL) mass matrix M and by the Kronecker property follows:","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"M_ij = langle l_j l_irangle_N = delta_ij w_j ij=0N","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using LinearAlgebra\nM = diagm(weights)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Now, we can write the integral with this new matrix.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"fracdx2 int_-1 N^1 dotu(xi t) underlinel(xi)dxi = fracdx2 M underlinedotu(t)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"where underlinedotu = (dotu_0 dotu_N)^T and underlinel respectively.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Note: Since the LGL quadrature with N+1 nodes is exact up to functions of degree 2N-1 and dotu(xi t) l_i(xi) is of degree 2N, in general the following holds","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"int_-1^1 dotu(xi t) l_i(xi) dxi neq int_-1 N^1 dotu(xi t) l_i(xi) dxi","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"With an exact integration the mass matrix would be dense. Choosing numerical integrating and quadrature with the exact same nodes (collocation) leads to the sparse and diagonal mass matrix M. This is called mass lumping and has the big advantage of an easy inversion of the matrix.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Term-II:","page":"3 Introduction to DG methods","title":"Term II:","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We use spatial partial integration for the second term:","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"int_-1^1 u(xi t) l_i(xi) dxi = u l_i_-1^1 - int_-1^1 u l_idxi","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"The resulting integral can be solved exactly with LGL quadrature since the polynomial is now of degree 2N-1.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Again, we split the calculation in two steps.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Surface-term","page":"3 Introduction to DG methods","title":"Surface term","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"As mentioned before, we approximate the solution with a polynomial in every element. Therefore, in general the value of this approximation at the interfaces between two elements is not unique. To solve this problem we introduce the idea of the numerical flux u^*, which will give an exact value at the interfaces. One of many different approaches and definitions for the calculation of the numerical flux we will deal with in 4. Numerical flux.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u l_i_-1^1 = u^*big^1 l_i(+1) - u^*big_-1 l_i(-1)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Since the Gauss-Lobatto nodes contain the element boundaries -1 and +1, we can use the Kronecker property of l_i for the calculation of l_i(-1) and l_i(+1).","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u underlinel_-1^1 = u^*big^1 left(beginarrayc 0 vdots 0 1 endarrayright)\n- u^*big_-1 left(beginarrayc 1 0 vdots 0endarrayright)\n= B underlineu^*(t)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"with the boundary matrix","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"B = beginpmatrix\n-1 0 cdots 0\n0 0 cdots 0\nvdots vdots 0 0\n0 cdots 0 1\nendpmatrix\nqquadtextandqquad\nunderlineu^*(t) = left(beginarrayc u^*big_-1 0 vdots 0 u^*big^1endarrayright)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"B = diagm([-1; zeros(polydeg - 1); 1])","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Volume-term","page":"3 Introduction to DG methods","title":"Volume term","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"As mentioned before, the new integral can be solved exact since the function inside is of degree 2N-1.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"- int_-1^1 u l_idxi = - int_-1 N^1 u l_i dxi\n= - sum_k=0^N u(xi_k t) l_i(xi_k) w_k\n= - sum_k=0^N u_k(t) D_ki w_k","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"where D is the derivative matrix defined by D_ki = l_i(xi_k) for ik=0N.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"D = basis.derivative_matrix","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"To show why this matrix is called the derivative matrix, we go back to our example f(x)=x^3. We calculate the derivation of f at the Gauss-Lobatto nodes xi_k_k=0^N with N=8.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"f_x=xi_k = Big( sum_j=0^8 f(xi_j) l_j(x) Big)_x=xi_k = sum_j=0^8 f(xi_j) l_j(xi_k)\n= sum_j=0^8 f(xi_j) D_kj","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"for k=0N and therefore, underlinef = D underlinef.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"basis_N8 = LobattoLegendreBasis(8)\nplot(vec(x), x -> 3 * x^2, label=\"f'\", lw=2)\nscatter!(basis_N8.nodes, basis_N8.derivative_matrix * basis_N8.nodes.^3, label=\"Df\", lw=3)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Combining the volume term for every i=0N results in","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"int_-1^1 u underlinel dxi = - D^T M underlineu(t)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Putting all parts together we get the following equation for the element Q_l","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"fracdx2 M underlinedotu(t) = - B underlineu^*(t) + D^T M underlineu(t)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"or equivalent","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"underlinedotu^Q_l(t) = frac2dx Big - M^-1 B underlineu^Q_l^*(t) + M^-1 D^T M underlineu^Q_l(t)Big","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"This is called the weak form of the DGSEM.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Note: For every element Q_l we get a system of N+1 ordinary differential equations to calculate N+1 coefficients. Since the numerical flux u^* is depending on extern values at the interfaces, the equation systems of adjacent elements are weakly linked.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#numerical_flux","page":"3 Introduction to DG methods","title":"iv. Numerical flux","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"As mentioned above, we still have to handle the problem of different values at the same point at the interfaces. This happens with the ideas of the numerical flux f^*(u)=u^*. The role of f^* might seem minor in this simple example, but is important for more complicated problems. There are two values at the same spatial coordinate. Let's say we are looking at the interface between the elements Q_l and Q_l+1, while both elements got N+1 nodes as defined before. We call the first value of the right element u_R=u_0^Q_l+1 and the last one of the left element u_L=u_N^Q_l. So, for the value of the numerical flux on that interface the following holds","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u^* = u^*(u_L u_R)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"These values are interpreted as start values of a so-called Riemann problem. There are many different (approximate) Riemann solvers available and useful for different problems. We will use the local Lax-Friedrichs flux.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"surface_flux = flux_lax_friedrichs","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"The only missing ingredient is the flux calculation at the boundaries -1 and +1.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"u^Q_first^*big_-1 = u^Q_first^*big_-1(u^bound(-1) u_R)\nquadtextandquad\nu^Q_last^*big^1 = u^Q_last^*big^1(u_L u^bound(1))","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"The boundaries are periodic, which means that the last value of the last element u^Q_last_N is used as u_L at the first interface and accordingly for the other boundary.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Now, we implement a function, that calculates underlinedotu^Q_l for the given matrices, underlineu and underlineu^*.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"function rhs!(du, u, x, t)\n # Reset du and flux matrix\n du .= zero(eltype(du))\n flux_numerical = copy(du)\n\n # Calculate interface and boundary fluxes, $u^* = (u^*|_{-1}, 0, ..., 0, u^*|^1)^T$\n # Since we use the flux Lax-Friedrichs from Trixi.jl, we have to pass some extra arguments.\n # Trixi.jl needs the equation we are dealing with and an additional `1`, that indicates the\n # first coordinate direction.\n equations = LinearScalarAdvectionEquation1D(1.0)\n for element in 2:n_elements-1\n # left interface\n flux_numerical[1, element] = surface_flux(u[end, element-1], u[1, element], 1, equations)\n flux_numerical[end, element-1] = flux_numerical[1, element]\n # right interface\n flux_numerical[end, element] = surface_flux(u[end, element], u[1, element+1], 1, equations)\n flux_numerical[1, element+1] = flux_numerical[end, element]\n end\n # boundary flux\n flux_numerical[1, 1] = surface_flux(u[end, end], u[1, 1], 1, equations)\n flux_numerical[end, end] = flux_numerical[1, 1]\n\n # Calculate surface integrals, $- M^{-1} * B * u^*$\n for element in 1:n_elements\n du[:, element] -= (M \\ B) * flux_numerical[:, element]\n end\n\n # Calculate volume integral, $+ M^{-1} * D^T * M * u$\n for element in 1:n_elements\n flux = u[:, element]\n du[:, element] += (M \\ transpose(D)) * M * flux\n end\n\n # Apply Jacobian from mapping to reference element\n for element in 1:n_elements\n du[:, element] *= 2 / dx\n end\n\n return nothing\nend","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Combining all definitions and the function that calculates the right-hand side, we define the ODE and solve it until t=2 with OrdinaryDiffEq's solve function and the Runge-Kutta method RDPK3SpFSAL49(), which is optimized for discontinuous Galerkin methods and hyperbolic PDEs. We set some common error tolerances abstol=1.0e-6, reltol=1.0e-6 and pass save_everystep=false to avoid saving intermediate solution vectors in memory.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using OrdinaryDiffEq\ntspan = (0.0, 2.0)\node = ODEProblem(rhs!, u0, tspan, x)\n\nsol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...)\n\nplot(vec(x), vec(sol.u[end]), label=\"solution at t=$(tspan[2])\", legend=:topleft, lw=3)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Alternative-Implementation-based-on-Trixi.jl","page":"3 Introduction to DG methods","title":"Alternative Implementation based on Trixi.jl","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Now, we implement the same example. But this time, we directly use the functionality that Trixi.jl provides.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using Trixi, OrdinaryDiffEq, Plots","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"First, define the equation with a advection_velocity of 1.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"advection_velocity = 1.0\nequations = LinearScalarAdvectionEquation1D(advection_velocity)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Then, create a DG solver with polynomial degree = 3 and (local) Lax-Friedrichs/Rusanov flux as surface flux. The implementation of the basis and the numerical flux is now already done.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We will now create a mesh with 16 elements for the physical domain [-1, 1] with periodic boundaries. We use Trixi.jl's standard mesh TreeMesh. Since it's limited to hypercube domains, we choose 2^4=16 elements. The mesh type supports AMR, that' why n_cells_max has to be set, even if we don't need AMR here.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"coordinates_min = -1.0 # minimum coordinate\ncoordinates_max = 1.0 # maximum coordinate\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=4, # number of elements = 2^4\n n_cells_max=30_000) # set maximum capacity of tree data structure (only needed for AMR)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"A semidiscretization collects data structures and functions for the spatial discretization. In Trixi.jl, an initial condition has the following parameter structure and is of the type SVector.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"initial_condition_sine_wave(x, t, equations) = SVector(1.0 + 0.5 * sin(pi * sum(x - equations.advection_velocity * t)))\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sine_wave, solver)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"Again, combining all definitions and the function that calculates the right-hand side, we define the ODE and solve it until t=2 with OrdinaryDiffEq's solve function and the Runge-Kutta method RDPK3SpFSAL49().","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"tspan = (0.0, 2.0)\node_trixi = semidiscretize(semi, tspan)\n\nsol_trixi = solve(ode_trixi, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...);\nnothing #hide","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"We add a plot of the new approximated solution to the one calculated before.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"plot!(sol_trixi, label=\"solution at t=$(tspan[2]) with Trixi.jl\", legend=:topleft, linestyle=:dash, lw=2)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Summary-of-the-code","page":"3 Introduction to DG methods","title":"Summary of the code","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"To sum up, here is the complete code that we used.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Raw-implementation","page":"3 Introduction to DG methods","title":"Raw implementation","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"# basis: Legendre-Gauss-Lobatto\nusing Trixi, LinearAlgebra, OrdinaryDiffEq, Plots\npolydeg = 3 #= polynomial degree =#\nbasis = LobattoLegendreBasis(polydeg)\nnodes = basis.nodes # Gauss-Lobatto nodes in [-1, 1]\nD = basis.derivative_matrix\nM = diagm(basis.weights) # mass matrix\nB = diagm([-1; zeros(polydeg - 1); 1])\n\n# mesh\ncoordinates_min = -1.0 # minimum coordinate\ncoordinates_max = 1.0 # maximum coordinate\nn_elements = 16 # number of elements\n\ndx = (coordinates_max - coordinates_min) / n_elements # length of one element\n\nx = Matrix{Float64}(undef, length(nodes), n_elements)\nfor element in 1:n_elements\n x_l = -1 + (element - 1) * dx + dx/2\n for i in eachindex(nodes) # basis points in [-1, 1]\n ξ = nodes[i]\n x[i, element] = x_l + dx/2 * ξ\n end\nend\n\n# initial condition\ninitial_condition_sine_wave(x) = 1.0 + 0.5 * sin(pi * x)\nu0 = initial_condition_sine_wave.(x)\n\nplot(vec(x), vec(u0), label=\"initial condition\", legend=:topleft)\n\n# flux Lax-Friedrichs\nsurface_flux = flux_lax_friedrichs\n\n# rhs! method\nfunction rhs!(du, u, x, t)\n # reset du\n du .= zero(eltype(du))\n flux_numerical = copy(du)\n\n # calculate interface and boundary fluxes\n equations = LinearScalarAdvectionEquation1D(1.0)\n for element in 2:n_elements-1\n # left interface\n flux_numerical[1, element] = surface_flux(u[end, element-1], u[1, element], 1, equations)\n flux_numerical[end, element-1] = flux_numerical[1, element]\n # right interface\n flux_numerical[end, element] = surface_flux(u[end, element], u[1, element+1], 1, equations)\n flux_numerical[1, element+1] = flux_numerical[end, element]\n end\n # boundary flux\n flux_numerical[1, 1] = surface_flux(u[end, end], u[1, 1], 1, equations)\n flux_numerical[end, end] = flux_numerical[1, 1]\n\n # calculate surface integrals\n for element in 1:n_elements\n du[:, element] -= (M \\ B) * flux_numerical[:, element]\n end\n\n # calculate volume integral\n for element in 1:n_elements\n flux = u[:, element]\n du[:, element] += (M \\ transpose(D)) * M * flux\n end\n\n # apply Jacobian from mapping to reference element\n for element in 1:n_elements\n du[:, element] *= 2 / dx\n end\n\n return nothing\nend\n\n# create ODE problem\ntspan = (0.0, 2.0)\node = ODEProblem(rhs!, u0, tspan, x)\n\n# solve\nsol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...)\n\nplot(vec(x), vec(sol.u[end]), label=\"solution at t=$(tspan[2])\", legend=:topleft, lw=3)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Alternative-Implementation-based-on-Trixi.jl-2","page":"3 Introduction to DG methods","title":"Alternative Implementation based on Trixi.jl","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using Trixi, OrdinaryDiffEq, Plots\n\n# equation with a advection_velocity of `1`.\nadvection_velocity = 1.0\nequations = LinearScalarAdvectionEquation1D(advection_velocity)\n\n# create DG solver with flux lax friedrichs and LGL basis\nsolver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n\n# distretize domain with `TreeMesh`\ncoordinates_min = -1.0 # minimum coordinate\ncoordinates_max = 1.0 # maximum coordinate\nmesh = TreeMesh(coordinates_min, coordinates_max,\n initial_refinement_level=4, # number of elements = 2^4\n n_cells_max=30_000)\n\n# create initial condition and semidiscretization\ninitial_condition_sine_wave(x, t, equations) = SVector(1.0 + 0.5 * sin(pi * sum(x - equations.advection_velocity * t)))\n\nsemi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sine_wave, solver)\n\n# solve\ntspan = (0.0, 2.0)\node_trixi = semidiscretize(semi, tspan)\nsol_trixi = solve(ode_trixi, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...);\n\nplot!(sol_trixi, label=\"solution at t=$(tspan[2]) with Trixi.jl\", legend=:topleft, linestyle=:dash, lw=2)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/#Package-versions","page":"3 Introduction to DG methods","title":"Package versions","text":"","category":"section"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"These results were obtained using the following versions.","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"using InteractiveUtils\nversioninfo()\n\nusing Pkg\nPkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n mode=PKGMODE_MANIFEST)","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"","category":"page"},{"location":"tutorials/scalar_linear_advection_1d/","page":"3 Introduction to DG methods","title":"3 Introduction to DG methods","text":"This page was generated using Literate.jl.","category":"page"},{"location":"reference-trixi2vtk/#Trixi2Vtk.jl-API","page":"Trixi2Vtk.jl","title":"Trixi2Vtk.jl API","text":"","category":"section"},{"location":"reference-trixi2vtk/","page":"Trixi2Vtk.jl","title":"Trixi2Vtk.jl","text":"CurrentModule = Trixi2Vtk","category":"page"},{"location":"reference-trixi2vtk/","page":"Trixi2Vtk.jl","title":"Trixi2Vtk.jl","text":"Modules = [Trixi2Vtk]","category":"page"},{"location":"reference-trixi2vtk/#Trixi2Vtk.trixi2vtk-Tuple{Vararg{AbstractString}}","page":"Trixi2Vtk.jl","title":"Trixi2Vtk.trixi2vtk","text":"trixi2vtk(filename::AbstractString...;\n format=:vtu, verbose=false, hide_progress=false, pvd=nothing,\n output_directory=\".\", nvisnodes=nothing, save_celldata=true,\n reinterpolate=true, data_is_uniform=false)\n\nConvert Trixi-generated output files to VTK files (VTU or VTI).\n\nArguments\n\nfilename: One or more Trixi solution/restart/mesh files to convert to a VTK file. Filenames support file globbing, e.g., \"solution*\" to match all files starting with solution.\nformat: Output format for solution/restart files. Can be 'vtu' or 'vti'.\nverbose: Set to true to enable verbose output.\nhide_progress: Hide progress bar (will be hidden automatically if verbose is true).\npvd: Use this filename to store PVD file (instead of auto-detecting name). Note that only the name will be used (directory and file extension are ignored).\noutput_directory: Output directory where generated files are stored.\nnvisnodes: Number of visualization nodes per element. (default: number of DG nodes for StructuredMesh or UnstructuredMesh2D, twice the number of DG nodes for TreeMesh). A value of 0 (zero) uses the number of nodes in the DG elements.\nsave_celldata: Boolean value to determine if cell-based data should be saved. (default: true)\nreinterpolate: Boolean value to determine if data should be reinterpolated onto uniform points. When false the raw data at the compute nodes is copied into the appropriate format. (default: true)\ndata_is_uniform: Boolean to indicate if the data to be converted is from a finite difference method on a uniform grid of points. (default: false)\n\nExamples\n\njulia> trixi2vtk(\"out/solution_000*.h5\")\n[...]\n\n\n\n\n\n","category":"method"}] +} diff --git a/v0.8.7/siteinfo.js b/v0.8.7/siteinfo.js new file mode 100644 index 0000000000..5de0ac8bbc --- /dev/null +++ b/v0.8.7/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.8.7"; diff --git a/v0.8.7/styleguide/index.html b/v0.8.7/styleguide/index.html new file mode 100644 index 0000000000..4eac80326b --- /dev/null +++ b/v0.8.7/styleguide/index.html @@ -0,0 +1,2 @@ + +Style guide · Trixi.jl

Style guide

Coding style is an inherently personal - and thus hotly contested - issue. Since code is usually "written once, read often", it helps regular developers, new users, and reviewers if code is formatted consistently. We therefore believe in the merit of using a common coding style throughout Trixi.jl, even at the expense that not everyone can be happy with every detailed style decision. If you came here because you are furious about our code formatting rules, here is a happy little whale for you to calm you down: 🐳

Conventions

The following lists a few coding conventions for Trixi.jl. Note that in addition to these conventions, we apply and enforce automated source code formatting (see below for more details):

  • Modules, types, structs with CamelCase.
  • Functions, variables with lowercase snake_case.
  • Indentation with 4 spaces (never tabs!)
  • Maximum line length (strictly): 92.
  • Functions that mutate their input are named with a trailing !.
  • Functions order their parameters similar to Julia Base.
    • The main modified argument comes first. For example, if the right-hand side du is modified, it should come first. If only the cache is modified, e.g., in prolong2interfaces! and its siblings, put the cache first.
    • Otherwise, use the order mesh, equations, solver, cache.
    • If something needs to be specified in more detail for dispatch, put the additional argument before the general one that is specified in more detail. For example, we use have_nonconservative_terms(equations), equations and dg.mortar, dg.
  • Prefer for i in ... to for i = ... for better semantic clarity and greater flexibility.
  • Executable code should only use ASCII characters.
  • Docstrings and comments can and should use Unicode characters where it helps understanding.
  • Multiline expressions should be explicitly grouped by parentheses and not rely on Julia's implicit line continuation syntax.
  • When naming multiple functions of a single or similar category, prefer to put the general classification first and the specialization second. Example: Use flux_central instead of central_flux. This helps when searching for available functions on the REPL (e.g., when trying to find all flux functions).

Automated source code formatting

We use JuliaFormatter.jl to format the source code of Trixi.jl, which will also enforce some of the Conventions listed above (e.g., line length or indentation with 4 spaces are automatically handled, while capitalization of names is not). Our format is mostly based on the SciML-style formatting rules. For more details you can have a look at the current .JuliaFormatter.toml file that holds the configuration options we use for JuliaFormatter.jl.

Note that we expect all contributions to Trixi.jl to be formatted with JuliaFormatter.jl before being merged to the main branch. We ensure this by running a automated check on all PRs that verify that running JuliaFormatter.jl again will not change the source code.

To format your contributions before created a PR (or, at least, before requesting a review of your PR), you need to install JuliaFormatter.jl first by running

julia -e 'using Pkg; Pkg.add(PackageSpec(name = "JuliaFormatter", version="1.0.45"))'

You can then recursively format the core Julia files in the Trixi.jl repo by executing

julia -e 'using JuliaFormatter; format(["benchmark", "examples", "ext", "src", "test", "utils"])'

from inside the Trixi.jl repository. For convenience, there is also a script you can directly run from your terminal shell, which will automatically install JuliaFormatter in a temporary environment and then run it:

utils/trixi-format.jl

You can get more information about using the convenience script by running it with the --help/-h flag.

Checking formatting before committing

It can be convenient to check the formatting of source code automatically before each commit. We use git-hooks for it and provide a pre-commit script in the utils folder. The script uses JuliaFormatter.jl just like formatting script that runs over the whole Trixi.jl directory. You can copy the pre-commit-script into .git/hooks/pre-commit and it will check your formatting before each commit. If errors are found the commit is aborted and you can add the corrections via

git add -p
diff --git a/v0.8.7/testing/index.html b/v0.8.7/testing/index.html new file mode 100644 index 0000000000..9311fa94d9 --- /dev/null +++ b/v0.8.7/testing/index.html @@ -0,0 +1,6 @@ + +Testing · Trixi.jl

Testing

During the development of Trixi.jl, we rely on continuous testing to ensure that modifications or new features do not break existing functionality or add other errors. In the main Trixi.jl repository (and the repositories for the visualization tool Trixi2Vtk), this is facilitated by GitHub Actions, which allows to run tests automatically upon certain events. When, how, and what is tested by GitHub Actions is controlled by the workflow file .github/workflows/ci.yml. In Trixi.jl and its related repositories, tests are triggered by

  • each git push to main and
  • each git push to any pull request.

Besides checking functionality, we also analyse the Test coverage to ensure that we do not miss important parts during testing.

Test and coverage requirements

Before merging a pull request (PR) to main, we require that

  • the code passes all functional tests
  • code coverage does not decrease.

Testing setup

The entry point for all testing is the file test/runtests.jl, which is run by the automated tests and which can be triggered manually by executing

julia> using Pkg; Pkg.test("Trixi")

in the REPL. Since there already exist many tests, we have split them up into multiple files in the test directory to allow for faster testing of individual parts of the code. Thus in addition to performing all tests, you can also just include one of the files named test_xxx.jl to run only a specific subset, e.g.,

julia> # Run all 2D tests on the P4estMesh
+       include(joinpath("test", "test_p4est_2d.jl"))
+
+julia> # Run all 1D tests for the Euler equations on the TreeMesh
+       include(joinpath("test", "test_tree_1d_euler.jl"))

For the automated tests with GitHub Actions, we run multiple jobs in parallel to reduce the waiting time until all tests are finished. You can see the different components that are run as jobs by looking at the TRIXI_TEST variable in test/runtests.jl.

Adding new tests

We use Julia's built-in unit testing capabilities to configure tests. In general, newly added code must be covered by at least one test, and all new elixirs added to the examples/ directory must be used at least once during testing. New tests should be added to the corresponding test/test_xxx.jl file, e.g., a test involving the 3D linear advection equation on the TreeMesh would go into test/test_tree_3d_advection.jl. Please study one of the existing tests and stay consistent to the current style when creating new tests.

Since we want to test as much as possible, we have a lot of tests and frequently create new ones. Naturally, this increases the time to wait for all tests to pass with each novel feature added to Trixi.jl. Therefore, new tests should be as short as reasonably possible, i.e., without being too insensitive to pick up changes or errors in the code.

When you add new tests, please check whether all CI jobs still take approximately the same time. If the job where you added new tests takes much longer than everything else, please consider moving some tests from one job to another (or report this incident and ask the main developers for help).

Test duration

As a general rule, tests should last no more than 10 seconds when run with a single thread and after compilation (i.e., excluding the first run).

Test coverage

In addition to ensuring that the code produces the expected results, the automated tests also record the code coverage. The resulting coverage reports, i.e., which lines of code were executed by at least one test and are thus considered "covered" by testing, are automatically uploaded to Coveralls for easy analysis. Typically, you see a number of Coveralls results at the bottom of each pull request: One for each parallel job (see Testing setup), which can usually be ignored since they only cover parts of the code by definition, and a cumulative coverage result named coverage/coveralls. The "Details" link takes you to a detailed report on which lines of code are covered by tests, which ones are missed, and especially which new lines the pull requests adds to Trixi.jl's code base that are not yet covered by testing.

Coverage requirements

In general, we require pull requests to not decrease the overall test coverage percentage in main, with a hard lower bound of 97%.

diff --git a/v0.8.7/time_integration/index.html b/v0.8.7/time_integration/index.html new file mode 100644 index 0000000000..6394fc4288 --- /dev/null +++ b/v0.8.7/time_integration/index.html @@ -0,0 +1,2 @@ + +Time integration · Trixi.jl

Time integration methods

Trixi.jl is compatible with the SciML ecosystem for ordinary differential equations. In particular, explicit Runge-Kutta methods from OrdinaryDiffEq.jl are tested extensively. Interesting classes of time integration schemes are

Some common options for solve from OrdinaryDiffEq.jl are the following. Further documentation can be found in the SciML docs.

  • If you use a fixed time step method like CarpenterKennedy2N54, you need to pass a time step as dt=.... If you use a StepsizeCallback, the value passed as dt=... is irrelevant since it will be overwritten by the StepsizeCallback. If you want to use an adaptive time step method such as SSPRK43 or RDPK3SpFSAL49 and still want to use CFL-based step size control via the StepsizeCallback, you need to pass the keyword argument adaptive=false to solve.
  • You should usually set save_everystep=false. Otherwise, OrdinaryDiffEq.jl will (try to) save the numerical solution after every time step in RAM (until you run out of memory or start to swap).
  • You can set the maximal number of time steps via maxiters=....
  • SSP methods and many low-storage methods from OrdinaryDiffEq.jl support stage_limiter!s and step_limiter!s, e.g., PositivityPreservingLimiterZhangShu from Trixi.jl.
  • If you start Julia with multiple threads and want to use them also in the time integration method from OrdinaryDiffEq.jl, you need to pass the keyword argument thread=OrdinaryDiffEq.True() to the algorithm, e.g., RDPK3SpFSAL49(thread=OrdinaryDiffEq.True()) or CarpenterKennedy2N54(thread=OrdinaryDiffEq.True(), williamson_condition=false). For more information on using thread-based parallelism in Trixi.jl, please refer to Shared-memory parallelization with threads.
  • If you use error-based step size control (see also the section on error-based adaptive step sizes together with MPI, you need to pass internalnorm=ode_norm and you should pass unstable_check=ode_unstable_check to OrdinaryDiffEq's solve, which are both included in ode_default_options.
Number of `rhs!` calls

If you use explicit Runge-Kutta methods from OrdinaryDiffEq.jl, the total number of rhs! calls can be (slightly) bigger than the number of steps times the number of stages, e.g. to allow for interpolation (dense output), root-finding for continuous callbacks, and error-based time step control. In general, you often should not need to worry about this if you use Trixi.jl.

diff --git a/v0.8.7/troubleshooting/index.html b/v0.8.7/troubleshooting/index.html new file mode 100644 index 0000000000..c54fc3fbbe --- /dev/null +++ b/v0.8.7/troubleshooting/index.html @@ -0,0 +1,47 @@ + +Troubleshooting and FAQ · Trixi.jl

Troubleshooting and FAQ

In general, Trixi.jl works best with the newest Julia release and up-to-date dependencies. If something does not work as expected, try updating your installed Julia packages via the package manager, e.g., by running

julia> import Pkg; Pkg.update()

If you do not use the latest stable release of Julia from the official website, consider updating your Julia installation.

Installing Trixi.jl as a package only provides an older release

Trixi.jl requires fairly recent versions of several of its dependencies, which sometimes causes issues when other installed packages have conflicting version requirements. In this case, Julia's package manager Pkg will try to handle this gracefully by going back in history until it finds a Trixi.jl release whose version requirements can be met, resulting in an older - and usually outdated - version of Trixi.jl being installed.

The following example illustrates this issue:

  • The current Trixi.jl release v0.3.6 requires package Foo with a minimum version of v0.2.
  • An older Trixi.jl release v0.2.1 requires package Foo only with a minimum version of v0.1.
  • A user has already installed package Bar, which itself requires Foo with a maximum version of v0.1.

In this case, installing Trixi.jl via Pkg will result in version v0.2.1 to be installed instead of the current release v0.3.6. That is, a specific release of Trixi.jl may not be installable if it has a dependency with a higher minimum version that at the same time is restricted to a lower maximum version by another installed package.

You can check whether an outdated version of Trixi.jl is installed by executing

julia> import Pkg; Pkg.update("Trixi"); Pkg.status("Trixi")

in the REPL and comparing the reported Trixi.jl version with the version of the latest release. If the versions differ, you can confirm that it is due to a version conflict by forcing Pkg to install the latest Trixi.jl release, where version is the current release:

julia> Pkg.add(name="Trixi", version="0.3.6")

In case of a conflict, the command above will produce an error that informs you about the offending packages, similar to the following:

   Updating registry at `~/.julia/registries/General`
+  Resolving package versions...
+ERROR: Unsatisfiable requirements detected for package DataStructures [864edb3b]:
+ DataStructures [864edb3b] log:
+ ├─possible versions are: [0.9.0, 0.10.0, 0.11.0-0.11.1, 0.12.0, 0.13.0, 0.14.0-0.14.1, 0.15.0, 0.16.1, 0.17.0-0.17.20, 0.18.0-0.18.8] or uninstalled
+ ├─restricted by compatibility requirements with DiffEqCallbacks [459566f4] to versions: 0.18.0-0.18.8
+ │ └─DiffEqCallbacks [459566f4] log:
+ │   ├─possible versions are: [2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0-2.5.2, 2.6.0, 2.7.0, 2.8.0, 2.9.0, 2.10.0, 2.11.0, 2.12.0-2.12.1, 2.13.0-2.13.5, 2.14.0-2.14.1, 2.15.0] or uninstalled
+ │   ├─restricted by compatibility requirements with Trixi [a7f1ee26] to versions: [2.14.0-2.14.1, 2.15.0]
+ │   │ └─Trixi [a7f1ee26] log:
+ │   │   ├─possible versions are: [0.1.0-0.1.2, 0.2.0-0.2.6, 0.3.0-0.3.6] or uninstalled
+ │   │   └─restricted to versions 0.3.6 by an explicit requirement, leaving only versions 0.3.6
+ │   └─restricted by compatibility requirements with StaticArrays [90137ffa] to versions: 2.15.0 or uninstalled, leaving only versions: 2.15.0
+ │     └─StaticArrays [90137ffa] log:
+ │       ├─possible versions are: [0.8.0-0.8.3, 0.9.0-0.9.2, 0.10.0, 0.10.2-0.10.3, 0.11.0-0.11.1, 0.12.0-0.12.5, 1.0.0-1.0.1] or uninstalled
+ │       └─restricted by compatibility requirements with Trixi [a7f1ee26] to versions: 1.0.0-1.0.1
+ │         └─Trixi [a7f1ee26] log: see above
+ └─restricted by compatibility requirements with JLD2 [033835bb] to versions: [0.9.0, 0.10.0, 0.11.0-0.11.1, 0.12.0, 0.13.0, 0.14.0-0.14.1, 0.15.0, 0.16.1, 0.17.0-0.17.20] — no versions left
+   └─JLD2 [033835bb] log:
+     ├─possible versions are: [0.1.0-0.1.14, 0.2.0-0.2.4, 0.3.0-0.3.1] or uninstalled
+     └─restricted by compatibility requirements with BinaryBuilder [12aac903] to versions: 0.1.0-0.1.14
+       └─BinaryBuilder [12aac903] log:
+         ├─possible versions are: [0.1.0-0.1.2, 0.1.4, 0.2.0-0.2.6] or uninstalled
+         └─restricted to versions * by an explicit requirement, leaving only versions [0.1.0-0.1.2, 0.1.4, 0.2.0-0.2.6]

From the error message, we can see that ultimately BinaryBuilder is the problem here: It restricts the package DataStructures to version v0.17 (via its dependency JLD2), while Trixi.jl requires at least v0.18 (via its dependency DiffEqCallbacks). Following the official Pkg documentation, there are a number of things you can try to fix such errors:

  • Try updating all packages with julia -e 'using Pkg; Pkg.update()'. A newer version of the problematic package may exist that has updated version requirements.
  • Remove the offending package. Running
    julia> import Pkg; Pkg.rm("BinaryBuilder"); Pkg.update(); Pkg.status()
    in the REPL will remove BinaryBuilder and (hopefully) update Trixi.jl to the latest version.
  • Report the versioning issue to us and/or the development repository of the conflicting package. Maybe it is possible to lift the version restrictions such that both packages can live side by side.
  • Instead of installing Trixi.jl and conflicting packages in the same (default) environment, consider creating new environments/projects and install only packages required for the specific tasks, as explained in the official Pkg documentation. For example, if you use Trixi.jl for a research project (Bachelor/Master thesis or a paper), you should create a new Julia project/environment for that research and add Trixi.jl as a dependency. If you track all your code and the Project.toml, Manifest.toml files (generated by Pkg) in a version control system such as git, you can make your research easily reproducible (if you also record the version of Julia you are using and leave some comments for others who do not know what you are trying to do, including your future self 😉).

There are many questions marks and weird symbols in the output of Trixi.jl

This probably means that the default font used by your operating system does not support enough Unicode symbols. Try installing a modern font with decent unicode support, e.g. JuliaMono. Detailed installation instructions are available there.

This problems affects users of Mac OS particularly often. At the time of writing, installing JuliaMono is as simple as

$ brew tap homebrew/cask-fonts
+$ brew install --cask font-juliamono

There are no timing results of the initial mesh creation

By default, the SummaryCallback resets the timer used internally by Trixi.jl when it is initialized (when solve is called). If this step needs to be timed, e.g. to debug performance problems, explicit timings can be used as follows.

using Trixi
+
+begin
+  Trixi.reset_timer!(Trixi.timer())
+
+  equations = LinearScalarAdvectionEquation2D(0.2, -0.7)
+  mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), n_cells_max=10^5, initial_refinement_level=5)
+  solver = DGSEM(3)
+  semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, solver)
+
+  Trixi.print_timer(Trixi.timer())
+end

MPI ranks are assigned zero cells in P4estMesh even though there are enough cells

The P4estMesh allows one to coarsen the mesh by default. When Trixi.jl is parallelized with multiple MPI ranks, this has the consequence that sibling cells (i.e., child cells with the same parent cell) are kept on the same MPI rank to be able to coarsen them easily. This might cause an unbalanced distribution of cells on different ranks. For 2D meshes, this also means that initially each rank will at least own 4 cells, and for 3D meshes, initially each rank will at least own 8 cells. See issue #1329.

Installing and updating everything takes a lot of time

Julia compiles code to get good (C/Fortran-like) performance. At the same time, Julia provides a dynamic environment and usually compiles code just before using it. Over time, Julia has improved its caching infrastructure, allowing to store and reuse more results from (pre-)compilation. This often results in an increased time to install/update packages, in particular when updating to Julia v1.8 or v1.9 from older versions.

Some packages used together with Trixi.jl provide options to configure the amount of precompilation. For example, OrdinaryDiffEq.jl precompiles many ODE solvers for a good runtime experience of average users. Currently, Trixi.jl does not use all of the available solvers. Thus, you can save some time at every update by setting their precompilation options.

At the time of writing, this could look as follows. First, you need to activate the environment where you have installed OrdinaryDiffEq.jl. Then, you need to execute the following Julia code.

using Preferences, UUIDs
+let uuid = UUID("1dea7af3-3e70-54e6-95c3-0bf5283fa5ed")
+  set_preferences!(uuid, "PrecompileAutoSpecialize" => false)
+  set_preferences!(uuid, "PrecompileAutoSwitch" => false)
+  set_preferences!(uuid, "PrecompileDefaultSpecialize" => true)
+  set_preferences!(uuid, "PrecompileFunctionWrapperSpecialize" => false)
+  set_preferences!(uuid, "PrecompileLowStorage" => true)
+  set_preferences!(uuid, "PrecompileNoSpecialize" => false)
+  set_preferences!(uuid, "PrecompileNonStiff" => true)
+  set_preferences!(uuid, "PrecompileStiff" => false)
+end

This disables precompilation of all implicit methods. This should usually not affect the runtime latency with Trixi.jl since most setups use explicit time integration methods.

diff --git a/v0.8.7/tutorials/DGMulti_1/21516b5b.svg b/v0.8.7/tutorials/DGMulti_1/21516b5b.svg new file mode 100644 index 0000000000..8e4336b41b --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/21516b5b.svg @@ -0,0 +1,4825 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGMulti_1/35171e3f.svg b/v0.8.7/tutorials/DGMulti_1/35171e3f.svg new file mode 100644 index 0000000000..e3a9c03b02 --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/35171e3f.svg @@ -0,0 +1,6330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGMulti_1/5e2f3dd8.svg b/v0.8.7/tutorials/DGMulti_1/5e2f3dd8.svg new file mode 100644 index 0000000000..54e126794e --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/5e2f3dd8.svg @@ -0,0 +1,8390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGMulti_1/d7389022.svg b/v0.8.7/tutorials/DGMulti_1/d7389022.svg new file mode 100644 index 0000000000..2335f647f5 --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/d7389022.svg @@ -0,0 +1,5166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGMulti_1/e357aeee.svg b/v0.8.7/tutorials/DGMulti_1/e357aeee.svg new file mode 100644 index 0000000000..1322999f6c --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/e357aeee.svg @@ -0,0 +1,6325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGMulti_1/e6f8cdbd.svg b/v0.8.7/tutorials/DGMulti_1/e6f8cdbd.svg new file mode 100644 index 0000000000..6d32858034 --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/e6f8cdbd.svg @@ -0,0 +1,5570 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGMulti_1/index.html b/v0.8.7/tutorials/DGMulti_1/index.html new file mode 100644 index 0000000000..321310ef59 --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_1/index.html @@ -0,0 +1,309 @@ + +8 DG schemes via DGMulti solver · Trixi.jl

8: DG schemes via DGMulti solver

DGMulti is a DG solver that allows meshes with simplex elements. The basic idea and implementation of this solver is explained in section "Meshes". Here, we want to give some examples and a quick overview about the options with DGMulti.

We start with a simple example we already used in the tutorial about flux differencing. There, we implemented a simulation with initial_condition_weak_blast_wave for the 2D compressible Euler equations CompressibleEulerEquations2D and used the DG formulation with flux differencing using volume flux flux_ranocha and surface flux flux_lax_friedrichs.

Here, we want to implement the equivalent example, only now using the DGMulti solver instead of DGSEM.

using Trixi, OrdinaryDiffEq
+
+equations = CompressibleEulerEquations2D(1.4)
+
+initial_condition = initial_condition_weak_blast_wave
initial_condition_weak_blast_wave (generic function with 13 methods)

To use the Gauss-Lobatto nodes again, we choose approximation_type=SBP() in the solver. Since we want to start with a Cartesian domain discretized with squares, we use the element type Quad().

dg = DGMulti(polydeg = 3,
+             element_type = Quad(),
+             approximation_type = SBP(),
+             surface_flux = flux_lax_friedrichs,
+             volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))
+
+cells_per_dimension = (32, 32)
+mesh = DGMultiMesh(dg,
+                   cells_per_dimension, # initial_refinement_level = 5
+                   coordinates_min=(-2.0, -2.0),
+                   coordinates_max=( 2.0,  2.0),
+                   periodicity=true)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,
+                                    boundary_conditions=boundary_condition_periodic)
+tspan = (0.0, 0.4)
+ode = semidiscretize(semi, tspan)
+
+alive_callback = AliveCallback(alive_interval=10)
+analysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))
+callbacks = CallbackSet(analysis_callback, alive_callback);

Run the simulation with the same time integration algorithm as before.

sol = solve(ode, RDPK3SpFSAL49(), abstol=1.0e-6, reltol=1.0e-6,
+            callback=callbacks, save_everystep=false);

+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       1.09200000e-06 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:         16384                alloc'd memory:       1022.057 MiB
+ #elements:               16384
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
+ Linf error:     0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
+ ∑∂S/∂U ⋅ Uₜ :  -2.33879138e-16
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 8.7782e-03 │ sim. time: 6.2446e-02 (15.612%)  │ run time: 1.4915e-01 s
+#timesteps:     20 │ Δt: 1.2426e-02 │ sim. time: 1.7307e-01 (43.267%)  │ run time: 2.9218e-01 s
+#timesteps:     30 │ Δt: 1.3710e-02 │ sim. time: 3.0622e-01 (76.554%)  │ run time: 4.3594e-01 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 37                run time:       5.39786933e-01 s
+ Δt:             9.57329122e-03                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      4.00000000e-01 (100.000%)     time/DOF/rhs!:  9.02817426e-08 s
+                                               PID:            9.74922267e-08 s
+ #DOFs per field:         16384                alloc'd memory:       1031.866 MiB
+ #elements:               16384
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.13970440e-02   4.96516886e-02   4.96432472e-02   2.24583683e-01
+ Linf error:     2.61815840e-01   2.48009699e-01   2.47516396e-01   9.30972703e-01
+ ∑∂S/∂U ⋅ Uₜ :  -2.24491554e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 0.4  Time steps: 37 (accepted), 37 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
using Plots
+pd = PlotData2D(sol)
+plot(pd)
Example block output
plot(pd["rho"])
+plot!(getmesh(pd))
Example block output

This simulation is not as fast as the equivalent with TreeMesh since no special optimizations for quads (for instance tensor product structure) have been implemented. Figure 4 in "Efficient implementation of modern entropy stable and kinetic energy preserving discontinuous Galerkin methods for conservation laws" (2021) provides a nice runtime comparison between the different mesh types. On the other hand, the functions are more general and thus we have more option we can choose from.

Simulation with Gauss nodes

For instance, we can change the approximation type of our simulation.

using Trixi, OrdinaryDiffEq
+equations = CompressibleEulerEquations2D(1.4)
+initial_condition = initial_condition_weak_blast_wave
initial_condition_weak_blast_wave (generic function with 13 methods)

We now use Gauss nodes instead of Gauss-Lobatto nodes which can be done for the element types Quad() and Hex(). Therefore, we set approximation_type=GaussSBP(). Alternatively, we can use a modal approach using the approximation type Polynomial().

dg = DGMulti(polydeg = 3,
+             element_type = Quad(),
+             approximation_type = GaussSBP(),
+             surface_flux = flux_lax_friedrichs,
+             volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))
+
+cells_per_dimension = (32, 32)
+mesh = DGMultiMesh(dg,
+             cells_per_dimension, # initial_refinement_level = 5
+             coordinates_min=(-2.0, -2.0),
+             coordinates_max=( 2.0,  2.0),
+             periodicity=true)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,
+                              boundary_conditions=boundary_condition_periodic)
+tspan = (0.0, 0.4)
+ode = semidiscretize(semi, tspan)
+
+alive_callback = AliveCallback(alive_interval=10)
+analysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))
+callbacks = CallbackSet(analysis_callback, alive_callback);
+
+sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,
+            ode_default_options()..., callback=callbacks);

+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       1.69300000e-06 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:         16384                alloc'd memory:        992.184 MiB
+ #elements:               16384
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       3.17057848e-16   8.94192483e-18   9.07727588e-18   5.97871667e-16
+ Linf error:     8.88178420e-16   1.38777878e-16   1.38777878e-16   2.66453526e-15
+ ∑∂S/∂U ⋅ Uₜ :  -1.01164379e-01
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 5.0548e-03 │ sim. time: 3.3436e-02 (8.359%)   │ run time: 4.7678e-01 s
+#timesteps:     20 │ Δt: 8.8313e-03 │ sim. time: 1.0601e-01 (26.503%)  │ run time: 9.5019e-01 s
+#timesteps:     30 │ Δt: 1.0521e-02 │ sim. time: 2.0438e-01 (51.094%)  │ run time: 1.4169e+00 s
+#timesteps:     40 │ Δt: 1.1006e-02 │ sim. time: 3.1245e-01 (78.113%)  │ run time: 1.9055e+00 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 48                run time:       2.28626615e+00 s
+ Δt:             1.00192333e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      4.00000000e-01 (100.000%)     time/DOF/rhs!:  3.05907162e-07 s
+                                               PID:            3.19817425e-07 s
+ #DOFs per field:         16384                alloc'd memory:        999.696 MiB
+ #elements:               16384
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.10354479e-02   4.94109888e-02   4.94109888e-02   2.23252171e-01
+ Linf error:     2.58968601e-01   2.43227118e-01   2.43227118e-01   9.39282114e-01
+ ∑∂S/∂U ⋅ Uₜ :  -2.32263587e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 0.4  Time steps: 48 (accepted), 48 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
using Plots
+pd = PlotData2D(sol)
+plot(pd)
Example block output

Simulation with triangular elements

Also, we can set another element type. We want to use triangles now.

using Trixi, OrdinaryDiffEq
+equations = CompressibleEulerEquations2D(1.4)
+initial_condition = initial_condition_weak_blast_wave
initial_condition_weak_blast_wave (generic function with 13 methods)

Since there is no direct equivalent to Gauss-Lobatto nodes on triangles, the approximation type SBP() now uses Gauss-Lobatto nodes on faces and special nodes in the interior of the triangular. More details can be found in the documentation of StartUpDG.jl.

dg = DGMulti(polydeg = 3,
+             element_type = Tri(),
+             approximation_type = SBP(),
+             surface_flux = flux_lax_friedrichs,
+             volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))
+
+cells_per_dimension = (32, 32)
+mesh = DGMultiMesh(dg,
+                   cells_per_dimension, # initial_refinement_level = 5
+                   coordinates_min=(-2.0, -2.0),
+                   coordinates_max=( 2.0,  2.0),
+                   periodicity=true)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,
+                                    boundary_conditions=boundary_condition_periodic)
+tspan = (0.0, 0.4)
+ode = semidiscretize(semi, tspan)
+
+alive_callback = AliveCallback(alive_interval=10)
+analysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))
+callbacks = CallbackSet(analysis_callback, alive_callback);
+
+sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,
+            ode_default_options()..., callback=callbacks);

+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       7.61000000e-07 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:         30720                alloc'd memory:        969.176 MiB
+ #elements:               30720
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
+ Linf error:     0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
+ ∑∂S/∂U ⋅ Uₜ :  -6.74736856e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 6.6947e-03 │ sim. time: 4.5960e-02 (11.490%)  │ run time: 7.8762e-01 s
+#timesteps:     20 │ Δt: 1.0524e-02 │ sim. time: 1.3699e-01 (34.249%)  │ run time: 1.5428e+00 s
+#timesteps:     30 │ Δt: 1.2096e-02 │ sim. time: 2.5197e-01 (62.993%)  │ run time: 2.3103e+00 s
+#timesteps:     40 │ Δt: 1.2622e-02 │ sim. time: 3.7597e-01 (93.993%)  │ run time: 3.1032e+00 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 42                run time:       3.26944345e+00 s
+ Δt:             1.13592115e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      4.00000000e-01 (100.000%)     time/DOF/rhs!:  2.71014062e-07 s
+                                               PID:            2.78453232e-07 s
+ #DOFs per field:         30720                alloc'd memory:        983.231 MiB
+ #elements:               30720
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.07149048e-02   4.91826834e-02   4.91814198e-02   2.22089274e-01
+ Linf error:     2.69551549e-01   2.45792366e-01   2.45935623e-01   9.34191621e-01
+ ∑∂S/∂U ⋅ Uₜ :  -1.95711055e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 0.4  Time steps: 42 (accepted), 42 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
using Plots
+pd = PlotData2D(sol)
+plot(pd)
Example block output
plot(pd["rho"])
+plot!(getmesh(pd))
Example block output

Triangular meshes on non-Cartesian domains

To use triangular meshes on a non-Cartesian domain, Trixi.jl uses the package StartUpDG.jl. The following example is based on elixir_euler_triangulate_pkg_mesh.jl and uses a pre-defined mesh from StartUpDG.jl.

using Trixi, OrdinaryDiffEq

We want to simulate the smooth initial condition initial_condition_convergence_test with source terms source_terms_convergence_test for the 2D compressible Euler equations.

equations = CompressibleEulerEquations2D(1.4)
+initial_condition = initial_condition_convergence_test
+source_terms = source_terms_convergence_test
source_terms_convergence_test (generic function with 13 methods)

We create the solver DGMulti with triangular elements (Tri()) as before.

dg = DGMulti(polydeg = 3, element_type = Tri(),
+             approximation_type=Polynomial(),
+             surface_flux = flux_lax_friedrichs,
+             volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… RefElemData{N=3, Polynomial, Tri}.                               │
+│ mortar: …………………………………………………………… nothing                                                          │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
+│ volume integral: …………………………………… VolumeIntegralFluxDifferencing                                   │
+│ │ volume flux: ………………………………………… flux_ranocha                                                     │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

StartUpDG.jl provides for instance a pre-defined Triangulate geometry for a rectangular domain with hole RectangularDomainWithHole. Other pre-defined Triangulate geometries are e.g., SquareDomain, Scramjet, and CircularDomain.

meshIO = StartUpDG.triangulate_domain(StartUpDG.RectangularDomainWithHole());

The pre-defined Triangulate geometry in StartUpDG has integer boundary tags. With DGMultiMesh we assign boundary faces based on these integer boundary tags and create a mesh compatible with Trixi.jl.

mesh = DGMultiMesh(dg, meshIO, Dict(:outer_boundary=>1, :inner_boundary=>2))
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DGMultiMesh{2, Trixi.Affine},                                                                    │
+│ ══════════════════════════════                                                                   │
+│ number of elements: …………………………… 598                                                              │
+│ number of boundaries: ……………………… 2                                                                │
+│ │ nfaces on outer_boundary: ……… 52                                                               │
+│ │ nfaces on inner_boundary: ……… 4                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
boundary_condition_convergence_test = BoundaryConditionDirichlet(initial_condition)
+boundary_conditions = (; :outer_boundary => boundary_condition_convergence_test,
+                         :inner_boundary => boundary_condition_convergence_test)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,
+                                    source_terms = source_terms,
+                                    boundary_conditions = boundary_conditions)
+
+tspan = (0.0, 0.2)
+ode = semidiscretize(semi, tspan)
+
+alive_callback = AliveCallback(alive_interval=20)
+analysis_callback = AnalysisCallback(semi, interval=200, uEltype=real(dg))
+callbacks = CallbackSet(alive_callback, analysis_callback);
+
+sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),
+            dt = 0.5 * estimate_dt(mesh, dg), save_everystep=false, callback=callbacks);

+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       9.72000000e-07 s
+ Δt:             1.49245207e-03                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:          5980                alloc'd memory:        893.050 MiB
+ #elements:                5980
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       3.93036845e-07   3.93036845e-07   3.93036845e-07   1.55064245e-06
+ Linf error:     4.47141181e-06   4.47141181e-06   4.47141181e-06   1.47933676e-05
+ ∑∂S/∂U ⋅ Uₜ :  -1.23444983e-02
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     20 │ Δt: 1.4925e-03 │ sim. time: 2.9849e-02 (14.925%)  │ run time: 5.5056e-01 s
+#timesteps:     40 │ Δt: 1.4925e-03 │ sim. time: 5.9698e-02 (29.849%)  │ run time: 1.0892e+00 s
+#timesteps:     60 │ Δt: 1.4925e-03 │ sim. time: 8.9547e-02 (44.774%)  │ run time: 1.6266e+00 s
+#timesteps:     80 │ Δt: 1.4925e-03 │ sim. time: 1.1940e-01 (59.698%)  │ run time: 2.1681e+00 s
+#timesteps:    100 │ Δt: 1.4925e-03 │ sim. time: 1.4925e-01 (74.623%)  │ run time: 2.7076e+00 s
+#timesteps:    120 │ Δt: 1.4925e-03 │ sim. time: 1.7909e-01 (89.547%)  │ run time: 3.2460e+00 s
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 0.2  Time steps: 135 (accepted), 135 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGMulti(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                135                run time:       3.65027373e+00 s
+ Δt:             1.14223386e-05                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      2.00000000e-01 (100.000%)     time/DOF/rhs!:  8.92674760e-07 s
+                                               PID:            9.01409809e-07 s
+ #DOFs per field:          5980                alloc'd memory:        900.360 MiB
+ #elements:                5980
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       4.43758204e-06   3.71131543e-06   4.42671638e-06   9.85291883e-06
+ Linf error:     6.10809367e-05   4.53698746e-05   6.62331341e-05   1.25625347e-04
+ ∑∂S/∂U ⋅ Uₜ :  -1.03046341e-02
+────────────────────────────────────────────────────────────────────────────────────────────────────
using Plots
+pd = PlotData2D(sol)
+plot(pd["rho"])
+plot!(getmesh(pd))
Example block output

For more information, please have a look in the StartUpDG.jl documentation.

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "StartUpDG", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+ [472ebc20] StartUpDG v0.17.7
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  and  have new versions available. Those with  may be upgradable, but those with  are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/DGMulti_2/index.html b/v0.8.7/tutorials/DGMulti_2/index.html new file mode 100644 index 0000000000..e682a515dd --- /dev/null +++ b/v0.8.7/tutorials/DGMulti_2/index.html @@ -0,0 +1,37 @@ + +9 Other SBP schemes (FD, CGSEM) via DGMulti solver · Trixi.jl

9: Other SBP schemes (FD, CGSEM) via DGMulti solver

For a tutorial about DG schemes via the DGMulti solver please visit the previous tutorial. The DGMulti solver also supports other methods than DG. The important property a method has to fulfill is the summation-by-parts (SBP) property. The package SummationByPartsOperators.jl provides such methods, like a finite difference SBP (FD SBP) scheme. To do this, you need to create an SBP derivative operator and pass that as approximation_type to the DGMulti constructor. For example, the classical second-order FD SBP operator can be created as

using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly
+D = derivative_operator(MattssonNordström2004(), derivative_order=1, accuracy_order=2,
+                        xmin=0.0, xmax=1.0, N=11)
SBP first-derivative operator of order 2 on a grid in [0.0, 1.0] using 11 nodes 
+and coefficients of Mattsson, Nordström (2004) 
+  Summation by parts operators for finite difference approximations of second 
+    derivatives. 
+  Journal of Computational Physics 199, pp. 503-540.

Here, the arguments xmin and xmax do not matter beyond setting the real type used for the operator - they just set a reference element and are rescaled on the physical elements. The parameter N determines the number of finite difference nodes. Then, D can be used as approximation_type like SBP() in a multi-block fashion. In multiple dimensions, such a 1D SBP operator will be used in a tensor product fashion, i.e., in each coordinate direction. In particular, you can use them only on 1D, 2D Quad(), and 3D Hex() elements.

You can also use fully periodic single-block FD methods by creating a periodic SBP operator. For example, a fully periodic FD operator can be constructed as

D = periodic_derivative_operator(derivative_order=1, accuracy_order=2,
+                                 xmin=0.0, xmax=1.0, N=11)
Periodic first-derivative operator of order 2 on a grid in [0.0, 1.0] using 11 nodes, 
+stencils with 1 nodes to the left, 1 nodes to the right, and coefficients of Fornberg (1998) 
+  Calculation of Weights in Finite Difference Formulas. 
+  SIAM Rev. 40.3, pp. 685-691.

An example using such an FD method is implemented in elixir_euler_fdsbp_periodic.jl. For all parameters and other calling options, please have a look in the documentation of SummationByPartsOperators.jl.

Another possible method is for instance a continuous Galerkin (CGSEM) method. You can use such a method with polynomial degree of 3 (N=4 Legendre Lobatto nodes on [0, 1]) coupled continuously on a uniform mesh with Nx=10 elements by setting approximation_type to

using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly
+D = couple_continuously(legendre_derivative_operator(xmin=0.0, xmax=1.0, N=4),
+                        UniformPeriodicMesh1D(xmin=-1.0, xmax=1.0, Nx=10))
First derivative operator {T=Float64} on 4 Lobatto Legendre nodes in [0.0, 1.0]
+coupled continuously on SummationByPartsOperators.UniformPeriodicMesh1D{Float64} with 10 cells in (-1.0, 1.0)

To choose a discontinuous coupling (DGSEM), use couple_discontinuously() instead of couple_continuously().

For more information and other SBP operators, see the documentations of StartUpDG.jl and SummationByPartsOperators.jl.

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "StartUpDG", "SummationByPartsOperators"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [472ebc20] StartUpDG v0.17.7
+  [9f78cca6] SummationByPartsOperators v0.5.68
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/DGSEM_FluxDiff/5b21be8b.svg b/v0.8.7/tutorials/DGSEM_FluxDiff/5b21be8b.svg new file mode 100644 index 0000000000..c538fa7b51 --- /dev/null +++ b/v0.8.7/tutorials/DGSEM_FluxDiff/5b21be8b.svg @@ -0,0 +1,4119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGSEM_FluxDiff/ef97aff0.svg b/v0.8.7/tutorials/DGSEM_FluxDiff/ef97aff0.svg new file mode 100644 index 0000000000..06ad0060eb --- /dev/null +++ b/v0.8.7/tutorials/DGSEM_FluxDiff/ef97aff0.svg @@ -0,0 +1,2874 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/DGSEM_FluxDiff/index.html b/v0.8.7/tutorials/DGSEM_FluxDiff/index.html new file mode 100644 index 0000000000..863be741ee --- /dev/null +++ b/v0.8.7/tutorials/DGSEM_FluxDiff/index.html @@ -0,0 +1,167 @@ + +4 DGSEM with flux differencing · Trixi.jl

4: DGSEM with flux differencing

This tutorial starts with a presentation of the weak formulation of the discontinuous Galerkin spectral element method (DGSEM) in order to fix the notation of the used operators. Then, the DGSEM formulation with flux differencing (split form DGSEM) and its implementation in Trixi.jl is shown.

We start with the one-dimensional conservation law

\[u_t + f(u)_x = 0, \qquad t\in \mathbb{R}^+, x\in\Omega\]

with the physical flux $f$.

We split the domain $\Omega$ into elements $K$ with center $x_K$ and size $\Delta x$. With the transformation mapping $x(\xi)=x_K + \frac{\Delta x}{2} \xi$ we can transform the reference element $[-1,1]$ to every physical element. So, the equation can be restricted to the reference element using the determinant of the Jacobian matrix of the transformation mapping $J=\frac{\partial x}{\partial \xi}=\frac{\Delta x}{2}$.

\[J u_t + f(u)_{\xi} = 0, \qquad t\in \mathbb{R}^+, \xi\in [-1,1]\]

The weak form of the DGSEM

We consider the so-called discontinuous Galerkin spectral element method (DGSEM) with collocation. It results from choosing a nodal DG ansatz using $N+1$ Gauss-Lobatto nodes $\xi_i$ in $[-1,1]$ with matching interpolation weights $w_i$, which are used for numerical integration and interpolation with the Lagrange polynomial basis $l_i$ of degree $N$. The Lagrange functions are created with those nodes and hence fulfil a Kronecker property at the GL nodes. The weak formulation of the DGSEM for one element is

\[J \underline{\dot{u}}(t) = - M^{-1} B \underline{f}^* + M^{-1} D^T M \underline{f}\]

where $\underline{u}=(u_0, u_1, \dots, u_N)^T\in\mathbb{R}^{N+1}$ is the collected pointwise evaluation of $u$ at the discretization nodes and $\dot{u} = \partial u / \partial t = u_t$ is the temporal derivative. The nodal values of the flux function $f$ results with collocation in $\underline{f}$, since $\underline{f}_j=f(\underline{u}_j)$. Moreover, we got the numerical flux $f^*=f^*(u^-, u^+)$.

We will now have a short overview over the operators we used.

The derivative matrix $D\in\mathbb{R}^{(N+1)\times (N+1)}$ mimics a spatial derivation on a discrete level with $\underline{f}_x \approx D \underline{f}$. It is defined by $D_{ij} = l_j'(\xi_i)$.

The diagonal mass matrix $M$ is defined by $M_{ij}=\langle l_j, l_i\rangle_N$ with the numerical scalar product $\langle \cdot, \cdot\rangle_N$ defined for functions $f$ and $g$ by

\[\langle f, g\rangle_N := \int_{-1, N}^1 f(\xi) g(\xi) d\xi := \sum_{k=0}^N f(\xi_k) g(\xi_k) w_k.\]

The multiplication by $M$ matches a discrete integration

\[ \int_{-1}^1 f(\xi) \underline{l}(\xi) d\xi \approx M \underline{f},\]

The boundary matrix $B=\text{diag}([-1, 0,..., 0, 1])$ represents an evaluation of a function at the boundaries $\xi_0=-1$ and $\xi_N=1$.

For these operators the following property holds:

\[ M D + (M D)^T = B.\]

This is called the summation-by-parts (SBP) property since it mimics integration by parts on a discrete level (Gassner (2013)).

The explicit definitions of the operators and the construction of the 1D algorithm can be found for instance in the tutorial introduction to DG methods or in more detail in Kopriva (2009).

This property shows the equivalence between the weak form and the following strong formulation of the DGSEM.

\[\begin{align*} +J \underline{\dot{u}}(t) +&= - M^{-1} B \underline{f}^* + M^{-1} D^T M \underline{f}\\[5pt] +&= - M^{-1} B \underline{f}^* + M^{-1} (B - MD) \underline{f}\\[5pt] +&= - M^{-1} B (\underline{f}^* - \underline{f}) - D \underline{f} +\end{align*}\]

More information about the equivalence you can find in Kopriva, Gassner (2010).

DGSEM with flux differencing

When using the diagonal SBP property it is possible to rewrite the application of the derivative operator $D$ in the calculation of the volume integral into a subcell based finite volume type differencing formulation (Fisher, Carpenter (2013)). Generalizing

\[(D \underline{f})_i = \sum_j D_{i,j} \underline{f}_j += 2\sum_j \frac{1}{2} D_{i,j} (\underline{f}_j + \underline{f}_i) +\eqqcolon 2\sum_j D_{i,j} f_\text{central}(u_i, u_j),\]

we replace $D \underline{f}$ in the strong form by $2D \underline{f}_{vol}(u^-, u^+)$ with the consistent two-point volume flux $f_{vol}$ and receive the DGSEM formulation with flux differencing (split form DGSEM) (Gassner, Winters, Kopriva (2016)).

\[\begin{align*} +J \underline{\dot{u}}(t) &= - M^{-1} B (\underline{f}^* - \underline{f}) - 2D \underline{f}_{vol}(u^-, u^+)\\[5pt] +&= - M^{-1} B (\underline{f}^* - \underline{f}_{vol}(\underline{u}, \underline{u})) - 2D \underline{f}_{vol}(u^-, u^+)\\[5pt] +&= - M^{-1} B \underline{f}_{surface}^* - (2D - M^{-1} B) \underline{f}_{vol}\\[5pt] +&= - M^{-1} B \underline{f}_{surface}^* - D_{split} \underline{f}_{vol} +\end{align*}\]

This formulation is in a weak form type formulation and can be implemented by using the derivative split matrix $D_{split}=(2D-M^{-1}B)$ and two different fluxes. We divide between the surface flux $f=f_{surface}$ used for the numerical flux $f_{surface}^*$ and the already mentioned volume flux $f_{vol}$ especially for this formulation.

This formulation creates a more stable version of DGSEM, because it fulfils entropy stability. Moreover it allows the construction of entropy conserving discretizations without relying on exact integration. This is achieved when using a two-point entropy conserving flux function as volume flux in the volume flux differencing formulation. Then, the numerical surface flux can be used to control the dissipation of the discretization and to guarantee decreasing entropy, i.e. entropy stability.

Implementation in Trixi.jl

Now, we have a look at the implementation of DGSEM with flux differencing with Trixi.jl.

using OrdinaryDiffEq, Trixi

We implement a simulation for the compressible Euler equations in 2D

\[\partial_t \begin{pmatrix} \rho \\ \rho v_1 \\ \rho v_2 \\ \rho e \end{pmatrix} ++ \partial_x \begin{pmatrix} \rho v_1 \\ \rho v_1^2 + p \\ \rho v_1 v_2 \\ (\rho e +p) v_1 \end{pmatrix} ++ \partial_y \begin{pmatrix} \rho v_2 \\ \rho v_1 v_2 \\ \rho v_2^2 + p \\ (\rho e +p) v_2 \end{pmatrix} += \begin{pmatrix} 0 \\ 0 \\ 0 \\ 0 \end{pmatrix}\]

for an ideal gas with ratio of specific heats $\gamma=1.4$. Here, $\rho$ is the density, $v_1$, $v_2$ the velocities, $e$ the specific total energy and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2+v_2^2) \right)\]

the pressure.

gamma = 1.4
+equations = CompressibleEulerEquations2D(gamma)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ CompressibleEulerEquations2D                                                                     │
+│ ════════════════════════════                                                                     │
+│ #variables: ………………………………………………… 4                                                                │
+│ │ variable 1: …………………………………………… rho                                                              │
+│ │ variable 2: …………………………………………… rho_v1                                                           │
+│ │ variable 3: …………………………………………… rho_v2                                                           │
+│ │ variable 4: …………………………………………… rho_e                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

As our initial condition we will use a weak blast wave from Hennemann, Gassner (2020). The primitive variables are defined by

\[\begin{pmatrix} \rho \\ v_1 \\ v_2 \\ p \end{pmatrix} += \begin{pmatrix} 1.0 \\ 0.0 \\ 0.0 \\ 1.0 \end{pmatrix} \text{if } \|x\|_2 > 0.5,\; +\text{and } \begin{pmatrix} \rho \\ v_1 \\ v_2 \\ p \end{pmatrix} += \begin{pmatrix} 1.1691 \\ 0.1882 * \cos(\phi) \\ 0.1882 * \sin(\phi) \\ 1.245 \end{pmatrix} \text{else}\]

with $\phi = \tan^{-1}(\frac{x_2}{x_1})$.

This initial condition is implemented in Trixi.jl under the name initial_condition_weak_blast_wave.

initial_condition = initial_condition_weak_blast_wave
initial_condition_weak_blast_wave (generic function with 13 methods)

In Trixi.jl, flux differencing for the volume integral can be implemented with VolumeIntegralFluxDifferencing using symmetric two-point volume fluxes. First, we set up a simulation with the entropy conserving and kinetic energy preserving flux flux_ranocha by Hendrik Ranocha (2018) as surface and volume flux.

We will confirm the entropy conservation property numerically.

volume_flux = flux_ranocha # = f_vol
+solver = DGSEM(polydeg=3, surface_flux=volume_flux,
+               volume_integral=VolumeIntegralFluxDifferencing(volume_flux))
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_ranocha                                                     │
+│ volume integral: …………………………………… VolumeIntegralFluxDifferencing                                   │
+│ │ volume flux: ………………………………………… flux_ranocha                                                     │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Now, we implement Trixi.jl's mesh, semi and ode in a simple framework. For more information please have a look at the documentation, the basic tutorial introduction to DG methods or some basic elixirs.

coordinates_min = (-2.0, -2.0)
+coordinates_max = ( 2.0,  2.0)
+mesh = TreeMesh(coordinates_min, coordinates_max,
+                initial_refinement_level=5,
+                n_cells_max=10_000,
+                periodicity=true)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
+                                    boundary_conditions=boundary_condition_periodic)
+
+# ODE solvers
+tspan = (0.0, 0.4)
+ode = semidiscretize(semi, tspan);

To analyse the entropy conservation of the approximation, we will use the analysis calllback implemented in Trixi. It provides some information about the approximation including the entropy change.

analysis_callback = AnalysisCallback(semi, interval=100);

We now run the simulation using flux_ranocha for both surface and volume flux.

sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,
+            ode_default_options()..., callback=analysis_callback);

+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       7.51000000e-07 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:         16384                alloc'd memory:       1030.002 MiB
+ #elements:                1024
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.25621384e-03   5.88786362e-03   5.81457821e-03   2.34267393e-02
+ Linf error:     1.06470791e-01   2.46283676e-01   1.37585923e-01   3.98685775e-01
+ ∑∂S/∂U ⋅ Uₜ :  -6.42679631e-18
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 61                run time:       8.48226642e-01 s
+ Δt:             2.65388338e-06                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      4.00000000e-01 (100.000%)     time/DOF/rhs!:  8.73153557e-08 s
+                                               PID:            9.32996633e-08 s
+ #DOFs per field:         16384                alloc'd memory:       1036.090 MiB
+ #elements:                1024
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.17814257e-02   5.02178088e-02   5.02253900e-02   2.25981851e-01
+ Linf error:     2.91149630e-01   3.21787795e-01   3.22040740e-01   1.04645370e+00
+ ∑∂S/∂U ⋅ Uₜ :  -5.22953111e-18
+────────────────────────────────────────────────────────────────────────────────────────────────────

A look at the change in entropy $\sum \partial S/\partial U \cdot U_t$ in the analysis callback confirms that the flux is entropy conserving since the change is about machine precision.

We can plot the approximated solution at the time t=0.4.

using Plots
+plot(sol)
Example block output

Now, we can use for instance the dissipative flux flux_lax_friedrichs as surface flux to get an entropy stable method.

using OrdinaryDiffEq, Trixi
+
+gamma = 1.4
+equations = CompressibleEulerEquations2D(gamma)
+
+initial_condition = initial_condition_weak_blast_wave
+
+volume_flux = flux_ranocha # = f_vol
+solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs,
+               volume_integral=VolumeIntegralFluxDifferencing(volume_flux))
+
+coordinates_min = (-2.0, -2.0)
+coordinates_max = ( 2.0,  2.0)
+mesh = TreeMesh(coordinates_min, coordinates_max,
+                initial_refinement_level=5,
+                n_cells_max=10_000,
+                periodicity=true)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
+                                    boundary_conditions=boundary_condition_periodic)
+
+# ODE solvers
+tspan = (0.0, 0.4)
+ode = semidiscretize(semi, tspan);
+
+analysis_callback = AnalysisCallback(semi, interval=100);

We now run the simulation using the volume flux flux_ranocha and surface flux flux_lax_friedrichs.

sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,
+            ode_default_options()..., callback=analysis_callback);

+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       7.91000000e-07 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:         16384                alloc'd memory:        928.178 MiB
+ #elements:                1024
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.25621384e-03   5.88786362e-03   5.81457821e-03   2.34267393e-02
+ Linf error:     1.06470791e-01   2.46283676e-01   1.37585923e-01   3.98685775e-01
+ ∑∂S/∂U ⋅ Uₜ :  -6.33192862e-18
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 37                run time:       5.10102112e-01 s
+ Δt:             9.70561500e-03                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      4.00000000e-01 (100.000%)     time/DOF/rhs!:  8.57516652e-08 s
+                                               PID:            9.18316974e-08 s
+ #DOFs per field:         16384                alloc'd memory:        934.264 MiB
+ #elements:                1024
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.13073745e-02   4.96545958e-02   4.96554717e-02   2.24251907e-01
+ Linf error:     2.61815838e-01   2.48816692e-01   2.48316760e-01   9.30972696e-01
+ ∑∂S/∂U ⋅ Uₜ :  -1.40306972e-04
+────────────────────────────────────────────────────────────────────────────────────────────────────

The change in entropy confirms the expected entropy stability.

using Plots
+plot(sol)
Example block output

Of course, you can use more than these two fluxes in Trixi. Here, we will give a short list of possible fluxes for the compressible Euler equations. For the volume flux Trixi.jl provides for example flux_ranocha, flux_shima_etal, flux_chandrashekar, flux_kennedy_gruber. As surface flux you can use all volume fluxes and additionally for instance flux_lax_friedrichs, flux_hll, flux_hllc.

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/adaptive_mesh_refinement/4a9757f6.svg b/v0.8.7/tutorials/adaptive_mesh_refinement/4a9757f6.svg new file mode 100644 index 0000000000..8c34abd602 --- /dev/null +++ b/v0.8.7/tutorials/adaptive_mesh_refinement/4a9757f6.svg @@ -0,0 +1,1528 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adaptive_mesh_refinement/index.html b/v0.8.7/tutorials/adaptive_mesh_refinement/index.html new file mode 100644 index 0000000000..505a30c552 --- /dev/null +++ b/v0.8.7/tutorials/adaptive_mesh_refinement/index.html @@ -0,0 +1,92 @@ + +15 Adaptive mesh refinement · Trixi.jl

15: Adaptive mesh refinement

Adaptive mesh refinement (AMR) is a method of adapting the resolution of the numerical method to the solution features such as turbulent regions or shocks. In those critical regions of the domain, we want the simulation to use elements with smaller mesh sizes compared to other regions. This should be automatically and dynamically adapted during the run of the simulation.

Implementation in Trixi.jl

In Trixi.jl, AMR is possible for the mesh types TreeMesh and P4estMesh. Both meshes are organized in a tree structure and therefore, each element can be refined independently. In Trixi.jl, AMR is restricted to a 2:1 refinement ratio between neighbor elements. This means that the maximum resolution difference of neighboring elements is a factor of two.

The implementation of AMR is divided into different steps. The basic refinement setting contains an indicator and a controller. These are added to the simulation by using an AMR callback.

Indicators

An indicator estimates the current accuracy of the numerical approximation. It indicates which regions of the domain need finer or coarser resolutions. In Trixi.jl, you can use for instance IndicatorLöhner and IndicatorHennemannGassner.

IndicatorLöhner (also callable with IndicatorLoehner) is an interpretation and adaptation of a FEM indicator by Löhner (1987) and estimates a weighted second derivative of a specified variable locally.

amr_indicator = IndicatorLöhner(semi, variable=variable)

All indicators have the parameter variable which is used to specify the variable for the indicator calculation. You can use for instance density, pressure or density_pressure for the compressible Euler equations. Moreover, you have the option to use simply the first conservation variable with first for any equations. This might be a good choice for a starting example.

IndicatorHennemannGassner, also used as a shock-capturing indicator, was developed by Hennemann et al. (2021) and is explained in detail in the tutorial about shock-capturing. It can be constructed as follows.

amr_indicator = IndicatorHennemannGassner(semi,
+                                          alpha_max=0.5,
+                                          alpha_min=0.001,
+                                          alpha_smooth=true,
+                                          variable=variable)

Another indicator is the very basic IndicatorMax. It indicates the maximal value of a variable and is therefore mostly used for verification and testing. But it might be useful for the basic understanding of the implementation of indicators and AMR in Trixi.jl.

amr_indicator = IndicatorMax(semi, variable=variable)

Controllers

The spatial discretization into elements is tree-based for both AMR supporting mesh types TreeMesh and P4estMesh. Thus, the higher the level in the tree the higher the level of refinement. For instance, a mesh element of level 3 has double resolution in each direction compared to another element with level 2.

To map specific indicator values to a desired level of refinement, Trixi.jl uses controllers. They are build in three levels: There is a base level of refinement base_level, which is the minimum allowed refinement level. Then, there is a medium level med_level, which corresponds to the initial level of refinement, for indicator values above the threshold med_threshold and equally, a maximal level max_level for values above max_threshold. This variant of controller is called ControllerThreeLevel in Trixi.jl.

amr_controller = ControllerThreeLevel(semi, amr_indicator;
+                                      base_level=4,
+                                      med_level=5, med_threshold=0.1,
+                                      max_level=6, max_threshold=0.6)

You can also set med_level=0 to use the current level as target, see the docstring of ControllerThreeLevel.

An extension is ControllerThreeLevelCombined, which uses two different indicators. The primary indicator works the same as the single indicator for ControllerThreeLevel. The second indicator with its own maximum threshold adds the property, that the target level is set to max_level additionally if this indicator's value is greater than max_threshold_secondary. This is for instance used to assure that a shock has always the maximum refinement level.

amr_controller = ControllerThreeLevelCombined(semi, indicator_primary, indicator_secondary;
+                                              base_level=2,
+                                              med_level=6, med_threshold=0.0003,
+                                              max_level=8, max_threshold=0.003,
+                                              max_threshold_secondary=0.3)

This controller is for instance used in elixir_euler_astro_jet_amr.jl.

Callback

The AMR indicator and controller are added to the simulation through the callback AMRCallback. It contains a semidiscretization semi, the controller amr_controller and the parameters interval, adapt_initial_condition, and adapt_initial_condition_only_refine.

Adaptive mesh refinement will be performed every interval time steps. adapt_initial_condition indicates whether the initial condition already should be adapted before the first time step. And with adapt_initial_condition_only_refine=true the mesh is only refined at the beginning but not coarsened.

amr_callback = AMRCallback(semi, amr_controller,
+                           interval=5,
+                           adapt_initial_condition=true,
+                           adapt_initial_condition_only_refine=true)

Exemplary simulation

Here, we want to implement a simple AMR simulation of the 2D linear advection equation for a Gaussian pulse.

using OrdinaryDiffEq
+using Trixi
+
+advection_velocity = (0.2, -0.7)
+equations = LinearScalarAdvectionEquation2D(advection_velocity)
+
+initial_condition = initial_condition_gauss
+solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
+
+coordinates_min = (-5.0, -5.0)
+coordinates_max = ( 5.0,  5.0)
+mesh = TreeMesh(coordinates_min, coordinates_max,
+                initial_refinement_level=4,
+                n_cells_max=30_000)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)
+
+
+tspan = (0.0, 10.0)
+ode = semidiscretize(semi, tspan);

For the best understanding about indicators and controllers, we use the simple AMR indicator IndicatorMax. As described before, it returns the maximal value of the specified variable (here the only conserved variable). Therefore, regions with a high maximum are refined. This is not really useful numerical application, but a nice demonstration example.

amr_indicator = IndicatorMax(semi, variable=first)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ IndicatorMax                                                                                     │
+│ ════════════                                                                                     │
+│ indicator variable: …………………………… first                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

These values are transferred to a refinement level with the ControllerThreeLevel, such that every element with maximal value greater than 0.1 is refined once and elements with maximum above 0.6 are refined twice.

amr_controller = ControllerThreeLevel(semi, amr_indicator,
+                                      base_level=4,
+                                      med_level=5, med_threshold=0.1,
+                                      max_level=6, max_threshold=0.6)
+
+amr_callback = AMRCallback(semi, amr_controller,
+                           interval=5,
+                           adapt_initial_condition=true,
+                           adapt_initial_condition_only_refine=true)
+
+stepsize_callback = StepsizeCallback(cfl=0.9)
+
+callbacks = CallbackSet(amr_callback, stepsize_callback);

Running the simulation.

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),
+            dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
+            save_everystep=false, callback=callbacks);

We plot the solution and add the refined mesh at the end of the simulation.

using Plots
+pd = PlotData2D(sol)
+plot(pd)
+plot!(getmesh(pd))
Example block output

More examples

Trixi.jl provides many elixirs using AMR. We want to give some examples for different mesh types:

Animations of more interesting and complicated AMR simulations can be found below and on Trixi.jl's youtube channel "Trixi Framework".

First, we give a purely hyperbolic simulation of a Sedov blast wave with self-gravity. This simulation uses the mesh type TreeMesh as we did and the AMR indicator IndicatorHennemannGassner.

+

Source: Trixi.jl's YouTube channel Trixi Framework

The next example is a numerical simulation of an ideal MHD rotor on an unstructured AMR mesh. The used mesh type is a P4estMesh.

+

Source: Trixi.jl's YouTube channel Trixi Framework

For more information, please have a look at the respective links.

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/adding_new_parabolic_terms/abcc9dd1.svg b/v0.8.7/tutorials/adding_new_parabolic_terms/abcc9dd1.svg new file mode 100644 index 0000000000..dafe1a34fb --- /dev/null +++ b/v0.8.7/tutorials/adding_new_parabolic_terms/abcc9dd1.svg @@ -0,0 +1,764 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_new_parabolic_terms/index.html b/v0.8.7/tutorials/adding_new_parabolic_terms/index.html new file mode 100644 index 0000000000..796f6a8c1f --- /dev/null +++ b/v0.8.7/tutorials/adding_new_parabolic_terms/index.html @@ -0,0 +1,95 @@ + +14 Adding new parabolic terms · Trixi.jl

14: Adding new parabolic terms

This demo illustrates the steps involved in adding new parabolic terms for the scalar advection equation. In particular, we will add an anisotropic diffusion. We begin by defining the hyperbolic (advection) part of the advection-diffusion equation.

using OrdinaryDiffEq
+using Trixi
+
+
+advection_velocity = (1.0, 1.0)
+equations_hyperbolic = LinearScalarAdvectionEquation2D(advection_velocity);

Define a new parabolic equation type

Next, we define a 2D parabolic diffusion term type. This is similar to LaplaceDiffusion2D except that the diffusivity field refers to a spatially constant diffusivity matrix now. Note that ConstantAnisotropicDiffusion2D has a field for equations_hyperbolic. It is useful to have information about the hyperbolic system available to the parabolic part so that we can reuse functions defined for hyperbolic equations (such as varnames).

The abstract type Trixi.AbstractEquationsParabolic has three parameters: NDIMS (the spatial dimension, e.g., 1D, 2D, or 3D), NVARS (the number of variables), and GradientVariable, which we set as GradientVariablesConservative. This indicates that the gradient should be taken with respect to the conservative variables (e.g., the same variables used in equations_hyperbolic). Users can also take the gradient with respect to a different set of variables; see, for example, the implementation of CompressibleNavierStokesDiffusion2D, which can utilize either "primitive" or "entropy" variables.

struct ConstantAnisotropicDiffusion2D{E, T} <: Trixi.AbstractEquationsParabolic{2, 1, GradientVariablesConservative}
+  diffusivity::T
+  equations_hyperbolic::E
+end
+
+varnames(variable_mapping, equations_parabolic::ConstantAnisotropicDiffusion2D) =
+  varnames(variable_mapping, equations_parabolic.equations_hyperbolic)
varnames (generic function with 1 method)

Next, we define the viscous flux function. We assume that the mixed hyperbolic-parabolic system is of the form

\[\partial_t u(t,x) + \partial_x (f_1(u) - g_1(u, \nabla u)) + + \partial_y (f_2(u) - g_2(u, \nabla u)) = 0\]

where $f_1(u)$, $f_2(u)$ are the hyperbolic fluxes and $g_1(u, \nabla u)$, $g_2(u, \nabla u)$ denote the viscous fluxes. For anisotropic diffusion, the viscous fluxes are the first and second components of the matrix-vector product involving diffusivity and the gradient vector.

Here, we specialize the flux to our new parabolic equation type ConstantAnisotropicDiffusion2D.

function Trixi.flux(u, gradients, orientation::Integer, equations_parabolic::ConstantAnisotropicDiffusion2D)
+  @unpack diffusivity = equations_parabolic
+  dudx, dudy = gradients
+  if orientation == 1
+    return SVector(diffusivity[1, 1] * dudx + diffusivity[1, 2] * dudy)
+  else # if orientation == 2
+    return SVector(diffusivity[2, 1] * dudx + diffusivity[2, 2] * dudy)
+  end
+end

Defining boundary conditions

Trixi.jl's implementation of parabolic terms discretizes both the gradient and divergence using weak formulation. In other words, we discretize the system

\[\begin{aligned} +\bm{q} &= \nabla u \\ +\bm{\sigma} &= \begin{pmatrix} g_1(u, \bm{q}) \\ g_2(u, \bm{q}) \end{pmatrix} \\ +\text{viscous contribution } &= \nabla \cdot \bm{\sigma} +\end{aligned}\]

Boundary data must be specified for all spatial derivatives, e.g., for both the gradient equation $\bm{q} = \nabla u$ and the divergence of the viscous flux $\nabla \cdot \bm{\sigma}$. We account for this by introducing internal Gradient and Divergence types which are used to dispatch on each type of boundary condition.

As an example, let us introduce a Dirichlet boundary condition with constant boundary data.

struct BoundaryConditionConstantDirichlet{T <: Real}
+  boundary_value::T
+end

This boundary condition contains only the field boundary_value, which we assume to be some real-valued constant which we will impose as the Dirichlet data on the boundary.

Boundary conditions have generally been defined as "callable structs" (also known as "functors"). For each boundary condition, we need to specify the appropriate boundary data to return for both the Gradient and Divergence. Since the gradient is operating on the solution u, the boundary data should be the value of u, and we can directly impose Dirichlet data.

@inline function (boundary_condition::BoundaryConditionConstantDirichlet)(flux_inner, u_inner, normal::AbstractVector,
+                                                                          x, t, operator_type::Trixi.Gradient,
+                                                                          equations_parabolic::ConstantAnisotropicDiffusion2D)
+  return boundary_condition.boundary_value
+end

While the gradient acts on the solution u, the divergence acts on the viscous flux $\bm{\sigma}$. Thus, we have to supply boundary data for the Divergence operator that corresponds to $\bm{\sigma}$. However, we've already imposed boundary data on u for a Dirichlet boundary condition, and imposing boundary data for $\bm{\sigma}$ might overconstrain our problem.

Thus, for the Divergence boundary data under a Dirichlet boundary condition, we simply return flux_inner, which is boundary data for $\bm{\sigma}$ computed using the "inner" or interior solution. This way, we supply boundary data for the divergence operation without imposing any additional conditions.

@inline function (boundary_condition::BoundaryConditionConstantDirichlet)(flux_inner, u_inner, normal::AbstractVector,
+                                                                          x, t, operator_type::Trixi.Divergence,
+                                                                          equations_parabolic::ConstantAnisotropicDiffusion2D)
+  return flux_inner
+end

A note on the choice of gradient variables

It is often simpler to transform the solution variables (and solution gradients) to another set of variables prior to computing the viscous fluxes (see CompressibleNavierStokesDiffusion2D for an example of this). If this is done, then the boundary condition for the Gradient operator should be modified accordingly as well.

Putting things together

Finally, we can instantiate our new parabolic equation type, define boundary conditions, and run a simulation. The specific anisotropic diffusion matrix we use produces more dissipation in the direction $(1, -1)$ as an isotropic diffusion.

For boundary conditions, we impose that $u=1$ on the left wall, $u=2$ on the bottom wall, and $u = 0$ on the outflow walls. The initial condition is taken to be $u = 0$. Note that we use BoundaryConditionConstantDirichlet only for the parabolic boundary conditions, since we have not defined its behavior for the hyperbolic part.

using Trixi: SMatrix
+diffusivity = 5.0e-2 * SMatrix{2, 2}([2 -1; -1 2])
+equations_parabolic = ConstantAnisotropicDiffusion2D(diffusivity, equations_hyperbolic);
+
+boundary_conditions_hyperbolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1.0)),
+                                    y_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(2.0)),
+                                    y_pos = boundary_condition_do_nothing,
+                                    x_pos = boundary_condition_do_nothing)
+
+boundary_conditions_parabolic = (; x_neg = BoundaryConditionConstantDirichlet(1.0),
+                                   y_neg = BoundaryConditionConstantDirichlet(2.0),
+                                   y_pos = BoundaryConditionConstantDirichlet(0.0),
+                                   x_pos = BoundaryConditionConstantDirichlet(0.0));
+
+solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
+coordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))
+coordinates_max = ( 1.0,  1.0) # maximum coordinates (max(x), max(y))
+mesh = TreeMesh(coordinates_min, coordinates_max,
+                initial_refinement_level=4,
+                periodicity=false, n_cells_max=30_000) # set maximum capacity of tree data structure
+
+initial_condition = (x, t, equations) -> SVector(0.0)
+
+semi = SemidiscretizationHyperbolicParabolic(mesh,
+                                             (equations_hyperbolic, equations_parabolic),
+                                             initial_condition, solver;
+                                             boundary_conditions=(boundary_conditions_hyperbolic,
+                                                                  boundary_conditions_parabolic))
+
+tspan = (0.0, 2.0)
+ode = semidiscretize(semi, tspan)
+callbacks = CallbackSet(SummaryCallback())
+time_int_tol = 1.0e-6
+sol = solve(ode, RDPK3SpFSAL49(); abstol=time_int_tol, reltol=time_int_tol,
+            ode_default_options()..., callback=callbacks);
+
+using Plots
+plot(sol)
Example block output

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/adding_new_scalar_equations/049e0dba.svg b/v0.8.7/tutorials/adding_new_scalar_equations/049e0dba.svg new file mode 100644 index 0000000000..684b2a4447 --- /dev/null +++ b/v0.8.7/tutorials/adding_new_scalar_equations/049e0dba.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_new_scalar_equations/26c54e74.svg b/v0.8.7/tutorials/adding_new_scalar_equations/26c54e74.svg new file mode 100644 index 0000000000..ffcdd7ec34 --- /dev/null +++ b/v0.8.7/tutorials/adding_new_scalar_equations/26c54e74.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_new_scalar_equations/5d24a474.svg b/v0.8.7/tutorials/adding_new_scalar_equations/5d24a474.svg new file mode 100644 index 0000000000..af58b65390 --- /dev/null +++ b/v0.8.7/tutorials/adding_new_scalar_equations/5d24a474.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_new_scalar_equations/96bfeb93.svg b/v0.8.7/tutorials/adding_new_scalar_equations/96bfeb93.svg new file mode 100644 index 0000000000..192d796c12 --- /dev/null +++ b/v0.8.7/tutorials/adding_new_scalar_equations/96bfeb93.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_new_scalar_equations/ebe018c6.svg b/v0.8.7/tutorials/adding_new_scalar_equations/ebe018c6.svg new file mode 100644 index 0000000000..99ff54244f --- /dev/null +++ b/v0.8.7/tutorials/adding_new_scalar_equations/ebe018c6.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_new_scalar_equations/index.html b/v0.8.7/tutorials/adding_new_scalar_equations/index.html new file mode 100644 index 0000000000..c9bdb3a482 --- /dev/null +++ b/v0.8.7/tutorials/adding_new_scalar_equations/index.html @@ -0,0 +1,206 @@ + +11 Adding a new scalar conservation law · Trixi.jl

11: Adding a new scalar conservation law

If you want to use Trixi.jl for your own research, you might be interested in a new physics model that's not already included in Trixi.jl. In this tutorial, we will implement the cubic conservation law

\[\partial_t u(t,x) + \partial_x u(t,x)^3 = 0\]

in a periodic domain in one space dimension. In Trixi.jl, such a mathematical model is encoded as a subtype of Trixi.AbstractEquations.

Basic setup

using Trixi
+
+struct CubicEquation <: Trixi.AbstractEquations{1 #= number of spatial dimensions =#,
+                                                1 #= number of primary variables, i.e. scalar =#};
+end

We create CubicEquation as an empty struct since we do not use any parameters for this equation. Other models could bundle arbitrary parameters, e.g., the ideal gas constant for the compressible Euler equations.

Next, we define the physical flux f(u) = u^3 using the calling structure used in Trixi.jl.

Trixi.flux(u, orientation, equation::CubicEquation) = u.^3
+Trixi.varnames(_, ::CubicEquation) = ("scalar",)

In Trixi.jl, the conserved variables u are usually passed as SVectors of variables at a single physical location. Hence, we must use u.^3 instead of the scalar operation u^3.

That's already enough to run a simple simulation with a standard DGSEM discretization using the non-dissipative central flux at interfaces.

using OrdinaryDiffEq
+
+# Create a simulation setup
+equation = CubicEquation()
+
+initial_condition_sine(x, t, equation::CubicEquation) = SVector(sinpi(x[1]))
+
+mesh = TreeMesh(-1.0, 1.0, # min/max coordinates
+                initial_refinement_level=4,
+                n_cells_max=10^4)
+
+solver = DGSEM(3 #= polynomial degree =#, flux_central)
+
+semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 1                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{1, Trixi.SerialTree{1}} with length 31                  │
+│ equations: …………………………………………………… CubicEquation                                                    │
+│ initial condition: ……………………………… initial_condition_sine                                           │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… nothing                                                          │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 64                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

We wrap the return value of the initial_condition_sine inside an SVector since that's the approach used in Trixi.jl also for systems of equations. We need to index the spatial coordinate x[1], since it is an SVector with one component. In multiple space dimensions, all spatial coordinates are passed together.

Next, we create an ODEProblem from the SciML/DifferentialEquations ecosystem. We can solve this ODE numerically using any time integration method, e.g., SSPRK43 from OrdinaryDiffEq.jl. Before, we set up a callback to summarize the simulation setup.

# Create ODE problem with given time span
+tspan = (0.0, 0.09)
+ode = semidiscretize(semi, tspan)
+
+summary_callback = SummaryCallback()
+callbacks = CallbackSet(summary_callback)
+
+# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks
+sol = solve(ode, SSPRK43();
+            ode_default_options()..., callback=callbacks);

+████████╗██████╗ ██╗██╗  ██╗██╗
+╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
+   ██║   ██████╔╝██║ ╚███╔╝ ██║
+   ██║   ██╔══██╗██║ ██╔██╗ ██║
+   ██║   ██║  ██║██║██╔╝ ██╗██║
+   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 1                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{1, Trixi.SerialTree{1}} with length 31                  │
+│ equations: …………………………………………………… CubicEquation                                                    │
+│ initial condition: ……………………………… initial_condition_sine                                           │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… nothing                                                          │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 64                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{1, Trixi.SerialTree{1}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0]                                                            │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true,)                                                          │
+│ current #cells: ……………………………………… 31                                                               │
+│ #leaf-cells: ……………………………………………… 16                                                               │
+│ maximum #cells: ……………………………………… 10000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ CubicEquation                                                                                    │
+│ ═════════════                                                                                    │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Time integration                                                                                 │
+│ ════════════════                                                                                 │
+│ Start time: ………………………………………………… 0.0                                                              │
+│ Final time: ………………………………………………… 0.09                                                             │
+│ time integrator: …………………………………… SSPRK43                                                          │
+│ adaptive: ……………………………………………………… true                                                             │
+│ abstol: …………………………………………………………… 1.0e-6                                                           │
+│ reltol: …………………………………………………………… 0.001                                                            │
+│ controller: ………………………………………………… PIController{Rational{Int64}}(7//30, 2//15)                      │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Environment information                                                                          │
+│ ═══════════════════════                                                                          │
+│ #threads: ……………………………………………………… 1                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

That's it, you ran your first simulation using your new equation with Trixi.jl! Now, we can plot the solution at the final time using Plots.jl.

using Plots
+plot(sol)
Example block output

You can already see that discontinuities will develop and oscillations start to occur around steep parts of the wave. That's expected from our central discretization. To avoid these issues, we need to use dissipative numerical fluxes (approximate Riemann solvers) at interfaces.

Advanced setup

Thus, we add a Godunov's flux for our cubic equation. That is easy for this equation since the wave speed f'(u) = 3u^2 is always non-negative.

@inline Trixi.flux_godunov(u_ll, u_rr, orientation, equation::CubicEquation) = flux(u_ll, orientation, equation)

Let's run the example again but with a dissipative numerical flux at interfaces. remake will recreate the semidiscretization we used before and only change selected parameters, in this case the solver.

# A new setup with dissipation
+semi = remake(semi, solver=DGSEM(3, flux_godunov))
+ode = semidiscretize(semi, tspan)
+sol = solve(ode, SSPRK43(); ode_default_options()...)
+plot!(sol)
Example block output

You can see that there are fewer oscillations, in particular around steep edges. Now let's increase the final time (and also the spatial resolution).

# A larger final time: Nonclassical shocks develop (you can even increase the refinement to 12)
+semi = remake(semi, mesh=TreeMesh(-1.0, 1.0, initial_refinement_level=8, n_cells_max=10^5))
+ode = semidiscretize(semi, (0.0, 0.5) #= tspan =#)
+sol = solve(ode, SSPRK43(); ode_default_options()...)
+plot(sol)
Example block output

You can observe that nonclassical shocks develop and are stable under grid refinement, e.g. for initial_refinement_level=12. In this case, these nonclassical shocks can be avoided by using an entropy-dissipative semidiscretization. Thus, we need to define an entropy-conservative numerical flux

@inline function Trixi.flux_ec(u_ll, u_rr, orientation, equation::CubicEquation)
+  return SVector(0.25 * (u_ll[1]^3 + u_ll[1]^2 * u_rr[1] + u_ll[1] * u_rr[1]^2 + u_rr[1]^3))
+end

and use a VolumeIntegralFluxDifferencing instead of the standard VolumeIntegralWeakForm in the DGSEM.

# Let's use a provably entropy-dissipative semidiscretization
+semi = remake(semi, solver=DGSEM(3, flux_godunov, VolumeIntegralFluxDifferencing(flux_ec)))
+ode = semidiscretize(semi, (0.0, 0.5))
+sol = solve(ode, SSPRK43(); ode_default_options()...);
+plot(sol)
Example block output

Possible next steps could be

  • to define Trixi.max_abs_speeds(u, equations::CubicEquation) = 3 * u[1]^2 to use CFL-based time step control via a StepsizeCallback
  • to define quantities of interest like Trixi.entropy(u, equations::CubicEquation) = u[1]^2 and integrate them in a simulation using the AnalysisCallback
  • to experiment with shock-capturing volume integrals VolumeIntegralShockCapturingHG and adaptive mesh refinement AMRCallback

For further reading, Trixi.jl provides another example on adding a scalar equation. In the elixir about the KPP problem, the 2D scalar "KPP equation" from Kurganov, Petrova, Popov (2007) is implemented.

Summary of the code

To sum up, here is the complete code that we used (without the callbacks since these create a lot of unnecessary output in the doctests of this tutorial). In addition, we create the struct inside the new module CubicConservationLaw. That ensures that we can re-create structs defined therein without having to restart Julia.

# Define new physics
+module CubicConservationLaw
+
+using Trixi
+
+struct CubicEquation <: Trixi.AbstractEquations{1 #= number of spatial dimensions =#,
+                                                1 #= number of primary variables, i.e. scalar =#}
+end
+
+@inline Trixi.flux(u, orientation, equation::CubicEquation) = u.^3
+Trixi.varnames(_, ::CubicEquation) = ("scalar",)
+
+@inline Trixi.flux_godunov(u_ll, u_rr, orientation, equation::CubicEquation) = flux(u_ll, orientation, equation)
+@inline function Trixi.flux_ec(u_ll, u_rr, orientation, equation::CubicEquation)
+  return SVector(0.25 * (u_ll[1]^3 + u_ll[1]^2 * u_rr[1] + u_ll[1] * u_rr[1]^2 + u_rr[1]^3))
+end
+
+end # module
+
+
+# Create a simulation setup
+import .CubicConservationLaw
+using Trixi
+using OrdinaryDiffEq
+using Plots
+
+equation = CubicConservationLaw.CubicEquation()
+
+initial_condition_sine(x, t, equation::CubicConservationLaw.CubicEquation) = SVector(sinpi(x[1]))
+
+mesh = TreeMesh(-1.0, 1.0, # min/max coordinates
+                initial_refinement_level=4,
+                n_cells_max=10^4)
+
+solver = DGSEM(3 #= polynomial degree =#, flux_central)
+
+semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)
+
+# Create ODE problem with given time span
+tspan = (0.0, 0.1)
+ode = semidiscretize(semi, tspan)
+
+# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks
+sol = solve(ode, SSPRK43(); ode_default_options()...)
+plot(sol)
+
+
+# A new setup with dissipation
+semi = remake(semi, solver=DGSEM(3, flux_godunov))
+ode = semidiscretize(semi, tspan)
+sol = solve(ode, SSPRK43(); ode_default_options()...)
+plot!(sol)
+
+
+# A larger final time: Nonclassical shocks develop (you can even increase the refinement to 12)
+semi = remake(semi, mesh=TreeMesh(-1.0, 1.0, initial_refinement_level=8, n_cells_max=10^5))
+ode = semidiscretize(semi, (0.0, 0.5))
+sol = solve(ode, SSPRK43(); ode_default_options()...)
+plot(sol)
+
+
+# Let's use a provably entropy-dissipative semidiscretization
+semi = remake(semi, solver=DGSEM(3, flux_godunov, VolumeIntegralFluxDifferencing(flux_ec)))
+ode = semidiscretize(semi, (0.0, 0.5))
+sol = solve(ode, SSPRK43(); ode_default_options()...)
+plot(sol)
Example block output

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/adding_nonconservative_equation/4614a9d2.svg b/v0.8.7/tutorials/adding_nonconservative_equation/4614a9d2.svg new file mode 100644 index 0000000000..d9160d231e --- /dev/null +++ b/v0.8.7/tutorials/adding_nonconservative_equation/4614a9d2.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/adding_nonconservative_equation/index.html b/v0.8.7/tutorials/adding_nonconservative_equation/index.html new file mode 100644 index 0000000000..b69da5ba1f --- /dev/null +++ b/v0.8.7/tutorials/adding_nonconservative_equation/index.html @@ -0,0 +1,244 @@ + +12 Adding a non-conservative equation · Trixi.jl

12: Adding a non-conservative equation

If you want to use Trixi.jl for your own research, you might be interested in a new physics model that is not present in Trixi.jl. In this tutorial, we will implement the nonconservative linear advection equation in a periodic domain

\[\left\{ +\begin{aligned}&\partial_t u(t,x) + a(x) \partial_x u(t,x) = 0 \\ +&u(0,x)=\sin(x) \\ +&u(t,-\pi)=u(t,\pi) +\end{aligned} +\right.\]

where $a(x) = 2 + \cos(x)$. The analytic solution is

\[u(t,x)=-\sin \left(2 \tan ^{-1}\left(\sqrt{3} \tan \left(\frac{\sqrt{3} t}{2}-\tan ^{-1}\left(\frac{1}{\sqrt{3}}\tan \left(\frac{x}{2}\right)\right)\right)\right)\right)\]

In Trixi.jl, such a mathematical model is encoded as a subtype of Trixi.AbstractEquations.

Basic setup

Since there is no native support for variable coefficients, we need to transform the PDE to the following system:

\[\left\{ +\begin{aligned}&\partial_t \begin{pmatrix}u(t,x)\\a(t,x) \end{pmatrix} +\begin{pmatrix} a(t,x) \partial_x u(t,x) \\ 0 \end{pmatrix} = 0 \\ +&u(0,x)=\sin(x) \\ +&a(0,x)=2+\cos(x) \\ +&u(t,-\pi)=u(t,\pi) +\end{aligned} +\right.\]

# Define new physics
+using Trixi
+using Trixi: AbstractEquations, get_node_vars
+import Trixi: varnames, default_analysis_integrals, flux, max_abs_speed_naive,
+              have_nonconservative_terms
+
+# Since there is no native support for variable coefficients, we use two
+# variables: one for the basic unknown `u` and another one for the coefficient `a`
+struct NonconservativeLinearAdvectionEquation <: AbstractEquations{1 #= spatial dimension =#,
+                                                                   2 #= two variables (u,a) =#}
+end
+
+varnames(::typeof(cons2cons), ::NonconservativeLinearAdvectionEquation) = ("scalar", "advection_velocity")
+
+default_analysis_integrals(::NonconservativeLinearAdvectionEquation) = ()
+
+
+# The conservative part of the flux is zero
+flux(u, orientation, equation::NonconservativeLinearAdvectionEquation) = zero(u)
+
+# Calculate maximum wave speed for local Lax-Friedrichs-type dissipation
+function max_abs_speed_naive(u_ll, u_rr, orientation::Integer, ::NonconservativeLinearAdvectionEquation)
+    _, advection_velocity_ll = u_ll
+    _, advection_velocity_rr = u_rr
+
+    return max(abs(advection_velocity_ll), abs(advection_velocity_rr))
+end
+
+
+# We use nonconservative terms
+have_nonconservative_terms(::NonconservativeLinearAdvectionEquation) = Trixi.True()
+
+# This "nonconservative numerical flux" implements the nonconservative terms.
+# In general, nonconservative terms can be written in the form
+#   g(u) ∂ₓ h(u)
+# Thus, a discrete difference approximation of this nonconservative term needs
+# - `u mine`:  the value of `u` at the current position (for g(u))
+# - `u_other`: the values of `u` in a neighborhood of the current position (for ∂ₓ h(u))
+function flux_nonconservative(u_mine, u_other, orientation,
+                              equations::NonconservativeLinearAdvectionEquation)
+    _, advection_velocity = u_mine
+    scalar, _             = u_other
+
+    return SVector(advection_velocity * scalar, zero(scalar))
+end
flux_nonconservative (generic function with 1 method)

The implementation of nonconservative terms uses a single "nonconservative flux" function flux_nonconservative. It will basically be applied in a loop of the form

du_m(D, u) = sum(D[m, l] * flux_nonconservative(u[m], u[l], 1, equations)) # orientation 1: x

where D is the derivative matrix and u contains the nodal solution values.

Now, we can run a simple simulation using a DGSEM discretization.

# Create a simulation setup
+using Trixi
+using OrdinaryDiffEq
+
+equation = NonconservativeLinearAdvectionEquation()
+
+# You can derive the exact solution for this setup using the method of
+# characteristics
+function initial_condition_sine(x, t, equation::NonconservativeLinearAdvectionEquation)
+    x0 = -2 * atan(sqrt(3) * tan(sqrt(3) / 2 * t - atan(tan(x[1] / 2) / sqrt(3))))
+    scalar = sin(x0)
+    advection_velocity = 2 + cos(x[1])
+    SVector(scalar, advection_velocity)
+end
+
+# Create a uniform mesh in 1D in the interval [-π, π] with periodic boundaries
+mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates
+                initial_refinement_level=4, n_cells_max=10^4)
+
+# Create a DGSEM solver with polynomials of degree `polydeg`
+# Remember to pass a tuple of the form `(conservative_flux, nonconservative_flux)`
+# as `surface_flux` and `volume_flux` when working with nonconservative terms
+volume_flux  = (flux_central, flux_nonconservative)
+surface_flux = (flux_lax_friedrichs, flux_nonconservative)
+solver = DGSEM(polydeg=3, surface_flux=surface_flux,
+               volume_integral=VolumeIntegralFluxDifferencing(volume_flux))
+
+# Setup the spatial semidiscretization containing all ingredients
+semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)
+
+# Create an ODE problem with given time span
+tspan = (0.0, 1.0)
+ode = semidiscretize(semi, tspan)
+
+# Set up some standard callbacks summarizing the simulation setup and computing
+# errors of the numerical solution
+summary_callback = SummaryCallback()
+analysis_callback = AnalysisCallback(semi, interval=50)
+callbacks = CallbackSet(summary_callback, analysis_callback)
+
+# OrdinaryDiffEq's `solve` method evolves the solution in time and executes
+# the passed callbacks
+sol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,
+            save_everystep=false, callback=callbacks)
+
+# Print the timer summary
+summary_callback()
+
+# Plot the numerical solution at the final time
+using Plots: plot
+plot(sol)
Example block output

You see a plot of the final solution.

We can check whether everything fits together by refining the grid and comparing the numerical errors. First, we look at the error using the grid resolution above.

error_1 = analysis_callback(sol).l2 |> first
0.00029609575838976756

Next, we increase the grid resolution by one refinement level and run the simulation again.

mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates
+                initial_refinement_level=5, n_cells_max=10^4)
+
+semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)
+
+tspan = (0.0, 1.0)
+ode = semidiscretize(semi, tspan);
+
+summary_callback = SummaryCallback()
+analysis_callback = AnalysisCallback(semi, interval=50)
+callbacks = CallbackSet(summary_callback, analysis_callback);
+
+sol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,
+            save_everystep=false, callback=callbacks);
+summary_callback()
+
+error_2 = analysis_callback(sol).l2 |> first
1.8602128505947232e-5
error_1 / error_2
15.917305285527064

As expected, the new error is roughly reduced by a factor of 16, corresponding to an experimental order of convergence of 4 (for polynomials of degree 3).

Summary of the code

Here is the complete code that we used (without the callbacks since these create a lot of unnecessary output in the doctests of this tutorial). In addition, we create the struct inside the new module NonconservativeLinearAdvection. That ensures that we can re-create structs defined therein without having to restart Julia.

Define new physics

module NonconservativeLinearAdvection
+
+using Trixi
+using Trixi: AbstractEquations, get_node_vars
+import Trixi: varnames, default_analysis_integrals, flux, max_abs_speed_naive,
+              have_nonconservative_terms
+
+# Since there is not yet native support for variable coefficients, we use two
+# variables: one for the basic unknown `u` and another one for the coefficient `a`
+struct NonconservativeLinearAdvectionEquation <: AbstractEquations{1 #= spatial dimension =#,
+                                                                   2 #= two variables (u,a) =#}
+end
+
+varnames(::typeof(cons2cons), ::NonconservativeLinearAdvectionEquation) = ("scalar", "advection_velocity")
+
+default_analysis_integrals(::NonconservativeLinearAdvectionEquation) = ()
+
+
+# The conservative part of the flux is zero
+flux(u, orientation, equation::NonconservativeLinearAdvectionEquation) = zero(u)
+
+# Calculate maximum wave speed for local Lax-Friedrichs-type dissipation
+function max_abs_speed_naive(u_ll, u_rr, orientation::Integer, ::NonconservativeLinearAdvectionEquation)
+    _, advection_velocity_ll = u_ll
+    _, advection_velocity_rr = u_rr
+
+    return max(abs(advection_velocity_ll), abs(advection_velocity_rr))
+end
+
+
+# We use nonconservative terms
+have_nonconservative_terms(::NonconservativeLinearAdvectionEquation) = Trixi.True()
+
+# This "nonconservative numerical flux" implements the nonconservative terms.
+# In general, nonconservative terms can be written in the form
+#   g(u) ∂ₓ h(u)
+# Thus, a discrete difference approximation of this nonconservative term needs
+# - `u mine`:  the value of `u` at the current position (for g(u))
+# - `u_other`: the values of `u` in a neighborhood of the current position (for ∂ₓ h(u))
+function flux_nonconservative(u_mine, u_other, orientation,
+                              equations::NonconservativeLinearAdvectionEquation)
+    _, advection_velocity = u_mine
+    scalar, _            = u_other
+
+    return SVector(advection_velocity * scalar, zero(scalar))
+end
+
+end # module
+
+
+
+# Create a simulation setup
+import .NonconservativeLinearAdvection
+using Trixi
+using OrdinaryDiffEq
+
+equation = NonconservativeLinearAdvection.NonconservativeLinearAdvectionEquation()
+
+# You can derive the exact solution for this setup using the method of
+# characteristics
+function initial_condition_sine(x, t, equation::NonconservativeLinearAdvection.NonconservativeLinearAdvectionEquation)
+    x0 = -2 * atan(sqrt(3) * tan(sqrt(3) / 2 * t - atan(tan(x[1] / 2) / sqrt(3))))
+    scalar = sin(x0)
+    advection_velocity = 2 + cos(x[1])
+    SVector(scalar, advection_velocity)
+end
+
+# Create a uniform mesh in 1D in the interval [-π, π] with periodic boundaries
+mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates
+                initial_refinement_level=4, n_cells_max=10^4)
+
+# Create a DGSEM solver with polynomials of degree `polydeg`
+# Remember to pass a tuple of the form `(conservative_flux, nonconservative_flux)`
+# as `surface_flux` and `volume_flux` when working with nonconservative terms
+volume_flux  = (flux_central, NonconservativeLinearAdvection.flux_nonconservative)
+surface_flux = (flux_lax_friedrichs, NonconservativeLinearAdvection.flux_nonconservative)
+solver = DGSEM(polydeg=3, surface_flux=surface_flux,
+               volume_integral=VolumeIntegralFluxDifferencing(volume_flux))
+
+# Setup the spatial semidiscretization containing all ingredients
+semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)
+
+# Create an ODE problem with given time span
+tspan = (0.0, 1.0)
+ode = semidiscretize(semi, tspan);
+
+# Set up some standard callbacks summarizing the simulation setup and computing
+# errors of the numerical solution
+summary_callback = SummaryCallback()
+analysis_callback = AnalysisCallback(semi, interval=50)
+callbacks = CallbackSet(summary_callback, analysis_callback);
+
+# OrdinaryDiffEq's `solve` method evolves the solution in time and executes
+# the passed callbacks
+sol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,
+            save_everystep=false);
+
+# Plot the numerical solution at the final time
+using Plots: plot
+plot(sol);

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/behind_the_scenes_simulation_setup/23c198cd.svg b/v0.8.7/tutorials/behind_the_scenes_simulation_setup/23c198cd.svg new file mode 100644 index 0000000000..973c1722c7 --- /dev/null +++ b/v0.8.7/tutorials/behind_the_scenes_simulation_setup/23c198cd.svg @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/behind_the_scenes_simulation_setup/index.html b/v0.8.7/tutorials/behind_the_scenes_simulation_setup/index.html new file mode 100644 index 0000000000..14cd1d63dd --- /dev/null +++ b/v0.8.7/tutorials/behind_the_scenes_simulation_setup/index.html @@ -0,0 +1,49 @@ + +2 Behind the scenes of a simulation setup · Trixi.jl

2: Behind the scenes of a simulation setup

This tutorial will guide you through a simple Trixi.jl setup ("elixir"), giving an overview of what happens in the background during the initialization of a simulation. While the setup described herein does not cover all details, it involves relatively stable parts of Trixi.jl that are unlikely to undergo significant changes in the near future. The goal is to clarify some of the more fundamental, technical concepts that are applicable to a variety of (also more complex) configurations.

Trixi.jl follows the method of lines concept for solving partial differential equations (PDEs). Firstly, the PDEs are reduced to a (potentially huge) system of ordinary differential equations (ODEs) by discretizing the spatial derivatives. Subsequently, these generated ODEs may be solved with methods available in OrdinaryDiffEq.jl or those specifically implemented in Trixi.jl. The following steps elucidate the process of transitioning from PDEs to ODEs within the framework of Trixi.jl.

Basic setup

Import essential libraries and specify an equation.

using Trixi, OrdinaryDiffEq
+equations = LinearScalarAdvectionEquation2D((-0.2, 0.7))
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation2D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Generate a spatial discretization using a TreeMesh with a pre-coarsened set of cells.

coordinates_min = (-2.0, -2.0)
+coordinates_max = (2.0, 2.0)
+
+coarsening_patches = ((type = "box", coordinates_min = [0.0, -2.0],
+                       coordinates_max = [2.0, 0.0]),)
+
+mesh = TreeMesh(coordinates_min, coordinates_max, initial_refinement_level = 2,
+                n_cells_max = 30_000,
+                coarsening_patches = coarsening_patches)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{2, Trixi.SerialTree{2}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0, 0.0]                                                       │
+│ length: …………………………………………………………… 4.0                                                              │
+│ periodicity: ……………………………………………… (true, true)                                                     │
+│ current #cells: ……………………………………… 17                                                               │
+│ #leaf-cells: ……………………………………………… 13                                                               │
+│ maximum #cells: ……………………………………… 30000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

The created TreeMesh looks like the following:

TreeMesh_example

Instantiate a DGSEM solver with a user-specified polynomial degree. The solver will define polydeg + 1 Gauss-Lobatto nodes and their associated weights within the reference interval $[-1, 1]$ in each spatial direction. These nodes will be subsequently used to approximate solutions on each leaf cell of the TreeMesh.

solver = DGSEM(polydeg = 3)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Gauss-Lobatto nodes with polydeg = 3:

Gauss-Lobatto_nodes_example

Overview of the SemidiscretizationHyperbolic type

At this stage, all necessary components for configuring the spatial discretization are in place. The remaining task is to combine these components into a single structure that will be used throughout the entire simulation process. This is where SemidiscretizationHyperbolic comes into play.

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test,
+                                    solver)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 2                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 17                  │
+│ equations: …………………………………………………… LinearScalarAdvectionEquation2D                                  │
+│ initial condition: ……………………………… initial_condition_convergence_test                               │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… nothing                                                          │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 208                                                              │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

The constructor for the SemidiscretizationHyperbolic object calls numerous sub-functions to perform the necessary initialization steps. A brief description of the key sub-functions is provided below.

  • init_elements(leaf_cell_ids, mesh, equations, dg.basis, RealT, uEltype)

    The fundamental elements for approximating the solution are the leaf cells. The solution is constructed as a polynomial of the degree specified in the DGSEM solver in each spatial direction on each leaf cell. This polynomial approximation is evaluated at the Gauss-Lobatto nodes mentioned earlier. The init_elements function extracts these leaf cells from the TreeMesh, assigns them the label "elements", records their coordinates, and maps the Gauss-Lobatto nodes from the 1D interval $[-1, 1]$ onto each coordinate axis of every element.

    elements_example

    The visualization of elements with nodes shown here includes spaces between elements, which do not exist in reality. This spacing is included only for illustrative purposes to underscore the separation of elements and the independent projection of nodes onto each element.

  • init_interfaces(leaf_cell_ids, mesh, elements)

    At this point, the elements with nodes have been defined; however, they lack the necessary communication functionality. This is crucial because the local solution polynomials on the elements are not independent of each other. Furthermore, nodes on the boundary of adjacent elements share the same spatial location, which requires a method to combine this into a meaningful solution. Here Riemann solvers come into play which can handle the principal ambiguity of a multi-valued solution at the same spatial location.

    As demonstrated earlier, the elements can have varying sizes. Let us initially consider neighbors with equal size. For these elements, the init_interfaces function generates interfaces that store information about adjacent elements, their relative positions, and allocate containers for sharing solution data between neighbors during the solution process.

    In our visualization, these interfaces would conceptually resemble tubes connecting the corresponding elements.

    interfaces_example

  • init_mortars(leaf_cell_ids, mesh, elements, dg.mortar)

    Returning to the consideration of different sizes among adjacent elements, within the TreeMesh, adjacent leaf cells can vary in side length by a maximum factor of two. This implies that a large element has one neighbor of equal size with a connection through an interface, or two neighbors at half the size, requiring a connection through so called "mortars". In 3D, a large element would have four small neighbor elements.

    Mortars store information about the connected elements, their relative positions, and allocate containers for storing the solutions along the boundaries between these elements.

    Due to the differing sizes of adjacent elements, it is not feasible to directly map boundary nodes of adjacent elements. Therefore, the concept of mortars employs a mass-conserving interpolation function to map boundary nodes from a larger element to a smaller one.

    In our visualization, mortars are represented as branched tubes.

    mortars_example

  • init_boundaries(leaf_cell_ids, mesh, elements)

    In order to apply boundary conditions, it is necessary to identify the locations of the boundaries. Therefore, we initialize a "boundaries" object, which records the elements that contain boundaries, specifies which side of an element is a boundary, stores the coordinates of boundary nodes, and allocates containers for managing solutions at these boundaries.

    In our visualization, boundaries and their corresponding nodes are highlighted with green, semi-transparent lines.

    boundaries_example

All the structures mentioned earlier are collected as a cache of type NamedTuple. Subsequently, an object of type SemidiscretizationHyperbolic is initialized using this cache, initial and boundary conditions, equations, mesh and solver.

In conclusion, the primary purpose of a SemidiscretizationHyperbolic is to collect equations, the geometric representation of the domain, and approximation instructions, creating specialized structures to interconnect these components in a manner that enables their utilization for the numerical solution of partial differential equations (PDEs).

As evident from the earlier description of SemidiscretizationHyperbolic, it comprises numerous functions called subsequently. Without delving into details, the structure of the primary calls are illustrated as follows:

SemidiscretizationHyperbolic_structure

Overview of the semidiscretize function

At this stage, we have defined the equations and configured the domain's discretization. The final step before solving is to select a suitable time span and apply the corresponding initial conditions, which are already stored in the initialized SemidiscretizationHyperbolic object.

The purpose of the semidiscretize function is to wrap the semidiscretization as an ODEProblem within the specified time interval. During this procedure the approximate solution is created at the given initial time via the specified initial_condition function from the SemidiscretizationHyperbolic object. This ODEProblem can be subsequently passed to the solve function from the OrdinaryDiffEq.jl package or to Trixi.solve.

ode = semidiscretize(semi, (0.0, 1.0));

The semidiscretize function involves a deep tree of subsequent calls, with the primary ones explained below.

  • allocate_coefficients(mesh, equations, solver, cache)

    To apply initial conditions, a data structure ("container") needs to be generated to store the initial values of the target variables for each node within each element.

    Since only one-dimensional Arrays are resize!able in Julia, we use Vectors as an internal storage for the target variables and resize! them whenever needed, e.g. to change the number of elements. Then, during the solving process the same memory is reused by unsafe_wrapping multi-dimensional Arrays around the internal storage.

  • wrap_array(u_ode, semi)

    As previously noted, u_ode is constructed as a 1D vector to ensure compatibility with OrdinaryDiffEq.jl. However, for internal use within Trixi.jl, identifying which part of the vector relates to specific variables, elements, or nodes can be challenging.

    This is why the u_ode vector is wrapped by the wrap_array function using unsafe_wrap to form a multidimensional array u. In this array, the first dimension corresponds to variables, followed by N dimensions corresponding to nodes for each of N space dimensions. The last dimension corresponds to the elements. Consequently, navigation within this multidimensional array becomes noticeably easier.

    "Wrapping" in this context involves the creation of a reference to the same storage location but with an alternative structural representation. This approach enables the use of both instances u and u_ode as needed, so that changes are simultaneously reflected in both. This is possible because, from a storage perspective, they share the same stored data, while access to this data is provided in different ways.

  • compute_coefficients!(u, initial_conditions, t, mesh::DG, equations, solver, cache)

    Now the variable u, intended to store solutions, has been allocated and wrapped, it is time to apply the initial conditions. The compute_coefficients! function calculates the initial conditions for each variable at every node within each element and properly stores them in the u array.

At this stage, the semidiscretize function has all the necessary components to initialize and return an ODEProblem object, which will be used by the solve function to compute the solution.

In summary, the internal workings of semidiscretize with brief descriptions can be presented as follows.

semidiscretize_structure

Functions solve and rhs!

Once the ODEProblem object is initialized, the solve function and one of the ODE solvers from the OrdinaryDiffEq.jl package can be utilized to compute an approximated solution using the instructions contained in the ODEProblem object.

sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false), dt = 0.01,
+            save_everystep = false);

Since the solve function and the ODE solver have no knowledge of a particular spatial discretization, it is necessary to define a "right-hand-side function", rhs!, within Trixi.jl.

Trixi.jl includes a set of rhs! functions designed to compute du, i.e., $\frac{\partial u}{\partial t}$ according to the structure of the setup. These rhs! functions calculate interface, mortars, and boundary fluxes, in addition to surface and volume integrals, in order to construct the du vector. This du vector is then used by the time integration method to obtain the solution at the subsequent time step. The rhs! function is called by time integration methods in each iteration of the solve loop within OrdinaryDiffEq.jl, with arguments du, u, semidiscretization, and the current time.

Trixi.jl uses a two-levels approach for rhs! functions. The first level is limited to a single function for each semidiscretization type, and its role is to redirect data to the target rhs! for specific solver and mesh types. This target rhs! function is responsible for calculating du.

Path from the solve function call to the appropriate rhs! function call:

rhs_structure

Computed solution:

using Plots
+plot(sol)
+pd = PlotData2D(sol)
+plot!(getmesh(pd))
Example block output

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/custom_semidiscretization/06117d2f.svg b/v0.8.7/tutorials/custom_semidiscretization/06117d2f.svg new file mode 100644 index 0000000000..b534fb219a --- /dev/null +++ b/v0.8.7/tutorials/custom_semidiscretization/06117d2f.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/custom_semidiscretization/3bf457bc.svg b/v0.8.7/tutorials/custom_semidiscretization/3bf457bc.svg new file mode 100644 index 0000000000..fd81c8e5c8 --- /dev/null +++ b/v0.8.7/tutorials/custom_semidiscretization/3bf457bc.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/custom_semidiscretization/c18b5716.svg b/v0.8.7/tutorials/custom_semidiscretization/c18b5716.svg new file mode 100644 index 0000000000..0f500a1b7f --- /dev/null +++ b/v0.8.7/tutorials/custom_semidiscretization/c18b5716.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/custom_semidiscretization/cdf7fd84.svg b/v0.8.7/tutorials/custom_semidiscretization/cdf7fd84.svg new file mode 100644 index 0000000000..3d8eeddac4 --- /dev/null +++ b/v0.8.7/tutorials/custom_semidiscretization/cdf7fd84.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/custom_semidiscretization/d621de02.svg b/v0.8.7/tutorials/custom_semidiscretization/d621de02.svg new file mode 100644 index 0000000000..d90ca57c2d --- /dev/null +++ b/v0.8.7/tutorials/custom_semidiscretization/d621de02.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/custom_semidiscretization/index.html b/v0.8.7/tutorials/custom_semidiscretization/index.html new file mode 100644 index 0000000000..cb7ec409b0 --- /dev/null +++ b/v0.8.7/tutorials/custom_semidiscretization/index.html @@ -0,0 +1,598 @@ + +21 Custom semidiscretizations · Trixi.jl

21: Custom semidiscretizations

As described in the overview section, semidiscretizations are high-level descriptions of spatial discretizations in Trixi.jl. Trixi.jl's main focus is on hyperbolic conservation laws represented in a SemidiscretizationHyperbolic. Hyperbolic-parabolic problems based on the advection-diffusion equation or the compressible Navier-Stokes equations can be represented in a SemidiscretizationHyperbolicParabolic. This is described in the basic tutorial on parabolic terms and its extension to custom parabolic terms. In this tutorial, we will describe how these semidiscretizations work and how they can be used to create custom semidiscretizations involving also other tasks.

Overview of the right-hand side evaluation

The semidiscretizations provided by Trixi.jl are set up to create ODEProblems from the SciML ecosystem for ordinary differential equations. In particular, a spatial semidiscretization can be wrapped in an ODE problem using semidiscretize, which returns an ODEProblem. This ODEProblem bundles an initial condition, a right-hand side (RHS) function, the time span, and possible parameters. The ODEProblems created by Trixi.jl use the semidiscretization passed to semidiscretize as a parameter. For a SemidiscretizationHyperbolic, the ODEProblem wraps Trixi.rhs! as ODE RHS. For a SemidiscretizationHyperbolicParabolic, Trixi.jl uses a SplitODEProblem combining Trixi.rhs_parabolic! for the (potentially) stiff part and Trixi.rhs! for the other part.

Standard Trixi.jl setup

In this tutorial, we will consider the linear advection equation with source term

\[\partial_t u(t,x) + \partial_x u(t,x) = -\exp(-t) \sin\bigl(\pi (x - t) \bigr)\]

with periodic boundary conditions in the domain [-1, 1] as a model problem. The initial condition is

\[u(0,x) = \sin(\pi x).\]

The source term results in some damping and the analytical solution

\[u(t,x) = \exp(-t) \sin\bigl(\pi (x - t) \bigr).\]

First, we discretize this equation using the standard functionality of Trixi.jl.

using Trixi, OrdinaryDiffEq, Plots

The linear scalar advection equation is already implemented in Trixi.jl as LinearScalarAdvectionEquation1D. We construct it with an advection velocity 1.0.

equations = LinearScalarAdvectionEquation1D(1.0)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation1D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Next, we use a standard DGSEM solver.

solver = DGSEM(polydeg = 3)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

We create a simple TreeMesh in 1D.

coordinates_min = (-1.0,)
+coordinates_max = (+1.0,)
+mesh = TreeMesh(coordinates_min, coordinates_max;
+                initial_refinement_level = 4,
+                n_cells_max = 10^4,
+                periodicity = true)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{1, Trixi.SerialTree{1}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0]                                                            │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true,)                                                          │
+│ current #cells: ……………………………………… 31                                                               │
+│ #leaf-cells: ……………………………………………… 16                                                               │
+│ maximum #cells: ……………………………………… 10000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

We wrap everything in in a semidiscretization and pass the source terms as a standard Julia function. Please note that Trixi.jl uses SVectors from StaticArrays.jl to store the conserved variables u. Thus, the return value of the source terms must be wrapped in an SVector - even if we consider just a scalar problem.

function initial_condition(x, t, equations)
+    return SVector(exp(-t) * sinpi(x[1] - t))
+end
+
+function source_terms_standard(u, x, t, equations)
+    return -initial_condition(x, t, equations)
+end
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition,
+                                    solver;
+                                    source_terms = source_terms_standard)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 1                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{1, Trixi.SerialTree{1}} with length 31                  │
+│ equations: …………………………………………………… LinearScalarAdvectionEquation1D                                  │
+│ initial condition: ……………………………… initial_condition                                                │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… source_terms_standard                                            │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 64                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Now, we can create the ODEProblem, solve the resulting ODE using a time integration method from OrdinaryDiffEq.jl, and visualize the numerical solution at the final time using Plots.jl.

tspan = (0.0, 3.0)
+ode = semidiscretize(semi, tspan)
+
+sol = solve(ode, RDPK3SpFSAL49(); ode_default_options()...)
+
+plot(sol; label = "numerical sol.", legend = :topright)
Example block output

We can also plot the analytical solution for comparison. Since Trixi.jl uses SVectors for the variables, we take their first (and only) component to get the scalar value for manual plotting.

let
+   x = range(-1.0, 1.0; length = 200)
+   plot!(x, first.(initial_condition.(x, sol.t[end], equations)),
+         label = "analytical sol.", linestyle = :dash, legend = :topright)
+end
Example block output

We can also add the initial condition to the plot.

plot!(sol.u[1], semi, label = "u0", linestyle = :dot, legend = :topleft)
Example block output

You can of course also use some callbacks provided by Trixi.jl as usual.

summary_callback = SummaryCallback()
+analysis_interval = 100
+analysis_callback = AnalysisCallback(semi; interval = analysis_interval)
+alive_callback = AliveCallback(; analysis_interval)
+callbacks = CallbackSet(summary_callback,
+                        analysis_callback,
+                        alive_callback)
+
+sol = solve(ode, RDPK3SpFSAL49();
+            ode_default_options()..., callback = callbacks)
+summary_callback()

+████████╗██████╗ ██╗██╗  ██╗██╗
+╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
+   ██║   ██████╔╝██║ ╚███╔╝ ██║
+   ██║   ██╔══██╗██║ ██╔██╗ ██║
+   ██║   ██║  ██║██║██╔╝ ██╗██║
+   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 1                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{1, Trixi.SerialTree{1}} with length 31                  │
+│ equations: …………………………………………………… LinearScalarAdvectionEquation1D                                  │
+│ initial condition: ……………………………… initial_condition                                                │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… source_terms_standard                                            │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 64                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{1, Trixi.SerialTree{1}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0]                                                            │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true,)                                                          │
+│ current #cells: ……………………………………… 31                                                               │
+│ #leaf-cells: ……………………………………………… 16                                                               │
+│ maximum #cells: ……………………………………… 10000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation1D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AnalysisCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ interval: ……………………………………………………… 100                                                              │
+│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
+│ │ error 1: …………………………………………………… l2_error                                                         │
+│ │ error 2: …………………………………………………… linf_error                                                       │
+│ │ integral 1: …………………………………………… entropy_timederivative                                           │
+│ save analysis to file: …………………… no                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AliveCallback                                                                                    │
+│ ═════════════                                                                                    │
+│ interval: ……………………………………………………… 10                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Time integration                                                                                 │
+│ ════════════════                                                                                 │
+│ Start time: ………………………………………………… 0.0                                                              │
+│ Final time: ………………………………………………… 3.0                                                              │
+│ time integrator: …………………………………… RDPK3SpFSAL49                                                    │
+│ adaptive: ……………………………………………………… true                                                             │
+│ abstol: …………………………………………………………… 1.0e-6                                                           │
+│ reltol: …………………………………………………………… 0.001                                                            │
+│ controller: ………………………………………………… PIDController(beta=[0.38, -0.18,…iter=default_dt_factor_limiter) │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Environment information                                                                          │
+│ ═══════════════════════                                                                          │
+│ #threads: ……………………………………………………… 1                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation1D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       7.12000000e-07 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:  3.48990844e-08 s
+                                               PID:                   Inf s
+ #DOFs per field:            64                alloc'd memory:        917.251 MiB
+ #elements:                  16
+
+ Variable:       scalar
+ L2 error:       5.57368408e-06
+ Linf error:     1.21294882e-05
+ ∑∂S/∂U ⋅ Uₜ :  -5.00000000e-01
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 9.9686e-02 │ sim. time: 3.4078e-01 (11.359%)  │ run time: 2.3827e-04 s
+#timesteps:     20 │ Δt: 8.5503e-02 │ sim. time: 1.2059e+00 (40.198%)  │ run time: 5.2967e-04 s
+#timesteps:     30 │ Δt: 6.9722e-02 │ sim. time: 1.9558e+00 (65.192%)  │ run time: 7.7394e-04 s
+#timesteps:     40 │ Δt: 6.8292e-02 │ sim. time: 2.6511e+00 (88.370%)  │ run time: 1.0145e-03 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation1D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 45                run time:       1.62425000e-03 s
+ Δt:             7.36971224e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      3.00000000e+00 (100.000%)     time/DOF/rhs!:  3.53255084e-08 s
+                                               PID:            4.30790618e-08 s
+ #DOFs per field:            64                alloc'd memory:        921.785 MiB
+ #elements:                  16
+
+ Variable:       scalar
+ L2 error:       4.46838745e-05
+ Linf error:     2.31363584e-04
+ ∑∂S/∂U ⋅ Uₜ :  -1.23948223e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 3.0  Time steps: 45 (accepted), 46 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+ ────────────────────────────────────────────────────────────────────────────────
+            Trixi.jl                    Time                    Allocations
+                               ───────────────────────   ────────────────────────
+       Tot / % measured:           2.76ms /  65.6%           9.67MiB /  77.3%
+
+ Section               ncalls     time    %tot     avg     alloc    %tot      avg
+ ────────────────────────────────────────────────────────────────────────────────
+ analyze solution           2    906μs   50.1%   453μs   7.46MiB   99.9%  3.73MiB
+ rhs!                     417    901μs   49.9%  2.16μs   6.61KiB    0.1%    16.2B
+   source terms           417    359μs   19.9%   860ns     0.00B    0.0%    0.00B
+   ~rhs!~                 417    275μs   15.2%   659ns   6.61KiB    0.1%    16.2B
+   volume integral        417    121μs    6.7%   290ns     0.00B    0.0%    0.00B
+   interface flux         417   40.1μs    2.2%  96.2ns     0.00B    0.0%    0.00B
+   prolong2interfaces     417   25.4μs    1.4%  60.9ns     0.00B    0.0%    0.00B
+   surface integral       417   22.1μs    1.2%  53.0ns     0.00B    0.0%    0.00B
+   Jacobian               417   18.2μs    1.0%  43.7ns     0.00B    0.0%    0.00B
+   reset ∂u/∂t            417   14.9μs    0.8%  35.7ns     0.00B    0.0%    0.00B
+   prolong2boundaries     417   13.6μs    0.8%  32.7ns     0.00B    0.0%    0.00B
+   boundary flux          417   12.6μs    0.7%  30.3ns     0.00B    0.0%    0.00B
+ ────────────────────────────────────────────────────────────────────────────────

Using a custom ODE right-hand side function

Next, we will solve the same problem but use our own ODE RHS function. To demonstrate this, we will artificially create a global variable containing the current time of the simulation.

const GLOBAL_TIME = Ref(0.0)
+
+function source_terms_custom(u, x, t, equations)
+    t = GLOBAL_TIME[]
+    return -initial_condition(x, t, equations)
+end
source_terms_custom (generic function with 1 method)

Next, we create our own RHS function to update the global time of the simulation before calling the RHS function from Trixi.jl.

function rhs_source_custom!(du_ode, u_ode, semi, t)
+    GLOBAL_TIME[] = t
+    Trixi.rhs!(du_ode, u_ode, semi, t)
+end
rhs_source_custom! (generic function with 1 method)

Next, we create an ODEProblem manually copying over the data from the one we got from semidiscretize earlier.

ode_source_custom = ODEProblem(rhs_source_custom!,
+                               ode.u0,
+                               ode.tspan,
+                               ode.p #= semi =#)
+sol_source_custom = solve(ode_source_custom, RDPK3SpFSAL49();
+                          ode_default_options()...)
+
+plot(sol_source_custom; label = "numerical sol.")
+let
+    x = range(-1.0, 1.0; length = 200)
+    plot!(x, first.(initial_condition.(x, sol_source_custom.t[end], equations)),
+          label = "analytical sol.", linestyle = :dash, legend = :topleft)
+end
+plot!(sol_source_custom.u[1], semi, label = "u0", linestyle = :dot, legend = :topleft)
Example block output

This also works with callbacks as usual.

summary_callback = SummaryCallback()
+analysis_interval = 100
+analysis_callback = AnalysisCallback(semi; interval = analysis_interval)
+alive_callback = AliveCallback(; analysis_interval)
+callbacks = CallbackSet(summary_callback,
+                        analysis_callback,
+                        alive_callback)
+
+sol = solve(ode_source_custom, RDPK3SpFSAL49();
+            ode_default_options()..., callback = callbacks)
+summary_callback()

+████████╗██████╗ ██╗██╗  ██╗██╗
+╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
+   ██║   ██████╔╝██║ ╚███╔╝ ██║
+   ██║   ██╔══██╗██║ ██╔██╗ ██║
+   ██║   ██║  ██║██║██╔╝ ██╗██║
+   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 1                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{1, Trixi.SerialTree{1}} with length 31                  │
+│ equations: …………………………………………………… LinearScalarAdvectionEquation1D                                  │
+│ initial condition: ……………………………… initial_condition                                                │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… source_terms_standard                                            │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 64                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{1, Trixi.SerialTree{1}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0]                                                            │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true,)                                                          │
+│ current #cells: ……………………………………… 31                                                               │
+│ #leaf-cells: ……………………………………………… 16                                                               │
+│ maximum #cells: ……………………………………… 10000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation1D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AnalysisCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ interval: ……………………………………………………… 100                                                              │
+│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
+│ │ error 1: …………………………………………………… l2_error                                                         │
+│ │ error 2: …………………………………………………… linf_error                                                       │
+│ │ integral 1: …………………………………………… entropy_timederivative                                           │
+│ save analysis to file: …………………… no                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AliveCallback                                                                                    │
+│ ═════════════                                                                                    │
+│ interval: ……………………………………………………… 10                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Time integration                                                                                 │
+│ ════════════════                                                                                 │
+│ Start time: ………………………………………………… 0.0                                                              │
+│ Final time: ………………………………………………… 3.0                                                              │
+│ time integrator: …………………………………… RDPK3SpFSAL49                                                    │
+│ adaptive: ……………………………………………………… true                                                             │
+│ abstol: …………………………………………………………… 1.0e-6                                                           │
+│ reltol: …………………………………………………………… 0.001                                                            │
+│ controller: ………………………………………………… PIDController(beta=[0.38, -0.18,…iter=default_dt_factor_limiter) │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Environment information                                                                          │
+│ ═══════════════════════                                                                          │
+│ #threads: ……………………………………………………… 1                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation1D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       5.71000000e-07 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:  3.52576801e-08 s
+                                               PID:                   Inf s
+ #DOFs per field:            64                alloc'd memory:        956.264 MiB
+ #elements:                  16
+
+ Variable:       scalar
+ L2 error:       5.57368408e-06
+ Linf error:     1.21294882e-05
+ ∑∂S/∂U ⋅ Uₜ :  -5.00000000e-01
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 9.9686e-02 │ sim. time: 3.4078e-01 (11.359%)  │ run time: 2.3684e-04 s
+#timesteps:     20 │ Δt: 8.5503e-02 │ sim. time: 1.2059e+00 (40.198%)  │ run time: 5.2340e-04 s
+#timesteps:     30 │ Δt: 6.9722e-02 │ sim. time: 1.9558e+00 (65.192%)  │ run time: 7.6388e-04 s
+#timesteps:     40 │ Δt: 6.8292e-02 │ sim. time: 2.6511e+00 (88.370%)  │ run time: 1.0013e-03 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation1D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 45                run time:       1.58474600e-03 s
+ Δt:             7.36971224e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      3.00000000e+00 (100.000%)     time/DOF/rhs!:  3.50327078e-08 s
+                                               PID:            4.25058453e-08 s
+ #DOFs per field:            64                alloc'd memory:        960.798 MiB
+ #elements:                  16
+
+ Variable:       scalar
+ L2 error:       4.46838745e-05
+ Linf error:     2.31363584e-04
+ ∑∂S/∂U ⋅ Uₜ :  -1.23948223e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 3.0  Time steps: 45 (accepted), 46 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+ ────────────────────────────────────────────────────────────────────────────────
+            Trixi.jl                    Time                    Allocations
+                               ───────────────────────   ────────────────────────
+       Tot / % measured:           2.67ms /  66.4%           9.67MiB /  77.3%
+
+ Section               ncalls     time    %tot     avg     alloc    %tot      avg
+ ────────────────────────────────────────────────────────────────────────────────
+ rhs!                     417    895μs   50.6%  2.15μs   6.61KiB    0.1%    16.2B
+   source terms           417    359μs   20.3%   861ns     0.00B    0.0%    0.00B
+   ~rhs!~                 417    284μs   16.1%   681ns   6.61KiB    0.1%    16.2B
+   volume integral        417    101μs    5.7%   242ns     0.00B    0.0%    0.00B
+   interface flux         417   39.4μs    2.2%  94.4ns     0.00B    0.0%    0.00B
+   surface integral       417   27.4μs    1.5%  65.6ns     0.00B    0.0%    0.00B
+   prolong2interfaces     417   25.2μs    1.4%  60.4ns     0.00B    0.0%    0.00B
+   Jacobian               417   18.5μs    1.0%  44.4ns     0.00B    0.0%    0.00B
+   reset ∂u/∂t            417   14.9μs    0.8%  35.8ns     0.00B    0.0%    0.00B
+   prolong2boundaries     417   13.4μs    0.8%  32.2ns     0.00B    0.0%    0.00B
+   boundary flux          417   12.6μs    0.7%  30.2ns     0.00B    0.0%    0.00B
+ analyze solution           2    874μs   49.4%   437μs   7.46MiB   99.9%  3.73MiB
+ ────────────────────────────────────────────────────────────────────────────────

Setting up a custom semidiscretization

Using a global constant is of course not really nice from a software engineering point of view. Thus, it can often be useful to collect additional data in the parameters of the ODEProblem. Thus, it is time to create our own semidiscretization. Here, we create a small wrapper of a standard semidiscretization of Trixi.jl and the current global time of the simulation.

struct CustomSemidiscretization{Semi, T} <: Trixi.AbstractSemidiscretization
+    semi::Semi
+    t::T
+end
+
+semi_custom = CustomSemidiscretization(semi, Ref(0.0))
Main.CustomSemidiscretization{SemidiscretizationHyperbolic{TreeMesh{1, Trixi.SerialTree{1}}, LinearScalarAdvectionEquation1D{Float64}, typeof(Main.initial_condition), Trixi.BoundaryConditionPeriodic, typeof(Main.source_terms_standard), DGSEM{LobattoLegendreBasis{Float64, 4, SVector{4, Float64}, Matrix{Float64}, Matrix{Float64}, Matrix{Float64}}, Trixi.LobattoLegendreMortarL2{Float64, 4, Matrix{Float64}, Matrix{Float64}}, SurfaceIntegralWeakForm{typeof(flux_central)}, VolumeIntegralWeakForm}, @NamedTuple{elements::Trixi.ElementContainer1D{Float64, Float64}, interfaces::Trixi.InterfaceContainer1D{Float64}, boundaries::Trixi.BoundaryContainer1D{Float64, Float64}}}, Base.RefValue{Float64}}(SemidiscretizationHyperbolic(TreeMesh{1, Trixi.SerialTree{1}} with length 31, LinearScalarAdvectionEquation1D with one variable, initial_condition, boundary_condition_periodic, source_terms_standard, DG{Float64}(LobattoLegendreBasis{Float64}(polydeg=3), LobattoLegendreMortarL2{Float64}(polydeg=3), SurfaceIntegralWeakForm{typeof(flux_central)}(Trixi.flux_central), VolumeIntegralWeakForm()), cache(elements interfaces boundaries)), Base.RefValue{Float64}(0.0))

To get pretty printing in the REPL, you can consider specializing

  • Base.show(io::IO, parameters::CustomSemidiscretization)
  • Base.show(io::IO, ::MIME"text/plain", parameters::CustomSemidiscretization)

for your custom semidiscretiation.

Next, we create our own source terms that use the global time stored in the custom semidiscretiation.

source_terms_custom_semi = let semi_custom = semi_custom
+    function source_terms_custom_semi(u, x, t, equations)
+        t = semi_custom.t[]
+        return -initial_condition(x, t, equations)
+    end
+end
source_terms_custom_semi (generic function with 1 method)

We also create a custom ODE RHS to update the current global time stored in the custom semidiscretization. We unpack the standard semidiscretization created by Trixi.jl and pass it to Trixi.rhs!.

function rhs_semi_custom!(du_ode, u_ode, semi_custom, t)
+    semi_custom.t[] = t
+    Trixi.rhs!(du_ode, u_ode, semi_custom.semi, t)
+end
rhs_semi_custom! (generic function with 1 method)

Finally, we set up an ODEProblem and solve it numerically.

ode_semi_custom = ODEProblem(rhs_semi_custom!,
+                             ode.u0,
+                             ode.tspan,
+                             semi_custom)
+sol_semi_custom = solve(ode_semi_custom, RDPK3SpFSAL49();
+                        ode_default_options()...)
retcode: Success
+Interpolation: 1st order linear
+t: 2-element Vector{Float64}:
+ 0.0
+ 3.0
+u: 2-element Vector{Vector{Float64}}:
+ [-3.487868498008632e-16, -0.1083263689449018, -0.2803509724255764, -0.38268343236508945, -0.3826834323650901, -0.48051200262449845, -0.6263474196321541, -0.7071067811865472, -0.7071067811865478, -0.7795440397566659  …  0.7795440397566659, 0.7071067811865478, 0.7071067811865472, 0.6263474196321541, 0.48051200262449845, 0.3826834323650901, 0.38268343236508945, 0.2803509724255764, 0.1083263689449018, 3.487868498008632e-16]
+ [0.00039566016129114303, 0.005595530597144552, 0.01420823700056966, 0.019099085166061614, 0.01933615033096657, 0.02399145283812463, 0.03128767555719924, 0.03512318003345417, 0.035313794068257194, 0.0387373345584359  …  -0.038403718625379946, -0.034873676580076514, -0.034746550097046656, -0.030828914911087947, -0.02350468228582584, -0.018776524261631816, -0.01859887840964364, -0.013657386582008402, -0.0050293813323077285, 0.00016360783023488103]

If we want to make use of additional functionality provided by Trixi.jl, e.g., for plotting, we need to implement a few additional specializations. In this case, we forward everything to the standard semidiscretization provided by Trixi.jl wrapped in our custom semidiscretization.

Base.ndims(semi::CustomSemidiscretization) = ndims(semi.semi)
+function Trixi.mesh_equations_solver_cache(semi::CustomSemidiscretization)
+    Trixi.mesh_equations_solver_cache(semi.semi)
+end

Now, we can plot the numerical solution as usual.

plot(sol_semi_custom; label = "numerical sol.")
+let
+    x = range(-1.0, 1.0; length = 200)
+    plot!(x, first.(initial_condition.(x, sol_semi_custom.t[end], equations)),
+          label = "analytical sol.", linestyle = :dash, legend = :topleft)
+end
+plot!(sol_semi_custom.u[1], semi, label = "u0", linestyle = :dot, legend = :topleft)
Example block output

This also works with many callbacks as usual. However, the AnalysisCallback requires some special handling since it makes use of a performance counter contained in the standard semidiscretizations of Trixi.jl to report some performance metrics. Here, we forward all accesses to the performance counter to the wrapped semidiscretization.

function Base.getproperty(semi::CustomSemidiscretization, s::Symbol)
+    if s === :performance_counter
+        wrapped_semi = getfield(semi, :semi)
+        wrapped_semi.performance_counter
+    else
+        getfield(semi, s)
+    end
+end

Moreover, the AnalysisCallback also performs some error calculations. We also need to forward them to the wrapped semidiscretization.

function Trixi.calc_error_norms(func, u, t, analyzer,
+                                semi::CustomSemidiscretization,
+                                cache_analysis)
+    Trixi.calc_error_norms(func, u, t, analyzer,
+                           semi.semi,
+                           cache_analysis)
+end

Now, we can work with the callbacks used before as usual.

summary_callback = SummaryCallback()
+analysis_interval = 100
+analysis_callback = AnalysisCallback(semi_custom;
+                                     interval = analysis_interval)
+alive_callback = AliveCallback(; analysis_interval)
+callbacks = CallbackSet(summary_callback,
+                        analysis_callback,
+                        alive_callback)
+
+sol = solve(ode_semi_custom, RDPK3SpFSAL49();
+            ode_default_options()..., callback = callbacks)
+summary_callback()

+████████╗██████╗ ██╗██╗  ██╗██╗
+╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
+   ██║   ██████╔╝██║ ╚███╔╝ ██║
+   ██║   ██╔══██╗██║ ██╔██╗ ██║
+   ██║   ██║  ██║██║██╔╝ ██╗██║
+   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
+
+Main.CustomSemidiscretization{SemidiscretizationHyperbolic{TreeMesh{1, Trixi.SerialTree{1}}, LinearScalarAdvectionEquation1D{Float64}, typeof(Main.initial_condition), Trixi.BoundaryConditionPeriodic, typeof(Main.source_terms_standard), DG{LobattoLegendreBasis{Float64, 4, StaticArraysCore.SArray{Tuple{4}, Float64, 1, 4}, Array{Float64, 2}, Array{Float64, 2}, Array{Float64, 2}}, Trixi.LobattoLegendreMortarL2{Float64, 4, Array{Float64, 2}, Array{Float64, 2}}, SurfaceIntegralWeakForm{typeof(flux_central)}, VolumeIntegralWeakForm}, @NamedTuple{elements::Trixi.ElementContainer1D{Float64, Float64}, interfaces::Trixi.InterfaceContainer1D{Float64}, boundaries::Trixi.BoundaryContainer1D{Float64, Float64}}}, Base.RefValue{Float64}}(SemidiscretizationHyperbolic(TreeMesh{1, Trixi.SerialTree{1}} with length 31, LinearScalarAdvectionEquation1D with one variable, initial_condition, boundary_condition_periodic, source_terms_standard, DG{Float64}(LobattoLegendreBasis{Float64}(polydeg=3), LobattoLegendreMortarL2{Float64}(polydeg=3), SurfaceIntegralWeakForm{typeof(flux_central)}(Trixi.flux_central), VolumeIntegralWeakForm()), cache(elements interfaces boundaries)), Base.RefValue{Float64}(3.0))
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{1, Trixi.SerialTree{1}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0]                                                            │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true,)                                                          │
+│ current #cells: ……………………………………… 31                                                               │
+│ #leaf-cells: ……………………………………………… 16                                                               │
+│ maximum #cells: ……………………………………… 10000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation1D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AnalysisCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ interval: ……………………………………………………… 100                                                              │
+│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
+│ │ error 1: …………………………………………………… l2_error                                                         │
+│ │ error 2: …………………………………………………… linf_error                                                       │
+│ │ integral 1: …………………………………………… entropy_timederivative                                           │
+│ save analysis to file: …………………… no                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AliveCallback                                                                                    │
+│ ═════════════                                                                                    │
+│ interval: ……………………………………………………… 10                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Time integration                                                                                 │
+│ ════════════════                                                                                 │
+│ Start time: ………………………………………………… 0.0                                                              │
+│ Final time: ………………………………………………… 3.0                                                              │
+│ time integrator: …………………………………… RDPK3SpFSAL49                                                    │
+│ adaptive: ……………………………………………………… true                                                             │
+│ abstol: …………………………………………………………… 1.0e-6                                                           │
+│ reltol: …………………………………………………………… 0.001                                                            │
+│ controller: ………………………………………………… PIDController(beta=[0.38, -0.18,…iter=default_dt_factor_limiter) │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Environment information                                                                          │
+│ ═══════════════════════                                                                          │
+│ #threads: ……………………………………………………… 1                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation1D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       7.71000000e-07 s
+ Δt:             0.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:  3.44722259e-08 s
+                                               PID:                   Inf s
+ #DOFs per field:            64                alloc'd memory:        716.277 MiB
+ #elements:                  16
+
+ Variable:       scalar
+ L2 error:       5.57368408e-06
+ Linf error:     1.21294882e-05
+ ∑∂S/∂U ⋅ Uₜ :  -5.00000000e-01
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 9.9686e-02 │ sim. time: 3.4078e-01 (11.359%)  │ run time: 2.4726e-04 s
+#timesteps:     20 │ Δt: 8.5503e-02 │ sim. time: 1.2059e+00 (40.198%)  │ run time: 5.4066e-04 s
+#timesteps:     30 │ Δt: 6.9722e-02 │ sim. time: 1.9558e+00 (65.192%)  │ run time: 7.8803e-04 s
+#timesteps:     40 │ Δt: 6.8292e-02 │ sim. time: 2.6511e+00 (88.370%)  │ run time: 1.0320e-03 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation1D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 45                run time:       6.28736200e-03 s
+ Δt:             7.36971224e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      3.00000000e+00 (100.000%)     time/DOF/rhs!:  3.47140775e-08 s
+                                               PID:            4.38190198e-08 s
+ #DOFs per field:            64                alloc'd memory:        721.096 MiB
+ #elements:                  16
+
+ Variable:       scalar
+ L2 error:       4.46838745e-05
+ Linf error:     2.31363584e-04
+ ∑∂S/∂U ⋅ Uₜ :  -1.23948223e-03
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 3.0  Time steps: 45 (accepted), 46 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+ ────────────────────────────────────────────────────────────────────────────────
+            Trixi.jl                    Time                    Allocations
+                               ───────────────────────   ────────────────────────
+       Tot / % measured:           7.47ms /  86.3%           10.0MiB /  76.9%
+
+ Section               ncalls     time    %tot     avg     alloc    %tot      avg
+ ────────────────────────────────────────────────────────────────────────────────
+ analyze solution           2   5.57ms   86.3%  2.78ms   7.64MiB   99.9%  3.82MiB
+ rhs!                     417    884μs   13.7%  2.12μs   6.61KiB    0.1%    16.2B
+   source terms           417    359μs    5.6%   861ns     0.00B    0.0%    0.00B
+   ~rhs!~                 417    277μs    4.3%   664ns   6.61KiB    0.1%    16.2B
+   volume integral        417    102μs    1.6%   245ns     0.00B    0.0%    0.00B
+   interface flux         417   39.9μs    0.6%  95.8ns     0.00B    0.0%    0.00B
+   prolong2interfaces     417   25.3μs    0.4%  60.8ns     0.00B    0.0%    0.00B
+   surface integral       417   22.2μs    0.3%  53.4ns     0.00B    0.0%    0.00B
+   Jacobian               417   18.2μs    0.3%  43.6ns     0.00B    0.0%    0.00B
+   reset ∂u/∂t            417   15.0μs    0.2%  36.0ns     0.00B    0.0%    0.00B
+   prolong2boundaries     417   13.5μs    0.2%  32.3ns     0.00B    0.0%    0.00B
+   boundary flux          417   12.6μs    0.2%  30.3ns     0.00B    0.0%    0.00B
+ ────────────────────────────────────────────────────────────────────────────────

For even more advanced usage of custom semidiscretizations, you may look at the source code of the ones contained in Trixi.jl, e.g.,

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/differentiable_programming/0f3598b0.svg b/v0.8.7/tutorials/differentiable_programming/0f3598b0.svg new file mode 100644 index 0000000000..91bdce8627 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/0f3598b0.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/48c391c5.svg b/v0.8.7/tutorials/differentiable_programming/48c391c5.svg new file mode 100644 index 0000000000..32cfb9fb94 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/48c391c5.svg @@ -0,0 +1,1077 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/60945a02.svg b/v0.8.7/tutorials/differentiable_programming/60945a02.svg new file mode 100644 index 0000000000..9edda130d6 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/60945a02.svg @@ -0,0 +1,817 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/7497fd70.svg b/v0.8.7/tutorials/differentiable_programming/7497fd70.svg new file mode 100644 index 0000000000..6d264ad370 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/7497fd70.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/76f8df51.svg b/v0.8.7/tutorials/differentiable_programming/76f8df51.svg new file mode 100644 index 0000000000..b3e11ce380 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/76f8df51.svg @@ -0,0 +1,809 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/7bb14d34.svg b/v0.8.7/tutorials/differentiable_programming/7bb14d34.svg new file mode 100644 index 0000000000..936b13b5d0 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/7bb14d34.svg @@ -0,0 +1,1582 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/9cb38e86.svg b/v0.8.7/tutorials/differentiable_programming/9cb38e86.svg new file mode 100644 index 0000000000..b920db1a99 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/9cb38e86.svg @@ -0,0 +1,2100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/ebb68b75.svg b/v0.8.7/tutorials/differentiable_programming/ebb68b75.svg new file mode 100644 index 0000000000..176706099e --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/ebb68b75.svg @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/differentiable_programming/index.html b/v0.8.7/tutorials/differentiable_programming/index.html new file mode 100644 index 0000000000..623da42c57 --- /dev/null +++ b/v0.8.7/tutorials/differentiable_programming/index.html @@ -0,0 +1,210 @@ + +20 Differentiable programming · Trixi.jl

20: Differentiable programming

Julia and its ecosystem provide some tools for differentiable programming. Trixi.jl is designed to be flexible, extendable, and composable with Julia's growing ecosystem for scientific computing and machine learning. Thus, the ultimate goal is to have fast implementations that allow automatic differentiation (AD) without too much hassle for users. If some parts do not meet these requirements, please feel free to open an issue or propose a fix in a PR.

In the following, we will walk through some examples demonstrating how to differentiate through Trixi.jl.

Forward mode automatic differentiation

Trixi.jl integrates well with ForwardDiff.jl for forward mode AD.

Computing the Jacobian

The high-level interface to compute the Jacobian this way is jacobian_ad_forward. First, we load the required packages and compute the Jacobian of a semidiscretization of the compressible Euler equations, a system of nonlinear conservation laws.

using Trixi, LinearAlgebra, Plots
+
+equations = CompressibleEulerEquations2D(1.4)
+
+solver = DGSEM(3, flux_central)
+mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)
+
+J = jacobian_ad_forward(semi);
+size(J)
(1024, 1024)

Next, we compute the eigenvalues of the Jacobian.

λ = eigvals(J)
+scatter(real.(λ), imag.(λ), label="central flux")
Example block output

As you can see here, the maximal real part is close to zero.

relative_maximum = maximum(real, λ) / maximum(abs, λ)
6.194398065604959e-10

Interestingly, if we add dissipation by switching to the flux_lax_friedrichs at the interfaces, the maximal real part of the eigenvalues increases.

solver = DGSEM(3, flux_lax_friedrichs)
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)
+
+J = jacobian_ad_forward(semi)
+λ = eigvals(J)
+
+scatter!(real.(λ), imag.(λ), label="Lax-Friedrichs flux")
Example block output

Although the maximal real part is still somewhat small, it's larger than for the purely central discretization.

relative_maximum = maximum(real, λ) / maximum(abs, λ)
2.0781520236011672e-5

However, we should be careful when using this analysis, since the eigenvectors are not necessarily well-conditioned.

λ, V = eigen(J)
+condition_number = cond(V)
1.640847152061315e6

In one space dimension, the situation is a bit different.

equations = CompressibleEulerEquations1D(1.4)
+
+solver = DGSEM(3, flux_central)
+mesh = TreeMesh((-1.0,), (1.0,), initial_refinement_level=6, n_cells_max=10^5)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)
+
+J = jacobian_ad_forward(semi)
+
+λ = eigvals(J)
+
+scatter(real.(λ), imag.(λ), label="central flux")
Example block output

Here, the maximal real part is basically zero to machine accuracy.

relative_maximum = maximum(real, λ) / maximum(abs, λ)
5.515633800528863e-16

Moreover, the eigenvectors are not as ill-conditioned as in 2D.

λ, V = eigen(J)
+condition_number = cond(V)
645.2799066408426

If we add dissipation, the maximal real part is still approximately zero.

solver = DGSEM(3, flux_lax_friedrichs)
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)
+
+J = jacobian_ad_forward(semi)
+λ = eigvals(J)
+
+scatter!(real.(λ), imag.(λ), label="Lax-Friedrichs flux")
Example block output

As you can see from the plot generated above, the maximal real part is still basically zero to machine precision.

relative_maximum = maximum(real, λ) / maximum(abs, λ)
5.118955954677317e-17

Let's check the condition number of the eigenvectors.

λ, V = eigen(J)
+
+condition_number = cond(V)
94602.12866772134

Note that the condition number of the eigenvector matrix increases but is still smaller than for the example in 2D.

Computing other derivatives

It is also possible to compute derivatives of other dependencies using AD in Trixi.jl. For example, you can compute the gradient of an entropy-dissipative semidiscretization with respect to the ideal gas constant of the compressible Euler equations as described in the following. This example is also available as the elixir examples/special_elixirs/elixir_euler_ad.jl

First, we create a semidiscretization of the compressible Euler equations.

using Trixi, LinearAlgebra, ForwardDiff
+
+equations = CompressibleEulerEquations2D(1.4)
+
+"""
+    initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)
+
+The classical isentropic vortex test case of
+- Chi-Wang Shu (1997)
+  Essentially Non-Oscillatory and Weighted Essentially Non-Oscillatory
+  Schemes for Hyperbolic Conservation Laws
+  [NASA/CR-97-206253](https://ntrs.nasa.gov/citations/19980007543)
+"""
+function initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)
+  inicenter = SVector(0.0, 0.0) # initial center of the vortex
+  iniamplitude = 5.0            # size and strength of the vortex
+
+  rho = 1.0  # base flow
+  v1 = 1.0
+  v2 = 1.0
+  vel = SVector(v1, v2)
+  p = 25.0
+
+  rt = p / rho                      # ideal gas equation
+  t_loc = 0.0
+
+  cent = inicenter + vel*t_loc      # shift advection of center to handle periodic BC, but only for v1 = v2 = 1.0
+  cent = x - cent                   # distance to center point
+  cent = SVector(-cent[2], cent[1])
+
+  r2 = cent[1]^2 + cent[2]^2
+  du = iniamplitude / (2*π) * exp(0.5 * (1 - r2)) # vel. perturbation
+  dtemp = -(equations.gamma - 1) / (2 * equations.gamma * rt) * du^2 # isentropic
+
+  rho = rho * (1 + dtemp)^(1 / (equations.gamma - 1))
+  vel = vel + du * cent
+  v1, v2 = vel
+  p = p * (1 + dtemp)^(equations.gamma / (equations.gamma - 1))
+
+  prim = SVector(rho, v1, v2, p)
+  return prim2cons(prim, equations)
+end
+
+mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)
+
+solver = DGSEM(3, flux_lax_friedrichs, VolumeIntegralFluxDifferencing(flux_ranocha))
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_isentropic_vortex, solver)
+
+u0_ode = Trixi.compute_coefficients(0.0, semi)
+size(u0_ode)
(1024,)

Next, we compute the Jacobian using ForwardDiff.jacobian.

J = ForwardDiff.jacobian((du_ode, γ) -> begin
+    equations_inner = CompressibleEulerEquations2D(first(γ))
+    semi_inner = Trixi.remake(semi, equations=equations_inner, uEltype=eltype(γ))
+    Trixi.rhs!(du_ode, u0_ode, semi_inner, 0.0)
+end, similar(u0_ode), [1.4]); # γ needs to be an `AbstractArray`
+
+round.(extrema(J), sigdigits=2)
(-220.0, 220.0)

Note that we create a semidiscretization semi at first to determine the state u0_ode around which we want to perform the linearization. Next, we wrap the RHS evaluation inside a closure and pass that to ForwardDiff.jacobian. There, we need to make sure that the internal caches are able to store dual numbers from ForwardDiff.jl by setting uEltype appropriately. A similar approach is used by jacobian_ad_forward.

Note that the ideal gas constant does not influence the semidiscrete rate of change of the density, as demonstrated by

norm(J[1:4:end])
0.0

Here, we used some knowledge about the internal memory layout of Trixi.jl, an array of structs with the conserved variables as fastest-varying index in memory.

Differentiating through a complete simulation

It is also possible to differentiate through a complete simulation. As an example, let's differentiate the total energy of a simulation using the linear scalar advection equation with respect to the wave number (frequency) of the initial data.

using Trixi, OrdinaryDiffEq, ForwardDiff, Plots
+
+function energy_at_final_time(k) # k is the wave number of the initial condition
+    equations = LinearScalarAdvectionEquation2D(1.0, -0.3)
+    mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)
+    solver = DGSEM(3, flux_lax_friedrichs)
+    initial_condition = (x, t, equation) -> begin
+            x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)
+            return SVector(sinpi(k * sum(x_trans)))
+    end
+    semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
+                                               uEltype=typeof(k))
+    ode = semidiscretize(semi, (0.0, 1.0))
+    sol = solve(ode, BS3(), save_everystep=false)
+    Trixi.integrate(energy_total, sol.u[end], semi)
+end
+
+k_values = range(0.9, 1.1, length=101)
+
+plot(k_values, energy_at_final_time.(k_values), label="Energy")
Example block output

You see a plot of a curve that resembles a parabola with local maximum around k = 1.0. Why's that? Well, the domain is fixed but the wave number changes. Thus, if the wave number is not chosen as an integer, the initial condition will not be a smooth periodic function in the given domain. Hence, the dissipative surface flux (flux_lax_friedrichs in this example) will introduce more dissipation. In particular, it will introduce more dissipation for "less smooth" initial data, corresponding to wave numbers k further away from integers.

We can compute the discrete derivative of the energy at the final time with respect to the wave number k as follows.

round(ForwardDiff.derivative(energy_at_final_time, 1.0), sigdigits=2)
1.4e-5

This is rather small and we can treat it as zero in comparison to the value of this derivative at other wave numbers k.

dk_values = ForwardDiff.derivative.((energy_at_final_time,), k_values);
+
+plot(k_values, dk_values, label="Derivative")
Example block output

If you remember basic calculus, a sufficient condition for a local maximum is that the first derivative vanishes and the second derivative is negative. We can also check this discretely.

second_derivative = round(ForwardDiff.derivative(
+        k -> Trixi.ForwardDiff.derivative(energy_at_final_time, k), 1.0),
+      sigdigits=2)
-0.9

Having seen this application, let's break down what happens step by step.

function energy_at_final_time(k) # k is the wave number of the initial condition
+    equations = LinearScalarAdvectionEquation2D(1.0, -0.3)
+    mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)
+    solver = DGSEM(3, flux_lax_friedrichs)
+    initial_condition = (x, t, equation) -> begin
+        x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)
+        return SVector(sinpi(k * sum(x_trans)))
+    end
+    semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
+                                               uEltype=typeof(k))
+    ode = semidiscretize(semi, (0.0, 1.0))
+    sol = solve(ode, BS3(), save_everystep=false)
+    Trixi.integrate(energy_total, sol.u[end], semi)
+end
+
+k = 1.0
+round(ForwardDiff.derivative(energy_at_final_time, k), sigdigits=2)
1.4e-5

When calling ForwardDiff.derivative(energy_at_final_time, k) with k=1.0, ForwardDiff.jl will basically use the chain rule and known derivatives of existing basic functions to calculate the derivative of the energy at the final time with respect to the wave number k at k0 = 1.0. To do this, ForwardDiff.jl uses dual numbers, which basically store the result and its derivative w.r.t. a specified parameter at the same time. Thus, we need to make sure that we can treat these ForwardDiff.Dual numbers everywhere during the computation. Fortunately, generic Julia code usually supports these operations. The most basic problem for a developer is to ensure that all types are generic enough, in particular the ones of internal caches.

The first step in this example creates some basic ingredients of our simulation.

equations = LinearScalarAdvectionEquation2D(1.0, -0.3)
+mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)
+solver = DGSEM(3, flux_lax_friedrichs);

These do not have internal caches storing intermediate values of the numerical solution, so we do not need to adapt them. In fact, we could also define them outside of energy_at_final_time (but would need to take care of globals or wrap everything in another function).

Next, we define the initial condition

initial_condition = (x, t, equation) -> begin
+    x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)
+    return SVector(sinpi(k * sum(x_trans)))
+end;

as a closure capturing the wave number k passed to energy_at_final_time. If you call energy_at_final_time(1.0), k will be a Float64. Thus, the return values of initial_condition will be SVectors of Float64s. When calculating the ForwardDiff.derivative, k will be a ForwardDiff.Dual number. Hence, the initial_condition will return SVectors of ForwardDiff.Dual numbers.

The semidiscretization semi uses some internal caches to avoid repeated allocations and speed up the computations, e.g. for numerical fluxes at interfaces. Thus, we need to tell Trixi.jl to allow ForwardDiff.Dual numbers in these caches. That's what the keyword argument uEltype=typeof(k) in

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
+                                    uEltype=typeof(k));

does. This is basically the only part where you need to modify your standard Trixi.jl code to enable automatic differentiation. From there on, the remaining steps

ode = semidiscretize(semi, (0.0, 1.0))
+sol = solve(ode, BS3(), save_everystep=false)
+round(Trixi.integrate(energy_total, sol.u[end], semi), sigdigits=5)
0.24986

do not need any modifications since they are sufficiently generic (and enough effort has been spend to allow general types inside these calls).

Propagating errors using Measurements.jl

Error bars by Randall Munroe "Error bars" by Randall Munroe, linked from https://xkcd.com/2110

Similar to AD, Trixi.jl also allows propagating uncertainties using linear error propagation theory via Measurements.jl. As an example, let's create a system representing the linear advection equation in 1D with an uncertain velocity. Then, we create a semidiscretization using a sine wave as initial condition, solve the ODE, and plot the resulting uncertainties in the primitive variables.

using Trixi, OrdinaryDiffEq, Measurements, Plots, LaTeXStrings
+
+equations = LinearScalarAdvectionEquation1D(1.0 ± 0.1)
+
+mesh = TreeMesh((-1.0,), (1.0,), n_cells_max=10^5, initial_refinement_level=5)
+
+solver = DGSEM(3)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test,
+                                    solver, uEltype=Measurement{Float64})
+
+ode = semidiscretize(semi, (0.0, 1.5))
+
+sol = solve(ode, BS3(), save_everystep=false);
+
+plot(sol)
Example block output

You should see a plot where small error bars are shown around the extrema and larger error bars are shown in the remaining parts. This result is in accordance with expectations. Indeed, the uncertain propagation speed will affect the extrema less since the local variation of the solution is relatively small there. In contrast, the local variation of the solution is large around the turning points of the sine wave, so the uncertainties will be relatively large there.

All this is possible due to allowing generic types and having good abstractions in Julia that allow packages to work together seamlessly.

Finite difference approximations

Trixi.jl provides the convenience function jacobian_fd to approximate the Jacobian via central finite differences.

using Trixi, LinearAlgebra
+
+equations = CompressibleEulerEquations2D(1.4)
+
+solver = DGSEM(3, flux_central)
+
+mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)
+
+J_fd = jacobian_fd(semi)
+
+J_ad = jacobian_ad_forward(semi)
+
+relative_difference = norm(J_fd - J_ad) / size(J_fd, 1)
5.750018477545784e-7

This discrepancy is of the expected order of magnitude for central finite difference approximations.

Linear systems

When a linear PDE is discretized using a linear scheme such as a standard DG method, the resulting semidiscretization yields an affine ODE of the form

\[\partial_t u(t) = A u(t) + b,\]

where A is a linear operator ("matrix") and b is a vector. Trixi.jl allows you to obtain this linear structure in a matrix-free way by using linear_structure. The resulting operator A can be used in multiplication, e.g. mul! from LinearAlgebra, converted to a sparse matrix using sparse from SparseArrays, or converted to a dense matrix using Matrix for detailed eigenvalue analyses. For example,

using Trixi, LinearAlgebra, Plots
+
+equations = LinearScalarAdvectionEquation2D(1.0, -0.3)
+
+solver = DGSEM(3, flux_lax_friedrichs)
+
+mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)
+
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, solver)
+
+A, b = linear_structure(semi)
+
+size(A), size(b)
((256, 256), (256,))

Next, we compute the eigenvalues of the linear operator.

λ = eigvals(Matrix(A))
+
+scatter(real.(λ), imag.(λ))
Example block output

As you can see here, the maximal real part is close to machine precision.

λ = eigvals(Matrix(A))
+relative_maximum = maximum(real, λ) / maximum(abs, λ)
-3.739241340386926e-16

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots", "ForwardDiff"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+  [f6369f11] ForwardDiff v0.10.36
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/first_steps/changing_trixi/index.html b/v0.8.7/tutorials/first_steps/changing_trixi/index.html new file mode 100644 index 0000000000..bb635283bd --- /dev/null +++ b/v0.8.7/tutorials/first_steps/changing_trixi/index.html @@ -0,0 +1,12 @@ + +1.3 Changing Trixi.jl itself · Trixi.jl

1.3: First steps in Trixi.jl: Changing Trixi.jl itself

If you plan on editing Trixi.jl itself, you can download Trixi.jl locally and run it from the cloned directory.

Forking Trixi.jl

To create your own fork of Trixi.jl, log in to your GitHub account, visit the Trixi.jl GitHub repository and click the Fork button located in the upper-right corner of the page. Then, click on Create fork in the opened window to complete the forking process.

Cloning Trixi.jl

Windows

If you are using Windows, you can clone Trixi.jl by using the GitHub Desktop tool:

  • If you do not have a GitHub account yet, create it on the GitHub website.
  • Download and install GitHub Desktop and then log in to your account.
  • Open GitHub Desktop, press Ctrl+Shift+O.
  • In the opened window, navigate to the URL tab and paste trixi-framework/Trixi.jl or YourGitHubUserName/Trixi.jl to clone your own fork of Trixi.jl, and choose the path to the folder where you want to save Trixi.jl. Then click Clone and Trixi.jl will be cloned to your computer.

Now you cloned Trixi.jl and only need to tell Julia to use the local clone as the package sources:

  • Open a terminal using Win+r and cmd. Navigate to the folder with the cloned Trixi.jl using cd.
  • Create a new directory run, enter it, and start Julia with the --project=. flag:
    mkdir run
    +cd run
    +julia --project=.
  • Now run the following commands to install all relevant packages:
    using Pkg; Pkg.develop(PackageSpec(path="..")) # Tell Julia to use the local Trixi.jl clone
    +Pkg.add(["OrdinaryDiffEq", "Plots"])  # Install additional packages

Now you already installed Trixi.jl from your local clone. Note that if you installed Trixi.jl this way, you always have to start Julia with the --project flag set to your run directory, e.g.,

julia --project=.

if already inside the run directory.

Linux

You can clone Trixi.jl to your computer by executing the following commands:

git clone git@github.com:trixi-framework/Trixi.jl.git
+# If an error occurs, try the following:
+# git clone https://github.com/trixi-framework/Trixi.jl
+cd Trixi.jl
+mkdir run
+cd run
+julia --project=. -e 'using Pkg; Pkg.develop(PackageSpec(path=".."))' # Tell Julia to use the local Trixi.jl clone
+julia --project=. -e 'using Pkg; Pkg.add(["OrdinaryDiffEq", "Plots"])' # Install additional packages

Alternatively, you can clone your own fork of Trixi.jl by replacing the link git@github.com:trixi-framework/Trixi.jl.git with git@github.com:YourGitHubUserName/Trixi.jl.git.

Note that if you installed Trixi.jl this way, you always have to start Julia with the --project flag set to your run directory, e.g.,

julia --project=.

if already inside the run directory.

Developing Trixi.jl

If you've created and cloned your own fork of Trixi.jl, you can make local changes to Trixi.jl and propose them as a Pull Request (PR) to be merged into trixi-framework/Trixi.jl.

Linux and MacOS utilize the git version control system to manage changes between your local and remote repositories. The most commonly used commands include add, commit, push and pull. You can find detailed information about these functions in the Git documentation.

For Windows and GitHub Desktop users, refer to the documentation of GitHub Desktop.

After making local changes to Trixi.jl and pushing them to the remote repository, you can open a Pull Request (PR) from your branch to the main branch of trixi-framework/Trixi.jl. Then, follow the Review checklist provided in the Pull Request to streamline the review process.

Additional reading

To further delve into Trixi.jl, you may have a look at the following introductory tutorials.

  • Behind the scenes of a simulation setup will guide you through a simple Trixi.jl setup ("elixir"), giving an overview of what happens in the background during the initialization of a simulation. It clarifies some of the more fundamental, technical concepts that are applicable to a variety of (also more complex) configurations.
  • Introduction to DG methods will teach you how to set up a simple way to approximate the solution of a hyperbolic partial differential equation. It will be especially useful to learn about the Discontinuous Galerkin method and the way it is implemented in Trixi.jl.
  • Adding a new scalar conservation law and Adding a non-conservative equation describe how to add new physics models that are not yet included in Trixi.jl.
  • Callbacks gives an overview of how to regularly execute specific actions during a simulation, e.g., to store the solution or adapt the mesh.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/first_steps/create_first_setup/a20256d9.svg b/v0.8.7/tutorials/first_steps/create_first_setup/a20256d9.svg new file mode 100644 index 0000000000..6ea66040b5 --- /dev/null +++ b/v0.8.7/tutorials/first_steps/create_first_setup/a20256d9.svg @@ -0,0 +1,904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/first_steps/create_first_setup/b0d1fb9f.svg b/v0.8.7/tutorials/first_steps/create_first_setup/b0d1fb9f.svg new file mode 100644 index 0000000000..8da1990f98 --- /dev/null +++ b/v0.8.7/tutorials/first_steps/create_first_setup/b0d1fb9f.svg @@ -0,0 +1,1150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/first_steps/create_first_setup/index.html b/v0.8.7/tutorials/first_steps/create_first_setup/index.html new file mode 100644 index 0000000000..b30103a81d --- /dev/null +++ b/v0.8.7/tutorials/first_steps/create_first_setup/index.html @@ -0,0 +1,319 @@ + +1.2 Create your first setup · Trixi.jl

1.2: First steps in Trixi.jl: Create your first setup

In this part of the introductory guide, we will create a first Trixi.jl setup as an extension of elixir_advection_basic.jl. Since Trixi.jl has a common basic structure for the setups, you can create your own by extending and modifying the following example.

Let's consider the linear advection equation for a state $u = u(x, y, t)$ on the two-dimensional spatial domain $[-1, 1] \times [-1, 1]$ with a source term

\[\frac{\partial}{\partial t}u + \frac{\partial}{\partial x} (0.2 u) - \frac{\partial}{\partial y} (0.7 u) = - 2 e^{-t} +\sin\bigl(2 \pi (x - t) \bigr) \sin\bigl(2 \pi (y - t) \bigr),\]

with the initial condition

\[u(x, y, 0) = \sin\bigl(\pi x \bigr) \sin\bigl(\pi y \bigr),\]

and periodic boundary conditions.

The first step is to create and open a file with the .jl extension. You can do this with your favorite text editor (if you do not have one, we recommend VS Code). In this file, you will create your setup. The file can then be executed in Julia using, for example, trixi_include(). Alternatively, you can execute each line of the following code one by one in the Julia REPL. This will generate useful output for nearly every command and improve your comprehension of the process.

To be able to use functionalities of Trixi.jl, you always need to load Trixi.jl itself and the OrdinaryDiffEq.jl package.

using Trixi
+using OrdinaryDiffEq

The next thing to do is to choose an equation that is suitable for your problem. To see all the currently implemented equations, take a look at src/equations. If you are interested in adding a new physics model that has not yet been implemented in Trixi.jl, take a look at the tutorials Adding a new scalar conservation law or Adding a non-conservative equation.

The linear scalar advection equation in two spatial dimensions

\[\frac{\partial}{\partial t}u + \frac{\partial}{\partial x} (a_1 u) + \frac{\partial}{\partial y} (a_2 u) = 0\]

is already implemented in Trixi.jl as LinearScalarAdvectionEquation2D, for which we need to define a two-dimensional parameter advection_velocity describing the parameters $a_1$ and $a_2$. Appropriate for our problem is (0.2, -0.7).

advection_velocity = (0.2, -0.7)
+equations = LinearScalarAdvectionEquation2D(advection_velocity)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation2D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

To solve our problem numerically using Trixi.jl, we have to discretize the spatial domain, for which we set up a mesh. One of the most used meshes in Trixi.jl is the TreeMesh. The spatial domain used is $[-1, 1] \times [-1, 1]$. We set an initial number of elements in the mesh using initial_refinement_level, which describes the initial number of hierarchical refinements. In this simple case, the total number of elements is 2^initial_refinement_level throughout the simulation. The variable n_cells_max is used to limit the number of elements in the mesh, which cannot be exceeded when using adaptive mesh refinement.

All minimum and all maximum coordinates must be combined into Tuples.

coordinates_min = (-1.0, -1.0)
+coordinates_max = ( 1.0,  1.0)
+mesh = TreeMesh(coordinates_min, coordinates_max,
+                initial_refinement_level = 4,
+                n_cells_max = 30_000)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{2, Trixi.SerialTree{2}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0, 0.0]                                                       │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true, true)                                                     │
+│ current #cells: ……………………………………… 341                                                              │
+│ #leaf-cells: ……………………………………………… 256                                                              │
+│ maximum #cells: ……………………………………… 30000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

To approximate the solution of the defined model, we create a DGSEM solver. The solution in each of the recently defined mesh elements will be approximated by a polynomial of degree polydeg. For more information about discontinuous Galerkin methods, check out the Introduction to DG methods tutorial. By default, in the weak formulation DGSEM initializes the surface flux as flux_central and uses the physical flux for the volume integral.

solver = DGSEM(polydeg=3)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Now we need to define an initial condition for our problem. All the already implemented initial conditions for LinearScalarAdvectionEquation2D can be found in src/equations/linear_scalar_advection_2d.jl. If you want to use, for example, a Gaussian pulse, it can be used as follows:

initial_conditions = initial_condition_gauss

But to show you how an arbitrary initial condition can be implemented in a way suitable for Trixi.jl, we define our own initial conditions.

\[u(x, y, 0) = \sin\bigl(\pi x \bigr) \sin\bigl(\pi y \bigr).\]

The initial conditions function must take spatial coordinates, time and equation as arguments and returns an initial condition as a statically sized vector SVector. Following the same structure, you can define your own initial conditions. The time variable t can be unused in the initial condition, but might also be used to describe an analytical solution if known. If you use the initial condition as analytical solution, you can analyze your numerical solution by computing the error, see also the section about analyzing the solution.

function initial_condition_sinpi(x, t, equations::LinearScalarAdvectionEquation2D)
+    u = sinpi(x[1]) * sinpi(x[2])
+    return SVector(u)
+end
+initial_condition = initial_condition_sinpi
initial_condition_sinpi (generic function with 1 method)

The next step is to define a function of the source term corresponding to our problem.

\[f(u, x, y, t) = - 2 e^{-t} \sin\bigl(2 \pi (x - t) \bigr) \sin\bigl(2 \pi (y - t) \bigr)\]

This function must take the state variable, the spatial coordinates, the time and the equation itself as arguments and returns the source term as a static vector SVector.

function source_term_exp_sinpi(u, x, t, equations::LinearScalarAdvectionEquation2D)
+    u = - 2 * exp(-t) * sinpi(2*(x[1] - t)) * sinpi(2*(x[2] - t))
+    return SVector(u)
+end
source_term_exp_sinpi (generic function with 1 method)

Now we collect all the information that is necessary to define a spatial discretization,

semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;
+                                    source_terms = source_term_exp_sinpi)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 2                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 341                 │
+│ equations: …………………………………………………… LinearScalarAdvectionEquation2D                                  │
+│ initial condition: ……………………………… initial_condition_sinpi                                          │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… source_term_exp_sinpi                                            │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 4096                                                             │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

which leaves us with an ODE problem in time with a span from 0.0 to 1.0. This approach is commonly referred to as the method of lines.

tspan = (0.0, 1.0)
+ode = semidiscretize(semi, tspan)
ODEProblem with uType Vector{Float64} and tType Float64. In-place: true
+timespan: (0.0, 1.0)
+u0: 4096-element Vector{Float64}:
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.011734602208786986
+ 0.030369402873034978
+ 0.04145470668348209
+ 0.0
+ 0.030369402873034978
+ ⋮
+ 0.0
+ 0.04145470668348209
+ 0.030369402873034978
+ 0.011734602208786986
+ 0.0
+ 0.0
+ 0.0
+ 0.0
+ 0.0

At this point, our problem is defined. We will use the solve function defined in OrdinaryDiffEq.jl to get the solution. OrdinaryDiffEq.jl gives us the ability to customize the solver using callbacks without actually modifying it. Trixi.jl already has some implemented Callbacks. The most widely used callbacks in Trixi.jl are step control callbacks that are activated at the end of each time step to perform some actions, e.g. to print statistics. We will show you how to use some of the common callbacks.

To print a summary of the simulation setup at the beginning and to reset timers to zero, we use the SummaryCallback.

summary_callback = SummaryCallback()
SummaryCallback

We also want to analyze the current state of the solution in regular intervals. The AnalysisCallback outputs some useful statistical information during the simulation every interval time steps.

analysis_callback = AnalysisCallback(semi, interval = 20)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AnalysisCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ interval: ……………………………………………………… 20                                                               │
+│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
+│ │ error 1: …………………………………………………… l2_error                                                         │
+│ │ error 2: …………………………………………………… linf_error                                                       │
+│ │ integral 1: …………………………………………… entropy_timederivative                                           │
+│ save analysis to file: …………………… no                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

To indicate that a simulation is still running, we utilize the inexpensive AliveCallback to periodically print information to the screen, such as the current time, every alive_interval time steps.

alive_callback = AliveCallback(alive_interval = 10)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AliveCallback                                                                                    │
+│ ═════════════                                                                                    │
+│ interval: ……………………………………………………… 10                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

It is also possible to control the time step size using the StepsizeCallback if the time integration method isn't adaptive itself. To get more details, look at CFL based step size control.

stepsize_callback = StepsizeCallback(cfl = 0.9)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ StepsizeCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ CFL number: ………………………………………………… 0.9                                                              │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

To save the current solution in regular intervals we use the SaveSolutionCallback. We would like to save the initial and final solutions as well. The data will be saved as HDF5 files located in the out folder. Afterwards it is possible to visualize a solution from saved files using Trixi2Vtk.jl and ParaView, which is described below in the section Visualize the solution.

save_solution = SaveSolutionCallback(interval = 20,
+                                     save_initial_solution = true,
+                                     save_final_solution = true)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SaveSolutionCallback                                                                             │
+│ ════════════════════                                                                             │
+│ interval: ……………………………………………………… 20                                                               │
+│ solution variables: …………………………… cons2prim                                                        │
+│ save initial solution: …………………… yes                                                              │
+│ save final solution: ………………………… yes                                                              │
+│ output directory: ………………………………… /home/runner/work/Trixi.jl/Trixi.jl/docs/out                     │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Alternatively, we have the option to print solution files at fixed time intervals.

save_solution = SaveSolutionCallback(dt = 0.1,
+                                     save_initial_solution = true,
+                                     save_final_solution = true)

Another useful callback is the SaveRestartCallback. It saves information for restarting in regular intervals. We are interested in saving a restart file for the final solution as well. To perform a restart, you need to configure the restart setup in a special way, which is described in the section Restart simulation.

save_restart = SaveRestartCallback(interval = 100, save_final_restart = true)
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SaveRestartCallback                                                                              │
+│ ═══════════════════                                                                              │
+│ interval: ……………………………………………………… 100                                                              │
+│ save final solution: ………………………… yes                                                              │
+│ output directory: ………………………………… /home/runner/work/Trixi.jl/Trixi.jl/docs/out                     │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘

Create a CallbackSet to collect all callbacks so that they can be passed to the solve function.

callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback, stepsize_callback,
+                        save_solution, save_restart);

The last step is to choose the time integration method. OrdinaryDiffEq.jl defines a wide range of ODE solvers, including the three-stage, third-order strong stability preserving Runge-Kutta method SSPRK33. We will pass the ODE problem, the ODE solver and the callbacks to the solve function. Also, to use StepsizeCallback, we must explicitly specify the initial trial time step dt, the selected value is not important, because it will be overwritten by the StepsizeCallback. And there is no need to save every step of the solution, as we are only interested the output provided by our callback SaveSolutionCallback.

sol = solve(ode, SSPRK33(); dt = 1.0, save_everystep = false, callback = callbacks);

+████████╗██████╗ ██╗██╗  ██╗██╗
+╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
+   ██║   ██████╔╝██║ ╚███╔╝ ██║
+   ██║   ██╔══██╗██║ ██╔██╗ ██║
+   ██║   ██║  ██║██║██╔╝ ██╗██║
+   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 2                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 341                 │
+│ equations: …………………………………………………… LinearScalarAdvectionEquation2D                                  │
+│ initial condition: ……………………………… initial_condition_sinpi                                          │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… source_term_exp_sinpi                                            │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 4096                                                             │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{2, Trixi.SerialTree{2}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0, 0.0]                                                       │
+│ length: …………………………………………………………… 2.0                                                              │
+│ periodicity: ……………………………………………… (true, true)                                                     │
+│ current #cells: ……………………………………… 341                                                              │
+│ #leaf-cells: ……………………………………………… 256                                                              │
+│ maximum #cells: ……………………………………… 30000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ LinearScalarAdvectionEquation2D                                                                  │
+│ ═══════════════════════════════                                                                  │
+│ #variables: ………………………………………………… 1                                                                │
+│ │ variable 1: …………………………………………… scalar                                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_central                                                     │
+│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AnalysisCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ interval: ……………………………………………………… 20                                                               │
+│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
+│ │ error 1: …………………………………………………… l2_error                                                         │
+│ │ error 2: …………………………………………………… linf_error                                                       │
+│ │ integral 1: …………………………………………… entropy_timederivative                                           │
+│ save analysis to file: …………………… no                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AliveCallback                                                                                    │
+│ ═════════════                                                                                    │
+│ interval: ……………………………………………………… 10                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ StepsizeCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ CFL number: ………………………………………………… 0.9                                                              │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SaveSolutionCallback                                                                             │
+│ ════════════════════                                                                             │
+│ interval: ……………………………………………………… 20                                                               │
+│ solution variables: …………………………… cons2prim                                                        │
+│ save initial solution: …………………… yes                                                              │
+│ save final solution: ………………………… yes                                                              │
+│ output directory: ………………………………… /home/runner/work/Trixi.jl/Trixi…build/tutorials/first_steps/out │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SaveRestartCallback                                                                              │
+│ ═══════════════════                                                                              │
+│ interval: ……………………………………………………… 100                                                              │
+│ save final solution: ………………………… yes                                                              │
+│ output directory: ………………………………… /home/runner/work/Trixi.jl/Trixi…build/tutorials/first_steps/out │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Time integration                                                                                 │
+│ ════════════════                                                                                 │
+│ Start time: ………………………………………………… 0.0                                                              │
+│ Final time: ………………………………………………… 1.0                                                              │
+│ time integrator: …………………………………… SSPRK33                                                          │
+│ adaptive: ……………………………………………………… false                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Environment information                                                                          │
+│ ═══════════════════════                                                                          │
+│ #threads: ……………………………………………………… 1                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       8.31000000e-07 s
+ Δt:             1.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:          4096                alloc'd memory:        751.199 MiB
+ #elements:                 256
+
+ Variable:       scalar
+ L2 error:       5.57371016e-06
+ Linf error:     2.37926999e-05
+ ∑∂S/∂U ⋅ Uₜ :   4.42993996e-17
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 3.1250e-02 │ sim. time: 3.1250e-01 (31.250%)  │ run time: 5.3397e-02 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 20                run time:       6.51369560e-02 s
+ Δt:             3.12500000e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      6.25000000e-01 (62.500%)      time/DOF/rhs!:  3.78407443e-08 s
+                                               PID:            2.61154431e-07 s
+ #DOFs per field:          4096                alloc'd memory:        755.613 MiB
+ #elements:                 256
+
+ Variable:       scalar
+ L2 error:       6.70015343e-01
+ Linf error:     1.45520916e+00
+ ∑∂S/∂U ⋅ Uₜ :  -3.74390676e-02
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     20 │ Δt: 3.1250e-02 │ sim. time: 6.2500e-01 (62.500%)  │ run time: 5.9062e-02 s
+#timesteps:     30 │ Δt: 3.1250e-02 │ sim. time: 9.3750e-01 (93.750%)  │ run time: 6.4306e-02 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'LinearScalarAdvectionEquation2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 32                run time:       7.23191960e-02 s
+ Δt:             3.12500000e-02                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      1.00000000e+00 (100.000%)     time/DOF/rhs!:  3.73258354e-08 s
+                                               PID:            4.22676527e-08 s
+ #DOFs per field:          4096                alloc'd memory:        759.839 MiB
+ #elements:                 256
+
+ Variable:       scalar
+ L2 error:       8.65828105e-01
+ Linf error:     1.75847551e+00
+ ∑∂S/∂U ⋅ Uₜ :  -1.70590047e-02
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 1.0  Time steps: 32 (accepted), 32 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────

Finally, we print the timer summary.

summary_callback()
 ────────────────────────────────────────────────────────────────────────────────
+            Trixi.jl                    Time                    Allocations
+                               ───────────────────────   ────────────────────────
+       Tot / % measured:           84.6ms /  23.9%           15.1MiB /  77.0%
+
+ Section               ncalls     time    %tot     avg     alloc    %tot      avg
+ ────────────────────────────────────────────────────────────────────────────────
+ rhs!                      96   14.7ms   72.8%   153μs   9.33KiB    0.1%     100B
+   source terms            96   8.89ms   44.0%  92.6μs     0.00B    0.0%    0.00B
+   volume integral         96   3.82ms   18.9%  39.8μs     0.00B    0.0%    0.00B
+   interface flux          96   1.10ms    5.4%  11.5μs     0.00B    0.0%    0.00B
+   surface integral        96    378μs    1.9%  3.93μs     0.00B    0.0%    0.00B
+   prolong2interfaces      96    315μs    1.6%  3.28μs     0.00B    0.0%    0.00B
+   ~rhs!~                  96   93.9μs    0.5%   978ns   9.33KiB    0.1%     100B
+   Jacobian                96   53.3μs    0.3%   556ns     0.00B    0.0%    0.00B
+   reset ∂u/∂t             96   46.0μs    0.2%   479ns     0.00B    0.0%    0.00B
+   prolong2mortars         96   4.91μs    0.0%  51.1ns     0.00B    0.0%    0.00B
+   prolong2boundaries      96   4.47μs    0.0%  46.6ns     0.00B    0.0%    0.00B
+   mortar flux             96   4.16μs    0.0%  43.3ns     0.00B    0.0%    0.00B
+   boundary flux           96   3.05μs    0.0%  31.7ns     0.00B    0.0%    0.00B
+ I/O                        6   2.76ms   13.7%   460μs    370KiB    3.1%  61.7KiB
+   save solution            3   1.63ms    8.1%   545μs    302KiB    2.5%   101KiB
+   ~I/O~                    6   1.13ms    5.6%   188μs   68.3KiB    0.6%  11.4KiB
+   get element vari...      3    993ns    0.0%   331ns     0.00B    0.0%    0.00B
+   get node variables       3    271ns    0.0%  90.3ns     0.00B    0.0%    0.00B
+   save mesh                3    150ns    0.0%  50.0ns     0.00B    0.0%    0.00B
+ analyze solution           3   2.74ms   13.5%   912μs   11.2MiB   96.8%  3.74MiB
+ calculate dt              33   4.18μs    0.0%   127ns     0.00B    0.0%    0.00B
+ ────────────────────────────────────────────────────────────────────────────────

Now you can plot the solution as shown below, analyze it and improve the stability, accuracy or efficiency of your setup.

Visualize the solution

In the previous part of the tutorial, we calculated the final solution of the given problem, now we want to visualize it. A more detailed explanation of visualization methods can be found in the section Visualization.

Using Plots.jl

The first option is to use the Plots.jl package directly after calculations, when the solution is saved in the sol variable.

using Plots

As was shown in the Getting started section, you can plot all variables from the system of equations by executing the following.

plot(sol)

Alternatively, you can configure the plot more precisely. Trixi.jl provides a special data type, PlotData2D, to extract the visualization data from the solution.

pd = PlotData2D(sol);

You can plot specific variables from the system of equations by referring to their names. To obtain the names of all variables, execute the following.

@show pd.variable_names;
pd.variable_names = ["scalar"]

Plot the variable named "scalar" (which is the name of the variable for the linear advection equation in Trixi.jl).

plot(pd["scalar"])
Example block output

Mesh extraction is possible using the getmesh function. Plots.jl has the plot! function that allows you to modify an already built graph.

plot!(getmesh(pd))
Example block output

Using Trixi2Vtk.jl

Another way to visualize a solution is to extract it from a saved HDF5 file. After we used the solve function with SaveSolutionCallback there is a file with the final solution. It is located in the out folder and is named as follows: solution_index.h5. The index is the final time step of the solution that is padded to 6 digits with zeros from the beginning. With Trixi2Vtk you can convert the HDF5 output file generated by Trixi.jl into a VTK/VTU files. VTK/VTU are specialized formats designed to store structured data required for visualization purposes. This can be used in visualization tools such as ParaView or VisIt to plot the solution.

If you haven't added Trixi2Vtk.jl to your project yet, you can add it as follows.

import Pkg
+Pkg.add(["Trixi2Vtk"])

Now we load the Trixi2Vtk.jl package and convert the file out/solution_000000032.h5 with the final solution using the trixi2vtk function saving the resulting file in the out folder.

using Trixi2Vtk
+trixi2vtk(joinpath("out", "solution_000000032.h5"), output_directory="out")
 ────────────────────────────────────────────────────────────────────────────────
+                                        Time                    Allocations
+                               ───────────────────────   ────────────────────────
+       Tot / % measured:            1.17s /  61.9%           64.2MiB /  71.8%
+
+ Section               ncalls     time    %tot     avg     alloc    %tot      avg
+ ────────────────────────────────────────────────────────────────────────────────
+ interpolate data           1    316ms   43.7%   316ms   7.76MiB   16.8%  7.76MiB
+ add data to VTK file       1    286ms   39.5%   286ms   8.67MiB   18.8%  8.67MiB
+   scalar                   1    115ms   16.0%   115ms   5.19MiB   11.3%  5.19MiB
+   add data to VTK ...      1    519μs    0.1%   519μs    118KiB    0.3%   118KiB
+     cell_ids               1    274μs    0.0%   274μs   35.6KiB    0.1%  35.6KiB
+     element_ids            1    201μs    0.0%   201μs   37.8KiB    0.1%  37.8KiB
+     levels                 1   33.1μs    0.0%  33.1μs   37.8KiB    0.1%  37.8KiB
+ read mesh                  1   59.9ms    8.3%  59.9ms   8.68MiB   18.8%  8.68MiB
+ build VTK grid (no...      1   52.2ms    7.2%  52.2ms   15.4MiB   33.4%  15.4MiB
+ prepare VTK cells ...      1   7.04ms    1.0%  7.04ms   5.04MiB   10.9%  5.04MiB
+ build VTK grid (ce...      1    881μs    0.1%   881μs    353KiB    0.7%   353KiB
+ save VTK file              2    500μs    0.1%   250μs   4.91KiB    0.0%  2.45KiB
+ read data                  1    331μs    0.0%   331μs   68.8KiB    0.1%  68.8KiB
+ prepare VTK cells ...      1    100μs    0.0%   100μs    100KiB    0.2%   100KiB
+ ────────────────────────────────────────────────────────────────────────────────

Now two files solution_000000032.vtu and solution_000000032_celldata.vtu have been generated in the out folder. The first one contains all the information for visualizing the solution, the second one contains all the cell-based or discretization-based information.

Now let's visualize the solution from the generated files in ParaView. Follow this short instruction to get the visualization.

  • Download, install and open ParaView.
  • Press Ctrl+O and select the generated files solution_000000032.vtu and solution_000000032_celldata.vtu from the out folder.
  • In the upper-left corner in the Pipeline Browser window, left-click on the eye-icon near solution_000000032.vtu.
  • In the lower-left corner in the Properties window, change the Coloring from Solid Color to scalar. This already generates the visualization of the final solution.
  • Now let's add the mesh to the visualization. In the upper-left corner in the Pipeline Browser window, left-click on the eye-icon near solution_000000032_celldata.vtu.
  • In the lower-left corner in the Properties window, change the Representation from Surface to Wireframe. Then a white grid should appear on the visualization.

Now, if you followed the instructions exactly, you should get a similar image as shown in the section Using Plots.jl:

paraview_trixi2vtk_example

After completing this tutorial you are able to set up your own simulations with Trixi.jl. If you have an interest in contributing to Trixi.jl as a developer, refer to the third part of the introduction titled Changing Trixi.jl itself.


This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/first_steps/getting_started/9b57d81c.svg b/v0.8.7/tutorials/first_steps/getting_started/9b57d81c.svg new file mode 100644 index 0000000000..d135f5b8c5 --- /dev/null +++ b/v0.8.7/tutorials/first_steps/getting_started/9b57d81c.svg @@ -0,0 +1,4131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/first_steps/getting_started/a23a0127.svg b/v0.8.7/tutorials/first_steps/getting_started/a23a0127.svg new file mode 100644 index 0000000000..64e972d620 --- /dev/null +++ b/v0.8.7/tutorials/first_steps/getting_started/a23a0127.svg @@ -0,0 +1,743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/first_steps/getting_started/index.html b/v0.8.7/tutorials/first_steps/getting_started/index.html new file mode 100644 index 0000000000..742dcd6fb5 --- /dev/null +++ b/v0.8.7/tutorials/first_steps/getting_started/index.html @@ -0,0 +1,227 @@ + +1.1 Getting started · Trixi.jl

1.1: First steps in Trixi.jl: Getting started

Trixi.jl is a numerical simulation framework for conservation laws and is written in the Julia programming language. This tutorial is intended for beginners in Julia and Trixi.jl. After reading it, you will know how to install Julia and Trixi.jl on your computer, and you will be able to download setup files from our GitHub repository, modify them, and run simulations.

The contents of this tutorial:

Julia installation

Trixi.jl is compatible with the latest stable release of Julia. Additional details regarding Julia support can be found in the README.md file. After installation, the current default Julia version can be managed through the command line tool juliaup. You may follow our concise installation guidelines for Windows, Linux, and MacOS provided below. In the event of any issues during the installation process, please consult the official Julia installation instruction.

Windows

  • Open a terminal by pressing Win+r and entering cmd in the opened window.
  • To install Julia, execute the following command in the terminal:
    winget install julia -s msstore
    Note: For this installation an MS Store account is necessary to proceed.
  • Verify the successful installation of Julia by executing the following command in the terminal:
    julia
    To exit Julia, execute exit() or press Ctrl+d.

Linux and MacOS

  • To install Julia, run the following command in a terminal:
    curl -fsSL https://install.julialang.org | sh
    Follow the instructions displayed in the terminal during the installation process.
  • If an error occurs during the execution of the previous command, you may need to install curl. On Ubuntu-type systems, you can use the following command:
    sudo apt install curl
    After installing curl, repeat the first step once more to proceed with Julia installation.
  • Verify the successful installation of Julia by executing the following command in the terminal:
    julia
    To exit Julia, execute exit() or press Ctrl+d.

Trixi.jl installation

Trixi.jl and its related tools are registered Julia packages, thus their installation happens inside Julia. For a smooth workflow experience with Trixi.jl, you need to install Trixi.jl, OrdinaryDiffEq.jl, and Plots.jl.

  • Open a terminal and start Julia.
  • Execute the following commands to install all mentioned packages. Please note that the installation process involves downloading and precompiling the source code, which may take some time depending on your machine.
    import Pkg
    +Pkg.add(["OrdinaryDiffEq", "Plots", "Trixi"])
  • On Windows, the firewall may request permission to install packages.

Besides Trixi.jl you have now installed two additional packages: OrdinaryDiffEq.jl provides time integration schemes used by Trixi.jl and Plots.jl can be used to directly visualize Trixi.jl results from the Julia REPL.

Usage

Running a simulation

To get you started, Trixi.jl has a large set of example setups, that can be taken as a basis for your future investigations. In Trixi.jl, we call these setup files "elixirs", since they contain Julia code that takes parts of Trixi.jl and combines them into something new.

Any of the examples can be executed using the trixi_include function. trixi_include(...) expects a single string argument with a path to a file containing Julia code. For convenience, the examples_dir function returns a path to the examples folder, which has been locally downloaded while installing Trixi.jl. joinpath(...) can be used to join path components into a full path.

Let's execute a short two-dimensional problem setup. It approximates the solution of the compressible Euler equations in 2D for an ideal gas (CompressibleEulerEquations2D) with a weak blast wave as the initial condition and periodic boundary conditions.

The compressible Euler equations in two spatial dimensions are given by

\[\frac{\partial}{\partial t} +\begin{pmatrix} +\rho \\ \rho v_1 \\ \rho v_2 \\ \rho e +\end{pmatrix} ++ +\frac{\partial}{\partial x} +\begin{pmatrix} +\rho v_1 \\ \rho v_1^2 + p \\ \rho v_1 v_2 \\ (\rho e + p) v_1 +\end{pmatrix} ++ +\frac{\partial}{\partial y} +\begin{pmatrix} +\rho v_2 \\ \rho v_1 v_2 \\ \rho v_2^2 + p \\ (\rho e + p) v_2 +\end{pmatrix} += +\begin{pmatrix} +0 \\ 0 \\ 0 \\ 0 +\end{pmatrix},\]

for an ideal gas with the specific heat ratio $\gamma$. Here, $\rho$ is the density, $v_1$ and $v_2$ are the velocities, $e$ is the specific total energy, and

\[p = (\gamma - 1) \left( \rho e - \frac{1}{2} \rho (v_1^2 + v_2^2) \right)\]

is the pressure.

The initial_condition_weak_blast_wave is specified in compressible_euler_2d.jl

Start Julia in a terminal and execute the following code:

using Trixi, OrdinaryDiffEq
+trixi_include(joinpath(examples_dir(), "tree_2d_dgsem", "elixir_euler_ec.jl"))
[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.
+
+████████╗██████╗ ██╗██╗  ██╗██╗
+╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
+   ██║   ██████╔╝██║ ╚███╔╝ ██║
+   ██║   ██╔══██╗██║ ██╔██╗ ██║
+   ██║   ██║  ██║██║██╔╝ ██╗██║
+   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SemidiscretizationHyperbolic                                                                     │
+│ ════════════════════════════                                                                     │
+│ #spatial dimensions: ………………………… 2                                                                │
+│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 1365                │
+│ equations: …………………………………………………… CompressibleEulerEquations2D                                     │
+│ initial condition: ……………………………… initial_condition_weak_blast_wave                                │
+│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
+│ source terms: …………………………………………… nothing                                                          │
+│ solver: …………………………………………………………… DG                                                               │
+│ total #DOFs per field: …………………… 16384                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ TreeMesh{2, Trixi.SerialTree{2}}                                                                 │
+│ ════════════════════════════════                                                                 │
+│ center: …………………………………………………………… [0.0, 0.0]                                                       │
+│ length: …………………………………………………………… 4.0                                                              │
+│ periodicity: ……………………………………………… (true, true)                                                     │
+│ current #cells: ……………………………………… 1365                                                             │
+│ #leaf-cells: ……………………………………………… 1024                                                             │
+│ maximum #cells: ……………………………………… 10000                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ CompressibleEulerEquations2D                                                                     │
+│ ════════════════════════════                                                                     │
+│ #variables: ………………………………………………… 4                                                                │
+│ │ variable 1: …………………………………………… rho                                                              │
+│ │ variable 2: …………………………………………… rho_v1                                                           │
+│ │ variable 3: …………………………………………… rho_v2                                                           │
+│ │ variable 4: …………………………………………… rho_e                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ DG{Float64}                                                                                      │
+│ ═══════════                                                                                      │
+│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
+│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
+│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
+│ │ surface flux: ……………………………………… flux_ranocha                                                     │
+│ volume integral: …………………………………… VolumeIntegralFluxDifferencing                                   │
+│ │ volume flux: ………………………………………… flux_ranocha                                                     │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AnalysisCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ interval: ……………………………………………………… 100                                                              │
+│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
+│ │ error 1: …………………………………………………… l2_error                                                         │
+│ │ error 2: …………………………………………………… linf_error                                                       │
+│ │ integral 1: …………………………………………… entropy_timederivative                                           │
+│ save analysis to file: …………………… no                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ AliveCallback                                                                                    │
+│ ═════════════                                                                                    │
+│ interval: ……………………………………………………… 10                                                               │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ SaveSolutionCallback                                                                             │
+│ ════════════════════                                                                             │
+│ interval: ……………………………………………………… 100                                                              │
+│ solution variables: …………………………… cons2prim                                                        │
+│ save initial solution: …………………… yes                                                              │
+│ save final solution: ………………………… yes                                                              │
+│ output directory: ………………………………… /home/runner/work/Trixi.jl/Trixi…build/tutorials/first_steps/out │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ StepsizeCallback                                                                                 │
+│ ════════════════                                                                                 │
+│ CFL number: ………………………………………………… 1.0                                                              │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Time integration                                                                                 │
+│ ════════════════                                                                                 │
+│ Start time: ………………………………………………… 0.0                                                              │
+│ Final time: ………………………………………………… 0.4                                                              │
+│ time integrator: …………………………………… CarpenterKennedy2N54                                             │
+│ adaptive: ……………………………………………………… false                                                            │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
+│ Environment information                                                                          │
+│ ═══════════════════════                                                                          │
+│ #threads: ……………………………………………………… 1                                                                │
+└──────────────────────────────────────────────────────────────────────────────────────────────────┘
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                  0                run time:       1.18200000e-06 s
+ Δt:             1.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
+                                               PID:                   Inf s
+ #DOFs per field:         16384                alloc'd memory:       1051.587 MiB
+ #elements:                1024
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.25621384e-03   5.88786362e-03   5.81457821e-03   2.34267393e-02
+ Linf error:     1.06470791e-01   2.46283676e-01   1.37585923e-01   3.98685775e-01
+ ∑∂S/∂U ⋅ Uₜ :  -6.42679631e-18
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+#timesteps:     10 │ Δt: 1.0797e-02 │ sim. time: 1.0745e-01 (26.862%)  │ run time: 9.2508e-02 s
+#timesteps:     20 │ Δt: 1.1033e-02 │ sim. time: 2.1692e-01 (54.229%)  │ run time: 1.6847e-01 s
+#timesteps:     30 │ Δt: 1.1481e-02 │ sim. time: 3.3075e-01 (82.688%)  │ run time: 2.4543e-01 s
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+ #timesteps:                 37                run time:       3.04514635e-01 s
+ Δt:             4.74704430e-04                └── GC time:    0.00000000e+00 s (0.000%)
+ sim. time:      4.00000000e-01 (100.000%)     time/DOF/rhs!:  8.62858162e-08 s
+                                               PID:            9.84889628e-08 s
+ #DOFs per field:         16384                alloc'd memory:       1058.463 MiB
+ #elements:                1024
+
+ Variable:       rho              rho_v1           rho_v2           rho_e
+ L2 error:       6.17517156e-02   5.01822362e-02   5.01898945e-02   2.25871560e-01
+ Linf error:     2.93475829e-01   3.10812492e-01   3.10738039e-01   1.05403580e+00
+ ∑∂S/∂U ⋅ Uₜ :   1.39986675e-18
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+────────────────────────────────────────────────────────────────────────────────────────────────────
+Trixi.jl simulation finished.  Final time: 0.4  Time steps: 37 (accepted), 37 (total)
+────────────────────────────────────────────────────────────────────────────────────────────────────
+
+ ────────────────────────────────────────────────────────────────────────────────
+            Trixi.jl                    Time                    Allocations
+                               ───────────────────────   ────────────────────────
+       Tot / % measured:            312ms /  89.8%           14.8MiB /  83.5%
+
+ Section               ncalls     time    %tot     avg     alloc    %tot      avg
+ ────────────────────────────────────────────────────────────────────────────────
+ rhs!                     186    263ms   94.0%  1.41ms   9.33KiB    0.1%    51.4B
+   volume integral        186    196ms   70.0%  1.05ms     0.00B    0.0%    0.00B
+   interface flux         186   37.5ms   13.4%   202μs     0.00B    0.0%    0.00B
+   prolong2interfaces     186   13.9ms    5.0%  74.5μs     0.00B    0.0%    0.00B
+   surface integral       186   11.5ms    4.1%  61.8μs     0.00B    0.0%    0.00B
+   reset ∂u/∂t            186   1.99ms    0.7%  10.7μs     0.00B    0.0%    0.00B
+   Jacobian               186   1.91ms    0.7%  10.3μs     0.00B    0.0%    0.00B
+   ~rhs!~                 186    311μs    0.1%  1.67μs   9.33KiB    0.1%    51.4B
+   prolong2boundaries     186   15.3μs    0.0%  82.2ns     0.00B    0.0%    0.00B
+   prolong2mortars        186   11.3μs    0.0%  60.8ns     0.00B    0.0%    0.00B
+   mortar flux            186   8.12μs    0.0%  43.6ns     0.00B    0.0%    0.00B
+   source terms           186   6.37μs    0.0%  34.3ns     0.00B    0.0%    0.00B
+   boundary flux          186   5.86μs    0.0%  31.5ns     0.00B    0.0%    0.00B
+ analyze solution           2   9.06ms    3.2%  4.53ms   9.24MiB   74.8%  4.62MiB
+ I/O                        3   4.22ms    1.5%  1.41ms   3.10MiB   25.1%  1.03MiB
+   save solution            2   3.35ms    1.2%  1.68ms   3.02MiB   24.5%  1.51MiB
+   ~I/O~                    3    872μs    0.3%   291μs   84.9KiB    0.7%  28.3KiB
+   get element vari...      2    933ns    0.0%   466ns     0.00B    0.0%    0.00B
+   save mesh                2    240ns    0.0%   120ns     0.00B    0.0%    0.00B
+   get node variables       2    160ns    0.0%  80.0ns     0.00B    0.0%    0.00B
+ calculate dt              38   3.61ms    1.3%  95.1μs     0.00B    0.0%    0.00B
+ ────────────────────────────────────────────────────────────────────────────────

The output contains a recap of the setup and various information about the course of the simulation. For instance, the solution was approximated over the TreeMesh with 1024 effective cells using the CarpenterKennedy2N54 ODE solver. Further details about the ODE solver can be found in the documentation of OrdinaryDiffEq.jl

To analyze the result of the computation, we can use the Plots.jl package and the function plot(...), which creates a graphical representation of the solution. sol is a variable defined in the executed example and it contains the solution after the simulation finishes. sol.u holds the vector of values at each saved timestep, while sol.t holds the corresponding times for each saved timestep. In this instance, only two timesteps were saved: the initial and final ones. The plot depicts the distribution of the weak blast wave at the final moment of time, showing the density, velocities, and pressure of the ideal gas across a 2D domain.

using Plots
+plot(sol)
Example block output

Getting an existing setup file

To obtain a list of all Trixi.jl elixirs execute get_examples. It returns the paths to all example setups.

get_examples()
401-element Vector{String}:
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 23 bytes ⋯ "d/elixir_advection_gauss_sbp.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 33 bytes ⋯ "urgers_gauss_shock_capturing.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 24 bytes ⋯ "/elixir_euler_fdsbp_periodic.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 19 bytes ⋯ "ti_1d/elixir_euler_flux_diff.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 18 bytes ⋯ "lti_1d/elixir_euler_quasi_1d.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 41 bytes ⋯ "_osher_gauss_shock_capturing.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 26 bytes ⋯ "lixir_shallow_water_quasi_1d.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 23 bytes ⋯ "d/elixir_advection_diffusion.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 35 bytes ⋯ "ection_diffusion_nonperiodic.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 32 bytes ⋯ "advection_diffusion_periodic.jl"
+ ⋮
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 45 bytes ⋯ "allowwater_ec_shockcapturing.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 40 bytes ⋯ "ir_shallowwater_source_terms.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 50 bytes ⋯ "water_wall_bc_shockcapturing.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 41 bytes ⋯ "r_shallowwater_well_balanced.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 30 bytes ⋯ "fdsbp/elixir_advection_basic.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 32 bytes ⋯ "sbp/elixir_euler_free_stream.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 39 bytes ⋯ "xir_euler_free_stream_upwind.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 33 bytes ⋯ "bp/elixir_euler_source_terms.jl"
+ "/home/runner/work/Trixi.jl/Trix" ⋯ 40 bytes ⋯ "ir_euler_source_terms_upwind.jl"

Editing an existing elixir is the best way to start your first own investigation using Trixi.jl.

To edit an existing elixir, you first have to find a suitable one and then copy it to a local folder. Let's have a look at how to download the elixir_euler_ec.jl elixir used in the previous section from the Trixi.jl GitHub repository.

  • All examples are located inside the examples folder.
  • Navigate to the file elixir_euler_ec.jl.
  • Right-click the Raw button on the right side of the webpage and choose Save as... (or Save Link As...).
  • Choose a folder and save the file.

Modifying an existing setup

As an example, we will change the initial condition for calculations that occur in elixir_euler_ec.jl. Initial conditions for CompressibleEulerEquations2D consist of initial values for $\rho$, $\rho v_1$, $\rho v_2$ and $\rho e$. One of the common initial conditions for the compressible Euler equations is a simple density wave. Let's implement it.

  • Open the downloaded file elixir_euler_ec.jl with a text editor.
  • Go to the line with the following code:
    initial_condition = initial_condition_weak_blast_wave
    Here, initial_condition_weak_blast_wave is used as the initial condition.
  • Comment out the line using the # symbol:
    # initial_condition = initial_condition_weak_blast_wave
  • Now you can create your own initial conditions. Add the following code after the commented line:
function initial_condition_density_waves(x, t, equations::CompressibleEulerEquations2D)
+    v1 = 0.1 # velocity along x-axis
+    v2 = 0.2 # velocity along y-axis
+    rho = 1.0 + 0.98 * sinpi(sum(x) - t * (v1 + v2)) # density wave profile
+    p = 20 # pressure
+    rho_e = p / (equations.gamma - 1) + 1/2 * rho * (v1^2 + v2^2)
+    return SVector(rho, rho*v1, rho*v2, rho_e)
+end
+initial_condition = initial_condition_density_waves
  • Execute the following code one more time, but instead of path/to/file paste the path to the elixir_euler_ec.jl file that you just edited.
    using Trixi
    +trixi_include(path/to/file)
    +using Plots
    +plot(sol)

Then you will obtain a new solution from running the simulation with a different initial condition.

Example block output

To get exactly the same picture execute the following.

pd = PlotData2D(sol)
+p1 = plot(pd["rho"])
+p2 = plot(pd["v1"], clim=(0.05, 0.15))
+p3 = plot(pd["v2"], clim=(0.15, 0.25))
+p4 = plot(pd["p"], clim=(10, 30))
+plot(p1, p2, p3, p4)

Feel free to make further changes to the initial condition to observe different solutions.

Now you are able to download, modify and execute simulation setups for Trixi.jl. To explore further details on setting up a new simulation with Trixi.jl, refer to the second part of the introduction titled Create your first setup.


This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/hohqmesh_tutorial/index.html b/v0.8.7/tutorials/hohqmesh_tutorial/index.html new file mode 100644 index 0000000000..1ddcb8b1ab --- /dev/null +++ b/v0.8.7/tutorials/hohqmesh_tutorial/index.html @@ -0,0 +1,306 @@ + +17 Unstructured meshes with HOHQMesh.jl · Trixi.jl

17: Unstructured meshes with HOHQMesh.jl

Trixi.jl supports numerical approximations on unstructured quadrilateral meshes with the UnstructuredMesh2D mesh type.

The purpose of this tutorial is to demonstrate how to use the UnstructuredMesh2D functionality of Trixi.jl. This begins by running and visualizing an available unstructured quadrilateral mesh example. Then, the tutorial will demonstrate how to conceptualize a problem with curved boundaries, generate a curvilinear mesh using the available software in the Trixi.jl ecosystem, and then run a simulation using Trixi.jl on said mesh.

Unstructured quadrilateral meshes can be made with the High-Order Hex-Quad Mesh (HOHQMesh) generator created and developed by David Kopriva. HOHQMesh is a mesh generator specifically designed for spectral element methods. It provides high-order boundary curve information (needed to accurately set boundary conditions) and elements can be larger (due to the high accuracy of the spatial approximation) compared to traditional finite element mesh generators. For more information about the design and features of HOHQMesh one can refer to its official documentation.

HOHQMesh is incorporated into the Trixi.jl framework via the registered Julia package HOHQMesh.jl. This package provides a Julia wrapper for the HOHQMesh generator that allows users to easily create mesh files without the need to build HOHQMesh from source. To install the HOHQMesh package execute

import Pkg; Pkg.add("HOHQMesh")

Now we are ready to generate an unstructured quadrilateral mesh that can be used by Trixi.jl.

Running and visualizing an unstructured simulation

Trixi.jl supports solving hyperbolic problems on several mesh types. There is a default example for this mesh type that can be executed by

using Trixi
+trixi_include(default_example_unstructured())
[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.

This will compute a smooth, manufactured solution test case for the 2D compressible Euler equations on the curved quadrilateral mesh described in the Trixi.jl documentation.

Apart from the usual error and timing output provided by the Trixi.jl run, it is useful to visualize and inspect the solution. One option available in the Trixi.jl framework to visualize the solution on unstructured quadrilateral meshes is post-processing the Trixi.jl output file(s) with the Trixi2Vtk tool and plotting them with ParaView.

To convert the HDF5-formatted .h5 output file(s) from Trixi.jl into VTK format execute the following

using Trixi2Vtk
+trixi2vtk("out/solution_000000180.h5", output_directory="out")

Note this step takes about 15-30 seconds as the package Trixi2Vtk must be precompiled and executed for the first time in your REPL session. The trixi2vtk command above will convert the solution file at the final time into a .vtu file which can be read in and visualized with ParaView. Optional arguments for trixi2vtk are: (1) Pointing to the output_directory where the new files will be saved; it defaults to the current directory. (2) Specifying a higher number of visualization nodes. For instance, if we want to use 12 uniformly spaced nodes for visualization we can execute

trixi2vtk("out/solution_000000180.h5", output_directory="out", nvisnodes=12)

By default trixi2vtk sets nvisnodes to be the same as the number of nodes specified in the elixir file used to run the simulation.

Finally, if you want to convert all the solution files to VTK execute

trixi2vtk("out/solution_000*.h5", output_directory="out", nvisnodes=12)

then it is possible to open the .pvd file with ParaView and create a video of the simulation.

Creating a mesh using HOHQMesh

The creation of an unstructured quadrilateral mesh using HOHQMesh.jl is driven by a control file. In this file the user dictates the domain to be meshed, prescribes any desired boundary curvature, the polynomial order of said boundaries, etc. In this tutorial we cover several basic features of the possible control inputs. For a complete discussion on this topic see the HOHQMesh control file documentation.

To begin, we provide a complete control file in this tutorial. After this we give a breakdown of the control file components to explain the chosen parameters.

Suppose we want to create a mesh of a domain with straight sided outer boundaries and a curvilinear "ice cream cone" shaped object at its center.

mesh_boundary_cartoon

The associated ice_cream_straight_sides.control file is created below.

open("out/ice_cream_straight_sides.control", "w") do io
+  println(io, raw"""
+\begin{CONTROL_INPUT}
+    \begin{RUN_PARAMETERS}
+        mesh file name   = ice_cream_straight_sides.mesh
+        plot file name   = ice_cream_straight_sides.tec
+        stats file name  = none
+        mesh file format = ISM-v2
+        polynomial order = 4
+        plot file format = skeleton
+    \end{RUN_PARAMETERS}
+
+    \begin{BACKGROUND_GRID}
+        x0 = [-8.0, -8.0, 0.0]
+        dx = [1.0, 1.0, 0.0]
+        N  = [16,16,1]
+    \end{BACKGROUND_GRID}
+
+    \begin{SPRING_SMOOTHER}
+        smoothing            = ON
+        smoothing type       = LinearAndCrossBarSpring
+        number of iterations = 25
+    \end{SPRING_SMOOTHER}
+
+\end{CONTROL_INPUT}
+
+\begin{MODEL}
+
+    \begin{INNER_BOUNDARIES}
+
+        \begin{CHAIN}
+            name = IceCreamCone
+            \begin{END_POINTS_LINE}
+                name = LeftSlant
+                xStart = [-2.0, 1.0, 0.0]
+                xEnd   = [ 0.0, -3.0, 0.0]
+            \end{END_POINTS_LINE}
+
+            \begin{END_POINTS_LINE}
+                name = RightSlant
+                xStart = [ 0.0, -3.0, 0.0]
+                xEnd   = [ 2.0, 1.0, 0.0]
+            \end{END_POINTS_LINE}
+
+            \begin{CIRCULAR_ARC}
+                name        = IceCream
+                units       = degrees
+                center      = [ 0.0, 1.0, 0.0]
+                radius      = 2.0
+                start angle = 0.0
+                end angle   = 180.0
+            \end{CIRCULAR_ARC}
+        \end{CHAIN}
+
+    \end{INNER_BOUNDARIES}
+
+\end{MODEL}
+\end{FILE}
+""")
+end

The first three blocks of information are wrapped within a CONTROL_INPUT environment block as they define the core components of the quadrilateral mesh that will be generated.

The first block of information in RUN_PARAMETERS is

\begin{RUN_PARAMETERS}
+   mesh file name   = ice_cream_straight_sides.mesh
+   plot file name   = ice_cream_straight_sides.tec
+   stats file name  = none
+   mesh file format = ISM-v2
+   polynomial order = 4
+   plot file format = skeleton
+\end{RUN_PARAMETERS}

The mesh and plot file names will be the files created by HOHQMesh once successfully executed. The stats file name is available if you wish to also save a collection of mesh statistics. For this example it is deactivated. These file names given within RUN_PARAMETERS should match that of the control file, and although this is not required by HOHQMesh, it is a useful style convention. The mesh file format ISM-v2 in the format currently required by Trixi.jl. The polynomial order prescribes the order of an interpolant constructed on the Chebyshev-Gauss-Lobatto nodes that is used to represent any curved boundaries on a particular element. The plot file format of skeleton means that visualizing the plot file will only draw the element boundaries (and no internal nodes). Alternatively, the format can be set to sem to visualize the interior nodes of the approximation as well.

The second block of information in BACKGROUND_GRID is

\begin{BACKGROUND_GRID}
+  x0 = [-8.0, -8.0, 0.0]
+  dx = [1.0, 1.0, 0.0]
+  N  = [16,16,1]
+\end{BACKGROUND_GRID}

This lays a grid of Cartesian elements for the domain beginning at the point x0 as its bottom-left corner. The value of dx, which could differ in each direction if desired, controls the step size taken in each Cartesian direction. The values in N set how many Cartesian box elements are set in each coordinate direction. The above parameters define a $16\times 16$ element square mesh on $[-8,8]^2$. Further, this sets up four outer boundaries of the domain that are given the default names: Top, Left, Bottom, Right.

The third block of information in SPRING_SMOOTHER is

\begin{SPRING_SMOOTHER}
+   smoothing            = ON
+   smoothing type       = LinearAndCrossBarSpring
+   number of iterations = 25
+\end{SPRING_SMOOTHER}

Once HOHQMesh generates the mesh, a spring-mass-dashpot model is created to smooth the mesh and create "nicer" quadrilateral elements. The default parameters of Hooke's law for the spring-mass-dashpot model have been selected after a fair amount of experimentation across many meshes. If you wish to deactivate this feature you can set smoothing = OFF (or remove this block from the control file).

After the CONTROL_INPUT environment block comes the MODEL environment block. It is here where the user prescribes curved boundary information with either:

  • An OUTER_BOUNDARY (covered in the next section of this tutorial).
  • One or more INNER_BOUNDARIES.

There are several options to describe the boundary curve data to HOHQMesh like splines or parametric curves.

For the example ice_cream_straight_sides.control we define three internal boundaries; two straight-sided and one as a circular arc. Within the HOHQMesh control input each curve must be assigned to a CHAIN as shown below in the complete INNER_BOUNDARIES block.

\begin{INNER_BOUNDARIES}
+
+   \begin{CHAIN}
+   name = IceCreamCone
+   \begin{END_POINTS_LINE}
+      name = LeftSlant
+      xStart = [-2.0, 1.0, 0.0]
+      xEnd   = [ 0.0, -3.0, 0.0]
+   \end{END_POINTS_LINE}
+
+   \begin{END_POINTS_LINE}
+      name = RightSlant
+      xStart = [ 0.0, -3.0, 0.0]
+      xEnd   = [ 2.0, 1.0, 0.0]
+   \end{END_POINTS_LINE}
+
+   \begin{CIRCULAR_ARC}
+      name        = IceCream
+      units       = degrees
+      center      = [ 0.0, 1.0, 0.0]
+      radius      = 2.0
+      start angle = 0.0
+      end angle   = 180.0
+   \end{CIRCULAR_ARC}
+   \end{CHAIN}
+
+\end{INNER_BOUNDARIES}

It is important to note there are two name quantities one for the CHAIN and one for the PARAMETRIC_EQUATION_CURVE. The name for the CHAIN is used internally by HOHQMesh, so if you have multiple CHAINs they must be given a unique name. The name for the PARAMETRIC_EQUATION_CURVE will be printed to the appropriate boundaries within the .mesh file produced by HOHQMesh.

We create the mesh file ice_cream_straight_sides.mesh and its associated file for plotting ice_cream_straight_sides.tec by using HOHQMesh.jl's function generate_mesh.

using HOHQMesh
+control_file = joinpath("out", "ice_cream_straight_sides.control")
+output = generate_mesh(control_file);

The mesh file ice_cream_straight_sides.mesh and its associated file for plotting ice_cream_straight_sides.tec are placed in the out folder. The resulting mesh generated by HOHQMesh.jl is given in the following figure.

mesh_straight_sides

We note that Trixi.jl uses the boundary name information from the control file to assign boundary conditions in an elixir file. Therefore, the name should start with a letter and consist only of alphanumeric characters and underscores. Please note that the name will be treated as case sensitive.

Example simulation on ice_cream_straight_sides.mesh

With this newly generated mesh we are ready to run a Trixi.jl simulation on an unstructured quadrilateral mesh. For this we must create a new elixir file.

The elixir file given below creates an initial condition for a uniform background flow state with a free stream Mach number of 0.3. A focus for this part of the tutorial is to specify the boundary conditions and to construct the new mesh from the file that was generated in the previous exercise.

It is straightforward to set the different boundary condition types in an elixir by assigning a particular function to a boundary name inside a Julia dictionary, Dict, variable. Observe that the names of these boundaries match those provided by HOHQMesh either by default, e.g. Bottom, or user assigned, e.g. IceCream. For this problem setup use

  • Freestream boundary conditions on the four box edges.
  • Free slip wall boundary condition on the interior curved boundaries.

To construct the unstructured quadrilateral mesh from the HOHQMesh file we point to the appropriate location with the variable mesh_file and then feed this into the constructor for the UnstructuredMesh2D type in Trixi.jl

# create the unstructured mesh from your mesh file
+using Trixi
+mesh_file = joinpath("out", "ice_cream_straight_sides.mesh")
+mesh = UnstructuredMesh2D(mesh_file);

The complete elixir file for this simulation example is given below.

using OrdinaryDiffEq, Trixi
+
+equations = CompressibleEulerEquations2D(1.4) # set gas gamma = 1.4
+
+# freestream flow state with Ma_inf = 0.3
+@inline function uniform_flow_state(x, t, equations::CompressibleEulerEquations2D)
+
+  # set the freestream flow parameters
+  rho_freestream = 1.0
+  u_freestream = 0.3
+  p_freestream = inv(equations.gamma)
+
+  theta = 0.0 # zero angle of attack
+  si, co = sincos(theta)
+  v1 = u_freestream * co
+  v2 = u_freestream * si
+
+  prim = SVector(rho_freestream, v1, v2, p_freestream)
+  return prim2cons(prim, equations)
+end
+
+# initial condition
+initial_condition = uniform_flow_state
+
+# boundary condition types
+boundary_condition_uniform_flow = BoundaryConditionDirichlet(uniform_flow_state)
+
+# boundary condition dictionary
+boundary_conditions = Dict( :Bottom     => boundary_condition_uniform_flow,
+                            :Top        => boundary_condition_uniform_flow,
+                            :Right      => boundary_condition_uniform_flow,
+                            :Left       => boundary_condition_uniform_flow,
+                            :LeftSlant  => boundary_condition_slip_wall,
+                            :RightSlant => boundary_condition_slip_wall,
+                            :IceCream   => boundary_condition_slip_wall );
+
+# DGSEM solver.
+#    1) polydeg must be >= the polynomial order set in the HOHQMesh control file to guarantee
+#       freestream preservation. As a extra task try setting polydeg=3
+#    2) VolumeIntegralFluxDifferencing with central volume flux is activated
+#       for dealiasing
+volume_flux = flux_ranocha
+solver = DGSEM(polydeg=4, surface_flux=flux_hll,
+               volume_integral=VolumeIntegralFluxDifferencing(volume_flux))
+
+# create the unstructured mesh from your mesh file
+mesh_file = joinpath("out", "ice_cream_straight_sides.mesh")
+mesh = UnstructuredMesh2D(mesh_file)
+
+# Create semidiscretization with all spatial discretization-related components
+semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
+                                    boundary_conditions=boundary_conditions)
+
+# Create ODE problem from semidiscretization with time span from 0.0 to 2.0
+tspan = (0.0, 2.0)
+ode = semidiscretize(semi, tspan)
+
+
+# Create the callbacks to output solution files and adapt the time step
+summary_callback = SummaryCallback()
+save_solution = SaveSolutionCallback(interval=10,
+                                     save_initial_solution=true,
+                                     save_final_solution=true)
+stepsize_callback = StepsizeCallback(cfl=1.0)
+
+callbacks = CallbackSet(summary_callback, save_solution, stepsize_callback)
+
+# Evolve ODE problem in time using `solve` from OrdinaryDiffEq
+sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),
+            dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
+            save_everystep=false, callback=callbacks);
+# print the timer summary
+summary_callback()

Visualization of the solution is carried out in a similar way as above. That is, one converts the .h5 output files with trixi2vtk and then plot the solution in ParaView. An example plot of the pressure at the final time is shown below.

simulation_straight_sides

Making a mesh with a curved outer boundary

Let us modify the mesh from the previous task and place a circular outer boundary instead of straight-sided outer boundaries. Note, the "ice cream cone" shape is still placed at the center of the domain.

We create the new control file ice_cream_curved_sides.control file below and will then highlight the major differences compared to ice_cream_straight_sides.control.

open("out/ice_cream_curved_sides.control", "w") do io
+  println(io, raw"""
+\begin{CONTROL_INPUT}
+    \begin{RUN_PARAMETERS}
+        mesh file name   = ice_cream_curved_sides.mesh
+        plot file name   = ice_cream_curved_sides.tec
+        stats file name  = none
+        mesh file format = ISM-v2
+        polynomial order = 4
+        plot file format = skeleton
+    \end{RUN_PARAMETERS}
+
+    \begin{BACKGROUND_GRID}
+        background grid size = [1.0, 1.0, 0.0]
+    \end{BACKGROUND_GRID}
+
+    \begin{SPRING_SMOOTHER}
+        smoothing            = ON
+        smoothing type       = LinearAndCrossBarSpring
+        number of iterations = 25
+    \end{SPRING_SMOOTHER}
+
+\end{CONTROL_INPUT}
+
+\begin{MODEL}
+
+    \begin{OUTER_BOUNDARY}
+        \begin{PARAMETRIC_EQUATION_CURVE}
+            name = OuterCircle
+            xEqn = x(t) = 8.0*sin(2.0*pi*t)
+            yEqn = y(t) = 8.0*cos(2.0*pi*t)
+            zEqn = z(t) = 0.0
+        \end{PARAMETRIC_EQUATION_CURVE}
+
+    \end{OUTER_BOUNDARY}
+
+    \begin{INNER_BOUNDARIES}
+
+        \begin{CHAIN}
+            name = IceCreamCone
+            \begin{END_POINTS_LINE}
+                name = LeftSlant
+                xStart = [-2.0, 1.0, 0.0]
+                xEnd   = [ 0.0, -3.0, 0.0]
+            \end{END_POINTS_LINE}
+
+            \begin{END_POINTS_LINE}
+                name = RightSlant
+                xStart = [ 0.0, -3.0, 0.0]
+                xEnd   = [ 2.0, 1.0, 0.0]
+            \end{END_POINTS_LINE}
+
+            \begin{CIRCULAR_ARC}
+                name        = IceCream
+                units       = degrees
+                center      = [ 0.0, 1.0, 0.0]
+                radius      = 2.0
+                start angle = 0.0
+                end angle   = 180.0
+            \end{CIRCULAR_ARC}
+        \end{CHAIN}
+
+    \end{INNER_BOUNDARIES}
+
+\end{MODEL}
+\end{FILE}
+""")
+end

The first alteration is that we have altered the second block of information BACKGROUND_GRID within the CONTROL_INPUT to be

\begin{BACKGROUND_GRID}
+   background grid size = [1.0, 1.0, 0.0]
+\end{BACKGROUND_GRID}

This mesh control file has an outer boundary that determines the extent of the domain to be meshed. Therefore, we only need to supply the background grid size to the BACKGROUND_GRID control input.

The second alteration is that the MODEL now contains information for an OUTER_BOUNDARY. In this case it is a circle of radius 8 centered at [0.0, 0.0, 0.0] written as a set of PARAMETRIC_EQUATION_CURVEs.

   \begin{OUTER_BOUNDARY}
+
+      \begin{PARAMETRIC_EQUATION_CURVE}
+         name = OuterCircle
+         xEqn = x(t) = 8.0*sin(2.0*pi*t)
+         yEqn = y(t) = 8.0*cos(2.0*pi*t)
+         zEqn = z(t) = 0.0
+      \end{PARAMETRIC_EQUATION_CURVE}
+
+   \end{OUTER_BOUNDARY}

Just as with the inner boundary curves, we must assign a name to the OUTER_BOUNDARY. It will be included in the generated .mesh file and is used within the Trixi.jl elixir file to set boundary conditions.

Again, we create the .mesh and .tec files with HOHQMesh.jl's function generate_mesh

control_file = joinpath("out", "ice_cream_curved_sides.control")
+output = generate_mesh(control_file);

The files are placed in the out folder.

The resulting mesh generated by HOHQMesh.jl is given in the following figure.

mesh_curved_sides

Running Trixi.jl on ice_cream_curved_sides.mesh

We can reuse much of the elixir file to setup the uniform flow over an ice cream cone from the previous part of this tutorial. The only component of the elixir file that must be changed is the boundary condition dictionary because we now have a boundary named OuterCircle instead of four edges of a bounding box.

# boundary condition dictionary
+boundary_conditions = Dict( :OuterCircle => boundary_condition_uniform_flow,
+                            :LeftSlant   => boundary_condition_slip_wall,
+                            :RightSlant  => boundary_condition_slip_wall,
+                            :IceCream    => boundary_condition_slip_wall );

Also, we must update the construction of the mesh from our new mesh file ice_cream_curved_sides.mesh that is located in the out folder.

# create the unstructured mesh from your mesh file
+mesh_file = joinpath("out", "ice_cream_curved_sides.mesh")
+mesh = UnstructuredMesh2D(mesh_file);

We can then post-process the solution file at the final time on the new mesh with Trixi2Vtk and visualize with ParaView.

simulation_curved_sides

Setting up a simulation with AMR via P4estMesh

The above explained mesh file format of ISM-V2 only works with UnstructuredMesh2D and so does not support AMR. On the other hand, the mesh type P4estMesh allows AMR. The mesh constructor for the P4estMesh imports an unstructured, conforming mesh from an Abaqus mesh file (.inp).

As described above, the first block of the HOHQMesh control file contains the parameter mesh file format. If you set mesh file format = ABAQUS instead of ISM-V2, HOHQMesh.jl's function generate_mesh creates an Abaqus mesh file .inp.

using HOHQMesh
+control_file = joinpath("out", "ice_cream_straight_sides.control")
+output = generate_mesh(control_file);

Now, you can create a P4estMesh from your mesh file. It is described in detail in the P4est-based mesh part of the Trixi.jl docs.

using Trixi
+mesh_file = joinpath("out", "ice_cream_straight_sides.inp")
+mesh = P4estMesh{2}(mesh_file)

Since P4estMesh supports AMR, we just have to extend the setup from the first example by the standard AMR procedure. For more information about AMR in Trixi.jl, see the matching tutorial.

amr_indicator = IndicatorLöhner(semi, variable=density)
+
+amr_controller = ControllerThreeLevel(semi, amr_indicator,
+                                      base_level=0,
+                                      med_level =1, med_threshold=0.05,
+                                      max_level =3, max_threshold=0.1)
+
+amr_callback = AMRCallback(semi, amr_controller,
+                           interval=5,
+                           adapt_initial_condition=true,
+                           adapt_initial_condition_only_refine=true)
+
+callbacks = CallbackSet(..., amr_callback)

We can then post-process the solution file at the final time on the new mesh with Trixi2Vtk and visualize with ParaView, see the appropriate visualization section for details.

simulation_straight_sides_p4est_amr

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots", "Trixi2Vtk", "HOHQMesh"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+  [e4f4c7b8] HOHQMesh v0.2.6
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+  [bc1476a1] Trixi2Vtk v0.3.16
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/introduction/index.html b/v0.8.7/tutorials/introduction/index.html new file mode 100644 index 0000000000..ab92a0dd95 --- /dev/null +++ b/v0.8.7/tutorials/introduction/index.html @@ -0,0 +1,2 @@ + +Introduction · Trixi.jl

Tutorials for Trixi.jl

The tutorial section for Trixi.jl also contains interactive step-by-step explanations via Binder.

Right now, you are using the classic documentation. The corresponding interactive notebooks can be opened in Binder and viewed in nbviewer via the icons and in the respective tutorial. You can also open the raw notebook files via .

Note: To improve responsiveness via caching, the notebooks are updated only once a week. They are only available for the latest stable release of Trixi.jl at the time of caching.

There are tutorials for the following topics:

1 First steps in Trixi.jl

This tutorial provides guidance for getting started with Trixi.jl, and Julia as well. It outlines the installation procedures for both Julia and Trixi.jl, the execution of Trixi.jl elixirs, the fundamental structure of a Trixi.jl setup, the visualization of results, and the development process for Trixi.jl.

2 Behind the scenes of a simulation setup

This tutorial will guide you through a simple Trixi.jl setup ("elixir"), giving an overview of what happens in the background during the initialization of a simulation. While the setup described herein does not cover all details, it involves relatively stable parts of Trixi.jl that are unlikely to undergo significant changes in the near future. The goal is to clarify some of the more fundamental, technical concepts that are applicable to a variety of (also more complex) configurations.s

3 Introduction to DG methods

This tutorial gives an introduction to discontinuous Galerkin (DG) methods with the example of the scalar linear advection equation in 1D. Starting with some theoretical explanations, we first implement a raw version of a discontinuous Galerkin spectral element method (DGSEM). Then, we will show how to use features of Trixi.jl to achieve the same result.

4 DGSEM with flux differencing

To improve stability often the flux differencing formulation of the DGSEM (split form) is used. We want to present the idea and formulation on a basic 1D level. Then, we show how this formulation can be implemented in Trixi.jl and analyse entropy conservation for two different flux combinations.

5 Shock capturing with flux differencing and stage limiter

Using the flux differencing formulation, a simple procedure to capture shocks is a hybrid blending of a high-order DG method and a low-order subcell finite volume (FV) method. We present the idea on a very basic level and show the implementation in Trixi.jl. Then, a positivity preserving limiter is explained and added to an exemplary simulation of the Sedov blast wave with the 2D compressible Euler equations.

6 Subcell limiting with the IDP Limiter

Trixi.jl features a subcell-wise limiting strategy utilizing an Invariant Domain-Preserving (IDP) approach. This IDP approach computes a blending factor that balances the high-order discontinuous Galerkin (DG) method with a low-order subcell finite volume (FV) method for each node within an element. This localized approach minimizes the application of dissipation, resulting in less limiting compared to the element-wise strategy. Additionally, the framework supports both local bounds, which are primarily used for shock capturing, and global bounds. The application of global bounds ensures the minimal necessary limiting to meet physical admissibility conditions, such as ensuring the non-negativity of variables.

7 Non-periodic boundary conditions

Thus far, all examples used periodic boundaries. In Trixi.jl, you can also set up a simulation with non-periodic boundaries. This tutorial presents the implementation of the classical Dirichlet boundary condition with a following example. Then, other non-periodic boundaries are mentioned.

8 DG schemes via DGMulti solver

This tutorial is about the more general DG solver DGMulti, introduced here. We are showing some examples for this solver, for instance with discretization nodes by Gauss or triangular elements. Moreover, we present a simple way to include pre-defined triangulate meshes for non-Cartesian domains using the package StartUpDG.jl.

9 Other SBP schemes (FD, CGSEM) via DGMulti solver

Supplementary to the previous tutorial about DG schemes via the DGMulti solver we now present the possibility for DGMulti to use other SBP schemes via the package SummationByPartsOperators.jl. For instance, we show how to set up a finite differences (FD) scheme and a continuous Galerkin (CGSEM) method.

10 Upwind FD SBP schemes

General SBP schemes can not only be used via the DGMulti solver but also with a general DG solver. In particular, upwind finite difference SBP methods can be used together with the TreeMesh. Similar to general SBP schemes in the DGMulti framework, the interface is based on the package SummationByPartsOperators.jl.

11 Adding a new scalar conservation law

This tutorial explains how to add a new physics model using the example of the cubic conservation law. First, we define the equation using a struct CubicEquation and the physical flux. Then, the corresponding standard setup in Trixi.jl (mesh, solver, semi and ode) is implemented and the ODE problem is solved by OrdinaryDiffEq's solve method.

12 Adding a non-conservative equation

In this part, another physics model is implemented, the nonconservative linear advection equation. We run two different simulations with different levels of refinement and compare the resulting errors.

13 Parabolic terms

This tutorial describes how parabolic terms are implemented in Trixi.jl, e.g., to solve the advection-diffusion equation.

14 Adding new parabolic terms

This tutorial describes how new parabolic terms can be implemented using Trixi.jl.

15 Adaptive mesh refinement

Adaptive mesh refinement (AMR) helps to increase the accuracy in sensitive or turbolent regions while not wasting resources for less interesting parts of the domain. This leads to much more efficient simulations. This tutorial presents the implementation strategy of AMR in Trixi.jl, including the use of different indicators and controllers.

16 Structured mesh with curvilinear mapping

In this tutorial, the use of Trixi.jl's structured curved mesh type StructuredMesh is explained. We present the two basic option to initialize such a mesh. First, the curved domain boundaries of a circular cylinder are set by explicit boundary functions. Then, a fully curved mesh is defined by passing the transformation mapping.

17 Unstructured meshes with HOHQMesh.jl

The purpose of this tutorial is to demonstrate how to use the UnstructuredMesh2D functionality of Trixi.jl. This begins by running and visualizing an available unstructured quadrilateral mesh example. Then, the tutorial will demonstrate how to conceptualize a problem with curved boundaries, generate a curvilinear mesh using the available HOHQMesh software in the Trixi.jl ecosystem, and then run a simulation using Trixi.jl on said mesh. In the end, the tutorial briefly explains how to simulate an example using AMR via P4estMesh.

18 P4est mesh from gmsh

This tutorial describes how to obtain a P4estMesh from an existing mesh generated by gmsh or any other meshing software that can export to the Abaqus input .inp format. The tutorial demonstrates how edges/faces can be associated with boundary conditions based on the physical nodesets.

19 Explicit time stepping

This tutorial is about time integration using OrdinaryDiffEq.jl. It explains how to use their algorithms and presents two types of time step choices - with error-based and CFL-based adaptive step size control.

20 Differentiable programming

This part deals with some basic differentiable programming topics. For example, a Jacobian, its eigenvalues and a curve of total energy (through the simulation) are calculated and plotted for a few semidiscretizations. Moreover, we calculate an example for propagating errors with Measurement.jl at the end.

21 Custom semidiscretization

This tutorial describes the semidiscretiations of Trixi.jl and explains how to extend them for custom tasks.

Examples in Trixi.jl

Trixi.jl already contains several more coding examples, the so-called elixirs. You can find them in the folder examples/. They are structured by the underlying mesh type and the respective number of spatial dimensions. The name of an elixir is composed of the underlying system of conservation equations (for instance advection or euler) and other special characteristics like the initial condition (e.g. gauss, astro_jet, blast_wave) or the included simulation features (e.g. amr, shockcapturing).


This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/non_periodic_boundaries/4d17db66.svg b/v0.8.7/tutorials/non_periodic_boundaries/4d17db66.svg new file mode 100644 index 0000000000..20dce24601 --- /dev/null +++ b/v0.8.7/tutorials/non_periodic_boundaries/4d17db66.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/non_periodic_boundaries/7bb992de.gif b/v0.8.7/tutorials/non_periodic_boundaries/7bb992de.gif new file mode 100644 index 0000000000000000000000000000000000000000..70e05af507c6523df59ca38145658f8aebe35957 GIT binary patch literal 1129973 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

g73-ZLgvQi5pleJ&#N?u52OdJ61o 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

GmrEdHH3|2! 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%0D=w=1bAxJb>%Z-viE3s`ts=qA zm)&>ys=le*bcQQkA}dYLOr>^gsbx8zyB#A1oOlb=k>6hC;Dz77EBy ziLKTmY=Nsf#FwHNFy1Ir_~=nR+f13!hlZ-NF?)CJ^xugQwlG?tbe>W`O4HgsJP5gs zh)W7c^)~{3)dsD-l&j+)zdA&8-QbBE)X=B1xYmfwd-oLqE=)3R0J!-mXF}Gs!{~sF zGnasYu}iG7uv%*!5p*2yva*I8-b=p4j)*WwEbfkDr-{boaWZby0!lGmqPhYO!kOF_ zCZ$l!U5oq9vE6zx<=~s{lvtA+y26<5({)t7bACN$&X_Y(t<{O(y=v3i=TREAccK)! z3r>mf6`je?yK5~QweX~8{zrnSU~hb0I?k`>6%~OY^*$~-fx*>0PBBh+PD$=p%}=B> z{pd}kXerWr%5eA7cY6~LS%Vxfr-q|rVHu+2#`-|sHyO&Z!Go!lms5Z zwxaGPy(vghiqRYAwDWYJZn+`nlbIV_xLXqGCTpZ9j#O9bYZx{JY8G=9S^NwOy-Yk}qI$L%nK{ zLSG^)2PJ>itk}fzM>TQP0pqvRMWZAkCb}`N&Y;ySzbw7st{A}FA6PMoyJI>$@DjLs z-TI*<(n2fcn`b&5{55Y(+3U#R)a6s97Qji^PK+Cei`X3h;ACf5VX|o0I6uY0u@S+1pPMs6+M59gmZGKzuU8z^q9s__e z_JPEHO#^tx*nC@6*|)J`V2qz*TtEux*iBLYnVGkhpl32_@N<~j9WO|V_9JKYw6LCX zP&SLORaAr=FB-OCL)|1nh3VGBSFKbU>zP`LUInfH35zf(+QxI@WLyHCPC0Hj4uJ7I zYB7{jTlU6bTw;_s$}XuQ9-nB}U#-XfJHd$2OCc0Z0+@FXQ7Z;<-I-XZkXvat>>HRP+aVag#L7#u~Tr-i|8Sry%oakNeS*J z8@~NeS3Xooh+z{ods#8^$V5F_1erA25p@#CG;g%U)fx@pCSNunV3cRTDR9l0{7pj~ zO@o?jd;6BKkuFSCsizL}^1^`q>8d2d`Dd(;{dhu@D;L`md5*dEHz*BPLAY&0Z

o1JIgf2LB8bEdjKDS&xmGl}U)P7qodIm?X&Lw+A zai0upBmg9Lm$O~NkIV}#n|}v(XNc;5UeCGQ5;-e-hrvz2Id??=>a?D03n$q_+gO~S zz@vpO`y_IYuToRBT7(LMieUr5oxGb!=?Z!@yL7|EnXf<$1qK0N7WNE0jGe-mz2OFY zBI+f|9+uj&iBtVvOq?wQ-H{4X+^_kRU4Wv5IGUd%mj`^hglP9A-19CW3XU_>RRAbx zkHZ6Z&?6EU?ug>B_g=a0aQVRT>_ZA4?YtIz%gT1ep_Btq^T?nPPFJ5i%SMtLHakmI zVC82Y?{?rp`9w_g8QA@N1OY-NY_kcI%-)vUML5k^*Ji4_)YZzzh!qGSR<1nG3tFoT zW&lSF|&vjo3^wNBe|;K|g zE78y!z`;dI?+tc3xuM(hZ4xXWDX{$%bP_!CZk6)1k#R}_05m+(J^a*sC!fAz9#M%< zcu_{jX1wB$Hhht|u?SZI0?Qk&4O@BY<}c$1=SYujYsJXjj#)bheC! zw-oF#8e~AzqHnR1u?A-+-Ka`x+es@`iI?T$g?@7_vjD^GY%uUH3M9F<3R{k(on|+j zz$aX>IEoQp5(u&#OqhUuBE(+NmC*5nuujG4&et`$evOj;#zs?H)5ZFR81lw`j1#w1 zqF$}=#l1kLB}1{4+u_&HFiDepRTBEqyZVkqhXNsEQ?t)CvS?tx1t(_x>TyRvG#~F6 z;*2{A(y+$cE!%-}ARv7s;8-YyAj&_2{E@dMnUhTumJ->@z?hIe!PsoPt2??OL6_OSFqe@H$gtx=01^(6P|b- zbTbRe$%p$SYsY24zRKkvU>q#>homQ{{DW7K*fKX>!zL76%h{$7C#E86@OHa-wn|M8 zLDA{AscMP3$}{`M+%XT(KHN z>*haKizicemzbqH-QC{L{rhoT?Z}jMEk3d`ll^ zK}y4pN`U6T=_5s+9=L(|jl(a;&QN8M?$`gcYo$?J7#5vWnTFZieh|u^4r>Ls8nZ>ujEHW!Y5Xc57cVAqWC$L4TflT67 zT@be+pq|N<6sQJ%1|iIlB1SNNR27U{jn}B>y@kIe+R6D`4KyT$Q%~N3S|hC~&JBV9 z6UptPyY1jpp#PP3|AA9)3sGKR4ymXq9j{W}bi*~G6PU!T_i9om7wZ+0bLI%AJOLde z_@6;m?xa?xby}LN^UKGHcLjmjeJ#7F`1Xl}B_t<5A!Rw2FgbX=R zABFjBVwP#m5tNt>$zYQwWJLpa9__}mnO-POx)--fP5T;Nhz+qC;ou}E{8a@XkzjvI zvGRnRIy=5lGD`@SWUh+(XMl|(Qfm#dOs2Ud`$2BfgF^%C+7?hz|In%hm9d`|0A#dz z2d0MRWpcqiucW?XsNK^v#CGDc=heX>Dg^KCwpgE_Aw_va&xb^_T(({R-KNqD~=rwO65OG`xw-2N!Rb>TM-cuLCZD%`O z^-l7}=8q*g@VzNE_|03oS1fQjwlmbB-K*qLT#5YeGLS#p9PHd!si9?=TreYz%+I9EyZ3V}%$Q$fHgT;0VuSRoFVD1wx0;qi zxLG(EjV1E9%*#T!$*<+iG~Ig?Y3M;@`pw5Al#}@)^439`)7E2Z$HRA6rycb)6Aj0& zf)D|0)?qg!%E`^f%(3NbWo7`&*{;V5y=B$%l^1&*W0Q*XE74NqO1B~_$++?u#eP!DR*92jO zSO^OV;GjX6fi_M2t6!Z6Cy*s#m^Fcjj3cuc5}_PLP$wF)w-#Kd)`vb}*JX~q>D&cn z_1RpW5j2Br=93VX+_(lP7d)NR(9;=NJ;wRm;f==#XZ8i2KNQSFEqg1Kt(1aF2Z0ni zGMbw22C`s!QA2p|Lt6Ci4X$D$l#`6ox|3rC;p7B@*`5^8*Ph<^P;PP{sNsO@>Z}fJ zc+4h@n`CPmb#mnIs#O=psgVDpH)RS)>)+mkWaRO^tu$wFp=79~teT)za+69FXMCvR zuX@W>%q^KBzr|tiM(3quH2L zm;Ju7X53=n4Ou{!*U1#a?-Cm2^oM}y|f9HvP^1`eP)s*@DTeb>w`+)S8 zZr;k1@?`vNp@s;q`JjE*ho|;+nu}R+G4Pmet%KTDS<%SrR@4yh^N!V`(ngJz&UW*4 zPP>Xy@>-RHU3$rt!@M`StdZfT>dnewZmcHdZ8sQAT_Fk}%VF!HPu)|EZlVJCC?xxi zU51QV=cUXvYe;va8%RIFQbW}C10be2?PRI+!O`@LuF?T%Y1%S?G|71jNy zslqY$v1U`>%j}A8xm{1IOW&AxofQgu-`5Ts$*WK4%aZAp)BuY#iu-+A7IXW?d^%Mi zn44Ygc~_dx3cb{SSgg_es7GXg&NQ$J_4$glo$(!9_8WkXaAbK8LUyWA@}&xS129Oz zt^$a0>VuTj)O6IqU1%plhs&}cKmK&UbSs8ZhFUB}pv6yknwf`J1=dCCSTMA@dpO8% zBu>3{NdXM#E*z9eAFoW7qP8}e4;1$fLm1D?L>1!?eDD0x0&nATDbBUK-aJKNV{zwi zK9swV>6T;cXr>ZYtvC>}%FcW@9WPGbEtQ|JmL`w)bR>z4#WwWX{pIyA8%OG4LmS64 z1#k~c-(6WQOGk}6h~|213_<5A?kj*tu{q<_O;1b{PiTKgR{;MaM9Zy6u1UJVS|$b~3p1&ac@z_SEVU=lSod=gx(eH$(ZdVTx=A<;PVCy#TCv1R(_ zs7^zz;ZE3(P3s>I4|t=urhC>tREti6m6djm!=>FpC9?S~+F*X_{h9i*meiTXfgCHP z;n}_>``#Sbc3juS2l3{Q$G;BVV>pDN2QIWF_ppzrebSDf61jJv^|A41`q%lD5$Nwl*CJd3r#;Umv47F;Tx!zK8N!HQ^U*$rnBSof6A^Dj){G>Krx_>2BF@e z!mKl|ob8?|@9VPTBQSD1Gr169sw*FmHQ|XFJXy|i$ez%i#6K=~HSQFo>r@;KTTSSV zbv_Qd(b{q?=N1&>G+l421T0m$4s|w11|2T*x{=SbuZ=&PR}#GC_U=>P#*^RCdH1lf z#IDiU`CjRWHE3}{x@GI}v~OoV-hL^@72xw}c=HZKY~8Akv!5d%!)M)24P2wNXUT%v z+8Y$!m#Lz$rk0VbPxYU6Bfeu=k^2MM-AQGK&e8RoZ*{;e{JkHTc32e4Ul9s~n~lD? zVeK68O9woGbO}%9kTfZt7l;y@kFiO-@%wgs1b+LaT!L)Fh764j^8Gl5@pWDYJmtS- zEdp!wj~`E2`NsIgyCk->A_iy@mQOMTsI>3jUvHe)+9~bo7~Jg>%?zCWmz0k3TJ-PK?mqF_kFfkdFVGBS0dtU5#T=zNmwib(lgsG@KjY`LLh& zDg;u?sl*_B9!d9~7IvLJ(b4Ms`@ngtVyH!Ieeb8%*H1sovAE8rXD>u>jIZxo3yVO5ThAX|(;f&s6l7%AsoQ!#J;hS_N9GWRfCg*PsXd;JA5P0@rFfNQ1W`s?|TKwl@HGr?j6_-r$u;1rtz`}{q&m-X4vU@ zNdA%Srb0g9D@C0fT3+hH-~8>B93p>y8EN*S){p!hXjG>77DVg~`Dq^9X1bOOgLcwF zIXxu*Rju;m^}bhS+#Fr`DgX9IY~lM&t4PCj2fJjnV&K>_+V6@xdPT#wtzN9U$WwT| zM}yy_W6oFDu%!#q(`)sYMU)d@HuyvNl!pI{yfc4?^6~%uJ&Q3j2Dc%*46;*{7+IP@ zmQvZWrpPX8WG5N>&e(Tm>}w%=sj*YkNJ6P7La8W4Qgi10{haUle9v{A>-*#R;hcY9 zuIn~GxaawNJs%HkgG_^Hi}6LF+6Q6MFfWU$%%L{{Nncv;h?)~ig(Eji>WxpUufBV*L;5Q(fEVq2K z{j8c0P5!aq#JHMOT=#qObRqRhbkdfA+f3)12F;~As`Yo@Tbeq!@s8VOU!f#PS`X*W ze4l8QNOcgh7#CO5Ax0tZw+0AM+u|zH*P0R8M_z z0-Kg3M?S9c{QFvxWa6+|g-W8>%~Xv!- z%aMlWOK@U^lIQZZjTUl}{g`!8m(R~ddi*g#lj@?#pPBJFdfkcS?$;ZV6xxG${QTc8mG}qY*Y#7xj;c^0T+zr%&`piI$Nx#I{Bo+Kl?r(qYjy-K z@`AS}UHq+nbnVn@p0Bm#QTyXH?uszzzncmTR#PGH-!&D2^x3?#aOQs{ocdJ`X320@ z+#GvabjNwc`1XeJ-I~c_y#L3A@w=?10vmPQJ5QAt&=j)#d4JZ}@>wK!z8?or6{2LO z&GJmwsv3^uY~Yd#{Qv?LuxHxY54u1Ad9P1Aehvo!^jW!-nb!^nxEK%r)4Y}*1{gnD zYhbUcCA@_=L4G+`zzxRMcvz`?yssCJaP?lta!W6AqUKM+p6|>H*)$PhZgi`}IxJeXUZ7FT^^~rS_+YD>TN_&OD{V&$(PzH;2I+F1ptkYykAt1oSZ#OXyZtnzT;n!llhG?<^VoM4@*4Q`(UlrdHPz$&o+6bs<5 zsti0Uy)rg!CbFDr-GW~vTu=$P;s-P!TV9X63v4Qzig|Fs4$YOr1`+vDFo&r)IjXd? z5TK=b%;Y%tkhB7@!|Xj}h;+g+)Bz=6bSaTlKFi4*_1!f1VRkeMu-)sv0Bljn(b}+I zUZExj@BBPJmd87EUiBnE9!fC#2Xh)YdieLo(CakoHySWARg=DdV@_>-@6SLyo7>*& zvM{IL86w+HQXt#OP}Yxo2ykdR;3Oxy|17V@Y4WYx2iEg>`OY_Xlk(4de4akc+~5A> z8eXgZurd5Cu=_@I6WWRZPB>+4i^YZto6lVmH0%q*5PT%Bp51V8T2?mYn$6#W@poa*$ z%x<=%!-89hHdplog8YbgUCmx=-lO>sLR!m9^Yd$^s!^J~9H)zRvdODqJ|G=p0MNg(_BY-Lh% zE+2&hkP|Ek+YyM{#04?HvOI-^CsN|L;j#%E5J88weCwfoA^;&<}Uv@{==`q#hB zbb~UJP7wz9jU7=Zdu^=J!+tb6aW>kH{(nX|t@)}WqwO3FzQ;xo4CKmq`jP%!2XS0} zD(z;`h!Qf&V^I%0?L_9CqX{2;aLxXbIh+gmPH0y}TsM^m!C|m;KsE20y$lcRfPv)b zc_oy#AT3%@P-^UnBkBYTKw_cdDw91%7T<@gEI+B@mqo&~54L4p(^(F`VM0E5LYB+JCbN#zMYYv>9Yb*u3Gxp<-d9khqtCJv@Bq<%Gd~mz-^TyK_^5MTnc@63a zVlU2pUSaq_jo>m7&T`PkLFJeB0uaua9#LHuur4TDJtDECzqiLX%iGpT=;yVa(Kg4= zA(yYQ^kzYHo$#KBIr?n8$z?v#KGKsXuG~bkPN&1{TwFlUyQ01lRVBdXUDcrj(oAx~ z2$9Q9r*RRh_%`J906nhYZb|F`DD%T3~{Y&N!+`W z>n_pad2eoHll0h<)b|McjyD>PSU;8C#Xq-fOOTse_(Y!6JbgxW7y2h&;HRuMg)vdVO2GKL$2{@4IBlIx5xHJbldBfXDX8@AkHs zjhcj<`{yYeZ)Sh&z?SZ-$>d^9=g2!FvY$>;j!^KXWxr&$j4=2m`&+xR52u;tOm!^x zpH}WzK83j*uf98%(^_0`9#nkwGY{C8%ddX#HC;bVC;s(!Jj|zRc1yy@cqdoakAzsy z(p6PKLqqI@iR7Qhy${tM&L2dnQ|+gTm)GyIUtB!eQ3I`~`v~DLmm2yW$;RfBqH5g; zd->QnkWFQpB#Yyy8ID%QgUfVCS8%jAFN$au^J_L*+!CoJaExZdv7;XSEf>3O27Too zE8mZ7)UcP|!jyHzioZvm#A}!u`*NY-N1wUM!{v$39+#Vr19l%U}Cr{ER$*(Ae9)-hwuZr%cT>c%q>nHDn?HZ9591= zjm5wuf?ZzNty?0gHBs_BY>At3-2%zyN0Z!;;Tm$_-_E4AY;0~wQchg7mP!&!(DE%? zSBs3|&&P6fCqu|w+|-1-*;sz#EEm z#1>qL6Cww1#YH=erOB`~S}ixZ@cyArDgWgApkAhIWbUbO9zyE-UDZ}OJ^88RyqTo_ zgg9}1wwRHO{6Y8&e9C+<)Fm-4WEc2A(37o&j_umyA43PurLtBXvl@EqmC#{X)`P%< zgVLaxX|D=S>@AA(>U^W zjsFNjZqM27B4UK)LAYJ!!2&GOE)d3QGsv+r|IucwfhMv7WYZnhdR(6CuIep%JS7Kf zJ5NcL_Cu{xpsn1}VEE#4G$YYphSe>!em76!0a$3aK$Eam9n1Oj3rkTPk(E6t+~tsJ|q?gmkwl6F*i6)CSA@AwCNhsRACG zzf?oPtJ|93+Fam7PsWv%cpg$=>THZt@@aQMcF$-Ww6Y0_gvjSg*2DpV(4Bzl*TbJS0R4v)-BC&G`jL=9yTM% z+FSsoyLVyGD|eX8&YQupMc7n3oAtXz)ppof)3{MKWo{lOo%StERE+E`~XU{RPiFxM4r6mkJ z-9&r$O0iI%qjc88L;30OP!JuKi2Vz2cTm~*o!B3**YWQ8w|kdV3E4aqZWh~u^8JQ# zn?nVQTV-(|g7FV}l-L3@rNe7#*<`fZOu;twO{gp@-**DUL?F@(S0YO=#UwR(kWft^ znnp)wGT6;Gp~{AAsT2;5elFvb_I?tA#|%!RaE0WyL;W~JTe$q=+F`8hkHBS<(g6Wc ztD&MFsb1@Y37%8j`(#6V2={9o=P0>>#^BuEL`RU^iKMQt{HOtfk5@QWj>w&92CYRl z%4C)X9B*ivZxOeItK`?_XLGV%@NWzk>#sM7XV+&JSF%5{o*RKA75A_Rijze>C!x(Y zyERF_5=yROM=20YV>isNsPkh>iwF?ESAVjCgI^_$^LN#q25Y~a+B_{#)cziXf;RBD zZ{NVu#Wm!3V@*L6Sd8_gvay;9$je%mSMr`wJ&aaa#Z2jwrq(@G1ZV5}WQFSKXM)5u z`&RRBu>5FRgxU#3(6c4GPO(tBC1zTSvc1-QSpL4V0(c~;(JdESg)2z7id}RHuludK z^Vr6}_kj!#Th^?Xn&8dQL5}-@{9xvxh5-r8$a;A1rH-i297CMR57~;a z);B9G_8%JB$Dh34lq(Dg5gt800YOX*6yi%AnG;pVFvZ74N7GX)((acw{OXCt^a*Iw zAq-A_mBxsL{Ip5p-afhGf(DYR*VVT2;nv}}9C*p$@2`d$?O{X%hLfli!pb&R9 zoiG`Q`@@v5lh1NvOtber@K2p6I2EP|eo2}(9q{7; zhTkfIIN{QQ6OZcG!RQ{EV+Ms3aC(l%J{Kh4uV1(R7o6(wT*2 z=AnN{+1BUwoSwzoO;g6_IvbOt|EMOaR3J3L4EfbZ>;Cs6s;g_?L zUPasCH5VpOp`W`o*JnP=J-*>Pdp6=F#O$SfTFK$0i67H98zyIEe@%~;V(m%u89Lx8 zT;F8hY%%BK$v>17$BZDOIS=OPmo*Wui}!&?doN-AQ4;wPxX@Q|nYvFW-{@#lG#sk| z^i=UoneW9^@o7$EUpmY=XYg~RUBTPGe;5QYEkyU@1sz)5ujG%)LC?G6w6paX zC~>Lmk{?{Uhe7+RoSzw7{_o$PJP4RF*r{&IeuHp^*fB#^98X7m&3{8zLY{!diB~51 z?yCMHbUmYypN&?atcV>3+euLOCo!6ZkE{>g%LJkC-Bd9>{*%P^VF8i}W zG4c{f$u}$Fci&KMPhTu~_ilY)Z6KD3i0xi~{yliY_>Y|?`!rNHwyZQ(`PTZ0C-uE) zpTg(gdLyYt%AZaSFjC*}WGIe3xHKJ@76GG$3EF0lUpst^Cvx)31E^|%k7IJRL;mXr z^!v9qp#AybWw93y0@IFPZn$I935x{Vw@-nuw>bLIx2}IKL(7uCa!!$?ar5u^Z$X#X zLrp%Db%G}hBOooX8Kp0JXFpZDZ3cP2oy&hLreptbM@p`F6GGq?-F(M+GM3Z#+1pp+ z4KrJlXI>8kYeq9ZH8O|4LCD;&Bl78*8$WcP9X}`^EA*-TMa=l?Ll<_3nvQ1`E(DLr z57MpUFZ}!_J_!FFvAtLDLazLa`Rna#Vlc?H8{(B5qTrVU+zlXmXhw;5z6;EO6L*XU ze)z3@i{MY-h}dx7YvM`p@0%YyJE}3YJ9UCT1}+BM=Q3TA#?6=8;Qg)U{N1Zx?brPgC3ix_W4MHHnAo>NO%Z#WZ+r`%ddWEN z^_|^|)7qPTQFbTt*P;`|2L0Qv;P*Hr#mmQm(*u?k{)=@>@%zhfe=iu%bZ$QZZ*&bk_|Ckv062 z%9;dQ-_~oi!;j>yJO`q=l1~*|H=m^~9(``%kcG=vv7Kd2g7aw$K>C%%GiO*HXOA#W zarFf?D^y67EW&m{aLe_PdGXP47n?@2FjdJ52(co0I|UCl58ubcJkJ-+7iwP21MStZM^|Id41795Y+r`1 z!cA|Tk;BNmuxuF^s);sYGs0nja@+=ip~u5s;$4WjqSa8ZXJzJLAn+CYQHaC(jCq|( zGIjHmSY&Y`A6HwwD$VLB#ob7%%UdB=d{~Nuhd(2>ZDbUlL>n$%KFV`juFHUxTTb;@ z$cd*cw@nllonTRzys_RwTr#T1&ULz5W}j76W>}olA%3%9!##a&Qh-@pxXZ{adNjy9 zPpCz&41t_+0ZsLA`KSr~xQ1cqImwmhQV-yoOHa?#4h%t^4}Mm&cp$h0JXnYgla8^n zsJ>8nUSBLw(g=@iw7x8Td_0={7vCcu?Z{J|v@C=|Y?qD0fNTa9eTIMD4F(#<$u+$< zzI`n@aY@LkaV6)D4W1xXO+B4TOT0GLY<)QF-6B=nA@1Fw7(5Wu^%hvRNI)M5n>0Qg znR?3gV&u;KpSjqe?vJ#q<+OKjXZ}mOFHMw?`WKT{uri5ab;J01wp zc?S*8&GmDiE9*DH`N#GjO2;H4t3NbKMAZ6r`LFA9hzPe(qmWk;-=$uBap~3P&iNiz z+i*^W8jBDPiAuufI468ft;IGJFN>~xNh;>b^Qy%C%o#j(5* zfalT&IGM^5rJk(r*t9dCm*wzW1|u|SRSbH4KR=@#!`)CwX~LAh4AT39bYpRfaeH$gmeUwFxH+%ptFEOjH0xHw8)2)8*)pBzs*v$Nb=? zn}lRU>$;pXq3|LvR>>rX0dza3vkP7utz$C9Q@+}4FI@n4y!AiKQOb+}7XAD@8b;S+ zNCK%_6@*@)c0m6dpPDhCj3?3gmX!FoQF0r6pHd>n7+)YZi7{XzyBm~_llyZTJccwS zUIT^|K5Y(yvX7OBT9OCI$7_{&=)EvD>jXj{z&bYE5hV^NFagQ5_?h>m@t zq&5O*zqtysws7|i$Oy;Nw*yOC%CGF4IuOhF|Ei(C64AjDGk z_U=3X3(AZc$nKi`oDEkM8sJ2L#sCr*iz9k*v*@GtQhe$nsOm+6Dy#=eV5=#q>22M!0>fu{zp`MYi@()k51lw$o2v13|GTi}L0~zH*Fck)@A1GGa53Q9 zyUS6XVp$;?`~>a08Z6a)E0K(7Dj_i2WWif4vbix_LhBk^+eRP;XjlzeCr*X-Cx-JhtaC{MUF@MG{J=W2!8_^B7TJy#%SYMu$cnM=)%FrU5RM}89mvDVZHH*ev*YK4O_GJp zryQ*7Am^ip8grm1=i}_pnB1hL<{n{AbUpDKAM2B z3OO`+iLo`z(S{o}uA0a=bQn|DBr)?fR%lp5JAl>_M=YL0#UJ-aaH*(@< zDSZjSQ*&D3{nnm5@z#;VTSINh6^aqbKwf zn{O_}oJFC_h+}!O{SdXTW#(x5B3bR(!mL!+{9~nGs!~>f+lkd5qqIeOfphc;>ESCvd(e-yjN7kCh7=vPwKhT- z(l*>;IvA`aLL)6g*v^$I^1}V6L%grsJ-!oMrpPW^eMdOa%HgosNCM~4<}bGg=4V>_ zza3SgehTx?)fzmweHC4rAh#RdI2p9#qaFdZ5Y=v6Sc*lzi4gcgc?aJP>As-h7;TeU z%P^mV4Ih7C6>aIfe1Iw5#rDDUTOD)(DkpQE#%3Oyr+;8M9M7G%LyI<>Tc}?MJ%u`Y z`};JqbnWDM@6_=0Z#VrDP;th+&w64Kabt;EkH-M*qQgH*?d>OQR@3=67(Xho7dh0R zA@DuNpVTY!qKfCWg5ME7cEWxv1m@p!dF~8}diDBK?fS^eb*m3@q(5I(lmi6cIn|!^ zCkP}M-8|DH#mQmZeQvI^ciC^xMM3-C*7bfPRB~Tv@fF8UqwmtCyf1|n{l%lr&qu6j z;!?-D-sCNW#`LWvyDcL_Hkl_K4xm&^Rs{ zqCV7Ry}x+$p)~h5v$L5kux-`ja&o%;6v#69yjxr};)g?=J4`npKbhz38Ha^-IM~W? zumqyXyaBSLNRd&oz6+kFbYyCF%yV~Z)4AAM^U(Xjv9(bsEt2&Gx!46iL=ZJLxXoXB z)AQX6gN``2xlO>Q3m<2VJRoRXU1@Ojt07XA|Pj4vT%*1l}$t)eMVukf3H&Cl@l& zs)Xdz7b2ZPgjx8fKfK-wIF8H1V!ui8PI!Brod=1 z6FULh@fX6@;x`5VQNJ11={L?LgGPa}wTTNvwpNXdbXM{Yg#O&+N1KG@h6uCP3=#1Z zm_!0Z6KqOMrww~M(=+FH_*vQhVrOidZN~DN;5|7^$DyQhqYH0#fDKQF1y!^WX3>tz3%pOxO9^eHDs3xA>47P`WpnZ9)MVSM;?=kyE1Vzd?*zUQ+4YTCxo zEp&)~ae+4+l{i0l?sZ7+@i@0!jdZo1xFVxG8&8P0-3`0K3|0V8La~@c?SRZW&c`3 zK4&jX-%2_ED|s!S-F@870v~E?m}A=E1syAZ`eCT+MX;#UGELB8yda$ip}A^dGM-fz zDx4>j2aPHm7!@PP=fkEvV}9iyR4*F%#s3qqmYc)svULgdAQguNHzF z`(+u|SsEY&t8XcK^4-OBF-D&)P06FIqp-{)R9GFA&bqVToG)GAL2M^cp{*&=YeCbA zs25}9H`l@z`U|nA&*ZS@AMvIhN9%Y87wOET1$eMHCRLe*RVRCs@>?p`X#6uEx~v9@U>)m&uG}r` z9xX5yXp%@l?}iF*gOwUTTuR2NwXDWR0u%3DcdHhBhU5ImByg`$IG;IT;)~EZ!sr5) z!KWc+{k@2};u;&@DjJ3_2kUV|4&TGq@?E88+2y zY6hPdhO2Hu6~Jaz4e&7x;lUD>frtb;s+EdaregY8Er1#FBI6Q&3#_dH!)gJbS}mVI z)DaLihqHo-WaLx0Gzu&^6hR^or!CzAYvmGUNr9HQ|87cpJ7aMoz#o;iL!Zo<^wu>7 zw_GbGn$Bhl!bBMWKM6|YN5nBfr&Bpeyz#fxTc{`E0!7J+Zbik8iA~qHXeooOM|ixQ zLAc*|=-Oy0IiV`)C9T$+CMOL1W|0&(+s~Z3MQfwDFd|w5 z)dN*UOH(_8v_LLlDorErTv&&kS2vqi=jHIUsj-S$9`;n5UI?kQ;9g0(GuIHJi#*7fzrQfm z)~T54fbV(fkYB=hsBVA1CHy`|XfRi3(%$b9q0P=Ak&4x;5w)4VCp?3F>P=7~KSg%L{xPQM^wOT<5-0&K13!%uZq)*%%j1U?s z5Gb?O20QJBec@?W6!Trr^u`Je&W#VV@a7Jo!kH>fiSppX-QK_W%D%@vnc@AxH-+^+ z-Z<|;3ugM1OK%PZl(?y?RQZVlTI1cVp~4RP!{bh|9J#gqY{RR$s8DD+WaDxhJ)r<609{UH1x0y|TvFYv*nXTY-~R8(pURqgEo6+O701Es$4p zBFC;EVVva32f<^$TaDGr48;se&(rE@Qk@8 zSji|86a(Uuo}CI6rg=VTkb7ELl8H1;(raRfh&{Ts*+NvF8t_T2jmn(E6sYx0!CJGI zNzb9J>=M4INMi=C!gFoMv0Eaj6OD0X7LD4rBEw`5N_@h{nQhYq-EWFZcYZj_pMKQy znfU9OGoIx~aN{waV@5(r)1EKRMx?naFrfWNQ);Sth;VO9e|$ml5tSDsBYDVR;bjow z>ody&s=5q|vAUPcpm)&)y|YS)fP2(Acn&fQi$+DAHSc5Y1n zmK!r|$T{#r<~917HR1N-Gq-ta#%L~VE3m0ZJ6#@5^r$!6@-}W|DY!!>_4W1U z*OrH;_B*|=6Qh=tL9O-5Pa`iZ%X(+`V`?GXWyK%f+7DgAzs(TL+G4KG`<)_*C#^vx z(!Eww(u?AFO9Q2*2u*q~VKoXTgU5x9o=t8(T&nkKOQ*_1=iH`~3cJ<{FpxL{dU* zu&|cbQ?HQwnI)gswi%xEuW66Vg<5jfbXXpN8`s9p z{he&<{xW&HOWbx7HBJvWmCI|hX)_7gJ-iBYesCkd08sj>u*98T@Hvjj4`+|G(UN`0 zC|gc)uptHyPVe&zc)a?c%bF65v_ZDe+#NQGpT$RAaZH=Z55p^4f$*o_udi2IK1{rK z+x-pK^NuYSKRTPqk(%o~>=R`_(xbTMv}{)qpEzn~FJ1qU4&fGiyPa0w6zk>{$o#>j z*?RN1oAP;)1r|NkEHireYE$-l@5PO1*Mc3B{%91?%oqu>c-+4tI&+1H6~Ub473 z*v@X@+h4YZOCe?R2g7lPltGHV*d%DZ zZ)XO$tl46Mx93 z6>Jv9x&0eK`cL1GRY^~TFwA&_vJMd~q$jHX=Q83#o|R2>_GF48Z1HYX;;Pv{%ZTB% z>@u{W@qs<~=+XhbTGldRxQJ1!!ZF&ghjFS!&NR7AmMMSyZWnKV`OKaRmi;qp8Ihfb zA*~NRt~|t!pj%ZGI}XHg9@&1JrLWOuz{@`867$CSQSR%%oS^L3g9p-aZkyhA+bn39 z)ca$5_)Vv0&5kMCJ$H~r&!w4-Zpa_@JJ$+y|C~Zu{=VLP`+k~uf-UxSl1aK>1DJeq zZ+kg%sWkCy(Vr4kQmGkYv_^3N#}7>@b>I_+ z24N{q(FajyVz-pI-hc9~zIFxgG9(xr@NozqustU0uV;{EB;}^G-miCQ!MGUT%F);*s;{%VH z6lD3a(<<&yayQ2Zq2GTR@U3(|*)v$MDGwaL8E54W8Brj4yOnJq$pqi4L zUeV?9(%h;D8FLB5IWopNU*#a{wa)Y5Qc|@Kp+Gj?NMk0|7V+E(5&Gc_r|%v*-cVYDiI^BLWdrRUW`6)aW*|C#)^neqd6#0!w#F+Nn1h4IDXNQ@|t0b3iegiBjHHQGoq%u|vZKR^H5@2FJ&p&9AyhuZ7Vnb&D#! z*O+1q@EJB*+;yA6!$T*kCDg$|+n0QFxCBMwG7U|Xhc;h?tR-T41c`Wa)tzZ+)1W&gaf z3;|TxTz&hb?_O{rv!I8Gax%oV1VZN6TGSaYe?@j;bc)o?imQmVdr7Vcd9d0ST?(6k z9KbxEGAV{rVfxHeB0=?p3PKbZ;IzpiKK7jv1)lN*GmK~5c3vkQ%JZy9VosQWKsB74 zeGXa(Axj%z41hySjAV|5@q#`De;Nz`#8GbF_=sJl0hxT5`J;3(ronD8q2D~vnJDD` zLc&BcD$y}OHeUWifopWvW5I4z>?8c)4{DTD$@Z3Ul~_>{9fty+rO3$vD*1%(?Et{n ztTt^@o`f6XRDfH_FdQMGbzr!-q&^hVsiek@mYd+Mj!2#J!X>x*|z-FCq96K0NPiuH`{|;kc|#oK&Q^b*}mgT!`BDIg4+-qb?cPi-K2j>+s%KVn)~vce{RfgnCh}a`rVY!@ z+#L^0J7jepEnMYtw9fH1gg_B|a`P)`98>|w5Rwr6ss60*&TEwe%8aRH2y=7%8N`%$ zfn6(}m!6IwTKM^#JQ{mRuh5#@OpF2uV}$7mfPN}Ny!{LyIM%e($M_?)_O^PqNa0OW z*Oy-Xur8F#+eq%5`o%$>!xU|Z9G%;s#r*2$WyFuWKmszigi+3J&P#w+2w0skaj?T` z1l*)`?0s4YW`@m1?Vh-o+QAXf?iUov)gkQN-U49l%e;mk_StktxT8fdsgn7#ka0kl*kxjdOi{ z$!X9oR^rvQ24F z!kz;Fo(fkXIVUOOKk8cobntLjN#Z^XabgiBtxiOS@Hm|ggOJS)-VJp3li9CKzz@PD zSs?^Fwx{0Qrx!PH$`i+#vKA{50s@eY^SCE#(ULp>ATRgLfsk5t==?Uf$x!^Mw(#t? zc?DWSY>Q%!o68VJJm`ybHZp;};nV)5YGt+pc*AW(m_#@PGysgLIesCXlIm=9Y|D0X zU5+7Wi~KHcj(U42f7}$yc~$s+u@QigrT7uDaX4CyUlXKtDR$5)$Me)GUquFX;H=~) zGd5{{XH=2#5#c9uO9}0&oL*Q1kqWZ~nE(?e=!Z0L!1HjJwA_c8z_ zE1${KIs@6$Q_1$*6@rs>h8mBi(!;hZah&zWMyH=;6>V4jznT2og=M_spB1Zj8j{u{ zrnudd5+6M4qf?{xI>;cJgP)(4+)7kvjg6|x}8lnoEFbF@?LC-P5p?yE6dtq`w zdJ7=?a#g}*&WZgsl@#~>qeK{q$o3ReO)zQ8(8<9KOWkT*XyA#Fqr1f3C^kU2^1SbS z(hZL@+cKc?l5K1OULEVkg8{@BTg}e&6v}9O;Dm$VUzTmexW)a zY>(SN0sRfz6+{M()X$VQd(&Ffr_dF_7lr;!{+?@*2@!m%*?5D4a4?9nnhzJ|m0lYu zZx!~mAQ7fiQQHT72pOjw0!M_#zMg|l#^NdS&(7wG==hi+J429S(t>PtmBMQ(1`K?U%f*11MQ*mHOoPv(|6NBOjC)!jIA3UzJ2 zNO5IpX6L7T@fk|;OyVBAfou01%$HqRP2|P!RB+dUbjuzSDd^7^T7`T zt+I(WLj2XL;P{H0H1hDGPHld`I+_TGQWK^sZ%-*+kb<^f+Z*kh2+TngafsHs1~m9C zwiO4w;U^dsKqC-p-F;Pz7i|Ucz7Vg4h$@>ChKOCA;GWM!j!16#+IgKC#ri?$Q{#Q3 zJBL!6^5q$!ivusD#m5Qk{XE?_w3js>PASe*z~4Q%zi{;YUMga5y%*c}*5SH&&w2$s zj_c3I#&f@u8br45Wkr0A5EtvedvRyV`Ojvt(3%`P^s-Gl;dtIt({5hfU7KY6`}If0 z@2)~T&!huPeD~X5Yp(Ah@4wE@@3e$|i(#Jjpae0RzTQG!8W$B5u>W3qG4kuydnOAa z;cTV>$bnt?VSiRnd}|>?w>bH!n83Saj3B_0Pe|sFoBgF(w4z`sjmk~v=Y*&R8&TFT z_BCsb8}GSQDQF3~=x_nCN)XnR?Lu6P77LMPc@~syLs;d$D9KkHuXe*9BT6RAg-Az} zLx_TE8zgCaLeMcmu{9v*3{vf^ttcyB_Z5hn;z3B*#4%=LA$a#Y{?d;rkkMeP{Y9zj zAKX8&z_v=5TZr^2AntCGla50=TH^$&tQoeCx{o) zDoV!w#`_qV+2pBy7J~5_1+a7lF8^{9==A_E8_$?Fribf?{a* zH0@!pr*dh-th;>@$K#yTN_y%s0kPMctaU*~QJ^#n3p61h_G2b}d^C9_L?UpP0wZ!q z$dJaZp{6#O(5>WF+l(n5_Mlly8!TF#N+}#B$^N1YoBK+cSblU*cr7TV%M=Xdxsd%! zQ0%fsc7C9A0g#Fflr8}RP8{&`TlCt;gIX=lL$ett3vvXaxkcpDU|TG;OYF?*b=NgN zm}<@@GV-mBIV~hYEmZov2_-&IdYcmIF0awM<~K~sz1TyU;z2zOGRJtqe8$Z!^Mi2m zpt=g>rjXd*-OOWw(!02X6+CE=m|?C7vTlzf=L4twP%5)I(51NiBn_z@pi<8A4ts8f zJb1m(PjKdDDkaaZC)Y(24Et4RjtA?h(3HZ6nvm=%^8zyKGfB{q7ycJQb8A^IT)&E^ z%nRF1ZaSOf+}8vzt(ns_iwLeE09oZ`RD=)I}aJLE>J!dg^2E)B$kvjXR6OErt0hH2A)>rt<{*0li0%S8 zhJ-n2AS!}E(xO8UBW5sn~X*f2>ZY&SriltvTJ4Sa9#;i zP7%?3!ubMNc2y>oOGyzlv#05-kO*T#3R(ncXNv}OLu7jp4neCK~^JSgGH>M z?(U6K^}AqLVX9Bj~5I6YJx}YI;Wi3k9d`L zCKbOH5=&%#74~7hh2>D5uAf3;=8U4yGttD&v=~LudcIm)MC=qbCP)!n^=wbjsy>s@ zc3UckVb=-s%ZYIib@<&0jk;Rg+X*Fht|w(j)bwcJ!Tz3%6h#oX+IvT&TUW6jV%t@q z31-PvLpB2?;(H-2IaNYs1iKs?78YQ&T-vMf;W*9XObO+2yQ3n=YBWzIvp$ncI-!@! zEG{lj=_n8qn;&caa4+9Xi^_JoM5h2E6;{ylI5GEQhpZXtQ_8*Z#&-Y5_x#rHWrws^ zi@+i{vSH5mj~{nw@w~Tx!`Ym1f9+Gwi^lt3KXpIX0tG_*Af)tHigXAm?6f|GzN}#H#$9)F*Up-J_ z#qhY!fWWUNhImJ>T`8^)ok{w5cKs7gdd>mpA_1wEJ2R>?{uPcF8^boK4;&`D6 z2%}s7W>0JHush#+DmyVIh&bW zIJu9S8UZR#9q^1JKl(X=;xfto2^~B1F?OT-353d8#1-AD%QG|`xXw(R%vpPCzm}A0 z%78dw>hd$LBsyE(>#=DYiL$+Uu=Lr~R;--R^PHk*UquGRKgXZbobF&9;W_#d#Q=oJ z^tJniQG(Bnyr#Z=xbD+rX(I=2^AB(;jb0Ib@y8Y#adU<=*Q=ZR0-D(`Bq-KKcw$x;7|TVY$t=k{-*A3Z%SDz-?O*02@b+?+U9om5$x+oPBX>wg}^>luxEW_BvHTj13* zyFC3sXd}m^;P8!ln14? z8BaL&<|_{TOn$uf$LgapxIu@snrUo_0W7*9C^w~J>+@CzRJFYjl{Z%1=VfDoOva=| zV-`NjPUrKB`N_>lyn6dYd8+N~D_hLR;T zq{vdX>@+C58vD*5Tb68DQnK%A?7KvkkdLJ-rJ6R;Vy<`JbIx_0bAC9t+x6phyZ!+` zF>~{H-Jkcn+V2%!-@u>fv<2HSiS1{j1&L$+mwdklS|){wSHk!5%!^&y4%N)M4!OSi zkvWNuG{>#W+OEjg-PZD+fbLxK1nYV05tqmRfon&V8A)D6FRC0CTFqa7`hIRvv*^&y z8;b~k8}5X(&?8T>-)0B4Xcux`ST3V%L?!1R@%_qt+1o?@VAk$%(_;QcYr%rMOPxc_ z^aJau_J9Q*>WrxtXj(gEb@lBCLvu#(-P({;fj?;@Hfd3LIncdrGjw_L&hohH@>>(v zC9A7~)k|;mUZ*A%icN)qdFfqn6p>Y|a)DD76&P7aUM(>%E0muN2``kQQh}51sh<+~CNE zGKEbzTbio-t4so3qO|>l?ej)?70EiYf0m_&$EVEi#}ONG${rSCO7gE=#*Y%}+o3S_@i{ zHc`An^x8T@=c<^(FJlT@Dh!495XOvAY z`nFvD;NdTF0YR2`rCW(%+WiKa|2Ez|m{^U*cn0QGBLrf1OC8zq3DI1A=8ySMOG)*)`*ui2oiR zlhZ|k&h}SEqmKSiTGhF@X;P>eRv5ZJ7NK}Y>srr6)2&Uja^nJ>P`up~Hc+#)5L^Fg z`*MwK7f%xZ!?UW@c^$M zdd^l~8%VytaLTdNeY7%P%?WZM9b2sQcQEn~3QT=7{=m38bo=NS+oTNa(96v3dAEfo z1}mD4GJw+Ts$qBJ_psh0$2|GrhSg#JK5D^Z#u0n?kJrk&E?quWK&H20d8%u=+2BE( zZ_yJapTO_7e}ZetKXl`LyE?Dj2{I(R+`rcFSz4q0*8MGLm}+Gw{$YFc;Y4tPbdMnQ zYOfxP0P~sJo~Kv8>QQlKN_3I+H=?6D9NmZ9?yIR09+s3Q*hRE(T(db(GgqE>RI0rC zP!c0)6pdr&ee+$Dr@u7(7`twd9?0^Wnra}wAMAzaZe6L< zPg~Izi_~vEn;}CxcqNsJ>8UJlopUlR#<)%OH9VeMS?!6?{K9!iVYIbK@xqx~R)_Kg zHAGj|CL(9gN~Mdct-K+f@38uM-=&eBQKJV##HI8yQDW*sQ zr2iqDVP4=M+Gbs?Ry*u{_px z>}-SUiH_*%x+TqsFYd^qY4Tsk&u`A(dU?>n$w~C=wo|ehP>Fgldr`k*@3ak|n7=#L z+4gmFQd{&FC-9sW2%BJZo7;4FnHBiIYlfOY@#8@hs@NXSDj&sFEqs$C0HL2 za(I5-psXQ85CF0l|3-k!gxv(aYyr~6o8UR=)u_T37Ly9Fv2S+3MI=3*4Ixx(a5?~| zNagwsmKn1nMeOu-68VtP`cX&%>P!hha=gNqJD_TMBv$dx?e`y9yO<9=OK2go8gjY|PzGN5vZav87AQ#&#g@_pRU zjr)nDtrG|SI6g-Lq+4KGH`5Bz=Hkt%3p$V&1&A|^k$qQL#)Gud=J&3u)I`{F(10!+ zL);M9!#YU_Aax@t7@5Pz?`hk}IvE5b?D>djV9AcWnB(Osz;_!(|q!;@n6(l+HMYO4HcP^87Mv|3HKEa0f+U*3R}a z1>t;{Mpl4@Py7tf@bl+ogS$oqnh~b|44hf;#E!7`EJz`qWN?h*%Kin(BqR>nC{6=$D3d0pDl8np0aWr)vQ_h*kn16P1R z`3M#-QnU6xCTet!s;8iS#@?mPKGvBfs(HcF+V9cwErt!L7R#DP(nMes*>&Qsod-`t z-GanbZpX#R34k}sWjW)=$Bs959!0-vcXIh?54as_Y$pD>xwC)fJ3zRky)OC9Q)d<+ z64%k+jj0IOaSloyq5%3+{4=T0^nqn2gSdz~0izL$7~YIOZ%VEgv}Yf^t@0&b0Ao>3 zSBN#TgDnXR55D21gmg-~q2p)o6v6>5J{Pkc0e!XL{!>SCizraZ7>21${<-=oO4`#* z88Y$2bh&uuMB;(W!DgUVOyzWKpQ5LBybP5naf--!c(w z8MCKH!U4GDdIZ9tZ`RVO80bu77p3%y!HJj|u*k(s5DDZ@R&up}P6n0FvMM3ZFxvrKIjRHaK}QTlc2;vB^+Emzd;+G8 z94SS(>n^oilvS#yAitc1JDiXbVHC-adNrU62UvC##f1w?7tfCPFgH4hN+P#oX`I)k zE=@@O<>gNU(MwSp*SX zG^oShlxjexFu$_&HevmNDzh|uNf&j$VAdpK&uMQd{u&ar8fYw*i9yNVTsXp&cNRw%c^6@3#K!}~I=k{l z=`;oxsicGlsh+8Gw*-b-4y57|C-DpW;q%?QQUUTr$E&|E!m=xURT=UZ7LGE$x z_wI1zivstlTCnQeGaZUHKNo*A)-mgR7W~7^|N48Ms8|HmtDa9_f?m^{x{?O7KdU!g zKNN7vjTfzOR(eLIvV}HipyUSS1DFSKVYj;I{!ESB=2J_!2MvUh^5 z#+oo=PVz$n?JBdWCmv7K8+mS^bS19C;Htuxv0;M_A)_^et`y3n0EG$ip*e%M&4`is z!k)rU{99ThF_XCm#tCUUOnR~HO+6s`VL*nz%1TtFbXKxuNLU^hOEh!Va=vfCpPl)e zWZb-_Z2bkHkHuy4(&nUx-1h}O-MD$OZAa@SP4%^&%JbmYuW{FUOUZBLg*%%BwcG~( zNp%?HYim>R_847E{pxwTHC6ev_wye$t2~vVZLWX(rY}s42B}?XJ@YBp^mAn7^`pPr zyq{|eOm^*F&4{I=ePfQzPdW8muoCwKem^nA9p-TLAI8n49zu5ROPAV;R8F4I6%+U+ zSvt?qG9=&@)|afl4bh6aPlpNHJD?{jED!h44*bGxcRmYa)I_OkKYzTog48()gC`nG znIcy1FkIvzSUo*5NRSka;ghiBfqC$#NAQMo>bu{Vqs;bT$6~`tUqU$mPeC;hBGRl; z5u2)D9OZ_ftGs+=#HOCy0VQIiB@h8)ACrvacag6G5vr|$vk@qPp~%T_T_Z5)X=Jdt zOH{wJ{L@+c`+7>clffqQ{#=L9x_cVIyaJntrP0H(^^_ut zm|W-aJ47WVB6F;s+!h^Z=Z$qzie2=FBh;d2dzjEev7DQ+km|i4AP@m5{TW~!te<_< z^fH4I2l4KIegtx@hoB|mopl9v6v5keWU`Z51}z5uoju)E=PHDTp$)kr+23utPanS= zoK3FPSMsL^z;p$g_%6?uM}?!Kc?i*6l?nG<<;^OBdtK!(#d$oMPxumm(w+~S&sml2dY>x-&Gn+OaB?4R|x zfKG>t#K>)D%$h|C<8NeCr2bF?D=crul%~nNN`tpu(u}>cT6T?tlK%B&@;`fb74|7O z7d2D53k0|4lT)reuurzgLZmSh4K5rBz|Q2D+q=T_u#g1juA2;KYMDZcPq5yO5l|<$ z4<&Np)2)X6W_{zi<8maolI8KhQEa?^6~z^M!L0=m5O2<3?st4M(r@47qjZjLRra=d z%=uvx|G6k?1N#gR&ao{9+1T$_#n0+wmglBa=&{$=qG6K&q~jB;MVQktwZpkw4Txm* zdkB%#Z>{&(hGFM-qr|$c8pGLd(*YF_U0TG(U=Z@^6|qJ%SPC)kr^?@q!MiIaymP59 z4dluwi6{}=Ui^KW8#qvVA1T5LFc*zd@Ap8K9C8s_7E&5xS=x(AL6jf}eV<^e2&|*~ z^2sG^J&IT#8WI}ctH^L8VuYEwU=P&12eCQZ_pStH5?th&woUY<@5AVD757riXSkFd z*fvutOD=`@^U@P#eFMmI!DYJCj4&FL1__R`gB>LyO=(O%|1QXXaOED_g??Rw42SeL zM?ofk5Zd1n5;QF2FWQ+b_Znf=s71_!Y9HT}LsKF2qE=RB;?EDfhaL|mO}tKm`)U=1 z{>E2dvbW5MF&LB369IDu1rtU=*^{d5X-t{?=m-iXgUz0Mo__|3@Fu> zsxgdgc^L0LoYmzfZ*%gAjcd+N*^uYXh(x{`gelU$tq?A9YvN>0m|G;Pf!vjHmOt%L z<3BUa_fkUfz!TDA*@^%`YW#IK`HrExeVojN*!x^(GI9;%TnSH(218>~U7K32eNY`V zTq`rO>mf4)mrMP3_Y0PN51yX{qk&j6$ZF`46uq6q<53Hv)GB%;LnVVIdR-qUQ%_J` z_;v$#NS%sHeV>{Cp<(03L-jK1;JjrcLObKa`xB1m8}(%xwB6)?5p!=G0pAtH9yOGM znlB3pX&Xb(s`%goAwzK}EJy=P1MYYvRvTL9Ayz%!)VAj7Dan$?%&roKJi-8^OxDk~zyTjFiSe zO@gFFmRmd9h3|6?cQ#R;9myUu1V8?2hlis|_B#=2b(@JdGn;c8e`fr8@4KZMv(DFa zQG*H>DS(YN2baR1)Y3{+bE;g`7WJON2-Rb5@+marl81c0S~tR{C1mSd@8V+^Ax7M= zXEr_P2y-jEm}%a*y^*D6j6dP~`x39#TOmOA(y!Q6joR}bK5_akMIK%1d%zJo>%rnFZK;3#3ijnw5x+>Eiag!Vr~wJWeK6x#KcYVHb>;#lfhl^lYaVG zJ=({OinSN;_~s0rOmmXxlXTQ6h^B{&&ja|4gL)1tPlhy zUJcK3X0k-hyOb{P(aQUzuny7q2^CU4F+cH zj?iX%`nbI0x1h1vrO&PA8&Q(xuFrm9mRgyT^0|l9RZ3ACFVj&Hvz^kn z9rDLCIc`tie3efdX)PIIx@?;h`D*sn_V|T@nK{?{tFgE7iVZy6iLwP@BlDA}?`#qB z;0H4Nkz%Wa*nFfA00HePp{5C%U>L}h8m5pY589Jana1OYZj9XGZAnY`jZkN;H8!!W zCkT7C7n>7^wA;a5!Lz;_DG+74Qag)!|10%;|m-d7WKnOBfHjp>$=*;WqNy#qu5*TwuujYaQ8lqi^e?e^V{j{dS(gE2%E4MY6?9ebtwFYi~?cv#hx+o%5`^|M78+;95quZ-P=K>_r&)Qx|U`VZU=NyWOHx_IxR2xi+H zY8d#M^8*jz{vdR*!c6i_p(!_a{~uc;fK3>JNfgktoOep8UA>?8rr`0#!AKW`1L|t4WkF& zS}XP6206@Wg;zDd3(2a*>s2;dak1sBR1e<2BeHxa-vs&Mdi&iJEd10THXCTh zc8C+<3SMg%7PgDSoq8* zM+F$+|M>C^p;a9DKdj<7;J^B7*j0LG9$gy>9wzG|@c-FglXp~=snUXO2w1DJU)|w0 zOT_>P-l5fPvS19rf57p(CBBcyk#}Ig&FB4shYtxSo!m>cy~l(&qR(I1^r5EKxDoZ& zU-P;n@at42hn-FLX;}Jd6BorqUzESBwp;8iks@J@zbXO{WVH?9n41PpsBnr=+G#A; zO5mgJTgQMnLTLpHb1!`HpgKFkcWEft@BQ+4N6U@m&_BD9I1Mq?r6EovZHB}}Ii4xj z;0F+=X;+c5wE}UTr0QFwzQc@f>d{p+KlFPX0kN|C=?8s%^!^3E!?j#6E9_axOe;zt zg8Smw>Ca9&agrOa9EL>yLuZo^^zS+wahvmoq`t|M0xwsLZX&|q0PdnXjAn(3cH!3^ z0)U=VIPSkXo5omyuv5ER>#3h5A|aiP{@X*Of9Y&4{F}~3Q5=@O@*g^zvl!B3qR4lU zCWG_xAu7M1N`oT6USHN>K;MU&h=M%rLK^&cQ*ngO3`ZLxN_ML#YJrPgRvKA!5vb+c zzi5UrC!pk-EA^3_$~TqA2uMQhII$M2B@$>{y@N0|%g9N^m|>a8ihU(UU%K{BIZ-0> zzTC?MAozDi`E@uRP7JL3a|R8_kI7us)-<;m;gnk;qE%7dGW_<&Tn|4qFZp+n$eNn> zoB(IfOMk^ScFVknQIr2$Y?D?&?88UR>il=H4gH&kQw2cOse!r9cxEuYxB_B*;I#nD zi2dXX;ut}Z=_$xEWm$+rJQ((Y&@XJ7(3?6Ece%Q!^HSnF+v`c zZ}FC6f8(3}*K-q7!pitJ(arG$CV3+55fkelGc{if5UzrKRlj`sBKyq|*pPEL0yts5 z(WK1}P$RSu!-v{Ck0b2vEq)mP@bi7`bMqEr0J=!rJ3K?3DhoLA5eYB?1&l_@XiXl+ zZ6}jfJjL%uAo_7{m;r9W>Gz5zL`47_sy1kmILg_l)5VP@>H~`eLhtdN3%!yY)0O&~SHYii`aM5q2*6AC+}7Q>)332e3cR~NJ|YHuFaDS?Zat*QB}$Y)CgYgW z-~a;z)%cBd6(GX@Htk0fATDZhaUVk7OOh2VKPQ-RYV*=bJqp1}-X<78@k=(>0f%@1 z<9z{fFI;%?)Y%xbB9Sx8Fztw1gzgCz;xYKjx#CKh2&;VrKrT8JVVOi&(g)ygey}@% z6o9HB`rc@_-_Xj}IwDG&z^{$f+y3P5^6j6GFZs?OK?<$}`c>u$k7O2g62hnv`8hd& z3f(e3>=0Z;MH{PrN`mQ+=qp^rW%cmi-Prgoq$#2cPgM)o;oR|XU1s73qB?jyWhy}Zyl9$iI@MTEmtgEPbX@Tq1BB}r+o`b7 z6gkX{?qLBLoA=?zm`YMbxcg%Jry?DZzQ9Q;8#O}?^5vhrf5G&O>`P_#6IzDU2)rrb zIDCuvGd!uz(}6GU{Lm@t54I$=^+U<7XJz{AsrLqOB0q9a2H28h6LLBpqg|+Ncj=Lj zlLJRCsY;vy8F0#|rIzClFSm@$)ck+s%YWV#8^PO&GmDBil-=5=3XUxWTh8}-NiOc zDIatBL*d1=aEn%_=YuPNlxVV*C`&KADb64-H4S!!+}`MQJEq)aYQw^k$XCJRmDgYz zpDWB}E-swlIkf>8ts!60Pq-|0rV16or22OwS?R?)V;^6!=>o?a z-*N(X6jxu(Je6xf(3#oZ1S)u))5EF=d5>`71qJn^Z3iAF;#S&Tr(O5w*db?Y^7f#< z(SA6Vb|Ji;=Z!6=oO#0JJ?}FoiWr_apEqtAVX7Ef=T$z4)u|)j)GJ@2x2ie($d8r2 zxwM|fSna`^DEK}tUx0JWvDT`C@3PpN#}6=Y(a>YwM){Nl6|`ra7zZNqQ~A8n(3#2T z!+1X@VD=e4Kvhoh?SqccB`YA{<>DAdfbaFY0Iy>*hM@1B;vy;y2)VkLlzNEjpta6( z4mDEa-_Fwk8rcPTCm1t5n0x(k=^T0{==ev^vn$JYVm<0!fH8-;HQ3GdLv04-Sy^uO z>UqVWizPnIYU*i&!JEc)LiUJ>mds^A{jaGxLI{(nzV@;k zse$I?aKGs&h%n=-jH(r5w}co!D6^@edPN%i01;+((N8XVx`61~i=I#q*lFwJx-%OG zImnFz6Q3 zQCDMDiVIB>!AX!KGveYArjhwuG3xUX1^Uv3Qt`Xfej22N1!eCUI^`4}9_j=4kmDcC z-&l`9x$-5ZiD0bk5?d^J*HP>opx+t&*nYmG>N#hREnVlK8zWnROU>+3B-aT({DDi< z3)cup@Swe?JE@9Ybd6ZLjLZO%e)HmsNx|!U!gpO@3xUZ9r9{$P%Bk$cj`=VzNsJ98 zWp|!){Tw?Ffpz^`3_HPzAsw8yiZLRZ^p`V{a;U+ko=W6UCOm$iHlDLBAkCCT#nR*m zAG3gr&-yv0w-u(#7RUp&bT*M&?9?~{9{;V@Lrx}Xy&0X%h^3@`jy++(J9aM7@@)b~ zQLtvvA<>}}!6ugt%e&{Wp=&vp^oH;D4R}4#ziS|qNR-J`Hudxe;w^OnM6U- zt$kiRMAjQhW*vRur(K)whlrmV%#!bBTjxPiXD_X1{mt~=!s9b}Q(fA)4@k+kb2+Ya z;9c#|WSNAejl?_s>>9_fURMI)2GnaOyjMWj#)?I{!PR&fFuN$-u0KGk&4NMCU3dgZT`Mxw%!Jz67dQCmpoT4c?PzH2js6(mppx_sW05} ztw8^sSA}WXY=S_6i$uZVm4a6%yv=hihd8I->Mv*w%FZsjyuQmEh7CLjvSpLbnO6s+ zt5}-w8PJn}bDQnQAe6_gfUhzZ`Yy?SdqpqXxc8{AZrWv3Jez1j7P}o=^qUAPZT6}a zj1S19M217~us;POU|0aXRHR53t@AKlDGyxVK&#_by4dOii?(u$6tVKQjg zdOO?{kRe~?a3UB&HUU!#Hi}^-XBEz#Q;QH>L4#@*pQMXjPk3`bEW`gyhF1F`=7&hw zLn$gKL4H`l|FGy^_L;{E4|PER^3X#wJ=D&yfm|-N2w5786$;&w;74l_MnooAi|W6X zTk4~h5hh(bgajRcNOycKBD+=u)6KT<@No;o)I%3A;uebw_gu)R)%MGaC&92HrpYK&o&(6QPygGx%?Gh@1WXtRwD6-o<)Xv*nHwivSShII zMNe4kT$1cyvp-6tt+MiELANVa=i0ef=;=NUID&QEk|YbBgy9W_mT7EtWmy^rlNMh+ zg3+BSJ?!-gM3}EU__ckP{|H#NQpL=V=U%9PJmmF_gmk4eevt+*?U#JDggfpPrzz!W z4|}~M!!O8`FJ+;R@HWEhVvi*hq-hsj>EIrwZsdJHRWU5N;os z!{4&h%ywnC4YrcjDO0aaXn@Ad0Ig{C!Rp@g#JJNMsjcVlBR!{}Syau~hWgi9b4Fb=Op9E8g_a^@C^<5To_g+Jvz#(mE zuue?XQ;tIbvuoQ&4RAn!Hk9Z8XR-6MTQ*er)#bmluGg&)+kGLct49DYOY3@x?)et? z?5-Mksj5f%)x852nwT88eLj>R2#g1|TffLu_}#O_llA%tXimboUeERwq2`5TwX?JY zU++6youwHXW^KEIWTm)i6j6^mVJh(%dt(OsGc8iV{~xa{r3YGJ4kZS-;!HLd@)|IIy1i@%}BT()t4d&=&p1}$$=__^l074wV=%QBVFEk z#Wy-fayJ?*TDq>Vbn9<7N99H-;qg$Gqx5$sJgv7nX~cFhh$T0m+9+v&Zv-JS9w!HG zzN&*MW^`^)*Zo@ulg1zo_3h2^1nm6@L3|MLnMh^06g`iX7e7i3F6;C~2K|U{hXNooa0wxoT4aO~3ZR z$r{_4Vl8E%^ApFa3-*53KYJ9RY><)sAomh3Me*d26GIk!IsbG^>Q2$`DG7r<<;N2{ zNzcm)9evhYUH$H7UBIy+*sZ05s*#?rt=fdzkZpbo5q8lg8r+LG92s+N^&{h zL7j2tADelE%lp&D{VHb~5gwO5lix9#2rrIrmuo=SrwDw=@EXYQF`hc-bw^rg21Xwo zR2$COpF{Wz)a}h8JLfLjwmHayN%XFaCYLv-Ucp!AEO_xrcD~;uqu4@U&F8@G3uF)F z%y<0m{9)6Qwwk=QahLk~?%4Ux+iwe*UEkd3^Hb0MRCYN<17i^-ZVn0`m5bq_x) z50}_kc=~8i@8rD6g0qbsWp;P0{q+ms@d2UunM#IyeSXyy{N~j4oOnU<+_#{YHNRg& z2YcGKS030*rEEuWU@bq9|2e@8KmtBRLDfBZ5F*+~CfV}7{{y42vKQe1WmQxSj)%_r zXZ)ss$J6~IUwvs4Z!vT}&9rcgnSSisP@6RYRXo z-Hu9(WG#4Eq3-hSBdeSkVhJ?@^7z9W}W{5q$VKyH^HU2_8?mwI|1{597~- zY(yuN?2Jy!CU4?iI5$nctuGIk+uCHVbAd5Nrn~d&cIKS5?K~=X7i1~RQ+RA@o`+v= z#aO=&J?Qi+cxP>oC^E4MiGNQtTWdV^UNvzwT-m#n{;ul5`ynt}f*Vy`+r2fj zc3d3dvu;{(HwAJP239R^#Rfx*wqr+YkS7(<{Z2AW~(|ic4r&eqh@Cte1Uj1SE zpQq*~fzI+hJGaY{`H<)w*P${lVc%hD+wtf^HV$lzM?#Pv`tHlP^(ih#BuIkFr0B zp9TjM1Ne_Ndkt>s9=)eKccqPIRO_D?n69r!e| z!(O+kA1)j)JE?y6hE54jTOXbK@~nmXN#(+Y!@!l6FH13~p&;uAOJDU=y^SdA_fPm- zkovmh|4qT$+Oq<_td+LzkIg9jb}YZ!@$}wx=@)8MLm<#>l*{t@=eK+A(jUkHt0Lky`2!yJDOeX@55%Wcb z)3l=bPi&1}=gHFS+8^stsY6Tl9smOvI6#MBi zL5Y#4g{psiuwVASc`nE?Y(4Bnb2p7cwR>KoO!5NK{yC93P-m*T=eq&Mdc5)w*mx>! zZmBw0vsc5ak&F;CvsVcA|1#eaaATXldFRWA*UQL?lF7iN6ebhdwDCU&8}ti;w%e_5 z_QdGbdG+euDesB(M*%(Mz?i3SslKtN?uJ8WbP}W!#ZEDwKE)#M7a<){`?EZ8Jqn}k zRM%5H_DX~~`1nnQsB$$Z)Yt zfKLXJ$F#-HYqD!jw<-lA<5zHpc-Q=djSTJ9@Mn+ej%eLn8zO?cT=net(Y;#(21ZJ6 z8w3=T>5lznd*-IU9e=C8G9x1TiC6ARR-Y7Q55de!_oYB^kWIUr)&G4{GJO*Kx- zL1fVOj&1r6AzvN!^(ZvIBEddv|4)m39o$cCt>^eVJ;EJ@gRQj%_E=bBdA|n)E$XABx^HNTihE9ik)=gA*S~w@(Ij(@KCOFC1DuxztPGx{WOXHqof(h z$0}a|oR}^#ZRvbnIjw)!aP6VC-3lPe#cc+s-E{*15@sUf>;@_VAnSAfp2JS0GQnc_ ze!t|R5z7-%$^zp3$cye)A^(!mLu3B+e{<734S?Jw5Ra!*}h*LFAN0EYPI z#G@)K`gt04bL-j4)tGwh4JiQ78uV92-_h(v4f!?8W5nmwo{ISN2SaE2Qjk%=NS+o; z$SWKdLmy0+y4|a+)hb2TLQHk{g~Z?)#x%YC>xZvf)797Re-S>W3LC>9n-zc#U>0Rn z%6OhttT&A-OBRpJpGwvKsLhFySd_lWrieCI1odRSI4NucA}!p8uv3G%L2z5Cg&4sY zCZZVT;LKsqou;j|M8%RHsR2kB$q+dCSsc>zSnBi% z<~W{j$YYSUY9P-1rr4h;KF7i4U+6Yda-(RRQhC+JJo!L~pigY_^cNU;gxG4Mwj&I9YEP=L7y*J2 zk@&NyGl_zgmm%Xg0l*FFpomP&IZeb?N!=FNdo}6OW~arGD~7((GY{W)?QL`%eu8`( z=K`3py)*#iz?aWq0=PUl05fc10&1hoy|g)w-d!N7sS_Y$3GxA`m^UOwI%W(MQB-;h z8$W7)C_gzRllHw=By0Db$JcSS>Hbf|gO3=ZBr=Na&Ee-r*ej`ZB; zxhAR7|9orZi`9 z(x|EGln2uVKWnS=oLrS^r3m)g_Y{vO>U_chM0InQgM6;10ps5ED?I=uI!7!(^6T@> zC#UoLuKiN^eoDE3ND62X{c|Q*e{%55K{y@ZOn+AYy9sivR9Ir9iew%r(oZh#;Y;?YA;7Qr5KjX^UDW*u&yjK%{+OipEyHwmWs z!r#kT*p0IJ0BQ^ub06MmC&Iamc@+QrAhYzrf`yvBS zuMz@=&o5v+_(dW4%r{A@50F6+7TKtM^g?kv$`O*!^sn%gu-`2<{15p|-d!2~iCVO_ z;P<$5cO3)?4jad3hfSagL@qM-93PWIs+%19+3$9nClR#_6Xow;{$EDi4T%c^N&2fgR=vf07KH18C6rW9^^(TBc^LOrG3SSsQjB>{ZDN}HIw4AX@WU#o=}%u5 z627EyFbO|I982f;w1PXQ;Lf~mhX@9OBrMJJaJ%63VqYwWl$wuG<8<;NwUW`(Z_T9D zNUZll!ciwk#S)-w(jLc9Ij7PqN9cnQ=+leon~3Ox#Y{Bi3{5q+Gar z-iRTMY>BlM)o|^8!zrPHmi}1633X*lV}j0HY(?nwZgs0n?oTxJV!0oME(tE^;m-No zEdInfB}?ePXK4PdT;orw%-OTxeAF90^4dGJJcp(-*{)_VnoG7-WjA&PJ0P*Up1?n2luJ_hr8!VcD&lbj`W%=D@R!UiO}^**A8>lh%Hy9eJT;IBECpN%DCO z(jH^{sVDhUb+Yi2Lvad*KyZHX9fIStj(s1=)Sv9)Z+$wi{Lz)9YLP@3U-d%%`bda= z>K8>JXs(invfm?NL%aTug{VChJv~TasDRMUBa*Em>;gl%hBx;}1OYb+B7LLL5rMqC zj?i65rDV-qgtWB40tZ$XIBDa6CTM#mt*jnRBTIem=x8|n~yiY7U5DEYdIhSiCiN2B7Ew?I`!f@7}`Nv0kIOI z(J6azi129Py;v(48^2||vZW|AHpk~g_!KkMY{bu_?m$C2E)2b-M~OWGh~{6^3me34m3%^H*O;*W;QnNU2EL-e2RRU4pgjMmJan8%*rQ33BpEKIaeu0GIXC1!xjsn!dN~Sgv!}EonEGX9C&TdD zb`qS(AU@JH=U5S$bSs!kt{N3y%*GC|$zU}kIMELCX%dVQCRx=CHhV{WZ4&CiU+?~@ zR~bG&*nVDri4yn|(%s!lq8j87%q7t{O1g=`2}BO;L&e=6JQ)^M8VLIgmIvM%`Ej({D;Kjqsdz4y|TLot|g)3OWrKly!3$~Em<%Byzn}+NSLRn3g zT7iE@@uOro-VQ)fVGy;h{*VdUx&0^6VPp*HXIUE!8w;Ye>3|fGDX9oI9R==y<@Sbb zNg!-;$kajh?>pBUJ5x7)V15#qUn$?AKTy^_zm;8)dxrgWEv}u)oU?+7hO*%x+J%^} zf=5WKI7To)=GP$bo2YT2EnSJoL@zQG4MeqWpR&F<7+?YMM(A(Uk)_V~BdV4;hpo;r>u=g52uMBSi{(23f zI~6z&DiLvG?{aNG^x{Z3>kq(h!Biss@$9`ETnK#a+XXHGV8sqbRL?@{)esh-mhat^Ab9)Xd6N`F^ff?T z-Ws)GkpX5in|kzdfx87SB9YgF*>g!wm#Lzc>OHHQ1?z9u?gd)eO`5GYQ zNW+mUk9!4x(KdIVH0CF=t>N4EZdY@ggRL3@aWa=gJ7irRYk(3~ZLADF-cb@|B~MaB zHegJEH-hfVV*mdfj==YhA*TL=CL}2;YLm@V7 zt&b^EwYv7IyecD&h8H3<6RmmQoJNO zmy>KYG{k2xSmDuA7m$;Z--7s@WOE8++aJzFla1^~?(fl5`m@61z$XG7_XGzOkHlMj z9(+6&nSUws z5w%%c13Vr#p(_A;@pBvji?sr zCv(v6$QO$-d>`6*Y$60X<9^~=Muw}U$3@wM4k`2((V{pP1}&YZ(M=l-}qZud1|3n?L321i}8@hi#iTpmjQ?Abr1 zt9ukq!bZz_f16+V!v$Sv2vnX@H=lx=A!CZCzBZ=WlP2NqF({J>gMS`O%VWqi^1iXz1G|wtBTNe{xzO(Nab}Y5<>R1%=^K}NtY6e9F|7)pT`stB>tU-5 zqsYioBAb~$uLIf}z9j77qT!hAV>jLy1;Gzgr`-;pk>Bl*8XeQ=P3k!PR`>|^isFsr zot*Wy@miliJJ?H;HxIZy->yIx02uE&KaQ4~BwpUQZrafPy^!`(q%%ell-z!YBL__X zbp8ZZwnU-hWw2miNw?A_N!+^3;X-~qd(hu`bWlOZ7gvOy|yYBDU#{4D;n-lTE4VW zd%|I+Z0dtloxl6uu(%nibKE-x-xDqQa|Nru%)7ZPApI=;(rGAe{_X%AoK zO_kblL^vNE`soJy781D@_u-H0BKCNk6gT!{i}~HY7rv(4e;pBzFIci{R#r(&u5!$m>cpUUwB<<^S=A~ zct(8jh-}m1vG1|G$}_{=;x?K~=O-e63}1zg$y1hHm443Osoeh;M5+~jYJ0Gr7SFv! zfww5W?z4xR{rw08eRNWDo{bF`_^YxLsob`jRSs>m;7f7jvdr;U6MSofoEvjneK$J^k<3kPaE<+5OHN>*Wk z@ZoANgj3U3)7iwob1{J{NATacF`GNpn?!2p8Pr87`h?26E+T!)LCraem!I2%Ww1YY zRQ~(gy;qk}-dcCQpXdCpkADsghvi2?g57o?=FMAu^;941S1KKHa|OV6S8wZj1x{mT-bvK# zBE&KBdyI>fY1|`BSe5B-APAnt#VxnRPKx+E8;RCo{fVmCKf#3EJNp;zjabH$h0k#a zfV%(zS|q0ZyW;-eVSZ=ip5k8)20kUxorlArGv^~xGD6hkKO~J3iiTs23@4<@IHAET zaZ97@e}(yv7xW{OkGwj9$Eem54kkFg9Opin2az-)LXEPU{BcLO#Smz| zGE8$%;jz7FY$`ijGv@>LByx=C>yd{SK3nFc^d(qu4P2>^cXEH{^|tNssjU4jac`q7 zvx)Pp-k(>O%pRo56QuHW%l9s$w8-~=1%8T9`lKQlW9~$=ykpi!iFXM4@zG4aJi7;; zXV)^IaICvb@8Hg-KhLe$MNTDpP_d_Ut3C+${m|+rD48;t_^*FU882dPWw_z@Yhqk@ zoXX6W4@6}7Zz8$C+Ckm@$HMM)@zy3pCrCJJ&chI=i|^9ytrly0BJBf+Imf+&OQO-Z zC&V6+@Jn^|H;Z_B4@~Bj)#)-H;Q(kBBe$*|ih;#{AyFs*!mh2Le0%$U&bLLk_B&?& zlW+I$n^u(64H@#&dazvkUxdrQ%IYd`j?r|-3gD`JcQo;? zm^dx^N8Xqu8Ub+5V~&gDG&ssdX~1y|X}>)BNO24f*i3l%FLK@C&8U+7MBtZD#h|p} zRzcVbj>}I|{9^=juPYPA;%e6}tTtn(gv{RsZm^;8sT@G;Y<2xVY{#diGw1kNfv99rN^e5I9px&XSP9X>d>zwq$)8I(^%SJaZC&rvK>GAvuT=xgdbF z=K~fO-^B2{RnB|v?SIS>t;wmX58PQ%9);y^UF!jEeK|>2KL$oK%`nHTK^|EVX>=qP zN&^G9DfSAVgj(z{BQ|Uk01SGsEM`&+R@0Sik*sdgI@QAokVI2DWSE;|Cj1785r4Rl z3No+4AG**0+uqv=7?=%>u673?-6QpG_R$?Nzi92SaOnUG&fH&{ahh0I(-{<-swWtQ zLkS%GM{l7foC{oAy;sz1HEMD`HHQZ2EhV;x5eeK(D*VD;ADTQSCPqtQ>vE%Hv)k&v zBOO4G!T^nF=UXIxF)<4234e4F?g-Qa=jvvkVUd3rvn)%sfla|mR;+?=;N4lCyClg& zFGon{FR0Nk{7Y|HBB(l+pjZD(Z*l&Y-ZJwQo6(CSkWi~UWr+wbBmm&bZCgf7RCYrt zD)57w!%xKG6zgn1aOvHThZXBmJkRq)18BGpf(b_-Te8`V`h`xjS9U9IcHudghuFP!Ux7bg1x6YLg(0w^g;Bq>8ePkFeG(8+o7fQ*G8 zyP(DvTecB=3Th?W6wuX>Vtb>?y1y{5swblPe4mhQyb`WX9Yh1_WM_^}TQ>jt!fWJK z=|wNy?>I5$Q4nj>bH9Qe(OzuI)Xw~z>Ypu>}(6Rb(`gMtO@Kq5sVd1zW+JfR6 za)#aE!X-y;0r5k}o)ptq!`5XisTh=j8TY0(4KcEP*sxtE0T(=V5Vu5C<(V@>WIGDT z)ow=16_{;4lR#jt`a%$_cy5cR4t}XmM}+4x2$BoPH{hW}snEB+w}5?z1^h(=sc8b^ z{F?BRIL=*g-@@-Gtj8u%Z=?k;?MLp`LSF@5`P0tGJ}r^tMWzj1ed}Vw;qnebc}j-RB1FC?4BmwWNpxn8O3{v%vuOe8*=4QI zM-=HPWVWr=nO^E4W0i$t$o8?lqctaJq{VSC=m0SuS@BD2!EoB~K-KDz(o+vdzU4_G zx+$E&e?TO;Ub`sNAnM_c;)n2QCZVZuImfF#a;na4FbRE%vHWY5pQWjDovWkHKm4t( zeW;F0>?!mk9iO1or$W4&HGu{j@gf_|uNQ^=dA_nlq;-VetP9s4(qz63^fKm^Vk)(c zXf24ae(J8d{d_hQ@|IG`n(LXgQ6D_I8Sv8%g&d}*R*i1@r#_uC?N_f>;2Qq+G72#_ z2?letBU8h!b>7@7-p)Ka9BGt)Bi{ubhf**2l5}zB!*umGfwIoUeXa0it?a8B5~ChP zUK`x%B+bz-jRnn(R`XAyF)y=4b*%UOF?U(&Y_B@rO?XY7waKnK;l1ho=)B+HQam%a zoj_(rbkWOYYc>Tqk~)EwSf#c(!d_EjB@f zqV!rNJG^(heJ66R@N(;G%$U>^YpMX%i8EdtkmazH333vP)Ax&p}-U@0fYH?uHmU%j=f%j z<1|-Ix4Gd+T`c&K55pi0DVbfUykYz#A@DagUQ zGEty{DAVgUsp?ir52%ahwlxT9swD0(Vp=dxcKlcKqpv>GO#UV1x_!@t$OjuMPv(a? z7z5rjNCz{L!^>d8yB|P2Zvf&8RN^*%JuNBRYa&?zuVy9Q*L1TCjv1~b#si@rJW`zv zV^=DPo1?%RN*ZT7?K9goUs=q?cDze$A}U04c|S+UN*eq8^}j(^{r4f@D|CBR(9$FF zovIt?kTMpc$WMJi@6oauQRY4n@3ihKJyjpI=zAGDkaWdd-K1}+` z7T$a{tcGlg_U51Ar1@CkiH&ih+qig>D3I zF{)sbGvik#8Tv(&S)UK$UVzS=;+#(s^05Z_t)5)a4rvt?%Z$a)CP!i&8MVu_>g$HmKdM&bGv{4hX(uHk<+ z%Gu~El5zwDis3q}OE4zNee{ldG0KhvEp;N*H{nu_Ftj7U`>$%YJ_%KH9S!LN#$qJ} zejFu!P?H+1PlpLGk>O1CMN%rdolCm;HVni{fvEmb^)CT;Cwedu^`^@5pxG!J*M8wY zj8YvzpuOqPAHZO1lygK3R|PGqvM^l&K%gI%=7-h?A=ew_Pr(#W0%oT|+vg>III;;) zG3l#5=dw5n^u!HSx4O;1Gy8>Ie&KXL zR+yXp7UsVcwm?M8<~_l^%%od0*9Bd;+i`}Nz zW;oyWdW%<9n5a2tQs99Jrq@>40#5q`Cf-}=#7~nAt{dEPO1KLHle;lz+kziFz5n2x z0kkN{&Ul(7p;?50alPHHiivvgd|Lqu9Q&$le%XFFJDn%2z~J?&_A<=d(ykqwy)3Rtlgdwn*e3PL zhk`COWmz>LvnG;zjkSn&dws;@!lZ`#>_;^Adl!=e!*2*OI z*K575JrU+$!KjA|)IB$REa=5}p7H2(%VU^W>RAPFK)HrJDceFQ;6g8I^Q4F1dwh0o znqUV?Ei6UQJo5ra6@MSB380iNXL;@@KpV*Kz(xvN(qw$oPg%+-n{2oiSZCV^Q@-+E zQ!rUGQwa^x)yodv(r2K#CE?g%>!Q@Kn9I zF+c&lniR~f0A_jQSLuN4m{d41;GN-9_V_0fK>;Z?6ww~P#o3s8?Z;%R$Z;L;WRAPb zQrvk3khy19E11c4F}T)k0Oq9K3O9=iTc@RjJsO=&lh{#!P7i&vG92=s&TG4!@OTDM z?)pI#zrNNV=*$2^KhWzsIc!gsRPSJDx!tkJCI4u*sURkM#KDOXeJvdqg<)&WkqB6% z-qGeQz}d4p_W9MWFM$qb)P_V2H?7u7%auW*H>iffsSlE(#9OZi?^Y9vi>~h~DBdVK zw5M1Ux2s^WOIdBIq*fD&#ns9E9X>aBZHyxJU3Uo1dG$AgW9$Xyk!|>O~%=VoSsGPQL`Y}-DqTaLT z9%AKTW@|OLDB~)#egDOMVidN&PSG_J2zgLVY!YVn9R(N9pRG==sxj=#QXG1--uVHN zUUu`C!a#D)fFjYYX0wM+&Fzw4%9qyGVfNPPmf`2;kV&scTq?*W{o&5}sAqZ^t ztOpYN#(efc=g?e2F=Oy_4q@h)#rv`OiK2&EwQ}B}ho7)*w?5zBI*cG7DXX=Jy)Uuy zDKDoBoW%!6#3iq&8;xK3F@Ae0j_}lMb?zmqqN+J**rl=Um`RfLvYBz^%jeuTKjuTY z3U+%X=xR`n0cWxlGqk8_wCH>Te+WFMZvxRCRIxjO#SFjG07t|IE%T|FHZ&+nqYapS zn!a%I7--LYnSUN?6h9{O4vFjg231VLYyC_)ngrjoopqarDW@H@OmIq>g16_SNe`Qu zghRrTQ_3s;K*f|wAM5?PQDyH#SvI740;tSwM-1mrWC$R*ipFqumj-DKjs}! zWip)GIJ)j0fPXSAeLZv~$ibcRs_+=tvpKL6G##XK&ei}`rgY(6kvumX6=3tS(s==&}r$f%`eTG-T8x?;eCiud?Wi*nZ;uJJD#1Um!*VHb`+TYR{< z_xh^k@T(#W%lCL(=bz3VJGiUd2Soak|EGuKZid|R1 zk(kQ+yWmQ9H8JLRR94Xk6}7IsR6*kkXi;Dp?Zpf#ib+X)sCC`pTU=vB(bS00u=l5> zH73k6+>Y(R9GC1Ar^6~at6JZF{OmpR+m-M~yU{E!#F;-X(A7Md&9~l>NpX|rzXxGb zqH)h9FcMYc=Xg-{o+t9~*74 z8~X#V2#7rwd$J)#U(Bt7u4hfU!W^a#tp)5T1p3Y9c@NEtT1Z-9?oEDnQ)v5T8q@pe zv9T3W{m|!uMZCW9d(?AdzsdK$O5nBlL9?X(b$~!0Vmo|&x zTBa7P+gs=Nx&$ce(wM7s`1Thk20}Z+g4KYNV*Q?bV!WkXemdeuMh)C!bjLp6mxb7l zCCXDCWP4=e0$qlC@p%WD+0X$|^t238BTk-)I(OLe(ViQ^jsrHvg>3G|pFOYz zT{ZK2Gxu?bxA^B=%?>n8F26@V@R=>~%KEuj?1*dcKlwH@at|jM-J{=ig!aFe)jM;{ z-W#Nf$cgUqF)tqE2wbs63IO)$A~Q$-O}ON#n%~#S6z4vgAUFT3j~U}`^3T|+e%_XI zzpt5T+1IIW#r>MR3mfKnmg`oJ&XE7^b9)ctyTJ84Z@`7j(eVh%w_|j^tv{y-n_{lc zYydX?pET%*F14r|b3?oJ5t|d5VRON4?Sg zAjb_|svCNEp(mVACs4=APB*ZC;aD6QBN3?SBbuJ>w3_I-QamN2Mxc9w}<|2)!2~#9V^>FvGR}qIacP4<`K*LCss~8 z$x9M?p3JtFz=N$5t#_Cw{eMfI{RKwjA1Z+F><(DR2hzGpZ5C?;m?I0WrL~`3OEwX@ z+NF=uoj9pHcUMUngDk$Zc|c7HfzDv){Zqegd8{tCUjNUM=llLbA#($&KWYzYs6KTL z(3Vf|pua$;-9o^!cFhHWQ)GKn7z5PJJyPBUhv*Y3^rbvN1bDoixso_J03Vq=Lk5_3 zg8~1kO~(g*nf(DF(i+n+x)cV`nm?C>z2hbr94J;temF^gfXH~wYV8A9=G(xs#-RJ;bmrZ(cs5yHz`x9*kb_wK(mA{PsuJ00;K^rYC;G3y8nK;GGVf$h-#rb68hiofOxo%3jF4=z`@*XxJ5%18==~Cqtw0$62D@j`PqMY zC;ajHCR)e!^r;7#g>X1oVj}}2zP+&CQb`}_wBtxSi zFLdM|q2A|tH?A(7{!&cS1vF4VQp!;Qs2JtUbWYj_fRWL-LYxW)hVfPb6_JV{M!9R# zpNg0iQ^h%+!ta}t9t5GG#if;Tm>^>M^{o59_`>3lJ$$b2PZ}`dEnTjjSldX zaZw%ejR&NhFd^k+m21)Z-^vN|ALV2|bT=DPP9Cp8%84?hoGji4rI>y}BQg?57Sg-C z^6JQmUDi1SAbZK3{v1h^)c4XaS1uv#vHJ9Jf=z*WP*-CxHQ}g9bnvU*}`UG@-}a zN~F98U|)TrsJL;}6P)6arskeYudJ_x1Nm&Dzm}0Prr>JDVQwZrVa$Z`l%p_zR64Sv zdbHd8z$>XIXZD$nB7wy`aRT7MEo=ecphE~|(YnAUmAgemBP&L7gbW0n`|Yrbq;UXD zW;piC#n0$-Eitm3;tS?*H2x)?TTfZs6vI4l?neut2>_dYARb@{`vlC#YT`05%~Uod zwB*@&T3mUL-{Tfr;OA&K?7+lyW&%O5jCRg%LHDh=1dZ|DM+9t*ka>A-z8Me6cN}K+Qv-iG>jM^ zpcjd=P=vF!ob1&G{iv$AnpC`;0lbbBZ$i=KI(9npH=LC%;Ap_juiPP_osJRbalQPa zk0!4EC0-#~AIF$ydtI@gDvJ^$VG7EJf>NgGXG@>wFHCQ!u& zvo2W(aoOgBqDL+%=ZvYncc+^`Em3?f8rx|E$hAIjf+?4iw4H_`JpeVhe>c4I=^k*b zRT20NE|c^$>Ba~5QIXSd0pj9dztJ~H22Z(LS(}6U5huv=@HDVQ22-EyJKxLdmyQ*0 ziXMD_#jQ17<@gv>&DIr06J5H|=kVukoCz7st`m@=;_Tr}pnG)bV&N?`@5^F8sHlU` zsbJ|5i-VtYy5W+iC+^#QzyJS^f#T=$iOhmWoa8GZMT_a0al&>QMZr{MCHN?nt+E(n zk2wh{Zc;_2OWL^_Kid8+;nJ&QA!*8SCk%G+eytKXJnO{~UB&afXJ5cAf@4nTUgh=M z5J%{1qEjxs7QUuOM(H{jUR!C$aELkgoHX#c2B))gMZ-k#eH7q+ZIoC5qTfu^=h|jF zimO#u!leU3#`;cC#jEJq~0}@EAQmxcFW~=nM6yua*bgj+|Zc1++ z_a>hN;Sbm9_&eZ6H`QDkgsDaa)M3?mHJQ@@*M-A@{dK)emDv~Tnj64@Zqw?l@^qL; zOV=xX&6AJuUYCXVe=CI_Z$GHs_VJl%2wq<-$YlB}j^pUbHy?%-&PPK_o`bIa$?>qq z?>|~Ajh{s2#HVEaF+&=C%dctWisE(a$nw4Y3JF;Gin^=6R^UHnLfSjl5 zt!}!atTz8f>7x^kdt+BM6vdJ=#w`b4^is8bJJ!#1QYQ~ZcwPJ96lFw@n<6{v4PPJT zHQ1mo1~?5IQKW2?Zx@uK|aUrPr*8rIACjG7`O^oHG5 zT4OMio%Fsx)VcYfwGqKL+sW&vM-t4Ql0V-}fQ8k|eapxHvD_ybr$Ki3dVg8Rd)9|* zs$L&7i$7)=A`)ZvT2y6=MH;xiM=5s~``q~=h!B5xh`Dq8muvee?4|Y_9(AwbHtM`J zl7#5B_4Fw_H*AL`S?UvYhF*Mitkc)vdSxs<@b^Ty3uR9}BnV+~zRZeBx$gYnmx9*rK z*+d2bnaxN5PsWxwCe_OB>+XsDX3d*D8s37rYR8NIv3zo|2liVd`6pTkvdL4}^jfpn zZuchp6Q~?N!w1$PHWPQdP6AA(hq=#yJT@s%H5L9P{xE+w``E38_z)jR+odLk+JfFh z_9IU%>u3V!S2ChJPvtme$a<0zjIydmbB?Nm5l^ym*o3Zl=0^ANhCmaLo{0_9c7Qrq&we<%r`LE4i&!NN1a1ajlGItWeTDe<%IGXph|ScyzSvJ=?r5yW7udOD0FfHfIJKs9*~pSdEbqz}m10yZ*WpAIQ5YhRde2`HvPuHSJ$E z)@c=4mn{SQw9ZRbaFx;7^q~z)5Mf4Vqbc7FbOfA0v_KW|e(Z6PsKpO} zSo>l)C(Ef6Oz-@LPo|bxP~eMl))iLp@3tl0B`9@UtHa>E!;IT_Gk9R=JzfxiY;hS! zgboF1T#TaSrPwQ1LVyVwMEVN?yn9eb8`9MM;6xC~2_iTh5rIth{$kwpCg&oZBYTw1 zoq>R46AM2~Es0C+HaN@VdZeAzVSt(j(tN+)U)zTJe7KKjXAfYv*#Yp-LktNTf9=K3 zjp66oomc3b1H~NVX8abkGzz`)Zvb*q_yW-}B=&}7{Bje&+cj=;D-Oj|0f_m8bC>UUM`951_O0sd!kYyMcA=Z3>|IEz0!sV#Q;B{xvk95n zMgffZivHVv`pg_o9S|y8quI^uq&eF9YsUDHn(;LZ0!o+7dZ7d!mcwv$;*z1Heb)Nt z4g)i>E@!V2B{X2?WL@rWed}5m@6u-Gz5!mD#2Q3;X7gr!K&AV@#C4;vTIfQD_4ZYU zc!So1dIk}zF;(wMxXsNjWEj?PU(Juqd_13U>&|uqB)sTqJx0_9jA5+IyBnRuGLLY? zo9HC$$TxBAJie?0Itmd1KD)n=1BG-(Ey4}c z@eNZyrm7%(6r5*!fk@}@^029wqn{IoitV_+)1BV!s4%8aX=O6WxQ@Nx(GQH!Cm_KY zClp3vJX(nZ*7I}bTO{p8X*uauxJcEo9_Z={6jGmsI?oE}r^29vyq>YW^L1{oQ=u_k zY2zM&>YkSvA*&g##4cW|{O$syzOIA_UgnG2I3bRLzUO^?hSRNgygPUVddSo1ErIFA z#l4*#Pf+LEr#1Q!{%DmO-rG%df1J?8zB}~Sy^X(mug!JmII+!I^&z15MH{RUV?I&@ zqqc20mhgglh%K4XO>5|X)E>S_mjCxijKTz}`$zQ+ZrFvr^;H}VlBw|UPT;}sl{ z#oS2BiT5@`!r5&vX|iwQe7)NroptXBQ%I=U?U*iTI663z0~_%{h1~0l=n78eREiQ9 z&Eq|m#OkYHv=5--8;P@{zRC5Hg|U`59@S^Vo&{@-_j=qar_%Qn69^pnpbog@F(x=P z#^@e;iyQZxd3sg@T<;y<@U~67H>5k%@1fm2&>N}gIeMD&_LbRJY1PAuAG`gIMt*8( zu{;L8V7y$7OE`eD{!E{QM{;sfInVJEJ=^Z9gV^`yZT*iyaMe_HDHI=b34I zy-OVlf43AKfe`0>+R7?B>N^`0h83|Z<-7BKs={g4`o77GP|@2~CAZqi{>GpEUpZS@ zyECI~LU}=U`|MtZ+tmHwXnnBV5+2-?t~lSaQKWQpI`|Z80Vkx+?7Y>qVEAkT4&y4> zje${+{R2!_GP}|*){DO2D*Z^2w~HAU;9RNm!GFdM=|;3Ex~9tB`2BFvn9Ii2XbG}Z zKB5yVy1bG%M@>=%N*otrPysK8BwCx^%NNmQpbJXjP;uL__3Wo!yZ9hy-^D+FJ}@G& zakfE#QFEB$U{jdr&^%s8c_k}Vpi5{uc!MrX8V)On6`;(@-E(aom{otg=;UoS6qa`Wf;#Rgn?~8_|mM+{R{99!+woLpY<9)*ToCa zn9DzgdCim;<_~?|x_Q2p@AdDu34~8JfA|)MD%V*KE;ltl)H>8X|2vMTWpfXYXArLS zah-?BZt@1L$}>MtL3Q=bx=zdudHU<8d*!asAhY$&ukhNdI<}X^BUoZrI`&^Yzt*#H zV&p9jKid27qft|a0NB)AzWh7(8$8lq9{;6u#pm4KmC8q(nzqPOXX%?JQQ2xf3>iM+ z;QHBjG+|2O)b#f*hY7x?4Sr)a!oXaMl(!79UJ@9lPFl}U^D}0A`P!StE7toAb<+U* zgYc)OsQjuFaT+^ygX^G z;7Xr>@<%bxj(T)mliZK6D{E%-ckP93^3-M3D%XzK_qPtOcQ&TMeGyNd+48LaG@hw_ zlGW7w3}N|hmqEZvv9|8U_}DRb!9AjD4djNQ|IkEG#>#)*)VQWHVd{CyT-eIcv@BO~ z4%XgE#EC>Z=!#bhxA_uAiUAoY|EJn?N5p>Ar}xesbDgyPN@zpZ`P(N_rT(in&2fx< zD@eM#J5zKI8(^_ud*)vTiu|Y>5aD5QNkvPQDa+A7`=>U&_A2%8pDwd8rPTo-{w0ZNDzYM{9MKu$fgo+ULYFLyLrdpoF?>F8WjkWT5ou`p;uULVSSh;V)CPgxB!t zDC64jJvYsKo;Vd2&#*c zymApDAATbLt|OOwXuwIXukWu}vQnH;xttl!3vvw+I#7Fhpb?6>4|AgUE&QhKoA$Uo zFrL_U{E^V!cnnKS@Fj4NeN8<0R6Iy?^}_A4i30%AhV$=^F25;N4$dpQAG0h6g9F1a zE(|p{tWPlx_m}Tze|Dg+9_MQPDG4k`pZF}hd#a!q1X85e$5c%$mS`=&K|giMBk(c& zgwmSj*^`$yYCDql4xD{u34yh~&PB#M^@EjhGp+6_i$BLQ=RhqmkHvi+%jXM}g zsY}sa2Ck7%2>N$KJAfP;IuBez@)_0;H^CY%Al0jw*WL~bj&l+Lq{%esIR4A4=! zB7%#0KvF^QoCNH2%tFxNf9W6eMyy`D)E@nryMQp#}vbYFOy_t0kLe- zx5og$1L+_}|ItA#r0Ex6nw6tB^8TfR2>)9L>4}uF+s6O1+{lqVLfAVPQ!-7shX9<* zexFTbHLR}JFwr`%O#+wrndmQuU82A}T=bdfbAMn=UZhVw6WQ!pkxjm&tS3$8=@X*? z%Bo@fzhYjiiu+(qECAXH`s)kQ1_d_xnh7guN};#^NH8sLumP3<=JjJNXC7Vnx|*Ujty1 z)5hR%<`)53q7Uk<$5XyKWZG1M%X}Q3XN@Nj zpIZmtC6)P;-yGUf(*3i-@$DqX84nN#1RVK2RNiu)GH{~(nHNy^GjwNrQL@lptnP`(&BT!HMfsPzCv8lEJiB(IVC9B zB+8frOb|l=mh~17lrA8o)X5lO%|{nPU`(^WWU4eyVqb!IQDK@BO}$JeL-&Y zF%B5*>AP$Y03!_U34>>Tg;4C7Zj1To#(JPE1L(QU&(E8CBEh zA4?70Di!0bGCXzqWk%jsnXF0GY3u%%S#TipAC7v2IWN}`Qd&`}@zJA8TC(JyoEM55YZ zrrtJ>Iv4fONTSpGFBCo*7W}yBhLyASUF3^RHuf65GzsO%=c-l@QqF+RbWIx$o%k#C z5$#2ZJIkkcSTxSTlJ`<+-$ONS#-0vdNz<$p6SCr6|ISXnlx2SfFC*rc(-wNn_*U_r z;Gw6Yg0#^EwJX;Hx}gnC$0N<*JoC7~XWwo&x5JEkF9mE;V3P2ZiLrSXwh+UCl`@F> zR&KuEi9_sL6V6;Omq3_4+cNj5hD)6Z4Tz6#Pu4%Srf{qSZs*29%yne5(rFmcA$6WN zVB_Lic`-t`hN?Dtf3KhWmwb`g7kn4?!46fSlB7L{j0 zdhPoLGur3W&gm)^p#4J0A|ES>5DXmp{sKf_t3Q7)eDaF7!9A{v?^^EJyp3$Lb*VS% zq>k@BTU{AVhq=VN2mGCGr|nA}54q#SdRRL{RCMG@guXKmf7%XS5<#a;@houfX^gy3 zp}S=EY=xpv1VIo_EE8>6rOcbvEoZqw+8Zt^t@|I5GuAW_%ZxGOw059KuU5#lr z2t8dBgjOvxdM`j}d}VaG{<5Cf+mlTK`+qR5XF8naNVhVdk_1xgu8Az#_5_Di`d)8} z+X^+7)yuy%9MBT=%B@)zMxR0klbEY~v^pw_G{o;17S=v=VxAl=eaL zMEg3*=?nAn(Q2)WCd_QoQuKifqEAS_O&n@4`|w#qubf~WO@HInRnTmyqM`XSC5ufp zVsA^il=E{X;f`E4m*DBJ3n#19dGaD0jLC^MvhQYW` zuRm?vG|U^SBSc=$Kj2sD@;ooiz*wnl@6XK^2jRPEkKNphe{H*~?oy7z=ec-C1K^re z1S|}eqxyA|3Lj%L12pkDM_?ekjGrzizp{EgM9W_N<*q_hW*1rsXZd404RqA6VRb09 zE_W4mW%fClFv^d}LxxcZa!BP=gt|G#Y?Di4MWKc-Og>l&az6T%qsW@q5cA%^w#IKh zbbftww!4ZwDR7)kbY>ISERMFw@wcWy&PCv|yUN7R7^fg9nq%;yi%K=5CdbF_phb76 zE)Kns%Cb>cR|2M?bW`kx^%1PTUtCxvZ;`tP&m|RzUZz{e84f10uyn6?}13!I!7!@iLoUMtZ_b9%xCC zJ(@qs7cN=~A_}(f8&nb6O41x!6q-}($Vu9w!)jxby@=XSUA#3;uQON*Y7Do@rtpco zH&~f;X@V1uu&vRQw=2#FGQPpxq$^lT9|&EY_GCelH^Zz{g81{Cl2U_NwE=gw>9Vzc_|d=&nZS54I)BwMxEaQKI(^!V z<2GN0jFZY^k0c%=5U9#Hs}5F)B}cG{ChsXn9(n4*BA}82God+BJSkD9DiuD)X^+X! z50a7b`9mozh`+vlQ(S_a z$A~tU2%Uxy5eTZpy>#T-Vjy(HFex5Vymz^3sF;7E>SDM(6;o5}wB!irlc0k|ry2^} ziBxn%%9~587%q;x7k5sE0*4kdDeUDkR05s}lPZQEh5~C4dAu8GEEZ6G59Pd8?jVTN zaYP(0hD(h?i8gS=4z6p5$@b%zW^ip#Ij4(pPyMjamZm<*L7j<;fePJz;3SFbqcXU` zs7%^R*4V6eUc&)PeEp6~H$S&w=@t1{PKdS zI)hWn&HR;nwdzE$x4UhrB#yV3V<0qX|1aR1b(xiB`dp|~8IYplT6RDKROWpoY)~k} zOxJW*kp~`4&MFW$*}tB){@sMg(9F}SgloB~#E&Lsqx>HS)>!MJI-6>yOSps*Y+F5H zgTJn^oVf6;n;*15yW${T4pDSaN)uM};8Sz;sEpk2p(}|+ZFk`f#dX{A97=m(QXf`| zpF`#4V)&k2Xz9s}6C4bT*ERFy^piTtLOTGTt?iQ^nKB9>k5>(FIZ;BV&cp*|@gN(~ zo_M06&OEf9Wp=&E2t2aWK=i72Rshe$QN0pGYFPE87zVpe9g7g)wwz8@3)>%7PwtDq zs`W^8-P}DcF)&FahLUw2E9#|bfw6@foq4=odClwBgNBtSyK6OG3ZR-s7Au_{t>DW_ zXQb;`hgZO1A(_?-ndPt35yXZ(ed8P;|3Fv%qMgOm_^o`DzkKmip1voii&$BB=Vs*_Y^9%#Y<%;F74|;%IWXnOZ?BL+i#i-RA==)`st-YrpD(B0oK7LC~KsN zt4hHr?TZdLp~>Lcf-I0E4&yjshI?&NmIbrz12GkDmdAG^J0#>8%n#?X(vD|)0jV($ z)xnKZWgj~51{n`?Jc_4tl5~w?+tszrz*NZDG1S)u%m1Oy@3{5JCvAldtF`^`_qUvVOcCJ~&O~Po5m$9DAUe9eW;aitCy4^6Hwiv(f9)%xN z+^(Oo)MJYqxYuhh43q}ObnMQ}so z$)@$-OXK=!LXK-rIDyL9aN{w{DPlBPRdm3jQ(ZN{p-%4-G>NnZ`D^p4XQdI zYqaS_vPdf5V9t+#bm|~WoRgQu73~$Hsn{#~ppzCWQha{orFLT=*gO8Kr&o&}U;{tY zXF2?92;qO@Xsh{W#!FIVQaU}!u;V4PprO78jN40%!(Uj@XYO z$Tu&FbeANxSoQX|{bZPWTE(_DWL{{O{_!kmHzHUQdZ5j%gfroUWfrWEGb-1K%Zj?RRK@+I9_oG*@=g zCr#t+G&G;$*d>uV+kGKsOknYi*96Z{T>OJ4bw@!RKP;9j7skR9sq=DBNK1OE`nO4` zc?d=d88~{4MQl0y_sw^H>hIe{ zzfws;fJH9?2I&Y2s0ad@AXQO=(u;zMfE0riL0agc2dPp6NE4AF(n~1P!GK5=1yK}5 zi4{H>o@pV;bgc9S!cVmX~__bFTk>6F^IsdGET!Xfr@fd_&4Y>MB~slG zcXq7Wf3ChfUMK75);*T3=C}a{W*JmpB^;}q`DRAGv37lTATPHT4_f*oQ&A@YC zlaCzR6Far%Aed0dIvOgQO@~nmQcpg+V#fRlrqG3$+sR?+O0}B?p|a^=!~3-kvq7Xe z;}_M!she&j?e9vKk{TUH!j`3!?hQ^e!%upkRuET zS7iQo9YjA~P(^4b>&qpohjzr(vfFO0`GE!(|(aLOJ6s+9(+iDASzY%Mn z!j$^$zx6{oSB;*;>8)x)F?Udfad5VSM>_40iEwk``zWWckFrva%{@u_9h{}pQm^L{ zpRVdijpS1Dwtnn>%l^0j*l@-`J-=)};w#rhRV^P~ZAb@E{QGg>2IItS#M{&Ug_pvn z5|O_-wm9-eS9??L|5vZ$0+cxa{@*9gO8?dCxT5FP9Pc^mT4PQ1l>E=cc{opz-yI6gCv$_DdgKNbBai6sT<@0iE|@CAv_imuq=zg&11w#kO9}uF z?IkMw9cLo`v|g^bGKdB6)9ADOJ*|%+$l&<%e8{8zw9tIve~;j+}xW=T{a4A{xU3>W}U|J|#Khw%h`F)K5D*PG2?c<@`tR zpl-lZJ6D>7`ThdWhq+Fp7+UQcQm3d)g`PWK!xcaRphT*eV54AgxCM2D zxGe)vO<>jr7~7dU&_v}`q$--UEDjQdIsTL&fOf_GU-|@^20YGEamY9Ou6z|_S|a{D z?;(oe9ruz1?q4Ujpw2YW523p2Edf>Edb&#C6#oYhW==mF2e6mkofvhbW{$$s6zG8* z%so`y!u-?!Qa{cm-)7ku65c-Ym`2OJNYsfPou$I_qT zVfvy}O*vqf5iW2_28cidv+3VS?nol=G#%HMPSR0p|M4c>s`LB|Jmk+6;4G(%T{rR{ z0OY3J)o%-3{{SFX@-lmH9_rr*RuM^QXe>gL9(@D@kUtRHKhJ+)6gvi5k+zjRx4(`a ztpQiVeqpY@BcXv`#A42LTaLPeed?t1(&-2OLjpN7TWc}4rSh7I_k8n;;6H+u&cp$u%2hmChXn%Ql-g<(!za$(v6$20`d4RI9&oji*52QL1 zAj$(LYWq|@NO6jEqEz%;=B&&<_$3sPKazlhPYY7J^7IMNI;;Su2y09uIh|Husa|Kt znp$7RV?>De(04E~T8c(UaSSi=;exWijUMY|5;G|vGO$uegzDClG+(AbMhpNc$(wt1<+aY-jx#q zG|~HWWnub80@dr6m1l;|wrnW^$J*vK(e(sg+*Rqicsz71vdfi#1cbgj86Q9Ys5K#d zMIdlU-v&L&lf4#Mbn|+j^w}@t5q&EHbShF=@;d$1k?5i)%yGHZwPNoz>HJTo|5qo@ z4{v6TyjVT9*}_VC=v#hz@q_JVt9nPQ|KpF`4yrx8MJ$6O>v4-i(<|-o@{MF5#RFYI z#laMMIMp4g`|OJ)-bO2*;_MD5n7$U-sy%gLke_-Q*$sD5H4GKbJ?l5y4L1Y(e_`yC zbgvS)+19mAX7>~LDI_txn=`FREWh7(dq8BzX%M7lcExP;A_3ziy#r9m>QPA{C(#@lj;%N%dU?i^J$F>AoethF3 zXT}Z4Ytp$$g-0e_F?x4+Kb;C+mqLsBf4AnBi07MXmN)wuD^#rNb|x}oM2OC|D>hA$ zSnr-He|T8Od%g?i8?c3qAVejvm0J665J{ej#(uLhH&HnKWeRY1GSw~?uS zjo&#S&r!fRRKwz=1Clf)H~V;yc(g&+LgY{ny7b}c;!n&dkF?*F6QMC}l@4yfeZ=t% zFQulAq&+8G0Ez8u*NdO#f4;$?jd#hu#Y_@&rd)NLUyD;erq1{feQ0ON#rj;aJTD^J zPN%|5BL+3vT|nMoOz+*@d%gJF=K{xr(ul&d+voU`;zR^=UYi;A);J&cv4Qrj58c<` zh+6h8SnyqBmrm5(a`Y`g+lleI`X*tjBb1Lyl*di?6x|T;I6J%Z;iz9Anx^~1aRYee znB`V{mrOf`vJ)0(7|pwgc{uege(Js!H1V$Bya)&EZNT2aLx$sU`R0}+zOiUc zfzHynMp(v%z`BRNWCKi zE^SS>bx!`(?C4YKy1meK^P9x0Ki!{}ejhX};1}TZKZ3cmBY@TxR3f+6iFEx~UAgf# zOQa*eKoaI*z56TUp}{WpUg0kV_ik>@ozS;@4oIez@@!;z?9b;X>Kym1e73P`%U$dG z>u6N;$&TNnPBnDLNQ>&3B6!h#Mp~c(q-P-3W~hA9Jkq?tEE{-f zq$NHZE)OMK_rmLiouTISx2y=nGRA-!F=XZTolP0x_xKK8RaXekUB-O!kL+IMP;QPK z#agBk}Qyze_)frRxoX%1ww6GZXqnvEd$5v z0cj9GW!hwO%EiD86gmzK2~iV*}H2)uJO!vSCzopz7UL%oQ)1AL=W9Eg<`xNlcIy7_yyZ z9Z1X50%P2=92GNBk>uIJDTTk~v!$$!DMEv`$}mFrAj>9R24q-UUR8vY@vD1lKNz3}WM$So3cGSY0cE z6EXd!>@B6#v%3uL8VYs?;I^m3BIvj|q9j`t2e~0?s+qzZS&5Xq2?em9NL7{Pngm_3 zQg}Y4BJOZ*;HVe(2L}Ir&PrAhq=)1I#qecJvMQEePPj6MRzw}txn{%B6gY{A3IVZMOk5p>vzx+M2jcQ55WtN# zb3};$i{y3zvBPxkS@NasT`IWFu1JaJ(ip~VIh&_I3y*YPBB~O4t1u;-{VF?KDdV`y z;u)Xd;c1pBy?+0J5;*>a=X)*w9`&DHOal<9#(+b1wg!kaV4z&dm@ES4b5%Fc`dT;P z{?WUhB}~{&8}lN6cq^4rC*bj!5;!&N-Yu5^m*NU8yO~i|pm!ulQqgwbwDU6U9_n?x zzQrxPn5~&VUX+|+d<7{Kd;dr=F3LpESvIgvx=j?iORuCqdJvEx zPkhX!7+aR%T1keVJeG4ssa{VTRBn45n3bBS1)kYY@z_Tz_oHs#_dl8N7{YN5ZZ~qw zB-x63Xo=px?tUjAA&VEx4O*z%tDWE7kGlN30UEM9+1&Ior@rWR!bWSY_FWjLlpgl6 z;Z%mJmwV%Zmc&!gY$>rJZ9j-juI)6r3_{g2hJ#w+yjhik9tw$xP$bJG-ix{!D~q>2 zw-(FXYC^Pk2Uj&fn~D#!`(!sCZE|{MtVW&?4~?7Yt99?Z6y4cc1qIm%*hd31be9wA ziuLRhL=o+}xQB!5lMclgjO&2DTpUmC3E%B5`_jAZElemka$O2OX=3?kckW4mPA_x~ z@SYMFpBN-hXe)i}AGre!xWXU2pNX?G_5^==&-({sM}9xTak5a8OIFZ}8G}l!-^8S$Tv$j!kNXOILGyG8f zOef?`5PZkh3$+jb)#F(uEiA%;U`k;mtAJTx(7XNPSM$3D_Rn4o>K@Ybi_`5uz`9Q7 z^Zn$Q^UHAk>o;#%bYf!MNk^q~qtmxnJ$&Q8~C3`QtmZ+Myda-E(Xa3l?#}=DEKo>+f4} z${SbDxrwa4s7Az{gbkxn*OApz?+K5q@^4{{Hu^=7h|d;j1s>oD(46i)`03PiW7oUp z*#ykz&&KFcHpnX!iQ41DAX9}je2*I4@ScIYz;1zg;ZHRwM?q52FEw^tdA4%<2% z732ycC^ue5%(#vEtkm|(K3_u?BPL`?@l`P)O&=xU!{ZHZyG1UL^ zI&?#kqBl!=!eC2girtt3gF7gBXWGegZ%lKJc)skr%P%z)Hqxwv`DVKBsaJ$~9=-I! z+WE3G`Ny9Oek(j6C;Amk96Xd;$gh@6LhXSP=Mp zlR}|k{_S<=k=cFuiap&vk$f6*#dM8o+s)5IoQR!|R;*W@A?R(?yL|iYn<;;}zwM`a zId`u(A^yvhp#>BjZ~yP3<9$*8lgUAwrbu0hWfu;GVLoX+dj6nLFZs1PWO6(z8_U)7 z`S4=skxS1R*ayLOK4#{*D50RSDQP&9iMko3ba*@N2@$T3(b#hs6-@<3P5GkqqX3{> z3=<-=b#MY1j?9a?67==e0XQs&raRnJ^Qw!A;QXm5&1{YcgUj%HC<6I+^$#06MH&r< z1E$OlZ9=<`V-D{4Vo>ml53_?)R}&wd&T7 zrIo?7{g=k=FE96w?m3Y;G^SaPgi#b5jsS>(@OPNZUE8Rt0xWRfDura(GzGv$(brE> z386r!F1q9TP{8E3u$X?j34rtcy!g#@1xp9p+Ar*ju9jx#q9t*05F z=X~O&qSAYoN#kr@rVxT;l*R`mr-M8&*ZMgVSYFmklKeJ6lt!TVh{8xN1c2>Fk^cca z;Es1V3>Dv|n=54{UO+lg`OFNl4FIyyQ5D2arLRca-x0Zm!yw~oPwVLi8-TJJU;Iz$ zO=HO6$B$kwyW)V(KMWxq_`~`@zJSc?VdPtB1ZG3C(kdg}^7>lo(I=5O91IWypmX*g z0&qbZEJ5WgKt%GX`>Kx;AnLewj93fS5(!L!-T@f5btFqQ#YBzu0I%MVN&2O{kBHlr zNyh@mU9a@xRg8;p4wwJLT_MRmFM$C}{8acI)G|m_K(4`<^033x$TD{S{*88&?$Pv$ zi)hD~Yd`3Q@YqXz3gi=tcz~0X0H~tV;U+FDIR1|z%Tq;@!W8h4J&XZPm=Xcp9*BRI zWG+{Hy6F2y9!bjD#=YQ!8LNYbFs2ifi{Dotd>cp4p9Ztep&ZAqtG?18U-83CaRNFb zx1Pd`_r0NzhzF*WNfabi0(M%ngeBop#4-hTgChWd3uitPc=g7Jr5v0HLUxDd_Z``RGJ14xAd*xp{GxE*UsBU;+%#k@@4 zfX&Q(6(gYMe#qnyx!@)McesdRYWV&6_AqhJGn2-pn9a|>H`JvL&|kxX-NaLGao@uM z%4mWN9FuPhzC)`0D+6TH|)Jp7E|7DDHAlTq% z1`PwXq=4mLqMh*^;VURYAY6;ED3l&Y5bKLQ&tB1cS(gl{9ybj+nX|tt8utT49>f~Q z4T9Da3G7u7ZUS-dW2g~~XTVw8vG6faA&vboslwDb<1f3HcsPQusMSdV8(@U^S{wUc zRFBKX|5iQNWA42Fsd`*K)s5J52+?kafFq1g?mx~e&l~kF!5R7+Ld%MSLnrg{luC#i zbvXxj*!+#Ek$@`sq}N?O;{DO`PLig3+l5U4NfW@VU!Din>1$E){t;S0rYYPo2lG10g-Wr7taJ7N0Hfrt;+eyT=`2 zSYtdQ2wrLQr~g>ejjxfR9EuzcWu!QxhSxzq4-aXVnLW*&|M4(jtm@+C@J#2gA2n32 z2aX)4XM4nc*8YE)GHm_%xHhTU!{zkC{OLqa3(TwbugR*D)ei962_I1aZBc=Dq2;I=VX1ZcMD}~`vfC*NRqa-SpU?c_oBbP@P z=l_%l87PEH7{Zbp^P?p57E@exgu$ont!!-Z0aJa%k;2Io5yYezo5@JFhr2sDzkFnJ5p zi%m{V^>mg-yKdE&M7OB~tA=C!GKU(c>JUooz-P?G>Ep#rvAl!VenWh7!_Edf|j~?UxrbIh2gCmo z_}q9Fv(a(BCmAMB+qH69aNN$Ew|q9#z0+Bo$gd{SNyQzcm0IqW-M1v|wyQ>*Sokd{ABytiQPXxv@zczZhxH#`yHkJoeA3`Os#^- z4S**y`_ybdawqndLNAi08qQ;^nQsX{W^_=Ym&%^wJDM#XiJB5pAMt*s%p$0W12f1^k@Zzcg$7i(_PT~e)BlRmpNkl)B zEp4wy5Qwg+uL)K%;JTX8=@IG>&S9K==$s~~R_k@qRg+?gTq=vI^2U-_(QYELI~3(U z)u7G`vCs&NES>7peCR6(eU70*RHZukX?)U{hnun5SKN4a9l4oTsJa6*twR)j;W&jf zjvS*nT!koPU97H#1vx?LbYPxws6sC$K_R}17k&R$d_{#QWPL~|#6!!D>X?KHtH_>r zC!&vHZ&oCzHHm3cv8oMGN`%Bq&0-0w*E^eq|1#js<%va2V&;^9!@Iv%bL zEs~wfN`k|93g0C?j#c-k#2s!H^QNNT8;2vpc|@0dJl@b&L{hrSMbqdvJ)>?bR-}y7 z1qsBSS~w567%^~BA4HuiZtet;7Q-1R?p1sJ4|Sm6E~qU<3*Wha&7#RSal)AOikX@ zfFoYm%1n)J{~IP@3O+HE?duA?DB-!xAhXO{TKozn+&pYQ-%9B73a0uqOC(&K<`{VU ztp)_j+K6V@nqLdH2sNt6j%yUFVMb@gscR6Ta^_qX^iZ%CtA)vw5|bRnmsBs85UZJt zDlI_;pNzDj6JC*M*`v8f^}x)z;HvNh)1lm-hrxVNYdw=ZyGqfr%77cL5yNpR&^mV|chlrYM@eh*X92&H?5W#&h(VQgT=90qO50^frfKMIq zld5GXwX$os@eaRmm9=Fss45MFB!lH?OspySx;GWlp*f#Z(?V|YEipJB)bcD+(Y#Dl z5i!V*!~+$NymuY*Q-2hcL*oK!*gb((vJ^Pa7kJM7N^B8amR*VZQdxW-p4<9QKN>PU z3L9zm43s_dx*3Q|WI?VYWH8n|u0t^)M49M8=#uY%_ff{MY89^^6kuh7Al8C};io4oqnJ8Ef3Oj{QU7 zTdl>{L*_LBvmt^W6hi&|Py-DVMldmX1pF$S2P#r{6SHN*`4(>C)j+h>hm4?!>=cxX z3o&Czu%^Ee8aG9nQ%h>!DOJtyG9oQ@;bo$oicO2}uUgB)r*`SnuUWB!_ z&0G1Hjkg*lWVn=D2^w|5Ac{ zOP+R9kXuXD#G{lpv1qWV)GnC^ETL+H#`{~PwbI5blM-@m=q((L?ip=C`F3_Kdt1c@ z=!`16WKm*Tk2dH;Yf7=n;#+I9G(oWvB3%PppJ;>0ORXuV+wSeow1?U?sM{vfw%ZWP z9Dn0-64$cxQFqM~I$@5(w&Lif}bOuRZa-?wpIn+fLA-Xm_X}ElSE$}%dO&$`K)mZyr=tr( z8>%F(p&i#gvDv}2W;=znzRvcG3j9wlJcxO)r@h4@wX>}^g6JQe77hP0QIz+*+YPqy z;3*=Un}_gB-Z}=Riak|r2N#*t=VB&drgd~W8XLuKi;rga@N6^3|!Dfnf17b|$qA|er~YiHp)BDuwLH@{oq(A?(f#Nzzx zL29@Qx4WF$#fs=7CAtHJ9ju&X9#ZyvUH*a+W9E=Ds8Kr~=MdSD6c#aN6F4(`qFLB9 zU_o95Y+Wqa7%(}i>?2REud5KP@U-vW;A8)ugDRB6{o7;sPHsVeBO$9CJn2wj@aLz7QgnJl}i7OPo2k ztP7TGmUe_Jy==R^KJemalDdKFL{hB!3D2>nw($#>sp0`Hzk{ZwkAurwgEL(1=mXFy z;&QC`#BkngSFPeoXDakl>BiL`*ft@=oIVIeuD*w&%8s9>9Ec$b&C?n|9h$ z>v_~_Uye@Ppqzczp9|YI9#Y>u`fdsp!yKfQE&JNs56V(FDO zN0I@fV`jBZme?*aw|-FfV;uL$weqBhrkR{n+}VLoIYrzyn+|WYVD+47BP^d=2mV=b zwe`5k%ayWpgkpW>snxqB#K9uX2ySu4=bipXyNyLwt-+6XH{5lSHHm6kX812 zr&Cz&T&r+Rv^cr36Xg=U%f5kl;ikdFpgL5Fh>b^Hd0OpRUf@G5{7t&iwytRR{byUl z@$vbXN;s;M->VlR&t6}7?xs!nNIvLqpt?Tc@KuOhBGD#xkND<&wD$+Y?+>cr=9gYn zjl$F=vx1!PLi8oA8qpeH&4y=P9Qcs#P$$d&No^6HW5PNw{#@ASQr?*vRKzL7{F*zO zEz8`@h>?c)XaVKtmC!#~DF1u(4c@2CIpG+2!gg+@=#nGi!o#PPzc=$PHOo@JnLiYb zR{ho1C_G7l=Os@;&(sh0ZY31L&OLp%un!}@v{iZ#G!)rs-3vrBVLhy9iV#i|crk`@ z$%8KS9De=qf-UR@PgHrpRzHK$8k>c?OwF&*?^2Zex!iM&9HPKascO+l5Mf^X!7+x9 zO>oQI_ujA{?uw{6t6CXD{%_IoofW;9@68opS?X1isd!H|zvzY4 zf1=}gnIZaxxPA2p9*>P9wG1ot@EptPY&L^Bw2yczNB!;jFnbrst>?+p&k>^SSpPyr$6n!+XD= zGIzc-G)csHf1b^^)f!h`Z*upOiTaRT$rHT-rRpVKc@AB2J7<4-IHzilud6x|dgDY4 zM4Tce?6)W>kDMR1Sw5_vVgB~k;_dFxsgAJNYW8i?7u4FsM=|g} zjpzTj>A?RPzo31L|1{}Okv@=u+4bx_VtTPBOm)}!zvjv1=c0z-g#8st#H>O^DYN3Z zDs*@_f=0gTdS>_;bnd<`=IV}y0RS9N?C~bl9uP$H(d(-jD!Qi*BdNe6!XwgoQ);Ok zf91dOWJyzz$|4{V$9>Xt>lLi!kc!k6$&g2s7bdQ6H;6|7A{4eMmhHxnLFy@`tU-V3 z_!vXqPIruS0EURb9>!vLJg z2t|CW+udWVyLuu>7f2MHRk+X@{_Z?LJ;c5wZ8G#=`=K`bS@Fdmt^m<{RM2%P93vO- z?8Im@FI5x{dvq39u{lIP!uR(|f>es>A-cvL{7qZ{N)2N|NN>nsX)(p=nMCL34JN=b z1!NpxtSN9o4*1Ssoj*EdHKXzShXH5`=c`z{W2&(xkP=KIJsqK_{4+u(U+(Y#>CFT^#63_+9xtDrQ?*9AY#Ayi0 z_~<4KD783f(KG)Wl0nJ-Pb8xa*YZ!oBZ!tA0&o|U@!&VQPO;F1i#yV} z0qfnVDwgK+M{(4obtP5-LhTR$Tgk9ak%Jq0l8>nZz;db-&oPa#YgM1N-!U%rH4?qt z-O7nQ$(ENmtQ3PYNOv|koA2V!WYcQ}k@hU@Q%5_hXC^W+{K|mwQP#0T04w^l^rij& z4y#gHjzvXQH~##9CwY~&*i0+l0`A`!X(b*|Wb)|m2)(J%1LUWmvN?Tfzk9K`O-p~z zZtuA|98VuN_xEF${^pfyy*D^_Ab3LPr_dlVL+}9jwr6tTtT1&-!Yw#T$wG~lMHS}N z=f~fT)_bW20O``QLB}$P-(g*qj-U5_Bk#FYEpu7N0BLOgX7o8&1UUE7?8u z==h}fjfhvAdy7=Jcrg1&dwI4wa2Upc#GR9&KPC`kA0A;&=8*~27yvh{U$G~Zs&Ac$ zl{|ik9>^NPYK}^oA`Lnse9zJXMy1mpkf=ze6K_&2d98gwknO4>QWg1f7Ya4Q7`h&yIGP>K%G=k_S#`JHYjmL1Oc#$!T^Ikk|+Si2Ko9MN9F zS;NVMvC=_L%(BuAy;lM~Er)kJKLX`4G@Wz|tP9(xgmNP7|Mhj3r&Xda5=KB;qv4tU zTu}iiE>3HL=2*&L23TjVg6Hz$hf4JKU#ox`OZol z!7u**%9DqGN&?*MLz<*`c-lUZLqBS~K6X2zt)%&E6~a*wAeCTkje@v1`T3%ydBcN% zD~%`s)+KuUDA}u;YA6-K0#vS+^wuUx>il#JKjd3tb@il?q%r{$%nW$Ew?H3VLFS5~ zpAj?FBq{BDS$PJXDLIkD)ryT9&GM+6-(A(+I8n(Gsw4?MMFHL7S_H*awBafzRrM4Y z8)E%s_vqijUTlH)>Uh~*ejyC%%w!^l`+f0v&Y5ot>J)tLJuLwtV-(|H?y8mb(o;?) za}{OPw+81l#`*^VMcG>+ji}qnn&Ed(ewx*@h(u(wu|L)w5x1#1 z&*M}Cj(ZR=_XLLb+B!z$dM8@QNEIq$SM0}`*laVLP z2~$SCw?x%yP_b4UVDd(q_=v~TJ#KDf+_q=vIr(}b^qUuI=3n<=J#=sUHIAIz3_Th) z)g5jtEOOQD0%mIvp4AwXi^K@+=f=;N|i((;3w)N9j-TjH}X z{iP?wCHD!prZSyiZmh+si%|l1il2O(%?H}k`wvgozR@?k!DpPZ zV^KLk+oy_?OZu%PfB44p0nQb+i;K~v^FmV6?ZaGg^!iaV^}d@VP%du-gbBWm2CC%*f4o)7t@DQu=h1^Tq_ zh*dYg1^;YBRVq2S^ZbxMZ>|5u!4Sg;w9nC)`5sgRE5fDX z7Nj`v*7|tRe8gD+-mZc3=P?Vy5wPr_puyOXIv!cT4K=tIDo#gMC`jx!BX(S5pnRA% zOLHk#(NMk3DG(In66Zaz*Zo?E$E@%Vm)L@eTRW-IT>84#1L92v_Fk2b`F0fC?Z5GG z@aB#ahl7Yd&j6;$ns7N2<{J}YxQ|l_i0#_qkA@b%jS~&|5E)sC9I-D^keOe>U4|UJn%wo_XNPF({H8(|C)=F=pCT=5a-GI4Qu1o?LiR*Fcr}wIcCO zb|hD+3RF)1*_`6kzc(9*+f|5@UGhX$dKg9oaa#m`nxX3!sf^HLd7d~s8>g0+skqQN z5S7t}#i)+{RIM+;e$7FKeDQK|{4*7Io;JIwtSQX%A=E4HAa<8AkB+7VU6bi2!;3Y~ zD7eMzRGN5h#auAZg<@W*p|ts8ZXU`Na|?w5CX8g0&RL{FW5?FU#tG3fjuopwweegR znNdvU`ztavltgDO@VjG}tJ~ETjDKmlO0`Iq&Cp(`s4Z-j1%>aTjM#v?C!rZB{y2+^ z^0Y`r9mFzE`fPf;t4uc0DZvElCuiC_Q^m=l8Ez_Y63SOG(5^Wq|E>xG!VIX~4y7tz ztaCzKqpCz{4;3@zMRE~pcOT6OyJPPzH+l3}-b$8AGt)^vPOG2B45&S4fcJsOXBxlUc zZsH_QJptoHM3F#*Y%Rje7`LQgmAB>lOw?|*h&zvhR)ea{R5Xo>tt8+l37pB)f93)W z7@QN87P!NiE*1*SbL3+RygjPL(x*TfTX2rb{oc`kl2ts(#>*(->*=_|r*PR!?9q5^ zG6ADAToS#6$p&#Xj`-(<1h>1vzX|xze|TkNG=Xz`TMv4xscb~d$w6-jNupw@Bh$CI zO5q}3;Fp!kkZNV9ZWtFE5GR1LtTNAIWe|`-sznI(BmG;`T_Fp0Y$Hu*zEEE(fZL3^_~BbZ2D3fzT>ZK;DQ%9Vw!+^G;JL*zXE4LiMTV-F9d4;`(ir?p<*HdK~XbE#BCdCl^2nU89fN+lCEJojjx4=uRg$FM$qxHO$BHXnNU*~@7aeW&)^ z$lmu1@AG?r{R#CZCP_B#GX1d)hdCRaf*y^?UX!Kdi(S8EIp_U7>&}(^V0LWdJ}vOn zX{%E$9PSG@)xeu}N7DUDRiuA6AxM#E?F_@>H2=5tVeT>{LV&Yq8vjhQrglRJ^s44~ zFH{jcVb{Dviq#jbU9rC7=O*LTOfeZrr$I}Fbl7%IBYdJD(7D-LyD_92nMiGtfr$7@ zD}k*Ht*RvA-GIv`nLX~AV-+nYDpI8OgNs8}^ItPxd}xP}{W^a~`?Pe>+_K*9inJh7 z-ZmE=@9t3(L5H*=~h`Lef&l3yxql zBJ+ke$kFU=Q^n+rV{bV=uQWMH(}JESr5Y3=DOz9 zyJbDH`sZ@J6br(Sgm_??d)HewW`zMeuc3t=!{Yc3HyI6bQvIo$%ACw?qxv{#A9keo zo^caYrxq0HyC2_b;34Bes51+un~MV#ah+$C!KYy1>pcJ@z~e>lUftidP^Pl|zBdG_ z5`#VHVwITe{+LpgBGrhKBL%!HF5h4ucsEuX9Hf@h%dPrhyC7PmEq>9eE7~Hs7R#iz zbWWG3^wZl~uF1S-4;*2XuE|I$tG!vdF+Mn}L=$9**o;)Fm5T3xF-EAaGOu5Z&A;ZbXW1Xt8KpX<)(5%mIB^#|7}U@jzu($$r!>7h(SC#V zbb|mrMV;Gb7L0-CWpg1M+HvbC>hF6p4Rp=O1!m$v5Pe)QB!_Hj z)7;klQ|#$C(+I=KiR|bUfxNmiZBKEoGToz0;oa)Y7qbJGcgDN+gB_#ei}7(kaN`Cb z_ISvhJFXGAr2`y0LvtfzFM@J+b8Wg}x(xECF5m643h2^lo4lsQ9PntG4vuab8aQ7~ z&rq0vhx5b^cG!Nh$r~6wpbL5bEwA=PxS|VWYr}!W$XDwTDzRO+JY`bBX>S#XZt4z( z91-GlUPkzE&=?E|nQ2pKln2wca266)yS9UE_9H*ut8}?E<*C>nH+ue3&oI?P=4;;Q zJK^~(2V04X;lv)Eip74zp6EiWpkw0C?~U#K3pN)TEtI|xUIbyE*83yCDS47z1XoPtx!+V z`WP*Oe5jq$Ifne4WG50ba_wxq63~%hpfO|lsB=2@@lU&}2&8IF)duP`r1-u4Wf;AC4nu7zdp`B+Kk}8F@?Xh^!w}!c``=fx4S+0;{g?Zs3Uy3 z^C7bxG0^#id=b8&%kO6B{&V;27yP;5!#2Xd=?_F6&h3z{lSJHh%rNq`uVfd6=P2+_ z%=b(QG->Ix@?M~B|AwIr&6NRv;4nMMgdIHbgE@*MQC^~73R}2wpi{1dka#Yh`!2l~ zc*>|eTbR}7iLhn=3|HY_VwYDP|Dis?b@SY&!HLJFwTQsNOuvbrgf-i%k9hnUFK(Sz zaMxI$fT*xq`t5_@JvwZD{B?X5EJ*d+O&R`GXd;5}H#t67Wqju_~b0tF)#FSSv zKb(3%6+?zHIHA*W zrQ7&WN5rSyU;k_4SwDV5+16gT>Kre(tWGA`TW;!D{QqM-t8iUxrzKs;7Dh|H2qx>v zm}LDA?%w;W$u>~eeA5dFc>_vELN9^_1f(empnxIKP(&=4$+yp$efB!DXRY~Rewq0j@~*7sxu5&Ku5C$w;Yy>k z57Qhn{zsl%BmVo{{=a6lR7vL-4>f`SXfXgot2ptvooQ%U1K$B&ZFd%^xyxf=Bfmad zVT(bDF0Y~|syqIa_3DiP=k&Fk69xzNUU*bS_W#e$?=!d@U$fH%GP__Cd!tCF>@pqH z5(N0z2kt`G(RYFXlXV~vym<@JMS&meTkjE#a?Swseyuk={-TM0n~^zmZg<=D$$PQi zq(@~b?o>|*X)+1L%y{I0VWZbwPzN%Luq-1q&E8d2U-~%yCW4a2d2+u0kFuUNki7|V z*Tt1s$bH5NmU4ydNdTC8<0C)59l6&QR*|^&RVT#DzdZr|?gg6SIAu+QlJe!eZrq|g z_C!`zZ(s^^lVNQvF&boZ)pw0>YWE*xBslv5WRiH#!v|}>S0gok%K%UKWAkwC2*ve& zH-XN<=?P3Z;57C$T>aYssWklp&7u{cLs`a{+v#>`04Kw4oET7SmkDR~PzSGGra2!1 zNFK=&T*OTN)=)3OCJ12W5A1`BvZZ0FJZIa}IEqp%EciK$ioVDeXdtOXS#=1zmg9b# zgQmp1I#mu-e;N$oJfX`MQTfnB3Xi?{ zT%MzIjSiZFpjWU#paSLn4I{yDTs#a^8Ner~59kcaW#oN(CNQtiWnYmy-nt&pTNZPm z(jgX_I(C}BPS@w2*d=MYMjgF5FrzGK$RC{cUeNtz6`G&++ZhO0GNzk zovWg*@D0CZ&qERI1N_u$R-m5|?qVkZky%!6gcAb=`Z&vdpkWvSu-C=zQ07A%5#&8s zNVzf1wD{t_Vsm2|GR|(S`qr20!5X7^0H&i`^vq@Jr>bt4wsJVo0H(i|L#Q()dH6PX+wl}bDm+QGNI{k@5mS9usw6nsh7CNXcnfAI^*~q8`hl$?w~jQ zUcBk=uv%k_Y`jjnW8_MkfqMIY{_xn%m3GHpX73~b9ZqwHvSqd2KS4LYfTYg^RA+vL ze##eIs(QKU@9M1VvLk)KE^+mz*H-aeu??@Kp*h}$k&>-+g zy~oo+=xTNISq4kJCjk`<1(2Qhzj}*OvEOp9*VS*I)P5|vp4U*OO%N!P0H~Dch)c-v zX5fwH4i(~n+X=xnaFA|=RB^Hpm0o@qQhPA|M4?Ph?+V~bPE{X3}|DDWZzuq+2teSn#u45Vzqh~mL4ZP zd>#M{sUx(L5H9F!Bu`GiXg$j)M*bd_|JcolMW;kS8$0(SO#r=FGGJtg9zjN+(nSs= z?b-@Gy|}^SR^PVAV=22!bmUlG4cf3NwnczFJ}qQM1H$a>SXWG#T9eUuXOVHl#P}|2 zxjWz&8NKCC1a^LXk9+F-^i*_<_(_7yMSo4)w{W#yHdTObbo8>nLl)< zPdOzqycPH0#-XnejByl8X7MS^L@3HYe@T_88i1-@{e}v7L)|^bwU;N= z$~l#60v@0pZ08h#xPeZ^0MLHRkXzQKhDS;%19nO|L?Fq<56WPsZFgX`02cPrx^nEI z%YI1Xg(o_S$k42l?lO-x&WI}*8M867iN&&mKOaXWeaqIyGA+8bz%;Q= z)=Y0NKmuU9DRt08CmawhB&_~|C*07hN9VR1#3peX>0`GOQ64TS)fqm7C}aU8ylgWL z7gOw%4mH%p+Ls(9$_62Amjx`BfK)Z{Sw;9?0Y<^p@r9GXfh5spS6+(mdFx|5R9I zXW>&rI`_Ky%{Z|cI?&O7-fFMz?OpZusF?n{Sq#W?TPU zQ&fgwb;F9LlKxHTHW%am-M|2+kkP zH`G&Eye<{60XCl5glaimy}EX}q|CWWRs3~8bNkZhSo^U0KN0iRhre>ZSl&q~kl$Xi zQ_WrYM_hM9P?!j^Hs_Oov*FFm2snMkPKM>Rft8xTu!l8?b|9){5?K6)D~5cN*Gx!z zKW;s9Pv=gIK36xmf=li=s@(5Mx-%up31Gj?^C#9N3B8LMNQ#Ds<1MjP6UQ1R!Pt z=sr%u8V8{y1Xk$CxNbrK6Qa+7esD`SkYSk^v$pMLk;7Rk4Uv)NaS<6w8`w#K<1CHX z*niB48pq}T(DBBjagTY@ueHE@0I^2L&mRL<0J4%BVGMBiWDI_1xJE)UZN%D{{;{5x zj!C_UY|T4hsUES^Qw^k>z@KJ4B%YG-iWtz%+49u)_StM~Yqr8u!ibJ+rYNVEsr+T#+l_$P&l6}xXw8+YQtyci5V`TVJFGU%zeXR@D` z!I$Oxum?P+Ru6A><0yu6Cgcku29oepXbwC}4;wXm=3(tywyrggDKSh8m;4 zJ;&ae!et7vo+PBJ+p$a%B1MGq+DFJ_AUsK!MK{y{8F`X~;RS^Ck7`Ac5Xb2ze*|bx zI&!-@whf7hr|+E>BHaa;?+U;*2Js*d@HQu068S%-Blq#pOCnGZu>CK%F@JPrb+7yfyQR$yWq7=%ATcxf`a zfe&kNvvm+*@;SiT#qzDa<@p$5z@1b1j*;cwnbNN+(8r4>%`2)bYnjL_-g@GF4p8rW z1`zB4o00bPJt(sDWo8&eK+xlxwCjWSoXtR?K~oz(^+kz0vuK`-FJ-`De)xYCWJAbk z$X1D}cbBXqFiKYPW*AijmhE!GHoFmIf%6byk%N+a6reLk0cL2nqcgA*njrkdKBN+d z(43fuiVPl#%tckGq6^~dGheo`vfApE(dzthaD)b^{^B(J%)vDy(Ym0LKq^3rxPQZtm=yhrA0A)0gCC$4WOG3r-6Ng*z5r~+AA z5%Q~9F(|SqyG7$l3waRy&V_9hVm2SdXma5n5JadHOpgv7y>MHP2Qf~=ktk3z4sskS zWt0xx(23J$rXJ;4jPdU3Fi=Y?3UEIRims0ILwntUJTJzP=}-ll3xt6JGI2}CG3%L7 z2MXNK9-TIX)Sy7OW9acrhzTV&*#-U~ zm4Kauw42~RyZ22roKjTJ*3Yel!(yN8&t~c#=|17}?Kk*?Cv};OV=L&60Vww@?wd=; zH^$W}u!>dciq>fCy+PC>wpERql>|)=3n{L5vzjp1Q zpA6u~v;O2i{Y;gCRGWcx-+|1;0e1C3j<{nWs{?r3bewhBd!zhdiSHoSjQE8iUD+{M z{bsP{&mdQ2sLp2SqVG_>&CnQQsHtOUUYN%T8B8!6vBnb&+E`q7>0M|V3Obu7C4 z5IuVM2VX5&-y~u#3Wx4j56kW+48IwELi)GQzXL?LfCve*1rNegK^*$(@Y}@R*Uf|i z22_rZxIiIHAPLnVQkxEI5sipC`XX1b#ynUHj}YN6^Ou3q=EI+XPk?IS`Xwsqn>(UPDgpHy;$)Jl+al{xG(hMG=yAeDliuEDgWp+!IuW# zxrcL9!X*bWr_Q~Mg#?AuVHDLM-6fm~LlA#x+#V8?$A!*uWRvTqVsu3>izg=nx2cL4&~i?)?T0JQa!tdYaJP{xCWi2z2TpG6)E@X!u^+RbqF6aUlKRBMIe1R$}w}& zlK%b+@%=Y#byA9e^xg1{)eLC++GK;#n6c>1tE7!?g3%B6-^R?Lb_kShwmtjyX`<~b zjwpCairILE3yr-0PyDICzaX3~N!TDkJ9uNrWMSJh+MFf~-6pBxP7rHewn3#88MyDp zrzG&5#oJSKe2^a#`NQw(bBRlng4Ox^V(k7V?GA=dF)Lm;_KS%1|y+4?cJ)8jwIp*uD=7;Ua8Qe zwnBsAXk!6~=f0~V7!eyK^Q^mqxuwL7bELWOMTTQjAd?kfA8u--r@I0BQWO7_w6?C(FGw`J-5cAa=T%L zDy;GFe%AI6)!SA7m41po>^l}X$6K%-QI$}e8wx&hY`}2R$IevY?G1}vhjU<($qo7W z!vWQD9_-OukGcos(t^1c*FD;x1f_ycZ>G>L+{M=q%G)&1mq*AEk0E`u&yLX>SNWfJ z!-5t*f8H7W?8k^{%-kpc&@Y$9rwtej-;y`Ra9;e~;PFRbR4#h&dPW5M7Yp_Y_0PVq zv?Z7ytc+VJwQosIO`^a>DcLR|hE#7bptGBF+cfZU{0WV)&u`q|v3LunSPo$^`BiIB zwd30C9{)hekjy&t+rh+*ejHQ_EJz}s&?PKuMsHjIA-g=6pSgb8b)=_F@|Z%gZfha@ z+V-7l3oc1dx7vT182Nr|ShY+zFS9mE+`F>r*zyI=a#!kf9PlHg(5=l~%4+-eE!V$A z?{(jD3kz#HURL6)s%8n!FJrUe(r~j}N8B^r77- zKg&}N9hJfSeEjnbgwV0!7YPw$49v*Gg93#wn#68XhoIblK0Yt{*7}bdb0;E$;~>2q zbMJ|p%^F}<;Ls+6#o7LeN!geHBHPqH86Adp@&An2g1;$iXC1!yiovxp@vjG)zQ5kA zBXLGcER3>6UycB&#!f_sa@v$# zCSG-W`hSCqa3|Tt%Qa;9zTz=;3a?0%YVT$~r!e>e9$kfA54e+?#^q{vguJj)ns;T4h zld9zc4dxc4j#sW;`S?_Z%my--C36^^irMs-ccIW;qtl`|*Z6owkwv)$>lIm}^SCN| zoN9UO*kc~^OcdLtg6p-AL_C(BI>@ZH-(ZgxdE*DWd)`FdOu*u_`6@% zu@&5h>+8!QRh@b&?AFDtr|-FE>sW{Gpwzj@_*$+)DGnLH;Jd-hG{&M7-ddwf#bT3; zBiiWJ^5-W;cPP5j+haZGWZ%-Raet><_QBQPms@=Lpu}Uk4Hq9kK7|#Zj|#j0(8*&V zYIkbl(XUGvIP>}aPt6u{n-=0;<;4H9vK{h6OG4Xpu6biM`Fk=p{t|pLr=%(2+ZMu( zwGVMep`Wnc2Eo5R5x+WrUPLLHL|<@%8`l8+^31<@p7}Yc?!Uk6*CR^v6XF;`n0H+P zuB2Za-njcwS*-g5-0kBLZ1O1cmxk@$W1;J`qw>91YEzpUc(!;`*}YJ-z3fWXI$ftD zNwFr`8Xehs*;DE#$4#@bZ^Kf}hNlo!D`>W&kq@3`-DlX-38&pdj>ewrE@<9Xi*PBv% zqr!XhR^}CtO$QyKXt`vrph^@2o@=`+x!2fyOE84=!vt=2AEF}a_Xl9CHqa@$8a;%U zX^oq9lk(0(qhk~dPXK-0?kLyKrF#$tcBMtE7r~%Ckd-|72nPbgY zEgWszMxWoZ*wb-mNnLuKc2`b3!v&aJKRT6dn}c!Zf7QZ5E=|uC*pENVN!QJg91{II zyUvJbKjqpu@32v}F70+&muEP5S@mbd&`9!*3){3XjliI6S;=i4+OqKoti7L>y^?vZ z=<3Nmqvtgopsw{c)GHy6E^V1T&~|o7-R$M~dAHHCMJ4&nV}-fvOKpm8URvA>1~d(t z?s>WK>bAq0zcurWBHC<&imshL`&D{HCS64l-4{6i`Yk}NCETz6VvTlBx8vF0-}63K zRpX9zx|1esB{4K5i26*tDMMGtrbL-%%irm8Kjj}HvLx0a)^=p-PU>B;Y`pLWr+X|t zEL&&$_liA^O?*>r^Kb>@4u#eRSj0CK4I{s+vaNy_-8K_2`MgIv8ig0&eQ%m+0b&K; zBlV?a8s?9VWmX3Ss`n5HYnP85HhFsAo1f;92|5q7J{E>k6!z(u*n!Q*$TK~q8+J96 zK27XXu52Ii(?Q!9GA(j)eh%w@dQ|ykac(_cf{+W?!u>crN_`!0mAKGX?Pga(H#ZYx zhu(BK5VYxRQKYP z6(Y-@2WJN$ejwz7n8*{kW={iuxR>!E-g7U=Mvgq#8J6`)4;O zog8=fc2xAfou5M+hj|h`wWVDb?MwEz&58ezi-_MKLWq})*&yJk445Rp?>n#f@%rH!n{K`6vR!K1U(G4~lwL~T`e;L!^19Y>_7i96oA~7q zL5L%NKjZQs57a#Zl;4~d6c|G9V2su?N`x;jnMs8z+>cN1@mo9{b|zMcNt}T%%!dJrA-aid)BOSWT6a{LFF>)h_7i?+-9QW}MDX};W>E!qb3RMA09 zX>2BL{Jy%D-RB9``&_$HC&Xq=vsOMzhn_n9+OCmwW4yU*<5f!|9!s2lFZU`MAq94A z9?nT(r^&|N&nZ`N392xSDlHPBs12sGM==iMEx)&HE@i-_8tihJgp`3a>T>rFvXl$A zYpV)6UXZHL(D`|bR9)mlHbXT%yxVzLuF=WrewB3T0#ca^HM-bcG=NkdhiJ+6UKOES z^jKs*W#7e~qJ~U`aTexJH)|ZVbAY*x;-K=nAW6_m8n91iOY*Y}RW|G6*WPnMea=F_ zK*&F$l0A%t9#!eGs6|nEfJBaUVRwlS8!F9DKbF}3iJ4`=156t-ww~zMSZxm}>H9=R z1qU-V=;S$TC3sUSh0p~_0ocm3GO9LHgQ_67B!LNxk+ z4Zyr4<$~}3_dqeZ{|+ejw5Amp`K3M@I3m}Qp!mPa1^)uYg!RC8>|qT3imqMm{eTZd z2we!Zq$(yKeQF9oG{o?nD?T82hZL+86w-h^V^5X zNB;uFtd7AIJVkq%0VzfZuI3pwQa?oGWC_xp4`ieRD$G<}d=a+nB}Q=%2x0Dk5z+i2 zmihHaMu z?ASVP#A5>*a*6>@^fN*CU70A$Zb#rC4nFC!3r=yfvw?H7?Pf3+QGmVvtUZvgVk)l; zB>K^e;pKkLDR7;}*moudN@jdB7kupikrQ=mvJCU+9?FT&?F;qF{7Adt6UTt#z6bUqARJCDXY^U z8sBpUNxOcR+;12exhUgsX&=OE%WD~ko(<>d|H6oAvEO`+f`7jQHp4rKKn&b4+}-Xp zI^AvyG$|Fh0nIOyhQb!EMoBPYLT=$pBL6bwj}U%THG+;gE2FB<; z4%EX?lz+=f)YA28Vb9XSm?jXw1s&DR03a)|U?>*=l1sQ@v(tAs`+O~S`PGesJw@*d zIFWIz;~&K%tM?X3OdtS6n9!QhDr|N2j}$)SnW*Cm^`Zhs!o@YGVl0F75ipNo+;Mw6 z8b`ukTTQQYVAk+n;DMcg@+q@^!L1ls)RbD zO6qQ3%EoF1ARxNo1A|Ws3>^254(!5iameS$z>j_-IqgDOags?F_EahCoB>S;v;WBp z!-gx&)?004Z~qTon0?%X+CJ08W(PBkFQj**C;OyY@&iZSsXlkAb^PDU1>dg*?U9rV zhQ@B+{eJC#lnY+o{r?eAtme};xej62#ng3Wci@^9OZjl+whan>qOA&U>BvPA+Jz03 zPZcl~s;6YY7IIkacfz443v4;Ff8ZB&CPip3pNfW}R9J-dALV>LpkXKtb$^QUJ_V{p zr}oO!%qzPRSrsAFO0H|#bCH7R4{8ayRFO|=;K~tLdOC&-jM2jbmHk4dTD%G|c+-p+ z9z<`c*eCVW!wZmAY$V#0^U^|xf8GS6;V8a}Z187I36H7oytC9@n`)t=DMVFs7bky* z#67{LK`cU`R@9(Z&uTJ)^ekxjYEvJ?2jKg0^`=~$g1s&`Hx19L{V+VXps47SVH@MF znZl?=J6*dKaB?(X#-&TotSbu-R}UE)3sSQl@4jC2N$nUzxPGL-aAA>_9z36sc0)+H z)cVOwdPoD7{8q{V;RiE6bFkUW&Jp82Rd(2M3il=RN9>=@bPHhTrp19AD_7=xqOx2R zJLpIFUm}BrhD{a}VLxsl`Z|sro$XAj6 zkP6$kJ?@BQIbO;z&5~;kllR*6?OtjDCT_K`W-leDW`2F$1q;YF0RCBK-NZuli*L7J za4Vx#8 ziOp|v8`(YivpIsNOeC$%SeB!%mp%BZGTZgS-c~u9srv1Pnl9?RAIrlU8W)Qm~h@rg+>1;+Uj|E>*qfOa^ltbY0@?e(T5LbWPk0=S|_fr5GGAV3RVY> z$e@wTbm%j>X|&3$UeXI`dgr>B@)NK#}(LKSRPwD59Z z^4GGMt}liXCv;2eDL(;g!$7=t`BoLUG(muu4@!Nw zRe6~n8E?;u5v7vv#J6^$XMb4L$wMBLr5Se<9;8aB6jD6<^apl`WKz0`CV{5+FKt`D zek+Y_(#e6$a@<|no4Ee4S~5$;175^TJLDAIx`frGXFl7iEWwS1#AaIbQ>nDfFEA?u z+UW>|Gzm~fMRdA(pXM1_O2UBN{{9fGUfQrHJJUj0CiY5QhxNZ?ptJ)x#97#&MN8XQO`W1ergaop}m|%B!@m;4KoRXG;Pg?g(Is^=Z{-} z1%fouR^=vi!S_DujiBUKBK%lpL1HKM76Zx*a#mS~H3tem#3Zx%xv|~U-!y31<-*Yz zMMH(iMTz>Di-1qa^5v0#8&dyDKrW0J{QKP2W{G$@Q3YY;D@d2mE|QEnHvUL#^}}h? z3e~-XqP!RzzGtMj6`MhlKCcwFhUb`wEoFUv$)GJ3%6|tQT0CA-` z?M7v_((B*HT|JFVexLV9ft3|kCdbPudhY@!!p36`fcxPr#mY^d(29y|P4D6+#f1Fe zN<~aXvn5y(Ty)b?IgVM;rVq0D6+t^9iJY>Wc87}-mCY8JjTNPv+A>e=*VJmPP8cXZ z?O7G1c=n_sNuD>t_zHjep+XA7iVIC>ytby(s7C((2`1Q zGKh*Hp?4bmYp^J%U~e&SFPIz@RXX>lvSbpL!H3I9*wB1*KdmqlLMQ`Kl2=ANh@|P) zO?#Cgtw3CCee(sVHh4LrlDL@+Zl+xZ)h|ahK~MjJ66k;;7fK}^J*xmD(NTe%hCnXD zL(GR$=`acHEaerzIsw~3I{G#U(4`=mr??33!0zW$*J z!o<6Puq&0Gyc3tJDUK1}n9BnXjy?A3<<7H24%R`$2 zA)8{)!B}UkP8KK%>mPkT=fh~OwNR!HczQNA6RjiCj@Q5>5Jmb;>5ZVBax?Yg>Ck>^ zpk$JbYPHorbbs#35$lL!A8!iSCCUlKieUP^##=5wJxvE&o8?iv5>j1GwkChSIeII# z&9Q3#>$7mBo6#q4o4KR2KbF%s-i9~bHu-(KtTQ=%?heejB=y#r1m%Mgx5TmFoP6bW zD5N>|VEd<+?Ffsr$;w_~^Tj#Vph{*tl-MG(Rk<7}WqnjzoKHS%S=uC(0Aq1YmG1Ee z;hj~RUOP8S_Qdh`?zvlY545M9h`$%&Q$6^|2mO+_t+C*vvlmnBedtv`glu&mRx7n! z?zMuc%CS~fwz^-rwF>1~r4rl$A*c18Ose#%_>h||um)o|sXO8nGf350J3sfOIQL&ECy*K+{`+1=3;o;KDVNw;){IkR)=V$wZZOQlynY~obg90t zkZuTTIasq&h1C^x=_=Le8-gMF4?cKB&6TzP`sHP$-1RyB%-w`8DeJrWz0?CIyGk~K ztNf&0i#ZgW_l=L;t<9WWi4WdehqQ*D_b~+LXmu;G$r-|sW$QkuaZaEOI4J@ma(h)~ zQ5kpdWk~gA4^%;Iyf+S<3sC_+2lYH!D*rCk*Sb_RCeA2Nzp9crA6wRY*6Wck5C^?0 z7?A3}TmC)fOYB{E2>-N&@;AK}heb7s+&=eeBJ|!(7!g4|aq{mJp)_x>eg}*5yR5a7 zY3%F$$f?`+;NA1>{V-yF^{vvAkGi04@PO<`ciM+=KAJs?-5J({SMK#XzxFmu&AYeg z>xsFy-K%QSb9i3&p_?IiRE2#kz>p5yh% ztQZBhOZXA-+fS8P`T885Z{3*xJYaE{U;&bxO0@9#ySF`s67%<}me?otGw0ZH{0?1f zkaAxzbS05~*~h2s#XA+imp6RaViXtG16zs?SbI#U%8SgeTCdyHy*RcdLGilH%T^-) z(0$L;s+S|$=RK>E{<2qL>Wt;>84PWJUR=z!{WMy2ZIl%PJC`>h zQD1FL=wu`gn;1!HbDw5z1qT-Rl2$?-F!be3O&*gaQJI7ud}ZVEAUi3zRWhXHjRa*q z4c~o`RsUE|6(RP?`LrrHD3Q~G*#13F=EOmephG#Dm{)E4H7|;KKP4z$y_Vdu`}E}f zcK_9(SgC&Z$sDZWbHOLIe$kuD)?m1xKPdKPTJFIO6R+Zpzy;xnx^2pSq;XesWwXoA z?H_jkog_ue|ungFQSK2Zfwk|K{KmiLC1WbA?dIopXbqPr_=q9W-nC z$LRBfuFuQJpx36W2Ys?;23!c*BJ9SsNX6k9vUM0*;*aJ+Z%)c;yu7vNuMigg_H)RL zQOMJzrCD4xDt(w>6ZPUw0(AHj2e%b0=SKA* ztR$;ev(KE+O{3Y1@kz}Ia+JBATc^0`|8Z18m}!3U54r>FX)|weZ60p_jZAF zZ|rwNT*sdGWkq=G+xH>&^RPco%_ze98hww}N1c;$iy9MD?l}b`N~NgI;U2?{9~UoS z=b^RI2F!QWb82%E3q{h+j)QQZphz?1h0EIWzT>$w5P~s?`k1pAOZ~JX^u%9v{B7?K zu7eQIL|MCbN$=n_)Gee4I63nauM1AMUz3s(-s?WxF0mZlOZGLh>*9HR@rFou9)4A3 zd_tyx_(bmL&jMdF4JkRs^`beo4D}P|Kt>c2+w%Ktr-I+yfxVz$jswI@yPE8+w$0ELJat%9bxoa;&fmlBW*6txZ&ME z*qPUdGIy@T(B6fs?|CBeMhWI8wr!Z>BUFH|ie?)o7)T-q6?y%Tz;4-%a@wPG#g`7r z;4eWp%ijfI50u_I+saGGpOQgWsqJAybF4OqkmPq+|KL;iu4+B>I$DU4%(bXY^dr&5 z;xc?0h%^uZexlY72qO_6Z7l*k_!uETh=lylp?VPW$Ne3GRTt?p3L^X!fR}Jh`S2u; z)So|xAM1*x$GH(i+8R;>NY>^_pp^TNq~m7cUG%Hd?CPg4gk`3*lNt#8KhIA88+cYG zL*=^P7x3@v821fb$&k#SGG)#GDPy?&_{C(IvYa(!0hHOnA8TBJG`lG zTRcL+gE2ncEtU@A1!Fo1Ch-Gow2<`5?zjTLXQl=2V(vZMb_!tn3)JL*68<_pBqhrz zzK5r697+$6^Zv{y)}39VSR`RUk(5I7w|T*Z-RC#BHHW`1(tY`#6fN;hRDxg;_&JVW zgwnIOv%Z}G226Qw^@*@2mjIxDYug=3nnyW(+34BsZAxUv$yA*Af-r6CT6dl@q+A^& ze}r>u%wXPWQ?|Diz7Ckef;9(8m#gQMw{YNg7+=ge*f1mn(?fKvf^*aCAR0w9TM(e- zg`EckX?A-ixiniTK@TM_c##z?(FlmE%sEPM27F?j0r#jrQlOJEitZmJ>c}l zo@22Ki~`gou_lEooC+vfhgq9}0S)R=(g19H=7sGjKw<7ipOc~Bu`eP4$Pz{IQmWVS zruX&LuOvV%|8!l@;6BSzQ2t+mTH3RlWVE}HjivNxRK1u&e)dE+q2Ot|IR4oH{tu!>0Pa@k*!I^v+ zfX=b=AXjgpr8;K(F4Rhji~EW8Kh;X7VC_)1jFg#b$7A`CcPaWC5S zdq^=|6JwNsI1B^1HJR-PfL<9X4~iWhc?kvs-l^N3(Xxi1byPWp4|R8uef9FqV}K(6 z&$mBkxBbqxv*@t>;rmAn;7HVhAKFRVLgOGohkd!aV3{8OG-1%SN5QUH%`97M_yYhe z&sV*!ojxRzK>;$N8Ws?>T(vq>&0l*p4+sZ zmldPJhMwPgACU03@Y^WWGIek$1n?jEy!{At7nxfHyid`JK_20 z)!6?BWDG9TGF7WRdalhmp2O2}_f~t!1;(*osQyZ?XB2Oud$qyN?2v)g``^(moPC`c z=n@i=`fub4LZl@HhZn2H@h{5rEf_*XD!WBVtd4g{SBC};WZGUdJZ$zkjVMRyHi<%Q zX7s3wp}rhs#Y5$8z|bFM9@|&G-aRmKwiC)O{}%JHqi~xSllYs>6<;K#>GACaFRyLc zRu00|937tdS#%nc_8gK!0vnwBP&+@UFn4>AWDI7bBDbBAR!&!cnzp=bV#37iw|@D2 zl15coS=1LJ(qLu0?-AS9@^I**x;5K(A}u;k`pLe0F0^22#uqOhv%YtyroLZ#Q4n%2 z@mTbbbnmTvh2P4eoPZOSl59bWp%kBwKero)F1DTnDWep{L)?u5^Fd@Fw`AR04oMNWUp(irVn zsO^ou*F5tusfQ%9H!D7HW)H%e<~XLvyE*1~u-mhQ`_?1u@rE37Ov~@W4Y~@5G^Gt` zK5c8QOONf>wG@;qjithtg}*1YcQ2wjiJ#5#>^2~uOvK99f~jBbiCg?w-CO>)n9ZhR zOWtxj_Njj@^9EGm0QLf7CRaUF;Y?a>U+XacVU`f2(}Qb^W6U`6_}VA^5=iUp^$n|C-o)RXhV5 zX`DUCRi3iFdihv5G(M_nCeSIxZ$>pe=gE~!A&>v{of>WL%V~IBOo|yi@lXH0WqHhs zyZr|)gX_ucok`IKnaeU^2^55M!!Fb~6PykfaT)ULT{ZPmDkRqT;?tc!SfR7A9lEAw z0n(XSsTS)}HJwbCHNB@hI)iI5 z_cF;v&&JFHFGo)_T?qC8!uO#w%%YIC^BK$~oacB(_VZLCGufj&md#8%?xg((%z_o6 zbS-Qm^uW6yE6l?5s~}5aHdF+0z0b3f6##1x6L>32c3dTo&Jc@df+ZNOoQ5=JGeMUV zU$|f^aVNBpvvbi3)e>fs9uxMIU9*~O79h!La~jYJ%R<)Wg(QhOu=)oRrhshLOALv% zUzLZ9ORlC{L5W|%U4infKZAdV1&c*q^-3KvKKZ#UkKk^<%z;St=UNA)JR6Vuy9ML= zV`t4yZ1J6Z_DdCGZn&@^TbC;};#6ScX20l}D~VOvqVUfOs!MW+S(M`~dC2e6g&TGA zh>{Mzf~oVJSfD-1EFcXrnEIp~qE*gGe_B}DUud=t-l#%?$HL$UQ00rw4Vhd#GK4`!9{$yaopMEz|$TRDmT1}JQYvEsF_bK zN=I18-La+3W2Ir1rNNjYhPUjf#KF71^t56bbSl4Y-d6JGkrYQj@(yK-92BDF7~vK1FD<7OG@4ace69fCJHAx=f)RoT?A>h?Ukw( zHDij!^OjYm(UB^=;6_ZvbbI{lVBYtNir(z=P)udPM4{NCW~3AT%Bx%jbDp$dTT9Bp zSLQ^NdFu_9?~}9tEy6Vl(J>T6o`~>75FxqnIAr-ittvpQLL8WKOwRtV2v^QTN@g3{ zAiPHrsltG&fXEAcjKm*oz(juW_HkZKtlFO;$1CmD#2tvg)Wwzc!g4`%{9yz93lU*i zfPX}jY6P+6LiCAW=@R{DDh++Y3M0XCHPWQINcc%+%rX~IBs>$cvi<`FdonPQ>6_E!!@o@PY$r6gD@`21}GaBgW;w-v!^GLpH}Zo85#}lYH>~ke9JX zmUPg@bqc@-M8rN zYO0Udb>~chBm^=+dJ~W)pn`=Ws0oOmpa!H18c^vasC2=E8hYqe4TwlLAWGNJK|q6o z($s*Up!kU$RNzd%wf5fYjC0nxJA0gQZn#cC(Mv{c1LIn zU8vvKzR5&=O|+w8T}H9NuhU>J*(G`tWel5DsTSgRqjG-yO0)o2fHi1tAD} zO5OYF{=^R#BaI;U6#Ab;s>~4BoY;r3O0O_V-aQkbW#4;C7C5?mTc;}(s;isu>@ zA1O$KXClVffP%1r(GeRbRz_pbG5waEQG{VfDrWaLuThxuuces!>I z;7{R1*wD(#&`bPfW$eJzjO_O9m36X!E4R4-Hqyhho$CILQyA6uVGt_#ouYrh?8c|| zVgj-AdrJ4@vq* z4(M06?e7m7dv^*^4~%zcKGeVFzwa>a+J4`Zi9&`JQj+fI z(wOWHnm9f+kp&qVSzeCuPfWd?XdG`j;Bl zZ)Q)OYdULdo*$_g6%gtA^U~$@pVSgL^Z`qin`TAoXM!}CU287Bq?(kCZ5YZ&mjbnj z61i6`_QSmv9*)VKSN-CIuB*J(;~hQ-DKTE_we!!Wgd#~-J{<5YNPIf^AxRB*bM|&( zg6Em*=83qxpN0EE$8^D@D_6A0QHasy-8VT)`HtB z**ox&t7BoIO&1LWE?ApLQ;oziVooEoBkSwQl{MDWi`PYGu zv9gp!eI4rk7UbNHv!GAHBZi56^CLJ&r{DSpWPJ zO!ZTt^i*v;dg5QQNnM!=x@5_GIA&*(#k-eL=d5=ch2JH7Hp6=&$4{5ZU%V8caHz|( zo?y92M62BK^c&-BWcl35-BK2eRX8?E0|};N)cp^6hhOb6eu6R$_~N|w6$rlMOhJkq z^8VcSMk|&8OLI?M^$L26@sgule@pOykd^*lbprV1uYJ~~TWQOW zGzxemjpDs`7OtSWz0Evumk`ZrR6KM#)(#`i=9l(!&toBUnLn;y{T}~3K73Pbm4{Iy zdyUGQOma}N5dTmA?X6FK8|33clEKP+$I>IsS62p2`Q*zd0sr^IthLWC2QudMO{E-GNHKCAO4|kg$1tmL^~vm^Yl7=*J_C2Qo+vf_D`OB< zesXPd_4A)Z!ps9;J>CxgUwW>W;hyW%f7f%xMWQEA^`*VZUr@StSMR(z6f1v7e);x@ zU41xa4ZX6jW~TSQLbTp1W3)I&q6-iMla(uHwjJMnvQxpFHP{%30nE|b5Rgt^R!A%e zR3Ng_P=0=NZKyLh5cNUWkqDum(tFFT1+~S5Mq!B7-=6Cyivyst*kv&w^EL1ZU^5HU zL1DVvUKEFYTv0?Ze~%$R^x$b%0i{uBP4Y27#07ELwMgj|Cj?3H?d(2c27uA%6GOv) zX<7*}0$WeCuTnWJscL6r@6H^E{^E^VEY_ay55=MMWjs@#R0ethDVyR_FitB6(L`U_ z&pg{49RqkS>T!P^f@xYtdXFDI+}s4@V}~U`o(|LJU!2xS7^mgR)T)qCj%_xUCk+_w zW~h8p5q+!$M8KN(2zWjhGMttn`?b1b`RgrNbnRvJ*<; zjTQiDO_C!DUU4fT^7}r0B8S8)qr(wi-ENM%l^Pi&^4MW>z^&Na3D5_KN0TWXlGet# zs1*m}1q>6&MXhgvsrcG^=5NsWG!{ws&kNIFuvSbN8L1;h6ubd+^Me8_V5ic9%MGsz z5w+){0Y@k|5d-#wG56g7h*iV^_9OBI%-UvjCs-SO-enI$iFk!Z&e_7iTlT z%K%64e!f(u48RC1PoC=t<8DW40h*-4!w?6Q{6qJT+z&8k?m}i-I##2I-U_1SPU9QI zc$e?ez`r;x1EKS7wS1MQVVstq8Ki}>cxbvqdU%6t z5LF#`teJES(0&VNWiz|pBjQdq%9cuqJ_&D@%uXlX+gkVg9}%^k+&O#0ozQ&dDgWc` z_1j`~?+LUNkq;m-+9!kL{7g9Dr}~}HOH}HXi_(J<+4ZE#_{YE376pEpx!P(DmaQD; zgA7Pn0%Iq+{fBG_K&ZqwZR2h-V;>yDPq%y|0GOxBD;N{aBl3 z^nv+Ud{aDE{_^)Z02zuSHN$K@Uy~TQlv2@8nRt*$+y4oCh1qIv{L5-5u&h2s(9*%5 zCcEL3$phy&Is1|sv}lmqqmUa7get~sAT8t=x~z2cMz^5LB0>Nl#}MBiS8z4v@c0nM zMhuQ%Du%eNjw>d4U;W?-_G3}K!NE4kxn#4aZg0%>AJWGH6nd(x9UF3(o?4og;w7UK z7uA?OD24P*?J+s={QZMArWzK)418j)QoSGwLFb$@OH#!h5B^fXtw}6J&_r&R+zJ|t zJpuGsF}=v$3ezlefHEr`KmR7QxXs+)gkrwspIC+UiL`^bi$-CdyMVF$_=7(UHU+WU zF^X$j%nt^S>Yi5LadL5K+pe2~|63qhPT#8>MymcV5Uu~cJ=X{G@~}AfK$UQ^g=qAa zA^i%!ey8*~@h0g=G9A>X#Hh!XU{pMbFvB_7N3f~-`DDL(J_PPublYn5C*csUM1Yh{ z;V%I`1=Uv_b*U1IUR?JNQ^d{n$!L6cpRS*AAqrEw0+m=_&^`gnBa8Lan)9?23 zHe6o*pKZN}$prCW3Pn=j`|%B;37$jB5=}nbZ}cOOeDxkd0|m@mgInZzoh*x4wOx)!)sy(gP95YUVpQn*%wtWvtAcFK#`O&av-Y*Ntkaw}{$>n$@+197(2eL|i zh9wL>ak#7#ODtPjBJWR?bn=ONN7sYm)vts*3pu(_Q3ir>AJ+4Z8 z?NKeFPn1(J(Avq0yQJ!%gT3CGMr03Z?WV+6oqOcAAt~}A@1uE`a=mp+5(Rblu`*t$ zdE)(&;WNz>?8{|0w&S7!!(R-!n38~NMo-wl{;|hxXUFs2Dyk7AmWd%Rg-@d&M?Ej7 z5~llqdr9?}ixpgX@a1d?D425S4{PGY3gcR(OkCcTu_&=5$-@sm&l{M??%ix;A;aDN z`C+i65?pRoq3|yH&=!gJ?Y}0nJox?14tSNh(kouPT1Fo2#U3P7c;8el13`qt)hrQau!zkfkugPd9V zb4U05_|$fF*B_3xuKdcS?uD%uFi_wpzrq(X4XJo(;j%uuSrblIu==!#Bl0Wkz#udE zRWhO#p#RATP`0PfTVbqNbYXQ7`2E|*4i?G3sAMkta5wgMeDu69|BL(4bw~Vlpip)F zzwxH~k(j8@ej1dk(77uICnPX0qGaYTzp;;PR)yMs1|4Mt<#A%eW_NjNhgU^7&)4dYA+oEOGg@)B)ARX3=J@>O!o5&Ed7Cj3%L_DG$l z^A+f)^pSGkk7gYjj3q5uRct{!y8vE4kpzzq<{(E?Ut_Z8 zb#fFhyNsFBhRgGrkT+7aWHxM^Fk?D0*THCtj|OTop-#E)F~q zLIzUtmK-n(xF8P_c1nV-+^f6pF`^Uw=Rc>#ZxigNL0#I{o=II32MLQ@LD)3#YzQH56Q&IhbJh4@ASvl^>mi z_+^>&!9g$OFzec;xVTdY4H~oyDiQw0f<^(v>#gD5fC`&pL*dV02@E7AQxpYti0FG#-bG8yq|IZ}!j<_dVj>q>w>&2i zoFL?-+tw9#kz$psdC;d;%Fa<7C3n=?14h)4s~V2VC*<3u*`=oLhu#lZ1C@3G#snRj z_g!~7UyF5FKJ)%D=}9u;nnn?lj@`9b{m_kn&tg?si6>uc6_S)#X8^IJYl<8YXDh94 z7gp5`R!POzDwUv_O?f(uxN!}rc);$Vn~)SaVa%Nl_lUK>SL2py`l}FC`}6w?YhJ^- zC9Ur9RB@wP?l1LIMj`3T`-|$|`cZGQQ-j$)ar>w47n_8sf|{Q5^cp|(c|#foCjYEz z-;vgA_=>AMIevwl;J@y4YJH++P6M)0xO&0>D&9E9XMI{Zc452N}Y4Tw-tasDAFb-dJ4x**o;4KO*MpkBs=GY(F#R2&LJsFGC+yL^yDC`KiI*H}*rhsHl|iE-MPXbXOOCY7f7Q;VSX9%gvK6ZJVc45%A^lea} zEHKw}CwlHO$(K75!jUwpU0K#z!rOV2KEb;@na{wHJi}hKH=Ml}B@$^@t{3Z((03+C zwY7Ql+;`0+HExoi45Rz?H#pawEx zr(EGk<>MY-Wbw)~+0TVDMo$Svm9bhQ+-ZM$^_XmJh+fSzIK4dO8Ep3a**>^^!{|^Q z>3oO3JRgWn^|D)^;B0C^ByQj3xQSmaEAHb5ziXPVk7?z%pG@ggQpDW9|M-~J z*xUXrJD=y@$gKF(3yHbluvVb^OuwHTkVU)n!3c7tJzPB^@A7jpX5>W*dooK?gh!rW zMV{AXKFgB@hA3dn{!v6pK+^#zgZkq34#-ox_fD<<=@$B#e9&Feo;3hAFu6CiUu;va zw%=|K^Ec0Kc08R?8y7ZzCbcrHDGQKzPuk={-bPAR=Z-#P;ERbMNn| zE(&;WIHAl{NCkKu`CTy>qT`t8{NQX5Qv#=|V z18Q!{zXO>tdTyb0s3`f?(F|%&=DIM0Gql_FJS>~nP?(Be*cEU1=IHW}6#1oY{5g;* zsIk(NvastW1&oe#`@`OP|BsJ2d*La=?R_C=_3Hh%kPk3Q{jR@l_!)!^YhVm1z5?7V z-RT$}h3G#~v9{1hArS&8ph|5@nXrHw3!Px(m?OYPkd|AMomfWb6D^E!vwy22%u70PFvDbMvE zma*PP;Z@igzXCXGW6Rk1#T5c?1;>E9pe#fR&+S>G;}4J^m=6X*xK^g%hQ$iuix}28 z7?H-Ax9NTKi6$7yJHO@ye>RcMWK0cLsI2$vCkTH{94SQs#3?|+6n_c%(S=*CN~6Ms zM?T-o`5y3vuuA@f6aKGV&>%Qpoc!`oMWQ7eV^RAQkomTn|MBPq`7Y+ zY@BX+`hSA-pY_L)@9=Vf`xiCJCIrgmg#o^u%x8OME6e!#1$$ydiPro|1qBrMLOV!{Hnr&))Typiwc~~t5`aA`^2`T zI{HCfs0->6*nyhiTfZv<~kf*2@oj)e8>#qaf5?IQ<`$~H3WjB zC-YvB_{4uF^PBKy zo`9Y!NUdJTVgNf9v&aXeQGg}sgaR?6c-MQ7qt?Ce^Sis;Bh&KKgDS_)1MU_7F6CL{ z64JP_lQ<;Dn5zV&&_7V)#2NvUFQUq}f0y#T`GirmN2IF*#803-<0d)Wn3szMVrpWw zNW%&&_q$JzXnpRvXl21<9z#=(`^p{L$EEzoKAso+1XQjubZA4BR6w=xKAw0HrRADw zavxyP@9@>n0wWg6p=5X(&$6!Mo?NCyh#$gZIKa_z+n>EI0JCrJIsX_MzWbz!dD*jUjkRxMW)@*U?zt1px2T{EgQ9ab zm-mxC?Gz0#E;`)0lf(qL-M<=YFKdgSM>09!Ey=P{+dp5o(h3I_&szU7yYXIXg|@$n z1pErt@o^DC6nwD$X`}`@0|4L39)>DH;cj%Zzv53arYM`)3Gftvl(y+(_!9YOo-v48 zjZLMF#z{}H(Lg>)Lb+5>W{Q1OX%Qj637PjOHN4x??aksf>OubmrbUB1{>a@{U33RB z&i3$s%;d{P&Z%JmF@dLeP>Xj36~=G);I5E3z=4ob@o;i_B!|c6xXUf^P0B$3!MO#3 z1pe?gb$W%0F*QQu%G|r`7y!W}i4G8Zm8c5wu{B7L-`qqAq1~1sx(#$x=uuTyb5rFct z0W%R1SW0X+W1it~%!X$mV_mu^y=+DCnF6SbRX|_CD(74_wzk60rT7cQ0``~$@2B*U z{7C-%faCKg4KeA6Pk)5kixw>@4x zyiM8)M;DtfmDx6Mz`E%{ihtuxEn&k#HeOqR-<{5}J`ac+oZ41IIB@o;(`L)UVI@?SLsMY&f$F+XP$983l%jGPb0L6hr&foXZ?6N z`>wRBm^WR{d3(D_) z<&$_r7^!->TS?^zzt{pWE2MCu&8bh=hcK>wYCs@Hv@`uwn+`oq#;UE#YscdsNFex0l#*YTAI z9^azpL6lB7ve$W07#3p9Z{d}62&++FzNY0lNMqbgL zuFBupBXlulNojs|%2w@>2sf5gmE3Pn{|W)HS(oU;5)$8PCQ&ab5KCvClFG|2|a zrcYhJlr{avWV83O=nv*+4#N>L^)z_2?s(n)urd z%MZ8Q+u|y0-5V3N2 zzw9!*sW4xP{&^}-4Hq}i!JCav7a5CoTX5v#SKfJLzF$?uEF{V|pZ4ReMe<8EX52sL zw&8^aUj7=@c(SSDtNmv}v}Bg2cEI^hNwj{zRfX34E58H}K_@17-_3WOgnk^{Jm}i` zc{T596+Bm`d9O=ERO#S!AR0m+!Uoe^?d1uQ1~C#yh!HfSc9n_r)*yRIV7C5&qLJX0 zv2D?aSxog$`X@z#mik}&+iT(ht9I%rWt!yvvK@EBq;}yX{>sN%q!c5q8hu06O zC&eC-jBTHdAv%QB*Ti?}FI!ZDO=w61K zj1cl${*wa?eJgo5v~2A&TL9s~|Cww_&jl-t4K?Atgp4zf{{|+hYL=izz2Yw+)5nXf zobaTU(E77O67`b(?uT7jP5Pb?)+*^9lMh5q%36xwM=TEDL z`L)FK?~*cb0$AL4Im;bH_NU9}LNIalK%AE+H<0h>smH-72W{oM-5G=yX{s=8UN7TU zUb4iRMOA$QaXf?;nsM3_6nDH_pTS7>Waf+W2SPRnE10TMGT#(}c5h-O;Dq;#dHS40 zq=7-?Vt;y&xeZx0p$tRs$^~CbWFtD01_sjbOU&)>QnK{Z1oZrm*j@w*vX}TTgSwkiLY10*jFYm&LSS86ibQ1amXbqH}ec{K?{IlRLXFM8z0%er@fwnZ z`)R-Lse)kRZKyr$#!xu~J5cF^H(qMr_}YSRuN0^xv;HQNybO?s!B4UBsaWxUA0w4a zLFOdnQ%`up!G-}>`r$$b4^xND1QqZWszu9KiCF#8vX)F0@{KL05Gova z5~zm&inKrp6>i;P0*PotxF*Q~O(A|K-pxp&5IlJgZatDg0Rx#rr-N?8@CFaEZIlKS z%t1RhGFQ4O>+o)9Q#d;95n-JxyseX z0)qdn;G?-&8a*N}$tYdz>yGydwwc+I?`PF{+pRNAyCy_7I2bABjfuAjZU(mbeK6#r z=rTG$mRLReJYz%`y2;MSit|dLBE}c5BRbp zx#Jh4sONj6WL`=8Y7T-uN$mHn>6_v*!Q22iUsN`%$NpxU+sY?S)GzOc#%Y=Pw(@7* zCf?axOCE0t8wz*KcjwmyZfXuCSBcAv7v6EsW%sw{NNV0SNM_vCy9Os6W@+AcDPDpTS=+dFj1$R_A1$L(x4GNwC`>vz|@}*YrY`R2O{D^yJ-ttOt2T z*ttEwpC|BF390MTjGSeAUTAt=c(2~7%6Po6@CZ9l((U#&pXNMvM*^!rGKrkBdZF0!rUv~v|u;O z0Ilq_Q5l(cj3!}&d#jQ%PGn3+bt7^%^|PjZi6r~6jLaf4)&D|be#L{Tz{IAiJNb?e zO>Mm+*p6gzel-iu$uPvSOb2{HNUwa5^SfYm^}0C5{^KD0>(QO>IIu)#dh%ht4)!MY z0b(@%7w)dQ7so{tvd7fQYeBlS{5zq|+FDIWSN>1loruo~y`EY6UJrjKwG(CQ=tbRX z1NV-|$|&GDuz~qzUk_rG9*n-A_Pl*VTIM}D*3gpbwbpSd&P$gUS~A_5JDETwb)5|E zdQsVqaBX8QcAfie$JVW})`DO=XrY6=C#^Xo&MS=FoT3TWC;O3`AfdRx-npPX`giun z{=O=(Bm7>#N>LxOB;9rS;)fUXYcr)Q_6X+`c6W6@=6sWW_@Ib+Q>N)a{7g*kvOQTG zC!+-mqf!@-9dJ=ijn`GfIW1^n1$e~SN(*`nG9OQHg+8*nV714R1>LS-WC`}U z5p(v*0__Rm4QAJ#8bM-}PwEZZPyE!+7sm!#y7^jkxGayzG-s+Q3`4cjpWh9iFN&q4 z>|3B?s|_98f}z9(*;xGcTuO8e18B!9GbH;XjY&myjTtfJ=hW41$`m>4C-5cD{ z2mNCYpF2cK+-TN%`k<-(?T~|PbH~1R!pGa=AJysmYaMj`UR)K(-Ih9bczT?9p|8$z z3<0k%Sn(V0e06B&zEQ$hrfhUSeDy}tAjJP# z_F0wHtHp}2Dp!2Fpc9#oa4xSWKb6aJN4_3$oV$%^`aQLwFeh~TUctH}OB@}j%`@@g zMoz|}A2gNp`pA-JdttjQ8#!J(vOF@m^I)h7wLkl#uOV&tI$k1zb^n%a(1go~^I`)P zlPnIsEVZQ?{=-Wl`yJoejjMJdh0NdmNFdRYC>RM(+QSMJcV{k7e&}^}dqVLs>p0>@AH;?521`F}#C4)NZ6X)k-R^TJ#?@c;$p{EJy zGwdWTfmExTERjRa)Fk~GMircJVjV#{Q5S<`mLkvORo+IJUw0CaK-TF^KYI77@Kve` z@AaLWYBko|@jrN3&iupuy(-$A#tZ%$y_aeg|X|u9Ou%g;fkR8`ftMCzYA@t%u^*hD+WI0dg9o!Cx z^Og9YRyjflc|9Ik8>^9TUer0X=1%qwNsFH~Mz=p;c&D*%4PJosbU$XcRti zY+apT>x1^#CWoLn|IhhsID}_{f#mk{okBzKbR9xT1URE~afTc)g7%LV`1QfBA)n89 zI1x2v^XIVycq@dr3ix~;zb;(e7H1^;`6kh>qpU@atyJ@!2b8_4;r zR{qj!1XmD$uZf(;+}07|FO71h3D%t{3fn8fq)$l%xokp}yM0R#oqIs= ze~s2d;Gpuwe-~8p7oeH{79qbEqA7N8Pr1Ymr@P&4m{HZGE!G>G^X%pQ;Yybvu zRXFagw`S(qc5_uE3J*|%YpuiqH-$X_3Ir5LkV760i8Y_JgA!~i5il}yz?Uhy#kz9+ z>)`#`=_cx%M=qY~99DGq^5gXoO64&NOcZm}ruVX9tfH<50(sm7) z^Tj)B{?8e@+FrnKsDSXNvBLgV5oy zLS1rE8R_=7bL8;96LkB3C+H5?GAj#sf{r|V4aF6`h>9yCll2@DUS8ySmPi89m>|0r{5T&Ap=a zvh{%?+6#t>NWjW_v&|Zi!~Azo{_%qO`$L0}HV`e%$JxWZ{KBP)ix58kM$MdmQ`T^<{*XEM-JaUAbN%L(>IsBrc5@KxeBC0?Y+sypYQEE0?&m{G1q{Lmkm*;Igo%16D@D04to zd=&F*aU@8>=r!^Etg$Q^A=%9C5f|T=xgDTjVlgyztuF-0MH(S{0;R|^1p+>!fuo(z z5oBwkzS9=7Q)3j9{6o@HK4|0ii&9FW4jH!caz_B#&lDeTHAJ zgNKx7B_wK3T!~1YTgFJxLN3#@`4wc08x>LVAJZdGDO~6$XOtj0Iws}&pV1f!Kr{xx zW^|=K75Z|}V&aSDwf)j03f;289DSuArF^f;mufH8d3kUmo7m@iJo@tCB2GhmclMSv zoK>k<%4x>IV+@7l8WXW>hgcPVYmTS>HpZjvvxXw2n}Sx7{#!axc6dT``@zXBkz{7i z&Tl%^;g)Yo2!b4wXF4PQuh~TZKT(97`f(pFLi&dcO~3l3tN0V+PyJY*Vj&wX+FHRU zceU+#xc<+UMqacao{Uh{R>Wuw(7+SS1P|?>H8(6wA$jDp&~Xd3!|#9H6=z;tvP(tDQyqu#MDLYF-#w zCw01(yss^^b`uikp`_mQCE^vLyHBOc9E1s+-et=ERZ?Kho1C8Ga)zv~gVDt{(CAH!l|zGtuQN*3ykPL~t&7?FDiyDYD&id;H^l!D zj@vP$?7u?pOzg&wHKU1}kSC^mZJV9+HEeWu|3p5u~I`h3^JaBuLw6HfxW z4`W+(7K=+A(J7(HMPJ!5N_yet@@WW(IT5|9qKbsP^2#D%VUL!c9Wqj@0Tt(tX?Qts z+9F1U)J^~dg*)N50;l_hp3C}tq`E$9a$lLY&{4{$Bi`KOab^Xhu z<>m#SHg_Oiy`BAB{b?j1`K=RLNl3prhP;y6S|DtwZB=)UmKg7mZL^5^mRL4I$DO`X zh&_VL*E^xHWBK`wxG$i{%)KTlv7f+S9V)kpX z@z-TO^U9#CBJ`-=%`F)=SreTj7G-lHV_i!Go6p!YB+ZIx%6o@R$7m_5Sf}Ggv#y7( zr5aH1r+ZUH)g(ivdQWJO4$s>83q@~x>#t{Bd5#y_WW8hVaR|#V;+?INns7A`(nexjcu`Xr(Jr7;pF~)4-=sIc z8UJP`|3#aI6h@^e7zgj64F&OSlb}txt308ApZTs%!66*?q7Wk>up7PS{sC+sU8;hP zbfrr!(xH5Ci)1ua$4k&Nda4r@aXY$PHv(8B25u9$trnwcu8{&^WIwapa$RIZn^}Uyta}_MJRcR?^Dbdme3Tl?JElS| z9}0}$^gKT#fqa_nbMGf3p+e4-6FNHY9>ogF9XL4k8LysyahoLQxtiE=H=dPyajFD; zk&(n2kcERs9kV1viGTqnd25**L;I@OLe$aQ$wB5C8a%iKDVN5J>5^2Mg0Xkn399HBLNYMo(GT_QC%FX zgYOuhF>$(Ft1{#CHFJ%Ef%LM5v`u}e?nu0(sm7dn+ED(bK<$7s5p;%oYT548Wxfn# z25!VGV=54P9FsBJ8JUDhuCr(Sa0t2XnOLTjL{wwmVhFV^y1&f#56nu{IT|Cex!pSJ zHbTz;vUIR6yBK@4A~VS&Q^5d&D}daAsKD;b*SgSKYW(3!xjk!sQzW$RPlnjhRCQC0 zhLsejO1VRmIddfllY)4a0&7}Dc9gk>+eE_tN;#`aq08!7ugr7pqH}^O<>1z*2Fx%t zfY!&Y{mT)p?CjjUkd@Uu^|iR#;IvpT6>;-Cx9$?jni#$HhgyDd5wne1;T| zKrSRO!AbM*Sa+3G?eJp9G^v)1(_$h#2y4lOB?C!!xPpt^qD7`)9_w#7=}Ap83`(zY zk4;=HyyF@tq=@HYuidwYhA8-_)N3HGr~@nXBJA1_bgdG)Ub0EU7SphW>QEXF_I9CR z_gFLylfQ!NXA15Zg!pU(sXqWK8diHSMF}ovFu@E?abRNNyCrL%FioR1Xcw0y*vdj% zA$E}wqS8RQW1%pyL^K>B1cx+iq^-M)4f~Q43++M0Ft~66ht|q>5<_MhbJ#B~&57P9aN;t@RY7E>*yww+vZ=7bgns9xp@C z1qEq>FLLG90RxbF6;x1gZIyk$0(bRs8Dxw`721l7g4c06yb==ox(6AP$K@Afp>NU% ze-z3w_ho9XKMY}G_%y_)>*n~V zaD&IHN9N6&GzYRG7Ho!UQC#2IE+b%n%eN5`GuDl^Nqyc!6gh#d%PR zfiPD6F%6p)rgvrSGlM(B!f}^Xs!NXLB1`J4r809u@9@e~_O3-wNH-uy<79kP8uc>w zO0kir+480uh|OyDY*GrIKfBD0U$DrdtP6$QZ{Ko1$Vjtcrm6wd#{HgXh{o0h!ktN4 z-GTA+_b(cT;mR1*Uva@5oOJ*8sM_CDqs8p*I}c{>uT#1*puS9fS5rP>sgA2*^G&z$ zu#ZYMf1ZS?Mr~!Gw~vaY&wajXxoa;1Qkw6YT)4*$Z-R4iic}LC(?o%P?qL5sA#&$- z=!Bz9!!ICvuo*GRU}{31#QI{*`l*RJL}#Q&0ducIDvTb~_p~?iY?#)E1}6%pN)XQP z;6;3d#B>@`82M|e0NIIoVBU~jjg}VEYp!U@ityF;XesH>i8y`nPDLBCGk#37scuNt zYSXK@PZNT%5!`A!pWiJbRdUfBbo5YutWWki89gTjOjBEH;-U@tX9i0KSg5WvJ$yg2 z;vwr7{*#Ptomxwnr;2d|XJtrM%c5iJbYqdH%7)W9yNh>){@9ROiud%VmRoS_3vxn+ zk_U(GJZ$r~R`JVu@lbrNvtI@+qvcyBg6wqY8W!fi)W(6Ec)jMf77oE8S`ec8!Lh|! zq*3$34}}f_32~fmL`LEs*@CIryN%Uyt(*i>mt z7&b!(#`kyFi|O5C^&Xc6esh8yCG_YR*RtJxL4VwbPse}Fe|Safp6JZOx737axSv-{ z9SBT`QUUJzw0B%j+8?W5^dO{bY(G@GdMEz2TujIVNv&j!KmBK`gGn+m`O9^OPWP8F zdqf8YU50IaG#>L`SP_q`K>aoiiJ=|%DjwB9OX+j6|dyCywUQ&`M zrW%_vea}2OL3jOr{IbQ0qoB4vNb5e!?2*CX$Vh(jx_}UYme8pOb?Dn+XF7(3`Eq9V zT#*?(uflmeY;)XTXg!mX#(DU~wmbiH7aU7(@p@8I>FU04DXo1tZ2B<>VHrhFru*Ao z8bZ39d$%Mqj|iM`a~xIH%=aq}9TpDyjc=5H*_!3szdAFz`Wv@hu(5x02(>4&;DJZm zcz>Us%e|e+{SRb-#-`?mynE>9)kf+)`dU!O#52>?MnBu2zUD!T;>Kekqv+JJgN{$X z4n45pjcs#RN#l$w$Yp+#7%TM{pX!(0Rdm-{23hL-ycKuHHIov>8Z`G)(PeR5B7JY_ zsg@yxqNM7P!lQgU;6!ntuRnDzaGQlIu_un&K;6ie~ z&pZVoKEs;!heM#2+!VqUFU7s@52t#mBkP7(@^n=CHSSes%(2?`G;d_nv7oYxSZb=h zQ%Lu=$mDaF=PtXU6%LpwJGS<2Fzf(iMXW9vk@aL|Itc+ryXmO|})>I?n z?fmr}kSpZ^f0VBVD=s02LUreP-EuS3p1M@72pe5z4meyZ_cC}4eyLWPaqvp{?%CQg z+(*28aMnG8j99$p5T`qSN*>6fBCf5AZ2WkU*2}xH`TS*B8*agEcGMdCWqdC0`YUD|OfzE9Qjg{TOj3~!*9^e(hHws^HJxdEbb&*A;t5KRG zR@K#+^6`S8$a^9McQ8eIHx4GYr20D|%F$}@{)))*LQN>{mGTG z{CNYWk?@O?QI)K-Fv+ACCZ%vGSV8R2LMj-oa_1OMjpIeVFmImENo6hS@y>ud#L{;-3y0;vBbOfy4MlK}+)I zZ%hhVQ27-xn|zNe4stVI24k-wX!u7v)KEYn``ui!cAw-aBZ{!{Nx*1LnJloSK%0x| z9@~a?KrC8OfNp19GP+b*Ii3^_Z~V6rCQp&zqGV$U(FmaC87p<^%w?dZ5{#2J#{gjG z?)yt`i>SCVg2sLndw{69pbw=tU27PU0Lm2NvAOuK3%m}r*NG_&{rAn(1unrZ`f&7DR<%?6}{gpLTlAOcZP zLlYF#pomnZC>;&bn46B48slscHa)NDV4YK?90_qDBP)1)1%8&eztO^Xtr7 zGk-x=R$wR3{oL1m!IhbrCR_CF$#TMZEwUM(Ua*dfF+N<1d8HTwAV`7Ye#`ZZvkycA zVcbbGiZ+r#z$3OO?+C*E2E<)ZO#Fe+DfOhjXer?x(AK?*7Y zd}|jZ0JtQ%xi|YA-k89DoT&|nh$`OUb_+~YY8pp=kz{HjdG&dW9{}2kgjoy@UZjj8 zO&ZUNS5}zJ?+EsCK&%k5O~*kpGlqMr`Xt(KZx~GrEz99I-T>VNLzXwQ#|q%jOf66V zzL_Ast*5#A()REQmmq8)L+FNo6DBJl^~8!&4v8a8fN`AdUh7W+ko?C%f5-fe6+Y$E z(5*#hq7Ddd(|AoYko_))d_#?oA097+0sKB^KCi#aJg-F@H##yC0%U68XIGIE4%=ypNkc3Ioh;-lh;ukubWPNo!zbq^1I3#TizF zkLAt3_uv6q)K=dgzy zfnYdOsC0-a(#kTc)7H*BApN88@NBY_h&D~;TXyoH9juk^@p$Q*N8&L>iQ=fZq2xi2 z5`+{WtdH6QBsAbgf4w%&|8eZV-BUPz0(HkR)1(Tpk|)r~R*(;>y}=cJ+yF9CPQbZE zxet%we0IM*C8R-%vW|~~2PU1|OX26)Q@QgcBg>*mfzNVZx#;RH%Y&sl8A_`jr&S!P z^==7cK|bXQ^em5YZy?{%l}f3%jwkl2*JF-e>jZd+}Q5;_{H_q4?z<9$R1@b(MM!8nN?X8tlJ;u&3ejJil#~|&DaP*rmz3<71HL>%xYE4m8a)^UpGF8&7ZTvt^@68ac@mEWVi09!}pYeh4aLb~} zb5(oMM}!Mr`M{X$FTS5sU6Ut+g`v37>_LlT$I&N%e8XsowkG#OphsSR&k5+kz(Abp zaJt>>VY1T~@j-6K+#B0_Gb*->EU%FxmrMU>Gb`FvNR?9@^n}ySa^PFyKh2>wi~5l# zV&ZIUr{^qZMAU4_^DB#5Vk+C~daRuOkD`_C2k%sx$l48GdALEDTOO6cZ(9GT_;^o7 zT=L5B>IaO>WXA$Cc;YToeicwK6B%RCx7lKBw!4!Pqd?wl#{Q z5EibnoRmYgH@40ckN3hG`7B2x-Y*@Oi?zsqqwN;|T=%L~ zDD!8%*$uwIj;lXWaCC>ngJ0usulhEd_DK034lDa?ifZ1D=~=PMzy!yyKb2>xgaR@1 zeKnzO4Aa$~OPivd?!U*+c5D;czmXTLj$h89UtKq?YrzZ1ug}Cj{Uv`M7h*=A;mTY7 zT6nvr^%=Hei||x|u6_Grh5O{7bS#c178QrVdyye8Q6h+{OD6MSD8ekcb(*IbOD+Nz zC5Z__&0)-4BT?=`!)M6~Eb&ct9GrrElWe4Asp-WGhHBT}Y4H#*`VZsq0jLoP!rqeN z+h;=xIT4Yjs6=|4nWgB*Uf5z%0#v9WP9~u7;4xOh@>!fQ5Ms9&fVw6qOc&Z4d_{ws z$gnXCK#aejB_*y}mlqQrQ6uge3P(;RqukM<64W?* zTq!3iXuHzD-7+cF(kHSJVX+>1l!|f0rx@JQ9Uvx#G^s#Qq)%VU`CA6g+M&I+h7ehP z3*(K76Plk0LB;VJb5sAZF^mJqckFR8>t3xak;ulsoOcO}jF?5^B-6!j8rk2$%25h}4^;505mVn#-BBVuzr}5vMG^lLWD4FifI66b z3zsj`_IFJt;wJoxnr&BgAR@*6ucU*N4yBc)`kDN-3Qi`dHapwb z9}>lUvY)R5i<}_T_jEa*Y}6du4ak0`n;vd=O@1Hvgz9}HBz%{{wMbn)_BK8TWpdT7 zg(g#LduIpgwq5q17tBfR8Wc-{_H39MXc7HoumZL1=!voP~cSlaQbAY5D4 zWO&NSq7*w`N~Dtij)*{%BEK3g%hx;JB|@2}Ht$g(%w)l~^F#QX*1Yvwx($<|b&~lp z4mf8V=AzV9FQ44g%_{AL)UHBWa!LwH1o1XGEixW!eD+LaJSI}Au$h$ytJeL<1;|p= zb8450YYiM33Ad;uDKN2iKiJI9FI~_7s#<{dDGrG!uxnN+btt(}d#2hVBUQc7LB+4Q zro^whu)9{bfsw2I)AesQ37tnlgc?LWGhx;obS*B$r}@~4?W30tyu&6)7WuBaE;4z& z>2N{l974v_;RHr-f***2%WVij5P8kZw;=I!fbIgk1B&wX2h%fD35hj=;6hNqDn@kwFVfl0rv{8l+^~Y#HurqmG=FW z|1c1SkdlCjbnQnXZ=u{sJfUnfME63gl(x*j@U{vY;Bo!CSqUkRJR>pbg!52G@+K5p zf_yC?e*p;-3RN$ZUn=VEE|v2<4iBcjwz z5@r!m2c>d490$4`GKzQ)QIB>b*um9vN}5%sXt1To5^aa{op%gme>*tsB^k6AqD&w$ z7hR!R*L|DnQzn)hNNBvai-9R=IM9PUT*4@S1|vz9yz8s`vmeAiYb1x{>?$Z$o2s|k z4eC5=;PETG8PR~_Z<4WU7I(sRe<+VB%GKdC=^21VDb1);VcK_eO^U8ZDmBsP!^rEl zG)X98ynev6KIBeASxSKj`a$$Sb8H$}mfC{4((HG}aQDCi#4N@{qZN@|H`$(ZjK2*= zimsF>K%GL$PPGOZHbEJgmrMad=iWauelbq<$%dc~A;33+>c415bZBrh1n(N;Yd?c= zHQG^%7-#YW>+zVjlw7!Q<&`Rf4_x4aQ@fIVoL*m|`-b<0jTS^b#pQRFyVbn}J6z+o zlw)LH@&N~2AW-nu3cRfT2z8D8I4ukDEjh{#mri)(=7fvV?wsEZLbJC|_!|*6S!~C4 z1SRrNdq$)vqRi^-WI=u1ZtzQW_I!9|Se1b-HM20Ug_FWWm80T7uRLmTu?(*B=2JBE*^g&!@;FgwDmyOJLrGAiPaevGJ3B0@=| zb7%Ia$LBS{?8&sK^`_5O$x3$<9%6FTi2R{;oW&|a!D#GY{YR`vP9TDUGwUbE?o%(BKI~_R#N1buDlMLaucw_qDV@>d< z0n^OtVXjy2=+uK(YOMUUVOCb7O7}P`Wj?)ncRx(K zFEc)dua-T(KXTa#$LpduSQ4jThkK#scye)2;Ixmi!1L*PY|OUNbA(%p>OI|jiTmm1 z!O!oEn#qzQl`ua`o_{N8E&hZJin#jODO^aEVjlA>jP$c9~q6)e``_&cuF>g;y zyx#55c`GXuGC3uWhdd}s3UDacPu71+gr=)Kd)k0}Ea()MtR zPb~M=0b%uwaQ}&4)mN1UQJ)u8CtDiXe$6^HqaJ?YsBWKKgRkISk;OyINKu~Vs2GRe z%s<@VxVur8wc-%jA&`1#WC$jHa9qt{LiKFQa`e!&F{*z1GiwEm=sgHs7KB#hweWnd zbGml5YbFI_5C6t`E>aMlY$f*_L@3_f=_~mv`#3gGjYVI6{@|to#Bh&mvb@f+@|usC zbBE3CuN!LT-a`4FoOm{p&Shs@8M~J}P2n99cQQWozHp{X=U#G}KTP9~?^%QqAs5h>w=B6241_J6)7Gpq%PKDR6HsHKM$5qGx8Y3z z&d+@jHpIoD6LMSvN`w1|?_1rY6V5IPST7R%iVJts50=e{aZwgDr^A=hojoTmw%_-W zX%Il`^Ga@VlbyOQQNW3*Y zGXppItzChQb9c7^>=YDB;xMvFJW)a`Sk=ZSt|nzFBj2WlUXl3Y$TiRev=p)0k;(U2 zn?3n-^(#Z@JNW&9l^p6j_7A~#px@;{4|YT3zh{tuMOUo0TV(0c#{bmtEHID5K8kgUF!N6)?uZ(DsRU;-QCAXFjq*rrW^9S2 zz>fN(w+NPI7=f1rRu!Re`MIW~y|GAF;dZDnz<&SsKc^i{rC_~co1(a)w@|5$U3=6l zeuqBv0|di(vd6@gCkj8KN4o~VT||nEak!j$pfa$stMLK>*jv4QuLMRwN*#0|YChs? zJeS%Qg8e(~*!t}e86|IVw^g;}1&pSGA@k2w1G_XEg8;${<~gJWV_OD)*4ciNa}+3MdZj6(5iigV zR!f>#?&8Y57m$bf>(H*~?-C}PVYP$-1w;%S5V*V_Mt0)e00~M6A0(WNd1@;F^R$nX z5B?+O^FG@$@`AmwvE}m|*}jmnt-HN`0R>kS3sP0feX{PaoP#=4R4Dgp1ynr|U;vh*L)bwg3a~@bWaq z7RRIc051#(Te8?kfp{p>(?@ifFyR#7w17MszwIh$(xaJQO{n2x(Hu}qjZ|RQ`yWIc zEc^gX0U&hA$N^2Xzc@Czh~Vpcs$WEtLqHp#wt^Nys2>&JYd26&^XaKIJy7uH6IKY;^V=c+W*{*{??PwJ{cGV|!) zTk9nyQ9#Gq3HDc{@OA3?4)V%D(o3Ze0=A57vK!?`&Zu^wBx#oR;{C<8t8Sgkb4r>N(5ksjGN3jOIn8uM~?_hB<>0ALN_nLciLO_?)}nt`o&y{ zz?K0B2$_-LvlcxN6ZmnuU+Js8h4CazskBTP2v)Y#MKZ{!pBU9x01zrQ5I}=C8u};z z_x*{z0Fr^c68c$Buig`p-?bAcuzL5t$9m7XvHHoS(dx_ga?5u6bNM zNZ^IBLzIeB)E=C1^9@3ReSLy=g=hx-NhDu4_Jdrd?B$I<{N8%1 z_4K|w+u?otTnnE!6#qXv?fBmtjXztMg7-t7`*q|NL5e z3_6RBolp`#o; zOc4yoF+XdH3S=~SO5Dqod~d8)nMuK!#Y~yM@IZTUf=`H-L9+6=v0RsZhf?V%hl*Fb zM>xPPlH8Q}Z>6WSH_r-sbyGR~iz)nQg5Dogs&C{c3b>;;@mL`tZFKW#Zc zBENqI{CO^Y2x++fYC6tk^NbY8i6Km4fmBI9Mp_4Ey?14~k?B#r6oi5?$Jc5Vu- zQJ6}If%S)cKYj@C(<_|k{&ar-y72AbUCqNQ970+3Wy23%z|JQVzqiZz6=J@;(|ToN zuQ$M`i}`Wm?e2l~s{>zT6S*DoM?E}Es$4#N{P{L^>)hXMzKG2hZz?-v+iQ=<5mcgU zY~g~~)Pg^+<(@QEL2+7GsAvEhPk9HA3MCpY7evdlqN*W~8N3*w>v@$Mq_j@1c0<>X z$DE@G36ny#)UWnh1hNV(@A8#EdJyq>xwkYOE53;P0-_%Zo z4(aA}6I*rg+k%iyjr@04%g;o3B@MU!BQePqnFx&|v#vmUawl3$(vI+}al-w)FK@UZ zZUWI8^@u`Z@{@Y+X6@wGFzK7Fh^y+dc<9S9S01WPT5X3?L-C+El@bY=Z-`fE>ZIyG zo-aQmt6|s&1u5a#@=zAY`H)gg;b~AyJ*49q$M(Da-baF!YLN{|k>TAO^4BnF8%9La zr0B+MQrUu71CIK5-LKjWL6u0`5JvQbrZ4)bI*;Y9jztBREJc5<2zWJvmwEIXekA0oZ}r4 zDNIN?5+R+aouIVeGXl60m?sZKiGnTJ5Ad19i44K;g6b~b%lN{4VQNx@v_M2KTNnXh z*oO<{#W6YYJ}I_@A}z^)KoDKJaWs0V047!VKK#m^wTyW@Exg$q+PJ$}MCPBOg|56ndz$KJ(}Vgb(d;wDxx?}Au65nlf+rt#U?ImM#U+UR^A zSfNyDu|w&G8~V^>VE6XX;=A6Za}m;x#KLk`>DC9a^tS5;MLBa*`Fcf;3oF>?WZpo) zTZah8LR2%ECmSa)7H;2GT}IaPq_RsYLr$#Y_@f|nG z)Y^yF7Vt(&e{fB(P!u$`5beeZG;3eb(f~CMR6r?)eq^fd?eboBc{iQEmRnKJ5NKfX zLa}8Ox5)D2-)?0#WYfV3Jf~+01)kv2_=H~p`XIUjELTE_4nWsgL}VsAH|64Wm1DWU zl0393sRwCLX%}FeTk!f@!N))>_eRjMY8B3{OVa-m-TwxY5XkKXqGM<^DUm#fwk=TP zpYT6EfFKF3LqyszBV$OIY(}j!8=cMMnyB;0sIQcf>2-yDa_yh+a~>; zY+t7V7C=iI%Jy{!cHV{9$vzKV9?@abGpAX4+Oyc-fY1nmzmmk8$VPjEJektSdI=O{ zG0$m7*pPVA2?B<_*r)v&M*1QnM0o#xd;HnkAAP0%u&K=qhj*#z@KHf}Xc^SIfW`q< z$aNC?uR3y^Y?Fi_HV+k9x-puWlqauNoY&dx%>|LRB*wjnTooK8p_%N{?sWeFV(GvQ z$a>?^#<*AuXPWy-k?TJ%iCIIjaC2VPI%7kJSA$VDv|U>lxY2M@D(`VKSttBD;wIx_ zq%^d1z?o<~cT-43oA1wo^n6OL=|Ea)c*7HW5>5tCeBBg~ctzE!xmp;#I#JrW*f9M; zEJL#KVU?d6n2j+6SJex6+8eu@z4uf%rxnUy~%}k?ot-I9S&=**xj5LC5@)GWakw&~D2u8+mK_~dPjHnfFGd+qKlI8vb1 z)=ZjejpAnv4meDD!K(KcAhHX_{5ta~LhrYinxXp=m{tC-#n@+Q*X1GBd|lwfZjd_l z@IqT*ulggn8#?mNLpUX;@JyNi?{;V%Ll5)t8msR6??*5u#_f0ed8=}t`J&mW$2Zo2 zY8G=<8s^M*E#DX`&UsXXii#pJMWUslO;~KS^rZL0Y6bER8IS6~B1Px$FjiBESU@=5 zd9kJbN4Rv|RCfh5mkG(JLTIZUJ&U#1^_Iof!HyO~FkG_dX-n=BzB8@&AwF8VyQa(b zS)*-wqXj>+(FyMTsmaZ`^XOpOfzk)>`sf@?Zjz+qOlW@TCojZwR(027l7O5B_wi2| z;C4-T^=P#I>&`PZ*{*}$jh0XbN#Q9|cLZfpV+8U8WPvLCu87jqJ2kCvVd^2x_|}f1 zs;AMIS5M%x>7ik{nHVpF+WfQ88B^-T$s4`5joPk6v*uc3YVcsRy64b(y0|82GLR27 z?qq?W>Spgr%+vgk%+t{=AMZFSgg+fw9z3O46`jv;j%GcXe)gk4K7#i6=aQJ}dRt5< zqLe=PiRbU4>7sSn9j};s0*@b+9F~koyeAeZrOjG4>`)_l4dEd=CO32xM1`*ke(U?y3)bcYpw41^{J=^IG zY3EFxk_&YzI7u(j0;)dow)PM;kHMZ!}4N0b>kZ_m{F|Ji41FzfMl$b?Io2 z9_~nMyddo~y7oMvurMqqw8(l)VW}&*6T4VKQT4snyh^$QNzrjx4qIg$Yo|efQjjdL zXgLf>GR0k=U3%ypYu$fUpmb(4F2H4+RMhnw>Y5&#%rprMNq1tjjQK*J>e>V(vZ4ey zMW;=`e|P`1pMbjwg=sa`N_NFWznmzL59Bt=I>p^M-Y+&)$F6==I5c_7Wr}_fyf#g_ zmGP=s4uE%-CmZ?n-i^FuHD0t8r{Xe=P`K49IF(uUD*vXCoa_h`aAg-vatmOmGp3n? zy;%prU)u&z&&qmd*Tlg6Hiu{>OT0p;~KK)G`M%`X;Qo*?p8b-bc>(ur|v(b=J}EHg1NF zgwUr9-@wQiWSi{y0+`TiXKDP%tA|*9!i(5NF*}PA(@XP)xHq*2!E*G3WQ%tkeRj0j zd&n#PX@FFy_H3xPR5$aj!_L_YnN2e37v26$hn{m;DQhj31)!p+-1Xtkn%6Hbeh_!< z?bwcauR|ZX*Xo_go|_O0xJeI=mP0koEaodjE|)AK%3w0E!MfUG?n=6abv{nP6zk}PSq9TjEFT+|Z|fQB}feDj;;{&~h{xTxX%(|CQ{!=5)@D~j<^>Y;PG7APIua@(1Z zApPFcue_k7Qv>)mr{|eTgVm8b^1FD&nfHHPlA0nS&B+| zYxd|ejX#D7`EH=axEm@2R5n2f(8or`vZ&+hn_~Yxqzr~a%Kx)}=6_(<*tvH1r{gM{ z7T@K&V_%a5bE+B2&(gF#`u{7W+@Indu5cLBAtBQ(*F8q>fSyk|0B((UBl7t zrXV&A>29}FkcU}|3QCIPcyFa-C^ky~Zz{k*K+N*qXHQ1NQ(%!{o>kbO+$-3mQu!c2 z&fg;Tq7}sPcBcI6p9%lgm6);H(@58)kFs_Zxn54>1Ipps0WgxvZ~VdX)}?J2`G9|g z^#;#%E92{QD@r~mylU{2fxyajf++xvBW=G&%aYB+ zp^(yWOZTl)6%w~26a{zX74|g#K7zAG0f5LFsGKQ+lw(?$6t$Yug7s{a6HP1uZc2I? zz(`29AG5z^QjH|WXX@^;1mH_MY_HLNEBGwlq^cIr?D4RMl;8~q_d~chmEEn{172am z;*|-O|CG}KrmI6U0PMK8??p;Y3hs%Z29mI?&31zo)`0Qot@yvBb~)Qo5Bclleq9W^ z(p~q}RCSUMlE8Cg&uo_*&G=*WV)LZuC;2PJf_grH%#)ll3h;gxxM!E=8X9l{|BAqk zsuhAz2O$x-RKFNmKoJAPxA7e5VlWy?R*n z0xwLNs(8|!ARf?^USF{q{}!m$VDIwq-+f3T3y~o^U($%uPK=VfAaw$8 zkVYOI$`Df)GF4Q0?}yruuEauGoH>y_fHynxXq;%%u)sv~2`^wCr%l!iYc~_QIdJU$ z=J$zHdua2y?t5r;C7&kS2%5W?ShKXe6SRkXvn79B@pM6x7Xa?loDe|XZQREHL`Z1) z(m#tX?TG zDzH>=g4N5kj|X_kJ&Mv@xW%^GWC2;rgT4UpAGG#`kpDYcn*N;O15h% z7b-cL>Au2F+{3+(s;V>%rCuS23SSUBdHT3CTN3cfZQw7-HrWLm?>+bHl-f2}NC4Q% zhQ}a#%)mRso6$rziUYVFqv|KnRQ3g4<{RFe8VwExtc5D&Be}<%M3~91tH`*3+I08+ zP#P~^UM;s#@$&koLHlrUP1#1#Im&TxO5BdA4k75T#&i%O_Rh`E~dByFJ$ z&%v|s_Dt-GJ@p$LOcmYXCZ#T}dDKpp>g1HOHR}LBB??( zP0B8vkjw67=|o`hp&%-pxN-mMHw$?@E*FcrF5D74yA`%!30UH<2^$@bDrzjl~SK89(!JGatK@D zfm1Akmb={eo+JgntMz-) zgI#`gq1mD;BoaeHB3UuFebU~=S#K{rjoIlXZ%Ec_YLxbs!71Wf$5$WJy)xgYJv%iZ zG@yQrupD^0`D8PPS(eyXp-t+VIW5@Chqo!U3*v|^_J*Ab%S{fFsXkeOr&OSZZEc;% zLt9@??^tGXlbj;a>5C_Cw9hW3VxhTnMptg$3v&zV^gD~~nN}2OS>7By`&wPiSE7P_ z0a)ENM$K#^&JIx$TcQKKG4aFkx4mU#i!9SlTkvG+1m6e^6w$}vW80}z+`fm^jUSlz zvznlj3VFxbiR$Z=fSN;zCa87H?|;smSZY|?g^@ZNCDXx5#4F!E*~cO`%wIC?{IvBY z=6Rf4<#5=ukZfLU^d_M}m{KZnj+`dSgMNO$=1RrvH`>?J!u}ceGAw|(LW5}gV4V&B ztqp+$?8Cm$9mwI5Lzr*nZeDve|+->=$EVfqZZMXE@pX zd&{wtr z972>xb*zXaE=B}hpcaXM#Y$N!Z_>>dU17@-`;}_UjY(G(Cgs0#<1~eV7>J=!-mk3= z>eg_GQju@Ilo|H2#^z&FH)xXogC`ix@YcnygOMv~$h015U|?Ki>mgr#iET#TS( zw3`CPk(9VHu4c`NJS`~>C17-P67=<0`yuGqq#Cql=TwulZ`9n25U968UeQht4)?T& zVQ)-?L6yiDmZ;$=j4ksBD-52<@^#yW6gI>FKjj4132Kt0IOGS9wkQ8h6J1mC#KjFs z!8ugV!ypg$i<08K>$Ejdaa&yacRV=52HMwY4<%tgcx-k1vcF84$C1*_B*aCIW(U`J zs}Vg-$ILZw{F2*khoP#D4v@3&r5cr*ooqqX+7Ei!Q_yXJSdd~U5&p_9E0`zEycrLr zeTUlOZCS7z`Bx&0GyZso@@xd!&thyyc~Y%eTi&+!#=|{}$j?1tQR?{!VV$c+DCHZdljQ}<9IY@uby&*Pw zLtb4Vb{Cy5668BT->MZ@rwR5E{@S{sd{IvVE$xer!(lQxm_ht{ZC*sSmXzxd23V%R(Aa zZC_)s8frtfF@%=c)iJ4p^?%83)VvfD8sCrU1+TuUhHu}5-ZLVl|L<@lq_b%upGiLe zY7i1mh}9~?+z>i(H;dzh?L_|2g~mt%bxdA}>#lPZDg}Ae=v9J{Mt}|I^dr5sc}GC^ z@{gcuJ${SCqr)w898;?VL*5?=Nx__rn8p4f3qihbu4|E@J6eO5b*5R#hLCG24J>lg z3YwLuL^!g)tfe)#??9TmltW_grO|P<-OtX%DDs~wc8LApKaeW+M>}VwSVDslQaBdy zxxWzV@#?V8xY%OO*Epmp35s(|m?^P=YjseDh9%y3cR;C-4!_n0iRFcaiTC(A@G@-< zhUF-e{z4blHSyixKPe5maI6}WcVgQibu$uv&D-B?w62}h7;T;>OK3Qmmw1rZj{h}7 z$d4R)wn^k{{ZA=z$vgEjX=1Wr_ak_tgu!bnhDvG!&}(C?nGFb?y6O+t)-)QS4G1-2 ziq)9fq1}GKZiba1sCTRUw3PUpvvwMgO#Ds+>h-l99X_W@>dTt(P}OQXxePv==9~sC zPqtp0_Y1Gh|NgPXJu%wn&I33l?Ue?EUDxe9+DfG6xV~2NBDU?75I5p&vJ9aPMYivR z`Yf+_U(KRi0F{diSog5y0=zz%S zGwSs|Dhb`Y8q*3okM9SIwinyQ!%8nc>u?k13HQF1){}LqIsb;AL%kF%EiJ?iR)4AR zA&E-5fM)TP!w6VQ?me%W!FY%KVcb9%@Y~75wki68jO&ti`_Y|)okoj&rH*3r6q2{h)V-)aA8`ZCTP8Q zHpaaxRTki~i%Vn!-P{nH`4@Cgb;q_f@!J<1-nd#S)pWnLVO?6hSDP6XP2tow|M)#n zcelG};$c=A>xp0I1E{&lO%Y2GldbV!Y7XwT&V1Ekv}T`4nU9*K4vtSh%`y$CaTv7k z;(c2C6y6m+)EQf}*%&_-qDFgKvMTh;2()3N2P#Is;)V?AxOfyB2F>~rkw~o$_-J>z zg!n()XOl+Y3O$cv1noFBisQiwQd45pwPS-lFz^vgY53VxA!m7bTqZ^3UTSXV*$L?$ z4Y}Nh+iFR~5_iT#aqV(psXDl{UXPD?6eBwX4@|x%;7ds!kkMBHcXx7~9)sa8^N#e2 zgCnc{4T-oh38OT2dQ{NpcCLDG=wPN}L4WOo@wIIO z@C>>i281w&>^g=*bW31DJ_D+=*dqn~GbEN}3#G6FLc}jee(r_#OIMFySslpVD+^c? zX6m)T$+H7TsIk8WX2dz+wJss^Tl>&X@V3vr{nbo_0}xivGTRye0Shc#zR-5OH^(>Moq0*Rz6=iVe5 za^G9;6wl_=?_I`Pvopu_m7r|WCDYO1&D&oP56*(N z3F}O3Ts81ee&E@=irr+ZlvlZj#WD0$XTIy&e%xkY3;y0R@}In9 z^am&44Z@;u-}VuCjJ%Kto)sJA)uV4(X?|bMi<$?(gm}*iCFF`Gz()b z|Hb}%j{U6R#Qz8y{}S2b|ED%2`hO7FSj85Xp^plK)HJ2;=okJfpTcc$|DxG`|E&#K zJrY+9r|u3{BUjzvYtuV*u~C>0h7gWE+6SIWrXcCwO05_axef+W9V{3*qDX|qOX2<6 z$4xTepGO@4f-A&m)BYo9-2J~9ZEM6kIPR(E|6;Vuab$rgJ_#6(p&~5514itWX|0OO z*%#TM3=rSFfppQXG+ym_0-&otwQBOhB5%^ zu=V#3+3hg-jX$Qq$UFH0gaJ9;p?3s;gd*_)doh*Q!7sbi=W}iCicTAa zh(Y+axtz*>;oIi<@I{4kLJ#v_d^`8NF=0;mg3?A4^av(v$puD^zzFkNnB)TF zo?;dNI07HXAcot{&UdM*kca*+!(Bqq4cQMZP2mIk_nZf4agwU`dk2;HFx%RLgdt55 zAlItgNWIs%^GUh_u%gZ0H>UF+5O=iV`*BH4g+?ZPnmak73axa{8gK2}*lE%&q5%rU zoBYaBg)`|cx0WA#x*zmhcz&h;wy$0lGM0eDgjmvkS{le_%LiEAb)bdtWZwqKNI8@# z3aLIjXtHrPn~bsI5&(f0!e%J~SPN@^lXwgnPU1PPOMox$*q14aY+@q?5IESo4*bI1 zpp)N3lr(~C$+;n}D{g=9$jDl@}ak!6v$B#GBYuiJ_5yX}(P-wva!~#eH-$Pphn5N1? z6a^&fVUCu)I1n#OCg`lAoCXiRQ;q|WL)^k)91_yD8$Trw2&%l_g7UOb^GZGvFIPM= zq#!wa!CNN!s{sejD|G8k@?jI=K423EE1?|07T?Cw;(1km7Fj6bQ z4FgN6cq0K=V(7dmpB=n|1=n3_ZsP`-ObC}ZrU-aOqmGL4jlH0*Y<*4CzI)1}RlGGq za1X%ZCx7SZHd;Wr%D@YO{%z?weyH?{+j6v=723-XCvvsTv?ty3J;BvzIIu2F)!m09 zn-5|Y-r)gQzB+9W0ANoX!zwsS_UN}~AGkD?(8)vXfq&$Z4+)Ud;5H`l{_%P-m6MM! zSD^jmBe>VvNZu(V8JTX4JFh+#{YA$zXbKt%Af*v%6yg8@MOv(*$=bdgcy^_lye`C< zzh(8?{dp<^MW*uHm%{JH0&zU=72qflK}bHuS4K$MjWb3nKe>;9FPh9nqOwC|0ls)v zg31a3{&vSD9WncyG<^ofiR#V=#{pGPbroT$P@Kz-$3Pk*UtZ)s=|vM`t}Un?GlyGV z1OQLhZC>XKan6#G$-B|V*f+R60=$x}eE*^zx$jpB;DJZ54ay+;C9guGrE&hAU$hAC zTpR+|t%M*C=~bEXA#f}nGllZ7a8#vbVQ=wZD7Y&+P!U)cG%2=;k7MD?P!N$Fv^N)c z-|MR-ikTl*0dFgx!L1eYNFg}s6&K(Vrq-4RYlHzl7c-f1vYFC>`n%JI+$rJ2t1ftTIVKN-~HciklhCVLP3tfyt% zy`W|_)$jPTp>XJ~r@_F~aOBTMy5K!;3#(Vpi+?uN9KYv#cHq@``_E=Z#yx*8tJkl# z|6glE8m@PNnT!NA>sdah^=`>wMv}qctWeZ?4^F6_YGFMmQnLO;{X~80*}*w+we_9a znL0Y|#(XE7<3z_u^TcyMYEe2adnEgqD{uzrNZ`)M^74bgD@G) zoYWuc_rsg@0!N4naIeLr!`Ee9wBA7zl90<5mUkT>Ben&Fsqy<+)6QCGj+lmex2~kf zJa9otK)euHmiO8#nsgIc8g6+5K}r`bg~`Y3?{OOwMyj%V6l3hrqW-iDOKbsSirOXh zbM)Gw-w0tT%f#x~-`LQ}RY_U(gyZ66sREeDvCe>I>Nz)x*}DYB2n$f_P4}C=rB*ut zg_5BrlO7kyJDxt$a_g{(bNX~)w4E5*^ke8^VYf7jD!DJgrS_kwpWTP%~0{Srb*>&M!s1Q8_9r0$0n zmo7g?pLq+-9CDI(1{rI2t(s&+=xfqEc5iJWYYPv4NkoSmVjeH~X&6099_cSMbo%iq zD*{Xy-Zaqv^Q}qzi(>xq%VLC;-bUk#G{+!3FWlX$wZ!FXs13B7$fIY9z(g^K&mP5xi2cqhb- zVp~<9#ps(P%@}I5;`SUi5Dfd)qMFSN&RC?vVOVk3kQ``{kp{zur3@R}LvA}Se1c93 znpZ7#P$5E%&L2=2iRDu6VuGL;<`Ob|zkQmpM35mfsEtJ`oQUacl^C{29JjDH*XFIZ zPmdN4f=1Hr?Fg!*!-u`o{oq2v0Hwd4ArX_v`(NGR*_`Ootfjf+|B9R#+uOL~3G%pG;o%YKwv< zNI#yJ!pFHz5%q1L#HI`T@?mq3-c)P@Q!;0SKX_;l#nb|nkB}ulrT7cN>iaZH+9#<6<0!24(#+Ct@b&3fO zho}y%1+_ykX%|~fG@$`nDA&wn2wrOoPLG}_D9uZj-GRGz2dDH-$L3aeY10eWFd(GQvA&nJZ3+AK!2Wh>-4 zP7`^b(0P|Bg|*ok@)|{0J&>c3)TjJv$Jq0(S&vuZE{N74Y@-%Y-x%Z zoxQ5oE6y)+o9#6~Pp zom}B?rGhu2Vrq`C#^!xY#NCCg-83u|Z6*^jS5?5PDwvqMo2e{p8J)YEikq;cHqHe( zC4yFO2~QwNjwKR;(yivu zvoJMG+#>Yu$EjJR{VU|;(uN{XOX%+dJH=Mxf!$F*f_LD+rtp*k)n<)>d8$ftIuHiiU*py|F5IUOv;EpOFK7Ls%!83q#xFe&A$7l5)dQ zRoOMj2fld^5#gf4okBr32FUY@0!hbIWxYh35b5+cOIZ?g3@23(qM=3Is>GFf<{MqT zNxq0Sg&1Op#W9pg5OX zBk1cN(tPn(qdciK(XF-4pZXRJS*lT42?2Q_SIa_LWA#Bs?)|8|wgC6eS38(gwkmjf zt~Jjr@dNh*xD}(Vz1{sQPKbElZ!|VMiL~L6~@Z4?v)+H zk(hmj4;Ke>p}L$!mA&jn4`={t40iIYB#5#STC+1$YPt@z_rkr?3|8B5arsNe>FyF? zgQ5ci${sBA4&T)X- z`u&>L_tS6pgpdZ3f27~897I@Ucv@9rwaHB6eu%}AG*IA>>ervdJ zB=U)HA5#r{#0rZ}?p9T%yFYnUv1;!Wh;26Lh3q*iGocL~L%mB`f7v~{Dg^WSFd`d? z=OZQE=%@YyJIW+jZ^e^w10w^1zVVbn4K>hqc?1#BYyM)iIH>KYnykKM@T}6Gmgr!G z*V)1mH3N{r?0fwqZ7Xoh{SD2jG;GRYK|wPtUKl)7v6J(K|c znmt^*(e~K5W5#3r<@3}^2?NbIY!lW|$mThWGG?Tn)9F5mQ{;8AeX2M5RJ28*49t77 z)N%Eo{myndv;X!*{eoZJB=~i)bwQEJ$cKK8^0fT zEJq^dJ#;=gBncrO3{Al3(MgU1Il4_1DfCGsbh%3j?i=?vBw* zth;v{jef9DgVdQHFT+Qv11Xc~DbszOj+Q(59hV$ap3XLP77ff6Jv=x#>)wDcz|OkA zd3i~aJH1^rkfZ;^;b1WO;~;);bnhP7C6@(Zi82-13vQ>r(PW~L>)i505TfP@hZV>z8=TnU zbVRvdMG|0uhywM1Mr)+eSoe~|b9*V|qvIjaE`eRKQ-(0&x8r<=2Tbo!BJLf*_0Zd# z)d7jQH^@D*uFUa(Plei?r65Tz>7BwCp4v-i%tK@|c$K!D{1rP?!mv)CmJLrl;_RQ? zGcd7jiOhc$&7dxRyOgI{`(&05%i0!x8qoAT+xyVe98@vH?u_{#{+(V2J- zTkn$+pLPM?(@AaG+I zEg^8yt8>7)=kJ;DpOT-m24T@DoE_Hb^;cKmR=g5*tBZSNGoh^$Ws1O!Gh(Y(I!0jH z*94Mcu@an8R6jxXq*Lwl%Oy8%qBzA_-|7jFi%vB(SNx##8VRL6x5_*2GG}=aG4?Ga z?3*_gu20~LmgkYEL&v7B9hh>-g=Qy-YtAd*LM-o{-dp@F0`E$J#Q>i#$714Nyghf0 zZMBXw)+qNZF5}E$Aj&Mp}Lb3}I$dDoS~~2M*+KnGgR{jzsWWR+3}2L|%vQ z7FT1R0`zneTyxB3`{X?Vvz#pCVv6fFXpd8+FW(PyN!ko0| zUP&F-se1;%M!4|SV_W0+-KjeWxypcOnWI7>qcxz16(A?b#|9Zd9y(=#OanAErH z+ew3EH^T|5ST(J5@_ONUj7)_`5dE)EWL+PLy;N=l@X4IE0K{z$7y}6mG;nQ2dGQF4 zf?GoY3D`A)HGKKPZnJ;<+AzDoIViJqt2mM*7~SP`G(wmK2d5&*4$rc_m64F9r`XCw zaCi3}ET0UCoVEJw2ykonEWXn-zS#S2{6lb41gb|5O8 zVx6j1ZWiKoWVm4%K|swxN>C6k7!ONQKY=76`L!@RdjFGP8+Y*(?xJcGF7GV;P!b06 zYjZb>4Tj$ViQTbIUo;RrMqqa;4K-0l23R;F-fCqO<)qMgzO~1tH;`22mZInGpF6J~ zw9cx6tAjLA#Kd1xSn+UJ8R>Vq2B3zVKXBAAb^kH?L!P0(*+kfV=(6JP-g36Stpwdr zU_XZ4v(FKxLE}P4%NvGbVM@{dO?6Zf!Q6w%k{s58`0m}KNuSw9!kw89kp7})fG#{z zsUM+xHjeZke7E7vuP3Z6={)3_Y!?_(Dv%q@El z#>mCJCdxb`@WV*s$%kf^HE9@iA;0;*OKXDxxRYKB2~ID(aB{B>z|JE@0c^Vk#<4xW z*N*-T)g;duQfA);At$?I$bk&1xmzxR*{>YEMw7ckxT_?sxk~#?31f zjRbU6hIAxIG>j(#rp1Vb-y&lG&{^zwSus+vQuzZ42%)@?D#m>66hyI{1<8(NrJG=q zypfWTDMkvQ$42&ku)v5u>cMCwAtji*(0KrG>J+~Pi3}D*HDcU`1UU zjFR-+4LA;7kO~6;K0g@23|CIfd|K_JJ8mwz8}ma4b0}Ob-ja9vM7_sXd@UF)SsImp z3{FxiaV1J3R!q3SKt2s1do?c#f5fwnfA7^jL|Kk1~CxBq2;a_Sm4ag|de8-ZL{};3MN;Od=;>$-*Qr~H7EwqP#N!w!Nc!M=#g1$wk}T^a zBXpvoe?N)ZdLr{QlGU|8Pvj|xt&71{D7wOQQjb9L?4+qgv5<(F*h<)$$ll##gc)eg z7n`i-d0yn^kwF8?%fm@J3j$=77#-aCVGO=kG*xEu=b9DnxEh@Qj>db^M*5+stTN&{ z4YgaSKH-9B`R>n*qXGrP|Bq*u?Hhd>srAXmp=n~18{z{&C`AcA?D>(Y_V1Vm`t9*J z5ra9Two;@}DK(O7bq?3H@x@=DEzJxGNx4n?4)Oma_?OEPL@AMb%GDhA@W^qI=a2{S z8J5>HN_UX@L{wf;hh1vPe8{g9g>Vc*hE0jq4Bjd=!A~E2bOtyjDDmAt6{>HV>`J5&PJcT) z!BK(>%#{cn`a1&K*tGxZnUpk1s&%Mm!0-?JirpJo!R3qqU z@xm91^?0~&gXE0Y_#(eNfIdf+j54IpH123Lldd>NT-aF3nV6%gy&8QHlm)D%To zHsr?p9eKQUNZo8o1`O>bJw;f5mkIz^qcfX!;|Mg#L>edFt6$oJ6xC;Lo@;lJG#j)U%!$@YFE&-x#U1Cf z11(I$K2_bi;!I^N=gY2RPswb}n_QhCvqEnzcPEJKd%c+^w}F+o5t_fz!&TUFXlFg{ z@`lLZOQ#p_wl`9mKAKrh zKDG9Q?jpZ8i^^_zs@cfT9F34(4)NUC~Kdelh~k!LOlo2kfJSh#I`v>z;%zx+xGCCphw@=Q>S0Mb*1=;GEQ zVXYYExh%%0LwL7HY*EC*O`@LNgJ!>=lz=BVUg9e?Ucm?z#A)op!1(y9^#S8e66KY$`>u)A3ZKU`)qbt$DK_-bGUEOM-(kKV_Sn1#i7ucY6 zTH;%=bjt|5v8x3s4wwev{0R8KX}@%CmAbSgQ{lT{`thaM>>N6--qVU5mH$o*N-O!R zlB=Kd5{TDgOavel{lKksEwXShn5MiU=1M`!Z6^Bdlq5ak*i^6Mgy!P*C`dSZn=SsG* zFjQ^5ho;Y*#auhUsO>^UQW^V|h$=wT*>_@4RDIMmqt+@tzc0Crm{)xiCM@+Bk#l>>f{%irmM`^js%65n+Zq`6-?`Z znIw9*PC_=rw<)1O$4oec<@;hq%w=aTdonM{M%2#FyKt#hv>eE0P82o=MPRCmp1BpJ zn+hvzrmZQ1Yt(`YOwM^-yBY1`CuY~WR$O3aHEa|Nvx#r{gJGbkb-0xv`?dtT86mFD1Fi~R2)}4p2PXW4f)ANeCR&G9 zapc zI4eL8jdGZ-0EdW6-vR&Rh+H6-CX4Q&Eiead{WDSVV)lYBN>cVm$m)v7YgCuD6=F-^ z@|0@y7kJHZb(k$5FO(OuU}eMA+K}j*=?)3Dp>F0q2<8B5y58S5??*z5k^vyrg#(Ac zaAOuKjEb$H^9<8?7fE=C3Lj?TYN*&a3K|M&g($#Y5ETZ|;?UkCh-GF$8E5V1WBAh? z_%PA_vmQ9b2BzxleyD&`AZ*z3Y+EmWn<$SxBMhsH3z;J9unB4|{E(i!R8a5$vq16s#a2Ps;5Hx5&Bz%?|~6JDYY6ImY@W zR~qOrRg9P4c;21w!A6OW)ey=@M;F^=A)ND%mOn6Ydd3Q7hiD9Cg?6Yz=@0~Iij$y);RhZAaQVNd=w6S7mCQ6NI zg(E9sjhyPbMmq0i^F$M(Nd%G&p;AIxqTLv?6KPkHnhU-#E+;i2N?Nncg~KT~KI^vL zukiJ`-BOV5Hy>D1Thd%%E)es}(XWI@g4$fzmwV`nq$a@deUv>XTAU`{`r>HYt0jg6 zvE-L1;C#DuUj&}M+0@(=#Kqxe+sE}5v^%Vz8$N`&P$QcQnl*OxI}qL}k@k*$(4GVZ zR}_;Q`>3Oq58>F>=y$uZaYd}gwlhi>Or@9HNNQ-dE+`U*o&Nw~-8nNK!~!_&Il5q$ zXs5$wY2OF2E24SfqW6ni?N?fvd?VQbmW9V}SBprL%oz(mp%)3Rib-zT`@sq}#Jkr+ z+5%fk_-GlOF$vqjEI40&*Hl*Rmm=0g>0)aaVmvw}!LMD!A?#Kcp8@#9rWe7-txa_J zGJus^4f7Z6skK6$DYz0~nl*F#;nt)3ki+D#ZF$5X%>8F;K}6bF?q(?3WGeN2j^|RB z=!QZg?yahcoU}gw)NPx-f^lB>NDthq$RF1M_omP97z;ZvJ5yuw;|e=$#fEycvn7Bm z)QXsq%>$_J(Ot!pmE4Ia>AU9fa6ZVv&puDb!SyL41L2(Ek>HTJ2^1u?6^Hgoz373d zJW5_2gtjYx{c7Y6>K)GRDztF?5Y+nBG&!infjy9As0Id*2J$?DPmefU7U?@<0M@v+ zM=k~&a~NsWDWn;Ir->c+gYq7%j#PCFKDW8wsS76BKGG0lDXKnvE-`%ST~UCEi=Q`_ zq{A4Dg&mc6yp;#L{QmLI*?uT4{KcZZ-^edb8r9di0ktrB3&)xZTV#$2fGcC`FO%S~ z^q(G$i29U{kZ~9%;dRXwV|viws@N{f6Zj5a$i7gcYVD}EA!#eBY#4~Tlkl|D!?Aw3 z3A*=P3`y7r^@~Z5B|koVIpp}6SO=p8ne3Z@i=!Rr-V-qsmjr7ZW*@@IYOLSpQmyyq>Zj5YWB)z1eHrC|I!qigGFw!uxcFe(E#r6dj;wusR>IIjOu zEU^O`y-f7sy}A(E)u{?L)PHK49RuduzZ@ z33L&ew)quv``5G;b$Ina>}2wbYIXL*mL9yRz*(i44D*>oj!2<9*K5hWZ;XZOi>7;u zW)R-fw>zg0BT97e;wsJY&&^Xl8jurKOtv)ugUIKPj_U$)NNR|H;0AAJ7(P85O8!N zYLdP+J9~>3+3d6;dQGtQIXwM^^dWw~2u$Ma>)H|&Sq+lvAZ9(IY9sKNS*P$&DsK@t zgE#U`-oT1{qJh&iT;{sy9#D30`t1@!h~B@U2A-{)yJSs^*Lc%v>>2|W+;BuL*Iavj z2Yw>esXhP>fAH#}#{$h7YVSY%{GBe(yg}NY+Q$>)2TSw&m>Qly3h+@8qSBjyqRpA-jw|@brpntfI!0TdJRSU7xT11Btr3X%9r-(qW`4 z%L@h2zBj9&3*}PRkm34pE$E#3&lOrxj^(7pnB>Z@iYuQe_{u|<{H*+Zpxtk#*Y8Hp zPaVQ)U8vt9B6@*b+w!YDPAo;@>!M|`!n(IReXDuuxYN1s;q#f-J6HXq-ar!)`o!h8 zl^H7ZmyO#We;0W}1C|<4n!QM{s(S=Gdw_C(@b#&u5_8Ev`kOTA%Rl=FKMr+&6#}O4 z!(k;?6auI0Z1=ux5-nrFa3?)?`eC1DIs8gb6)B6KT0|!x8&B#Nr;UDn;!5dJfoaGc zx94l?Z*PbtKj8SOfR)ax2tHHuia2o2>q%6!>iPd9Z37OPX;4TXRn(I3{c^Q zhu4fAiZWu~CbWq{o*bFaYcrjq2URf&j~hZ@1ZdyHGx>W(r|<*|sYrja`-DJ06P~ZK zbdliRypJ2gv=8phKDe95m<7v``f=%8J);^`1}2|Yc%?Xp0Y3jwvf-blVf1O23Yk2Q z0sIC)Xt2asv0!gaJ|&*p=X7vln20gvz!f!WxhM!{5ZeVlFM4dL$`dd4-$Kp*|5?ia zMtpysf9T(rc&A;7^IF@XXHkA64wt(>+I60!5Z zC{}=yNJCkox~GrP09tGGKg74rxrekA;X`WwCcfz@oEy7~ubZz1(XXe4z9e_)T>Aj<|a1^*4w4Yxe*0GzupH=fMP5r-O z->3gz->3eCecQm@jQ(KXboOBl0DJ}w9%`I1d(CS!3Si31{;=P@M}Z4qIpO+OzBS3~ zEZ*hCOv|HYPY)kBb>s zk-!b`nHgXn3;;k zY3JahJ5T?u>aP7yRd*zcS!#&C_K&K&)UtU0h6o7)z^O}RufNE_fx2DUM}dntzap8r zuv-Y=yi)7M>p3@Xe`?#2L1$Us;Ho1V$jf7Z61d~id1uJfJxhX2-Ce#?TGp1$Jp0A0 z04>OxjN5pil)wdopSZt6x;AL-@$+0q* z|2|m2F>&(G0ZEZcUwh>eG00U zr(A}6)>P$n0iaLJG+A%FGolWG-iA}iDoWr(nTjxTZkEH`frtG0mZU{&Z~Of${omj5 z+7DF|Zcn{QM>6Ay`IJGmU0+jS08;{!eiFX3PYDdOi4{XZ)@&6j0Y6*@<>K&b2FQn0 zBGaVS_uO^Upzb}_GB&2X3h*aHlf~X-pchCOdR^SLN=5NT!RtZL|zc zgcfRG=^ImT1gHS4yG56IKZ*|;gaUw~MS9};kcq&QoN@%~QxapO+^L34L$aLtQi8Cb zzBaf2?xF^Lr%2+JU^oYx^E|vpFLwbNNJAuPmrz7HeuI>79E790lNinbkbQkC;;%qg zW7YSRyhWym6yf4g)Q)BrV#}TAPD|O<1|*yiIe&IPJua+pJjTcFa)Dz!Lt%30M8VdD z^Kcj|`>0z#!2FVh3^oyt72csCDzP#zz;4FkE|xOq?<;nyL$G*VdiXL7hBO1DC1SLQ z@(sJg^#^$o8fNt#WW!@KiKatHK(Gm#rOd{5-Ym%oMiPVIqG)sM6Fx>xub5HPah-Le zgtKa1GCwWn;?)}PXDrY2r!icL+};V7z~t_ScjDrW4bseabpb;0WWE;5Xnv77qy;tl7^%=6++Gm% z9%SJa$b{=Oy3`|<5uer^+K)ZeM2t2O(E{UKha(|9?3&_d$H)BH|X z6)g_#`pd=Ao1gYotIl*@x=0z(tzuSf8n_P!JeE)d*G{M`qs7@}lNleS4n8zfJ8yBg%|X=$X|!*4g~`+QY{8Cvq7slsyni+7U;n*1 zAWcF(sBZ#>Y%}YHJc3?|Y}j_W(a#I$bXv&E{k9)4z51)`nn$_XIs#jxYB6E-Q>Y%| z*Y0})es^_Xx_iFwr`FkhPTf0y&y$8d=6D*k8Vpq+$0dk(7#v%B3rrioHjcPWe45>+ zB$r4Fem+nenLHKImK7FhJ>~T6Tv=S@B&yAPin;#qhArv`3AH%++x=I3M1JOBeRf{Y zyar-c>GWLa`_EE-!E=T?BPuNyK2P%cy|1I~yZHQ|Z5FWl);j#hI&tkw)E-Rca`=|j z&i&t~0qeb+0lbAjk!g(dI-V**% z&|#S&|hKa*+FPCQjihf!=)EO48Mcc)1GsMwxs9C1aQNc`FCW|aspfvdtWhey`BKI zFx6}l120Q!YH%~6y-UzZ**ah&kyhsNXT5TQmek6n7eAG>9>EpBN$eg3XES;E0K#xf z1Y(>z(3G6NzTcZ26dD+mPD#nv2G?j|X)e;`oPbvwu4aSC@t}}BL2%u`)OsDzL??AU z0@I913)BYhvci<)1H$9d1ih`SSQzCq+AvRq<3gH-9P;^?tz?hzBmbugm)Od7%I*G3|U(vjDXeK zW+z?q(E8P*j~_a4N=xG|W%T)`T7LX1p4R_0+B>HWc(!C1XWT0(La ztq_wIIh`o!B3+50d)$PFqV(oB7_UU~>alu*@%ifzcn_pB>w-6I3rfxMZ?|ULQcivx z0Pm*db?Sf${e?s5;JQughN|#Kt_9B$3Suxx51TS0&Rk`hB?#`^&y6$=A5bnnyO}zT zmAW%jbUYZ2Mn|UVX3qYd#WqVrIOmx@KeWNYHPqqeIBx3^cpqJ_;^18CSgkb;ZfExS zy-f&35C(M=Hzs{DW4!%@Z>&S0EA_@}F2gyEKQ3@G5mQd&rNn7LVE7*?C=1m%SK^12 z+B=xdr3cEYltC(0gBN9ou0TY2Iax0TM&uO05HVIW_4JrrAlHN%iK911Kg zF)l3RUMMbQAyugGn1A*xpA8c~P|%`O>3qB)Nf>$&e?5;LK~c?WkPgG;B8w9}c3l-`|8x_wrOOe4dSP zUwomP&FqETpalEbGQ1TNKFusctz;)&D(?2TilM@z<815_vcX6B@mL2^GlCFO2Cq*_ zK2vmmXQjcv5;dt^34OdVy7I7SR!@Zo8AKcKNI`M?N$yI7bA9i`!DS}=G__%AC0ptd zJ>N9xQqX?0H-~59OQy@XO-Cp<%j|8Pe$vW+{Tgx^dqOQ4dos7y|u|EH+NvG8} zUB6*Ho%i`>%iMTV;Y@2(NKW|7!ANRTvzxRXvsw7X!Qha#>~(GEda1T0zskNP-M=NH zrR`i77vRfOjQcn8`*&bX4Uut|mo&n#o=N61i0H zU}fXs!mn$e3-&x|Wt|aip4V@d6=gYY?nkV!yIB5VH(*vd3OC+mZXaB~CwzWZ10VflB*Ts35Q6t&Q=fUn_G{{-3N|&v?83Fs+EQ{C+$vDj(%+| zzs^Wqt!YK9cI8L_0mSqyvodR}eM@dP4dVSUV@Gts5>7N$W%!6k>m1+EZ;M@3YW9yz z3XLRyZeaL&OPOpDbFM4iRg}%s@|YO+K;alUe_AN9avsM{rKl|TB5%h+rW zCSJY6@(x>?5nVZJU)9{s(>YlhFavHTRGU19?Py@{t?YAc* z&2)!v8*q1+K7wh4j2{GpIWa=&qv`aCw(lJui)hf2L|H*!8w>V{IMq5kV;o;_BAGSU zg}l@;+$zqq-5G}{@l)=cfjhguX3nK*%z6X{?fE_J0M31Iga`Z%os)SjjGxK=!TaKO z`#E3ixq&y(+<_v+d$fbJE@C(^4>Qp;hzoSLvO#f6b-PNo)=|LT!RHm zu!k~V&54L0M^ys^Cs&HmVMv$u$3m!E7Vniz`-CjV{b5)8``=ewl}@L^3u^_0zh5=6 z_&`JV>4U{>V~wJgtOsLJUiS#l46>AJfC^`7;8mozI6@#*AV3)Px70_iLAG1KjmJV< z8n-{bMoV==uA!9Y{+Le=YM+*l3zySj2H`32d4egv_0#bVg3w!rHLh!5ePpS+rv zw|w(O1o#DfdVu8&q`0U+CB{#gQ2$cf66smZSvVp57Fs_6KFk!!6;fbGuP+-?z&7+S zK06g$&2(Y5%YL5l8|NK6_CnnGf-j_Kv$Oo7?sffR4_1*0kKqJr=kR({U{=Iw-Muef z&l4J0C_ZQaT7$cv&HIbUTTa8cSRx5Dt`C80U(25EJC09h-rY-q35X$~G3P?!9f!NY zhoax}$lnvYfoX&cH=h>?3& zL=4|+(1Bf^$epe$nqW`qbyrk?4^&Hv)RWb`EJLKzc9kRllLOD^ma=H6o9~Gi|2GG2 zC4go@0+Ppj1PU2gx-l6LUEj3_PNJC09#VocgAUXQMhwR;TL2o%um2kdJ{-kIMBO0k z0W7+ShB<(~Dm0YWY18oi!_+-@MM#qq5Rs++c?UO;#?Brvo1VpVmW(eYgrOoH5DQ1oZ~DFpm#?-Km2qzWbuA|#ufUXbAEuJaR|vSCM`wC zXOhHLE<9F@wrm(9{p0c8{yG`m$9wc-yK)R$ue?v*QW91pW2p(8ramU^)WCp$ zap8zjkfwmtM6kHJ{so7xF+qTuH=pm(v~tt<%i0;x_n4+UXxq;Cm)kq05WdWJ0qB|g zPq+8h#Y=MU<%y)T2+yPOcF-H!^VI!H(ee@qGDtg$__9zC1tTIzS6~J<2%x27NBKj| z{iZ5{O8y=#wwXWP=qzxe@PF5QZ;V?#k=@V@0so2x*gd4Dv;j*4%=f25FcHf{OEFmT zIKLK;8Y_iV3NS13b`0Pw`1|at%YX>d(!$B_k`{;u3}SO2Ox)7x4(`Be-Njk?>{msw zeSC7>Jkfu#rC}IRQkwKXm^kj3Wf0fzYOori`M+c0uTXP109!Nl{;(|o(9%(V%-<)u zdyfEg{6+I~3Aq0c82_@+Ly1#gKglQXOttSGcpn1Bk01QU{2e*8n+U!jD+yn`1)0Bh z%2m%H)-=)$f2(z00gw)w-$-|_j*lO%?%*Q5=9-2^Iv;=+KXZ*^PM^311C{6yJ5KQf zc*xdv;TOArBr!3D|*d~l_@=v{(D(sS9arEgdM10n~fK5V=@9Iy%>J@NcK zmYXGq;pYXmNJRLzQL>N={SEKMAf8rn!(B*J=9!a#2tbS|2g_V9k`VwK5T`+RUm{3R z0TDo6Ehvp#M+`O+iM=Vy510ZhbXTyY06^FOy~&BY|K{Alj>1t$+HFZjNSMM1A^8g2rgzx{G$!efBQ!pPDag78F~cL(;JB?X)@hRrN5dZ4VI<#lha6rB`{ds zW0^1A5!c%^=(cbQ$&2ID_)LzR{ibz&K$&$?vT?T;h`mcq{yOQ^r zvCyXez1NQ}mI1#9djX>(r>&QfS`M%stSr%4K@ubh`?#nl)+_*)B1Q^oC1`%mqkya` zQu4L?5yn%7yZ#0N*m-&I7#IN-(4%)D=|C#??)`sY^3s4)diT);K@1>zzBd&=_z2R5 zBfB7NxZlsUTmNXoiG?!#TE+JYUDQ9U+>;tKBjR088(vO_>zZZDeyda=bCHmjBX5~$ z9*f(>MWXY@%O1_2asraMqDJ_T=g{ef3^=hmVmAf!6*T>ebO01(VJd079w#{bg%9c% zBEEK+0(kvD0`c^Mi^mkGWYd^uM-Iz1#A_SD5{~-8)lgM&f8BJ}a=&<i$*g!XQR3)i`?(i^O3UL9h*9b;jfeyCqm3PjoNyVjM4XYJMjktbFch-tBC+0!86 zLg-IcE{>*K%7k0*-Ti#KB^rhFes7J|c@8s0p~pyRalLxtk{U z&NM?CKw#wUUT*{`O;&>}sS8`zJVuN6co#UchJg!mx-vbj7my(u&0)>F1pgmxvu;?@ zfzy!g_Hp3M`#Q47r`b%;C^;@~PTa%S;_gAc053OTxM`FRp>GsA|9*D;5Ce=&GB*#JPt3QolxeOo?9(xy1Q@`Q?z14_vwC8hZE;c9ex@UB&jzz@R)cxeBpOPBNY!O6+R#zE2nq?gYL2uF`i zyV`S-mGBuT;C6}M^1T$!rEY_nlcGQPS|K;wSWCExD}x$hv+)6-L$v< z*UGOo=?P)e9X^kp(9FqKzgCbtB%Q8nws~7WDou7&#=ED&3W;lx60|Q)_!xiGVTseATf$(CXxT{*;My_$1kQ$sB=b!@y)I}*Wym+Q)k?|4RB@vGx z8IEQ*MyMqo;p!8@LfPv?Y8pb08eA3w+R7woEk`I=W2`s{ox*ZAF-8g|gtGX=X=k5b zmhc#pM9ow2bqvX^It^$s?SPI+dr%A?E4DRAZ1mizWLsf5 z2vtA9ILs0PCU5yXQ}R<7KsLO)u3(K^*hmQ$mQ#P1;&;)fiVDw*Pkq|t39Wg48H`d; zjQOf0qJYNt1f5WLm-NeY7r`~YW_MCiP#Pq`Szb>>w|Yi0BYCj9_Uj}pU-W^J60}bG zhLGIljW7jau3%O=$|XgGN!Mj~&6;ND!8|Nj7?Qj%nHs1T%x5S9qeC(rO@3}o%gk>g za^9A4G*pbDWzwN(kasg)uPTv0ILmZ1E<({pdMfV35MALG{4Onnt^>;2W;YATRZ%nU z-bxi^r8%;Bo{v|(gkfR4cw#MNngO~|**%r4gf?=2?;n(h4~0AfY7 z{P33)W*m7ML#}h+`T@P7F|?Wy*|!|DOi+t~IWtX=bty1MRIY)Tlkeu^qLDEo?`yM? z^LJ}{s%XM3oqR})ByW0clZ$XVI7>?y;bK~#$ zV3Id59Zw)7-(QK1Sk7df#T+*)EEo)UuB)U%kIOg^7rJAeIkV1Ps_dwi3oF)5&&|u5 z7nK_`%TREEBu>|#3DQ%B(vQR?gbT}U%+V2UKHHXAeh1>ti!c>z{UI~A5GCg|#sdn2 zAGKyd8tbW8CUhVr09U#7KnDHBSBys_7{UEs8mh@HD>0Gz0SYc?!@N@Lu%p5N6Q7v) zam8Qre2Io0xF(wC^sa0J=XnM zf5{Jd-yz$IQQJHq*6lHf^(MJm8}f~(LM=_G2*RuoOcx?#@Mbbm zA;YLlVwG30*)I;a1IzDYO#TyvTW@rC?WNzDz5>d#@63t;Dny7duiaI0XZlzz(i^^) zeMgi88GLF#55rzn-_eJ9nsc5O;Gdr6mKfkdL5G2LVIaC_0HV!nc_9TV)HP*!d$ZBW zAQn=N?-Iui(|PJa$lil(g_bl~NO=%uVTl#?Hoeu!y6@bSo7Iw`Ay ztvf8(BHe-UHu`s6(jispLm_5=Mnmb`xirkRA(TZOLX&-8MWa>|MBZNq$W*S}I^1u1 zW6v>%HNcZ$d8;7T3qlnm*}kKq+>{wdJNt~@{S}saP9ma30b+8QmPGR1ujx_ahXMti%aAs4me19Z12w;2)ctWEB;9O|?2N1sA)oNc;bC*M#3PlW5u8U>(UzGkob` z8TT+y4fN+3*%X%R&g;qT=>O0<{4xht%AKJpJAly63s~)iQ4{jjKpUmu7aid+n@6y@ zw5K)42raqDo8I!4{mT-718a1pIl+{BjLw~IRNeK!I!CXyH$a~~{_;UmVcAU_eImI+ zGlM-WAy-bT6;>YGmrUsk9$OTb+n(!_njQ1q8XMgaeT**ZQv4|Gy~2)Z4=+?3N6aVo zTcmCttz!zw-E+-Ce=IfVl!UH_j(AdbZRGRcdCEt7EMSv(`VK`JGa)`Ye9b&H+$@P# zh<#lB+>AEsygJC>Bwdn}Lshn^^L9|Kb+g2|^>F@bg%4qz5*KyRrMxG>AEj0EoIkUY zS6Q%n4U@RAsW;Y`FlfSP^-WDDK>v zH~Mw!?#+V%A!^OC1|WQM0>)wv{feA9T6gzjbCg+9r+SB0Sg%}YpKPHQP3H-8rQ=aE z6Kval?_fVl@})fbhW5eOZJ9(fy-7p_W?_e?3!%w{q@NaSTpBULFFqsNx6`^X|y`Vik^Z)cnD58i@3cE zJ>LD!Gc$fF0es*Yzn$bxI&bxLcp-#jn z1TR1Z?3-pwJCvp4uLf!DahvNnQLs{eeM$Q0^=&?MTuqp!R)gaDQg+2idJ6vc@weOQ z-14+X#D0Rm)ZoZF>3Fc5dZ=G^#cMHPRr^eXBs3SkV%ma1_2Wg zFep;Qk{~50YOn!<8jz}}0qHdfE%eYqPy?cXH6R_ufRrF0K|#O@DoRtagDvm$xAr=F z?K95%2b}YT4}8qX95c`T+}C{xVG`VjQOoysixqd@_h~W)f9!e(W62T81H0d@{K7z7 z-?UgWKA{Yp`$cNp$9pBW^23wWffI}_l52>{*4bq(M9a>c%&OBXhq!;rQ7_&p3RmNl z8Dir3w8j@yyfq*7bh?Zy&nx_D=^|nU1!&Q{3n*`}Ogq z0Q}nkXW70tuQ0H{Vjk?)f$ssX-?)O~ThhSt)i@^*F)zEs&Q>0Rej`KE(fIGYFsSVc z=YU@_ZX{+)$w7B!hLpzgMchvT{s9l0#ggJEV^7^#R$VvoK`eJVOv;YwF9m7vUPyN^ zC$8ho6CT|BCC2kshcga)|7YgOg)+~c|DVj0^S|NaaRzBH&Bzwi7z3}kflRmE)sU?8BGLoiqYVr;hW;o+GqDx6{)StiDTpC{c z@fC!RE=Hw@C@63RN%OPkKPKb)qB-^M5`3lyoU^u!9ClP zrLFEt2O_MB@)TgUiJ-P%cmxu^p~!oInVKpnSQfr4$#bg+daQI*3IB?8&5^7o+ z_-spq$Z;C9b}9Z#j(1S>=zFv92zi1dwTeaIq1*IqZC#Phb$d@$>4l(x#J~nypm{=- zkTqLUDLx)6MYaXbioZ^q{rsKxmmI(AeR$Wd0BG_Os|u0hNQfMFRY&~~a$N5pa9pw; zG(sAIXma;r5DW2$U^Z}c4^Hn22NxRhU*tH(2PRw@|7RN#fX?@OvN)?kw!>wZ>*>-` zzZ13r72}trf%8c6?D>+$`S)$<8yxbh-M?AVH?L4CnNl&vjtsd8z!srM_NlM)^U{tFdn=-EhX=)JHRP(V5WkK_f3>#;kxv4FGrUD;}Y>WNZE zt()$J2pNFDlDmoP8rnOr>2_ij{9^(FIn{;Z4?>fd@4nku;wwKFqQ7htE5jr?`hRS0|9Fz6&P8-7Vk z04S-B^9O!>{~+{JZ>A)KOLZKud1S>iBuN2!aC8ohH;puHW6`}Uj5f7N+jG<`z4$# z;5a8nS-Th8a5}fVFEIu>qPnQ}9aN}R2;hhUR}P?KTZIm$qKNI|2UHu8u*D=Y6hFWx zuayn=M@ZQ+0HuGy;qB|Wt0i!911E5|jLx>%KJ>3e0JWu9D-F=BByG-F#>8u_c@o;1 z;8N{7^D%@toT3C!qz38E8WRtsm8v)Jym8R@*|I}NOnq(Mm#j=a&gTe-KoH)YWLf0D zqRcekdUHq`h9qojq1U1{xjH)Y%tPuk$qi{rx-d6F*J_eZ%GzP6jq3?C<<>>+E>*bH zR&VK@)zqGPN6(D3d1=@g5WT~dgC_w1@+y(H_Sd3fBRK&e)9>z@%iL3uQMD;_UA6&b zE#P9~qnT|X=|wymF0f6|q>?8g7x=1lc+OtCOR$w3kb>P4=(J9HU6L}iV&!7ldmzo8 zx8hRmN+VVt1v!Zr#dT@BvlIb39V(!h0No{3PJU7HZq7&bp5FsEoSZucKqGhPTrc1U z8)pU4;rV+-n^eDMoq_1^PX=~Q*astjQuP%xMO_P`J@{Xdq3Ul1ga5>ofi`-+Yx>Mc zAGrtW-x5|w_L@C*eE9!x)ABziFBe`!M~vTvp_2$;M=HZR;cm~hl(hY2vepZHm>RlM zt(lHo;mU^{ zTFn|f|0l58;hG{@rUF^CE7Z^Bog!KHC31%M)wg2+vqQK0s6X0d#^u)Gy~q)PfSus^;&M^C)9CvU!jSS@L2HLM@P#@ z)RH@cCbr{@mG6B68!Op?ue|$L+KINcuPB|>V*Iq6fICPXHeI~?_{Z};PZ!d5AUn_k zTEKZ3-u8RY#Dv-LQsu+(4*8E|$Ib(aI+9+?Hf${-rl@Rnr$BgXZ@WvFR`e@*KNrn< z%IWq$Poy$P^ad+>`nk8GNAm!uSY*(Yr=1Cd)wTuQAfD$xp2}hKEnz$?xTWA$P6} zAC041UmDlP$UGR#k=(XVXp4K9TxW7HovG>Hn0S+?PczhA4erutfC+#U@8&wBxbV-ohHGvMD zzTpY?I!xy1(Eu_!l950eSJb{Ky^poonx^>6Jl2t<`io)(tx&cA+xF9}oGHP3n^ix7 z$?y)e9mPeWn2b}D(HF}dDLxth5^pGEn!Yx*W(A*EQi-a92UdogvJ%7n?EF?K9&DlG~A% zGTCz^MdB2C-p}Pn5iHX(Tgz54XeLv*J|aw%Ei?sh@G~MtL#!!0lMUd*h!C?{e2Iux zr3;=TC4I02<0d1OW=+F{QBii$coFZB2!>J3Eqa@T>@$Iim#Z8U>sY*Bw3IS{S1O&6 zBB{9Wr%OqRS1eu2{Ic3zPbtz|k2n;ZNX<*q=bd&` zgho2$92AWM@&;WBpZgUB1ms>THlAB7Ozw`X;&T7E6tVkQPm7C?@)@ZQMrZ`@dfERmLJ1VYhIkSeC^+77BXd>D7LdlOF6ZgoJg;g@FSy!*r z(uE3C)r4!22&Q3~bh0mvyQ1g_t!Ub}G-877tB9~lErSd@CzWk4cALaox!r~E;d%tV zhK2SNARsB{0%XEwAi@^0KP``ILGkN1;yeH7d~?M`GS;7gkQE?2S?C*dpFd3gn?-CG zz;_a7Uba`voGoi`RD^*1jXF5hGv(@MSP$rtT86UUUF6l%%7=v5Rsybfv0R5MXLL+% zrJ?K)ue^bWt)XDcSeUX&bUE(=N>zHx+=VbGJ0xSu2{Qd+*;u0gdQZ7>mXs;f)f7lK zkk7wY0^WcqA{pa&*=-AkmD`ZF@0k2r@+I%>msoCaeKP2O=8}r@rK6XPm#f1h{gyBxe7`$#}2}wSxl%i*(JbtrzN_s z25$%uhIF6q9+M-pi7%IlMPMp^W2$-${Ca?!_FdGsf#loZi+5`k@)4`?Y^!?C?8rTF0yWxOq<#`dI;@HIvo}1eQpbNT!VS{ zwbs~G?$CpP$hcI$*S*0?CQp+rXn+<_=iMe0Fk=q&3kp&fmd-#vsS@eNB{i62u5ODv z+%@&gZ*2Vm>zh3;9t$>DLvcOV3iQ%wh+hL9+0l5=F|#zXfg@A2*ZO3X%;~J6W}gT=Y2c7vlw2h}{ zTZ0ooSahF>%ktSwjaIYaNWsrU1Z1F|Yzl0vGd|u7XUi>^--5X{9-nU`PTde*$*Hdi zhOTp@WNvdE%dwK5%|safJ+}}Ml>WS}4G|PLit#85mzrI}xnh@;ADTHR8c*r%zTQ~MTiAmzBk)QA2c1Lwh$A|ko7jV%*wF}OQ>OebgmbyQM+xMH&QiMz15!F8T+UxPZ|tN9 zX*6Utfedn+ff2}FJ?*c_OR9C} zO2&r}&KW&l<+z`g8*#b+kwU+Rb^^M`iR*&97jV_1PkQi^ zbw}%!F$r%U>h~~=CG{q7%>2YCXYncw5EC>h`cMU3DG(a;?_&ylFH+U^EULjT_D}ttK_NqOrl+1RDZ%0hj zA#x_46}OD|5TEb$7#ht?Q2H@(_&X80QO$btJgy@_ney=CiS(qv7bA_q{W2n=r<|Hl z_$T(oq)Nok&EP@uQ|b3l;uWw9&p2^vE%>aITW%4n$3>=sUX`pVq9^Ww%cDOo$Typ_ zma%t~vf3{Hnj&O9*5sYFa!_;zpP2l45nmTRvGWus5>ASF^~Df82;@>}eQJ{rDfeHI zwR=Q40aR9x8J5j{L&;F<&_P>9+pnz$<^k(PbvZ+m}=SyD1Ysabd`Ypk$+n#jg{>rEwogqEd8&!2olG{q{jUY|I0+fK|s zE%%yXj&(SkMl6@Jrl6|N&FwJ(uO9BQaE>yZoNeDVqf5mqGm9S=8~4-UQ?UygTNEAu z)p^fsb!+i)3|N54yNB99m@lk|;>W4O75;ehTrS+=Q-L`PV;!rz$dmRkpMSo~`U~T3 zepb&N5CsmYzk$dh7p?Y*!ZJys7(Ptqa~ucm@44&Bs7hOBUKTNfHJj*Pe8$ z`+770fD9lv1JUr2Mh00K2VB0AhC#rlpEDrkXj)tFxWD`_at%qgk0d0+UG*)U7GJO> za)Pq~m=659C=nMuNjTGa2o0E-hDak=)<}IF5FY6y4S;*Fw)T_B^z~#oNU@{S0HEYq zyB6AS4eVMNUS{PksNz`0mR_k+98o(EqAC6Sr~IVM4z=^rC$CT@1ArM5$%JGc#uyMr z&ZEESDo#qhw9n0T+x9MZvdZrETmS&Zv`8T2x_NBtK(jnc4GznDzI`ReJCh?B_Y&zo zOw{iqRDC%LvUy0GK6C6@!~kps4tZc_DU!d!F(Xz$tjFm7);Nz1<)i z+a^EqAnrHD|8)*+b>D-1NEm%PbUCRHNwHmRx+q8rWZK^GEIE;eNWFlhN-yT{GEvTc zdA57>ko#m%p$ZhNStAkyxRCa#o*h_*+KpeoF5z>+4gN~D)l~{2AE8+HEa_4kz=Bov zfX=+hm99Z%;m#=k&g3YuF+cmdtT+J#S{hXBX9sRzZB$3CnglPNa6D{aDT95#0k`_A`3?XDR4cTA66%LU*+$; z>m{UkFNn~}QT97ip zO_lncaHN^*`8TJMEM7NIIVXRA1=6%@@-Lp>LceiYx2Kiz3CR~e(wcSx+p)9%<=nQL zc}ah}^_Lz%=`?#e>D@5=V{dGwMKv&fF=~7VACCWgl@gO4z3cibDfcyjFXc`G=vY2f7v~PCYVk0vYA3AmP z{*nZkrs#n;bX4?!7Ozj)%NPTDqoem%;XG~BQ@sFn|8m7U-|(9Nf;oD*cUD2rwI~uN z!)HC@#zgj||CVfjlz(6ca##FslI;~e1^@${2o>v$KH*hoSor*Lq|Sl^z=j}v%EYUS}x-P2w^8DP#-K4ib`@i zjg2RIywo4+NO)adfBYOCPC3WikP%w9f`f>RR5zQM+%smDN&Z+_uYr!&lh@eg2MI-mx*B={$B}3ON7mESeY8%mp%ulzu@vlfEs%7U^ zirZ0NE+(anG@PbvXuI+=Lf+|7Id;2Ir^04~!)9fkcuxK{rEFf8Nmxp8DBnh5rH@nt zoQ`*Q^^(t>>6VwS%fjw_RYi%-q0GTX&Pz>J&4Sf?pdHCe8^6}jGcWI}+CF;u;MdEp zgO?99-5b3g_4Nuv_KIuo_D6MRzFzg;dF9~$oyc`~<9F_IT^Gp71)BR;6SCm?~n~d4=J@OhGo`U@)P+WhSrId2uIDep=vw2dV z4mI}jbq_tFywgPokwY#dbYbL3B@d5YJfO+pzu6&u88lp6ce!KxH98Z}j46Ml=DKCtL})vIB+W(>P^$ECogBfZMDWN#aHhmzbo736&xeXE+)U@xA4$8+=Iu~-KqK#< zKl*MC$2Kji?N%l=${yKj`k7$b@xWq8ry-5b)k7I*DD&*aL8{fxWt2&HMIoV>_32`~ z34O^DR#}kvRqoH|c2!1?hZ)}pd(U}_6jrp

?WHDbueECY{P;A@VwKX1&us*)SH&v7 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�WL%;FSrQ+~T_;PD-NIj7 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/non_periodic_boundaries/index.html b/v0.8.7/tutorials/non_periodic_boundaries/index.html new file mode 100644 index 0000000000..1707a8427e --- /dev/null +++ b/v0.8.7/tutorials/non_periodic_boundaries/index.html @@ -0,0 +1,90 @@ + +7 Non-periodic boundaries · Trixi.jl

7: Non-periodic boundaries

Dirichlet boundary condition

First, let's look at the Dirichlet boundary condition BoundaryConditionDirichlet.

BoundaryConditionDirichlet(boundary_value_function)

In Trixi.jl, this creates a Dirichlet boundary condition where the function boundary_value_function is used to set the values at the boundary. It can be used to create a boundary condition that sets exact boundary values by passing the exact solution of the equation.

It is important to note that standard Dirichlet boundary conditions for hyperbolic PDEs do not make sense in most cases. However, we are using a special weak form of the Dirichlet boundary condition, based on the application of the numerical surface flux. The numerical surface flux takes the solution value from inside the domain and the prescribed value of the outer boundary state as arguments, and solves an approximate Riemann problem to introduce dissipation (and hence stabilization) at the boundary. Hence, the performance of the Dirichlet BC depends on the fidelity of the numerical surface flux. An easy-to read introductory reference on this topic is the paper by Mengaldo et al..

The passed boundary value function is called with the same arguments as an initial condition function, i.e.

boundary_value_function(x, t, equations)

where x specifies the spatial coordinates, t is the current time, and equations is the corresponding system of equations.

We want to give a short example for a simulation with such a Dirichlet BC.

Consider the one-dimensional linear advection equation with domain $\Omega=[0, 2]$ and a constant zero initial condition.

using OrdinaryDiffEq, Trixi
+
+advection_velocity = 1.0
+equations = LinearScalarAdvectionEquation1D(advection_velocity)
+
+initial_condition_zero(x, t, equation::LinearScalarAdvectionEquation1D) = SVector(0.0)
+initial_condition = initial_condition_zero
+
+using Plots
+plot(x -> sum(initial_condition(x, 0.0, equations)), label="initial condition", ylim=(-1.5, 1.5))
Example block output

Using an advection velocity of 1.0 and the (local) Lax-Friedrichs/Rusanov flux FluxLaxFriedrichs as a numerical surface flux, we are able to create an inflow boundary on the left and an outflow boundary on the right, as the Lax-Friedrichs flux is in this case an exact characteristics Riemann solver. We note that for more complex PDEs different strategies for inflow/outflow boundaries are necessary. To define the inflow values, we initialize a boundary_value_function.

function boundary_condition_sine_sector(x, t, equation::LinearScalarAdvectionEquation1D)
+    if 1 <= t <= 3
+        scalar = sin(2 * pi * sum(t - 1))
+    else
+        scalar = zero(t)
+    end
+    return SVector(scalar)
+end
+boundary_condition = boundary_condition_sine_sector
boundary_condition_sine_sector (generic function with 1 method)

We set the BC in negative and positive x-direction.

boundary_conditions = (x_neg=BoundaryConditionDirichlet(boundary_condition),
+                       x_pos=BoundaryConditionDirichlet(boundary_condition))
(x_neg = BoundaryConditionDirichlet{typeof(Main.boundary_condition_sine_sector)}(Main.boundary_condition_sine_sector), x_pos = BoundaryConditionDirichlet{typeof(Main.boundary_condition_sine_sector)}(Main.boundary_condition_sine_sector))
solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
+
+coordinates_min = (0.0,)
+coordinates_max = (2.0,)
(2.0,)

For the mesh type TreeMesh the parameter periodicity must be set to false in the corresponding direction.

mesh = TreeMesh(coordinates_min, coordinates_max,
+                initial_refinement_level=4,
+                n_cells_max=10_000,
+                periodicity=false)
+
+
+semi = SemidiscretizationHyperbolic(mesh, equations,
+                                    initial_condition,
+                                    solver,
+                                    boundary_conditions=boundary_conditions)
+
+tspan = (0.0, 6.0)
+ode = semidiscretize(semi, tspan)
+
+analysis_callback = AnalysisCallback(semi, interval=100,)
+
+stepsize_callback = StepsizeCallback(cfl=0.9)
+
+callbacks = CallbackSet(analysis_callback,
+                        stepsize_callback);

We define some equidistant nodes for the visualization

visnodes = range(tspan[1], tspan[2], length=300)
0.0:0.020066889632107024:6.0

and run the simulation.

sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),
+            dt=1, # solve needs some value here but it will be overwritten by the stepsize_callback
+            save_everystep=false, saveat=visnodes, callback=callbacks);
+
+using Plots
+@gif for step in eachindex(sol.u)
+    plot(sol.u[step], semi, ylim=(-1.5, 1.5), legend=true, label="approximation", title="time t=$(round(sol.t[step], digits=5))")
+    scatter!([0.0], [sum(boundary_condition(SVector(0.0), sol.t[step], equations))], label="boundary condition")
+end
Example block output

Other available example elixirs with non-trivial BC

Moreover, there are other boundary conditions in Trixi.jl. For instance, you can use the slip wall boundary condition boundary_condition_slip_wall.

Trixi.jl provides some interesting examples with different combinations of boundary conditions, e.g. using boundary_condition_slip_wall and other self-defined boundary conditions using BoundaryConditionDirichlet.

For instance, there is a 2D compressible Euler setup for a Mach 3 wind tunnel flow with a forward facing step in the elixir elixir_euler_forward_step_amr.jl discretized with a P4estMesh using adaptive mesh refinement (AMR).

+

Source: Video on Trixi.jl's YouTube channel Trixi Framework

A double Mach reflection problem for the 2D compressible Euler equations elixir_euler_double_mach_amr.jl exercises a special boundary conditions along the bottom of the domain that is a mixture of Dirichlet and slip wall.

+

Source: Video on Trixi.jl's YouTube channel Trixi Framework

A channel flow around a cylinder at Mach 3 elixir_euler_supersonic_cylinder.jl contains supersonic Mach 3 inflow at the left portion of the domain and supersonic outflow at the right portion of the domain. The top and bottom of the channel as well as the cylinder are treated as Euler slip wall boundaries.

+

Source: Video on Trixi.jl's YouTube channel Trixi Framework

Package versions

These results were obtained using the following versions.

using InteractiveUtils
+versioninfo()
+
+using Pkg
+Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
+           mode=PKGMODE_MANIFEST)
Julia Version 1.10.4
+Commit 48d4fd48430 (2024-06-04 10:41 UTC)
+Build Info:
+  Official https://julialang.org/ release
+Platform Info:
+  OS: Linux (x86_64-linux-gnu)
+  CPU: 4 × AMD EPYC 7763 64-Core Processor
+  WORD_SIZE: 64
+  LIBM: libopenlibm
+  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
+Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
+Environment:
+  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
+Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
+ [1dea7af3] OrdinaryDiffEq v6.66.0
+  [91a5bcdd] Plots v1.40.5
+  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
+Info Packages marked with  have new versions available and may be upgradable.

This page was generated using Literate.jl.

diff --git a/v0.8.7/tutorials/notebooks/DGMulti_1.ipynb b/v0.8.7/tutorials/notebooks/DGMulti_1.ipynb new file mode 100644 index 0000000000..dcc774ebc0 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/DGMulti_1.ipynb @@ -0,0 +1,478 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 8: DG schemes via `DGMulti` solver" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "`DGMulti` is a DG solver that allows meshes with simplex elements. The basic idea and\n", + "implementation of this solver is explained in section \"Meshes\".\n", + "Here, we want to give some examples and a quick overview about the options with `DGMulti`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We start with a simple example we already used in the tutorial about flux differencing.\n", + "There, we implemented a simulation with `initial_condition_weak_blast_wave` for the\n", + "2D compressible Euler equations `CompressibleEulerEquations2D` and used the DG formulation\n", + "with flux differencing using volume flux `flux_ranocha` and surface flux `flux_lax_friedrichs`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Here, we want to implement the equivalent example, only now using the `DGMulti` solver\n", + "instead of `DGSEM`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "\n", + "initial_condition = initial_condition_weak_blast_wave" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To use the Gauss-Lobatto nodes again, we choose `approximation_type=SBP()` in the solver.\n", + "Since we want to start with a Cartesian domain discretized with squares, we use the element\n", + "type `Quad()`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "dg = DGMulti(polydeg = 3,\n", + " element_type = Quad(),\n", + " approximation_type = SBP(),\n", + " surface_flux = flux_lax_friedrichs,\n", + " volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))\n", + "\n", + "cells_per_dimension = (32, 32)\n", + "mesh = DGMultiMesh(dg,\n", + " cells_per_dimension, # initial_refinement_level = 5\n", + " coordinates_min=(-2.0, -2.0),\n", + " coordinates_max=( 2.0, 2.0),\n", + " periodicity=true)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n", + " boundary_conditions=boundary_condition_periodic)\n", + "tspan = (0.0, 0.4)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "alive_callback = AliveCallback(alive_interval=10)\n", + "analysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))\n", + "callbacks = CallbackSet(analysis_callback, alive_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Run the simulation with the same time integration algorithm as before." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, RDPK3SpFSAL49(), abstol=1.0e-6, reltol=1.0e-6,\n", + " callback=callbacks, save_everystep=false);" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "pd = PlotData2D(sol)\n", + "plot(pd)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(pd[\"rho\"])\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This simulation is not as fast as the equivalent with `TreeMesh` since no special optimizations for\n", + "quads (for instance tensor product structure) have been implemented. Figure 4 in [\"Efficient implementation of modern entropy stable\n", + "and kinetic energy preserving discontinuous Galerkin methods for conservation laws\"](https://arxiv.org/abs/2112.10517)\n", + "(2021) provides a nice runtime comparison between the different mesh types. On the other hand,\n", + "the functions are more general and thus we have more option we can choose from." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Simulation with Gauss nodes\n", + "For instance, we can change the approximation type of our simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "initial_condition = initial_condition_weak_blast_wave" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We now use Gauss nodes instead of Gauss-Lobatto nodes which can be done for the element types\n", + "`Quad()` and `Hex()`. Therefore, we set `approximation_type=GaussSBP()`. Alternatively, we\n", + "can use a modal approach using the approximation type `Polynomial()`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "dg = DGMulti(polydeg = 3,\n", + " element_type = Quad(),\n", + " approximation_type = GaussSBP(),\n", + " surface_flux = flux_lax_friedrichs,\n", + " volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))\n", + "\n", + "cells_per_dimension = (32, 32)\n", + "mesh = DGMultiMesh(dg,\n", + " cells_per_dimension, # initial_refinement_level = 5\n", + " coordinates_min=(-2.0, -2.0),\n", + " coordinates_max=( 2.0, 2.0),\n", + " periodicity=true)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n", + " boundary_conditions=boundary_condition_periodic)\n", + "tspan = (0.0, 0.4)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "alive_callback = AliveCallback(alive_interval=10)\n", + "analysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))\n", + "callbacks = CallbackSet(analysis_callback, alive_callback);\n", + "\n", + "sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n", + " ode_default_options()..., callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "pd = PlotData2D(sol)\n", + "plot(pd)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Simulation with triangular elements\n", + "Also, we can set another element type. We want to use triangles now." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "initial_condition = initial_condition_weak_blast_wave" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Since there is no direct equivalent to Gauss-Lobatto nodes on triangles, the approximation type\n", + "`SBP()` now uses Gauss-Lobatto nodes on faces and special nodes in the interior of the triangular.\n", + "More details can be found in the documentation of\n", + "[StartUpDG.jl](https://jlchan.github.io/StartUpDG.jl/dev/RefElemData/#RefElemData-based-on-SBP-finite-differences)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "dg = DGMulti(polydeg = 3,\n", + " element_type = Tri(),\n", + " approximation_type = SBP(),\n", + " surface_flux = flux_lax_friedrichs,\n", + " volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))\n", + "\n", + "cells_per_dimension = (32, 32)\n", + "mesh = DGMultiMesh(dg,\n", + " cells_per_dimension, # initial_refinement_level = 5\n", + " coordinates_min=(-2.0, -2.0),\n", + " coordinates_max=( 2.0, 2.0),\n", + " periodicity=true)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n", + " boundary_conditions=boundary_condition_periodic)\n", + "tspan = (0.0, 0.4)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "alive_callback = AliveCallback(alive_interval=10)\n", + "analysis_callback = AnalysisCallback(semi, interval=100, uEltype=real(dg))\n", + "callbacks = CallbackSet(analysis_callback, alive_callback);\n", + "\n", + "sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n", + " ode_default_options()..., callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "pd = PlotData2D(sol)\n", + "plot(pd)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(pd[\"rho\"])\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Triangular meshes on non-Cartesian domains\n", + "To use triangular meshes on a non-Cartesian domain, Trixi.jl uses the package [StartUpDG.jl](https://github.com/jlchan/StartUpDG.jl).\n", + "The following example is based on [`elixir_euler_triangulate_pkg_mesh.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/dgmulti_2d/elixir_euler_triangulate_pkg_mesh.jl)\n", + "and uses a pre-defined mesh from StartUpDG.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We want to simulate the smooth initial condition `initial_condition_convergence_test`\n", + "with source terms `source_terms_convergence_test` for the 2D compressible Euler equations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "equations = CompressibleEulerEquations2D(1.4)\n", + "initial_condition = initial_condition_convergence_test\n", + "source_terms = source_terms_convergence_test" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We create the solver `DGMulti` with triangular elements (`Tri()`) as before." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "dg = DGMulti(polydeg = 3, element_type = Tri(),\n", + " approximation_type=Polynomial(),\n", + " surface_flux = flux_lax_friedrichs,\n", + " volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "StartUpDG.jl provides for instance a pre-defined Triangulate geometry for a rectangular domain with\n", + "hole `RectangularDomainWithHole`. Other pre-defined Triangulate geometries are e.g., `SquareDomain`,\n", + "`Scramjet`, and `CircularDomain`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "meshIO = StartUpDG.triangulate_domain(StartUpDG.RectangularDomainWithHole());" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The pre-defined Triangulate geometry in StartUpDG has integer boundary tags. With `DGMultiMesh`\n", + "we assign boundary faces based on these integer boundary tags and create a mesh compatible with Trixi.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mesh = DGMultiMesh(dg, meshIO, Dict(:outer_boundary=>1, :inner_boundary=>2))" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "boundary_condition_convergence_test = BoundaryConditionDirichlet(initial_condition)\n", + "boundary_conditions = (; :outer_boundary => boundary_condition_convergence_test,\n", + " :inner_boundary => boundary_condition_convergence_test)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,\n", + " source_terms = source_terms,\n", + " boundary_conditions = boundary_conditions)\n", + "\n", + "tspan = (0.0, 0.2)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "alive_callback = AliveCallback(alive_interval=20)\n", + "analysis_callback = AnalysisCallback(semi, interval=200, uEltype=real(dg))\n", + "callbacks = CallbackSet(alive_callback, analysis_callback);\n", + "\n", + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n", + " dt = 0.5 * estimate_dt(mesh, dg), save_everystep=false, callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "pd = PlotData2D(sol)\n", + "plot(pd[\"rho\"])\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "For more information, please have a look in the [StartUpDG.jl documentation](https://jlchan.github.io/StartUpDG.jl/stable/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"StartUpDG\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/DGMulti_2.ipynb b/v0.8.7/tutorials/notebooks/DGMulti_2.ipynb new file mode 100644 index 0000000000..2428276c1d --- /dev/null +++ b/v0.8.7/tutorials/notebooks/DGMulti_2.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 9: Other SBP schemes (FD, CGSEM) via `DGMulti` solver" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For a tutorial about DG schemes via the `DGMulti` solver please visit the previous tutorial.\n", + "The `DGMulti` solver also supports other methods than DG. The important property a method has to\n", + "fulfill is the summation-by-parts (SBP) property. The package [SummationByPartsOperators.jl](https://github.com/ranocha/SummationByPartsOperators.jl)\n", + "provides such methods, like a finite difference SBP (FD SBP) scheme. To do this,\n", + "you need to create an SBP derivative operator and pass that as `approximation_type`\n", + "to the `DGMulti` constructor. For example, the classical second-order FD SBP operator\n", + "can be created as" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly\n", + "D = derivative_operator(MattssonNordström2004(), derivative_order=1, accuracy_order=2,\n", + " xmin=0.0, xmax=1.0, N=11)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Here, the arguments `xmin` and `xmax` do not matter beyond setting the real type\n", + "used for the operator - they just set a reference element and are rescaled on the\n", + "physical elements. The parameter `N` determines the number of finite difference nodes.\n", + "Then, `D` can be used as `approximation_type` like `SBP()` in a multi-block fashion.\n", + "In multiple dimensions, such a 1D SBP operator will be used in a tensor product fashion,\n", + "i.e., in each coordinate direction. In particular, you can use them only on 1D, 2D `Quad()`,\n", + "and 3D `Hex()` elements.\n", + "\n", + "You can also use fully periodic single-block FD methods by creating a periodic SBP\n", + "operator. For example, a fully periodic FD operator can be constructed as" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "D = periodic_derivative_operator(derivative_order=1, accuracy_order=2,\n", + " xmin=0.0, xmax=1.0, N=11)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "An example using such an FD method is implemented in\n", + "[`elixir_euler_fdsbp_periodic.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/dgmulti_2d/elixir_euler_fdsbp_periodic.jl).\n", + "For all parameters and other calling options, please have a look in the\n", + "[documentation of SummationByPartsOperators.jl](https://ranocha.de/SummationByPartsOperators.jl/stable/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Another possible method is for instance a continuous Galerkin (CGSEM) method. You can use such a\n", + "method with polynomial degree of `3` (`N=4` Legendre Lobatto nodes on `[0, 1]`) coupled continuously\n", + "on a uniform mesh with `Nx=10` elements by setting `approximation_type` to" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi.SummationByPartsOperators # or add SummationByPartsOperators to your project and use it directly\n", + "D = couple_continuously(legendre_derivative_operator(xmin=0.0, xmax=1.0, N=4),\n", + " UniformPeriodicMesh1D(xmin=-1.0, xmax=1.0, Nx=10))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To choose a discontinuous coupling (DGSEM), use `couple_discontinuously()` instead of `couple_continuously()`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For more information and other SBP operators, see the documentations of [StartUpDG.jl](https://jlchan.github.io/StartUpDG.jl/dev/)\n", + "and [SummationByPartsOperators.jl](https://ranocha.de/SummationByPartsOperators.jl/stable/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"StartUpDG\", \"SummationByPartsOperators\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/DGSEM_FluxDiff.ipynb b/v0.8.7/tutorials/notebooks/DGSEM_FluxDiff.ipynb new file mode 100644 index 0000000000..776b27ecfc --- /dev/null +++ b/v0.8.7/tutorials/notebooks/DGSEM_FluxDiff.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 4: DGSEM with flux differencing" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial starts with a presentation of the weak formulation of the discontinuous Galerkin\n", + "spectral element method (DGSEM) in order to fix the notation of the used operators.\n", + "Then, the DGSEM formulation with flux differencing (split form DGSEM) and its implementation in\n", + "[Trixi.jl](https://github.com/trixi-framework/Trixi.jl) is shown." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We start with the one-dimensional conservation law\n", + "$$\n", + "u_t + f(u)_x = 0, \\qquad t\\in \\mathbb{R}^+, x\\in\\Omega\n", + "$$\n", + "with the physical flux $f$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We split the domain $\\Omega$ into elements $K$ with center $x_K$ and size $\\Delta x$. With the\n", + "transformation mapping $x(\\xi)=x_K + \\frac{\\Delta x}{2} \\xi$ we can transform the reference element\n", + "$[-1,1]$ to every physical element. So, the equation can be restricted to the reference element using the\n", + "determinant of the Jacobian matrix of the transformation mapping\n", + "$J=\\frac{\\partial x}{\\partial \\xi}=\\frac{\\Delta x}{2}$.\n", + "$$\n", + "J u_t + f(u)_{\\xi} = 0, \\qquad t\\in \\mathbb{R}^+, \\xi\\in [-1,1]\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## The weak form of the DGSEM\n", + "We consider the so-called discontinuous Galerkin spectral element method (DGSEM) with collocation.\n", + "It results from choosing a nodal DG ansatz using $N+1$ Gauss-Lobatto nodes $\\xi_i$ in $[-1,1]$\n", + "with matching interpolation weights $w_i$, which are used for numerical integration and interpolation with\n", + "the Lagrange polynomial basis $l_i$ of degree $N$. The Lagrange functions are created with those nodes and\n", + "hence fulfil a Kronecker property at the GL nodes.\n", + "The weak formulation of the DGSEM for one element is\n", + "$$\n", + "J \\underline{\\dot{u}}(t) = - M^{-1} B \\underline{f}^* + M^{-1} D^T M \\underline{f}\n", + "$$\n", + "where $\\underline{u}=(u_0, u_1, \\dots, u_N)^T\\in\\mathbb{R}^{N+1}$ is the collected pointwise evaluation\n", + "of $u$ at the discretization nodes and $\\dot{u} = \\partial u / \\partial t = u_t$ is the temporal derivative.\n", + "The nodal values of the flux function $f$ results with collocation in $\\underline{f}$, since\n", + "$\\underline{f}_j=f(\\underline{u}_j)$. Moreover, we got the numerical flux $f^*=f^*(u^-, u^+)$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We will now have a short overview over the operators we used." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The **derivative matrix** $D\\in\\mathbb{R}^{(N+1)\\times (N+1)}$ mimics a spatial derivation on a\n", + "discrete level with $\\underline{f}_x \\approx D \\underline{f}$. It is defined by $D_{ij} = l_j'(\\xi_i)$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The diagonal **mass matrix** $M$ is defined by $M_{ij}=\\langle l_j, l_i\\rangle_N$ with the\n", + "numerical scalar product $\\langle \\cdot, \\cdot\\rangle_N$ defined for functions $f$ and $g$ by\n", + "$$\n", + "\\langle f, g\\rangle_N := \\int_{-1, N}^1 f(\\xi) g(\\xi) d\\xi := \\sum_{k=0}^N f(\\xi_k) g(\\xi_k) w_k.\n", + "$$\n", + "The multiplication by $M$ matches a discrete integration\n", + "$$\n", + " \\int_{-1}^1 f(\\xi) \\underline{l}(\\xi) d\\xi \\approx M \\underline{f},\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The **boundary matrix** $B=\\text{diag}([-1, 0,..., 0, 1])$ represents an evaluation of a\n", + "function at the boundaries $\\xi_0=-1$ and $\\xi_N=1$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For these operators the following property holds:\n", + "$$\n", + " M D + (M D)^T = B.\n", + "$$\n", + "This is called the summation-by-parts (SBP) property since it mimics integration by parts on a\n", + "discrete level ([Gassner (2013)](https://doi.org/10.1137/120890144))." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The explicit definitions of the operators and the construction of the 1D algorithm can be found\n", + "for instance in the tutorial introduction to DG methods\n", + "or in more detail in [Kopriva (2009)](https://link.springer.com/book/10.1007/978-90-481-2261-5)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This property shows the equivalence between the weak form and the following strong formulation\n", + "of the DGSEM.\n", + "$$\n", + "\\begin{align*}\n", + "J \\underline{\\dot{u}}(t)\n", + "&= - M^{-1} B \\underline{f}^* + M^{-1} D^T M \\underline{f}\\\\[5pt]\n", + "&= - M^{-1} B \\underline{f}^* + M^{-1} (B - MD) \\underline{f}\\\\[5pt]\n", + "&= - M^{-1} B (\\underline{f}^* - \\underline{f}) - D \\underline{f}\n", + "\\end{align*}\n", + "$$\n", + "More information about the equivalence you can find in [Kopriva, Gassner (2010)](https://doi.org/10.1007/s10915-010-9372-3)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## DGSEM with flux differencing\n", + "When using the diagonal SBP property it is possible to rewrite the application of the derivative\n", + "operator $D$ in the calculation of the volume integral into a subcell based finite volume type\n", + "differencing formulation ([Fisher, Carpenter (2013)](https://doi.org/10.1016/j.jcp.2013.06.014)).\n", + "Generalizing\n", + "$$\n", + "(D \\underline{f})_i = \\sum_j D_{i,j} \\underline{f}_j\n", + "= 2\\sum_j \\frac{1}{2} D_{i,j} (\\underline{f}_j + \\underline{f}_i)\n", + "\\eqqcolon 2\\sum_j D_{i,j} f_\\text{central}(u_i, u_j),\n", + "$$\n", + "we replace $D \\underline{f}$ in the strong form by $2D \\underline{f}_{vol}(u^-, u^+)$ with\n", + "the consistent two-point volume flux $f_{vol}$ and receive the DGSEM formulation with flux differencing\n", + "(split form DGSEM) ([Gassner, Winters, Kopriva (2016)](https://doi.org/10.1016/j.jcp.2016.09.013))." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "$$\n", + "\\begin{align*}\n", + "J \\underline{\\dot{u}}(t) &= - M^{-1} B (\\underline{f}^* - \\underline{f}) - 2D \\underline{f}_{vol}(u^-, u^+)\\\\[5pt]\n", + "&= - M^{-1} B (\\underline{f}^* - \\underline{f}_{vol}(\\underline{u}, \\underline{u})) - 2D \\underline{f}_{vol}(u^-, u^+)\\\\[5pt]\n", + "&= - M^{-1} B \\underline{f}_{surface}^* - (2D - M^{-1} B) \\underline{f}_{vol}\\\\[5pt]\n", + "&= - M^{-1} B \\underline{f}_{surface}^* - D_{split} \\underline{f}_{vol}\n", + "\\end{align*}\n", + "$$\n", + "This formulation is in a weak form type formulation and can be implemented by using the derivative\n", + "split matrix $D_{split}=(2D-M^{-1}B)$ and two different fluxes. We divide between the surface\n", + "flux $f=f_{surface}$ used for the numerical flux $f_{surface}^*$ and the already mentioned volume\n", + "flux $f_{vol}$ especially for this formulation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This formulation creates a more stable version of DGSEM, because it fulfils entropy stability.\n", + "Moreover it allows the construction of entropy conserving discretizations without relying on\n", + "exact integration. This is achieved when using a two-point entropy conserving flux function as\n", + "volume flux in the volume flux differencing formulation.\n", + "Then, the numerical surface flux can be used to control the dissipation of the discretization and to\n", + "guarantee decreasing entropy, i.e. entropy stability." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Implementation in Trixi.jl\n", + "Now, we have a look at the implementation of DGSEM with flux differencing with [Trixi.jl](https://github.com/trixi-framework/Trixi.jl)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq, Trixi" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We implement a simulation for the compressible Euler equations in 2D\n", + "$$\n", + "\\partial_t \\begin{pmatrix} \\rho \\\\ \\rho v_1 \\\\ \\rho v_2 \\\\ \\rho e \\end{pmatrix}\n", + "+ \\partial_x \\begin{pmatrix} \\rho v_1 \\\\ \\rho v_1^2 + p \\\\ \\rho v_1 v_2 \\\\ (\\rho e +p) v_1 \\end{pmatrix}\n", + "+ \\partial_y \\begin{pmatrix} \\rho v_2 \\\\ \\rho v_1 v_2 \\\\ \\rho v_2^2 + p \\\\ (\\rho e +p) v_2 \\end{pmatrix}\n", + "= \\begin{pmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{pmatrix}\n", + "$$\n", + "for an ideal gas with ratio of specific heats $\\gamma=1.4$.\n", + "Here, $\\rho$ is the density, $v_1$, $v_2$ the velocities, $e$ the specific total energy and\n", + "$$\n", + "p = (\\gamma - 1) \\left( \\rho e - \\frac{1}{2} \\rho (v_1^2+v_2^2) \\right)\n", + "$$\n", + "the pressure." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "gamma = 1.4\n", + "equations = CompressibleEulerEquations2D(gamma)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As our initial condition we will use a weak blast wave from [Hennemann, Gassner (2020)](https://arxiv.org/abs/2008.12044).\n", + "The primitive variables are defined by\n", + "$$\n", + "\\begin{pmatrix} \\rho \\\\ v_1 \\\\ v_2 \\\\ p \\end{pmatrix}\n", + "= \\begin{pmatrix} 1.0 \\\\ 0.0 \\\\ 0.0 \\\\ 1.0 \\end{pmatrix} \\text{if } \\|x\\|_2 > 0.5,\\;\n", + "\\text{and } \\begin{pmatrix} \\rho \\\\ v_1 \\\\ v_2 \\\\ p \\end{pmatrix}\n", + "= \\begin{pmatrix} 1.1691 \\\\ 0.1882 * \\cos(\\phi) \\\\ 0.1882 * \\sin(\\phi) \\\\ 1.245 \\end{pmatrix} \\text{else}\n", + "$$\n", + "with $\\phi = \\tan^{-1}(\\frac{x_2}{x_1})$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This initial condition is implemented in Trixi.jl under the name `initial_condition_weak_blast_wave`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "initial_condition = initial_condition_weak_blast_wave" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "In Trixi.jl, flux differencing for the volume integral can be implemented with\n", + "`VolumeIntegralFluxDifferencing` using symmetric two-point volume fluxes.\n", + "First, we set up a simulation with the entropy conserving and kinetic energy preserving\n", + "flux `flux_ranocha` by [Hendrik Ranocha (2018)](https://cuvillier.de/en/shop/publications/7743)\n", + "as surface and volume flux." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We will confirm the entropy conservation property numerically." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "volume_flux = flux_ranocha # = f_vol\n", + "solver = DGSEM(polydeg=3, surface_flux=volume_flux,\n", + " volume_integral=VolumeIntegralFluxDifferencing(volume_flux))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we implement Trixi.jl's `mesh`, `semi` and `ode` in a simple framework. For more information please\n", + "have a look at the documentation, the basic tutorial introduction to DG methods\n", + "or some basic elixirs." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = (-2.0, -2.0)\n", + "coordinates_max = ( 2.0, 2.0)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=5,\n", + " n_cells_max=10_000,\n", + " periodicity=true)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " boundary_conditions=boundary_condition_periodic)\n", + "\n", + "# ODE solvers\n", + "tspan = (0.0, 0.4)\n", + "ode = semidiscretize(semi, tspan);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To analyse the entropy conservation of the approximation, we will use the analysis calllback\n", + "implemented in Trixi. It provides some information about the approximation including the entropy change." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "analysis_callback = AnalysisCallback(semi, interval=100);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We now run the simulation using `flux_ranocha` for both surface and volume flux." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n", + " ode_default_options()..., callback=analysis_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "A look at the change in entropy $\\sum \\partial S/\\partial U \\cdot U_t$ in the analysis callback\n", + "confirms that the flux is entropy conserving since the change is about machine precision." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can plot the approximated solution at the time `t=0.4`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can use for instance the dissipative flux `flux_lax_friedrichs` as surface flux\n", + "to get an entropy stable method." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq, Trixi\n", + "\n", + "gamma = 1.4\n", + "equations = CompressibleEulerEquations2D(gamma)\n", + "\n", + "initial_condition = initial_condition_weak_blast_wave\n", + "\n", + "volume_flux = flux_ranocha # = f_vol\n", + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs,\n", + " volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n", + "\n", + "coordinates_min = (-2.0, -2.0)\n", + "coordinates_max = ( 2.0, 2.0)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=5,\n", + " n_cells_max=10_000,\n", + " periodicity=true)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " boundary_conditions=boundary_condition_periodic)\n", + "\n", + "# ODE solvers\n", + "tspan = (0.0, 0.4)\n", + "ode = semidiscretize(semi, tspan);\n", + "\n", + "analysis_callback = AnalysisCallback(semi, interval=100);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We now run the simulation using the volume flux `flux_ranocha` and surface flux `flux_lax_friedrichs`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6,\n", + " ode_default_options()..., callback=analysis_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The change in entropy confirms the expected entropy stability." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Of course, you can use more than these two fluxes in Trixi. Here, we will give a short list\n", + "of possible fluxes for the compressible Euler equations.\n", + "For the volume flux Trixi.jl provides for example `flux_ranocha`, `flux_shima_etal`,\n", + "`flux_chandrashekar`, `flux_kennedy_gruber`.\n", + "As surface flux you can use all volume fluxes and additionally for instance `flux_lax_friedrichs`,\n", + "`flux_hll`, `flux_hllc`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/adaptive_mesh_refinement.ipynb b/v0.8.7/tutorials/notebooks/adaptive_mesh_refinement.ipynb new file mode 100644 index 0000000000..6254f79399 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/adaptive_mesh_refinement.ipynb @@ -0,0 +1,410 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 15: Adaptive mesh refinement" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Adaptive mesh refinement (AMR) is a method of adapting the resolution of the numerical method\n", + "to the solution features such as turbulent regions or shocks. In those critical regions\n", + "of the domain, we want the simulation to use elements with smaller mesh sizes compared to other\n", + "regions. This should be automatically and dynamically adapted during the run of the simulation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Implementation in Trixi.jl\n", + "In [Trixi.jl](https://github.com/trixi-framework/Trixi.jl), AMR is possible for the mesh types\n", + "`TreeMesh` and `P4estMesh`. Both meshes are organized in a tree structure\n", + "and therefore, each element can be refined independently. In Trixi.jl, AMR is restricted\n", + "to a 2:1 refinement ratio between neighbor elements. This means that the maximum resolution\n", + "difference of neighboring elements is a factor of two." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The implementation of AMR is divided into different steps. The basic refinement setting contains\n", + "an indicator and a controller. These are added to the simulation by using an AMR callback." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Indicators\n", + "An indicator estimates the current accuracy of the numerical approximation. It indicates which regions\n", + "of the domain need finer or coarser resolutions. In Trixi.jl, you can use for instance\n", + "`IndicatorLöhner` and `IndicatorHennemannGassner`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "`IndicatorLöhner` (also callable with `IndicatorLoehner`) is an interpretation and adaptation of\n", + "a FEM indicator by [Löhner (1987)](https://doi.org/10.1016/0045-7825(87)90098-3) and estimates a\n", + "weighted second derivative of a specified variable locally.\n", + "````julia\n", + "amr_indicator = IndicatorLöhner(semi, variable=variable)\n", + "````\n", + "All indicators have the parameter `variable` which is used to specify the variable for the\n", + "indicator calculation. You can use for instance `density`, `pressure` or `density_pressure`\n", + "for the compressible Euler equations. Moreover, you have the option to use simply the first\n", + "conservation variable with `first` for any equations. This might be a good choice for a starting\n", + "example." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "`IndicatorHennemannGassner`, also used as a shock-capturing indicator, was developed by\n", + "[Hennemann et al. (2021)](https://doi.org/10.1016/j.jcp.2020.109935) and is explained in detail\n", + "in the tutorial about shock-capturing. It can be constructed as follows.\n", + "````julia\n", + "amr_indicator = IndicatorHennemannGassner(semi,\n", + " alpha_max=0.5,\n", + " alpha_min=0.001,\n", + " alpha_smooth=true,\n", + " variable=variable)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Another indicator is the very basic `IndicatorMax`. It indicates the maximal value of a variable\n", + "and is therefore mostly used for verification and testing. But it might be useful for the basic\n", + "understanding of the implementation of indicators and AMR in Trixi.jl.\n", + "````julia\n", + "amr_indicator = IndicatorMax(semi, variable=variable)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Controllers\n", + "The spatial discretization into elements is tree-based for both AMR supporting mesh types `TreeMesh`\n", + "and `P4estMesh`. Thus, the higher the level in the tree the higher the level of refinement.\n", + "For instance, a mesh element of level `3` has double resolution in each direction compared to\n", + "another element with level `2`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To map specific indicator values to a desired level of refinement, Trixi.jl uses controllers.\n", + "They are build in three levels: There is a base level of refinement `base_level`, which is the\n", + "minimum allowed refinement level. Then, there is a medium level `med_level`, which corresponds\n", + "to the initial level of refinement, for indicator values above the threshold `med_threshold`\n", + "and equally, a maximal level `max_level` for values above `max_threshold`.\n", + "This variant of controller is called `ControllerThreeLevel` in Trixi.jl.\n", + "````julia\n", + "amr_controller = ControllerThreeLevel(semi, amr_indicator;\n", + " base_level=4,\n", + " med_level=5, med_threshold=0.1,\n", + " max_level=6, max_threshold=0.6)\n", + "````\n", + "You can also set `med_level=0` to use the current level as target, see the docstring of\n", + "`ControllerThreeLevel`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "An extension is `ControllerThreeLevelCombined`, which uses two different indicators.\n", + "The primary indicator works the same as the single indicator for `ControllerThreeLevel`.\n", + "The second indicator with its own maximum threshold adds the property, that the target level is set to\n", + "`max_level` additionally if this indicator's value is greater than `max_threshold_secondary`.\n", + "This is for instance used to assure that a shock has always the maximum refinement level.\n", + "````julia\n", + "amr_controller = ControllerThreeLevelCombined(semi, indicator_primary, indicator_secondary;\n", + " base_level=2,\n", + " med_level=6, med_threshold=0.0003,\n", + " max_level=8, max_threshold=0.003,\n", + " max_threshold_secondary=0.3)\n", + "````\n", + "This controller is for instance used in\n", + "[`elixir_euler_astro_jet_amr.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_astro_jet_amr.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Callback\n", + "The AMR indicator and controller are added to the simulation through the callback `AMRCallback`.\n", + "It contains a semidiscretization `semi`, the controller `amr_controller` and the parameters `interval`,\n", + "`adapt_initial_condition`, and `adapt_initial_condition_only_refine`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Adaptive mesh refinement will be performed every `interval` time steps. `adapt_initial_condition` indicates\n", + "whether the initial condition already should be adapted before the first time step. And with\n", + "`adapt_initial_condition_only_refine=true` the mesh is only refined at the beginning but not coarsened.\n", + "````julia\n", + "amr_callback = AMRCallback(semi, amr_controller,\n", + " interval=5,\n", + " adapt_initial_condition=true,\n", + " adapt_initial_condition_only_refine=true)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Exemplary simulation\n", + "Here, we want to implement a simple AMR simulation of the 2D linear advection equation for a Gaussian pulse." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "using Trixi\n", + "\n", + "advection_velocity = (0.2, -0.7)\n", + "equations = LinearScalarAdvectionEquation2D(advection_velocity)\n", + "\n", + "initial_condition = initial_condition_gauss\n", + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n", + "\n", + "coordinates_min = (-5.0, -5.0)\n", + "coordinates_max = ( 5.0, 5.0)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=4,\n", + " n_cells_max=30_000)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n", + "\n", + "\n", + "tspan = (0.0, 10.0)\n", + "ode = semidiscretize(semi, tspan);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "For the best understanding about indicators and controllers, we use the simple AMR indicator\n", + "`IndicatorMax`. As described before, it returns the maximal value of the specified variable\n", + "(here the only conserved variable). Therefore, regions with a high maximum are refined.\n", + "This is not really useful numerical application, but a nice demonstration example." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "amr_indicator = IndicatorMax(semi, variable=first)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "These values are transferred to a refinement level with the `ControllerThreeLevel`, such that\n", + "every element with maximal value greater than `0.1` is refined once and elements with maximum\n", + "above `0.6` are refined twice." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "amr_controller = ControllerThreeLevel(semi, amr_indicator,\n", + " base_level=4,\n", + " med_level=5, med_threshold=0.1,\n", + " max_level=6, max_threshold=0.6)\n", + "\n", + "amr_callback = AMRCallback(semi, amr_controller,\n", + " interval=5,\n", + " adapt_initial_condition=true,\n", + " adapt_initial_condition_only_refine=true)\n", + "\n", + "stepsize_callback = StepsizeCallback(cfl=0.9)\n", + "\n", + "callbacks = CallbackSet(amr_callback, stepsize_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Running the simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n", + " dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " save_everystep=false, callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We plot the solution and add the refined mesh at the end of the simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "pd = PlotData2D(sol)\n", + "plot(pd)\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "# More examples\n", + "Trixi.jl provides many elixirs using AMR. We want to give some examples for different mesh types:\n", + "- `elixir_euler_blast_wave_amr.jl` for [`TreeMesh`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_blast_wave_amr.jl)\n", + " and [`P4estMesh`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/p4est_2d_dgsem/elixir_euler_blast_wave_amr.jl)\n", + "- [`elixir_euler_kelvin_helmholtz_instability_amr.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_kelvin_helmholtz_instability_amr.jl) for `TreeMesh`\n", + "- [`elixir_euler_double_mach_amr.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/p4est_2d_dgsem/elixir_euler_double_mach_amr.jl) for `P4estMesh`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Animations of more interesting and complicated AMR simulations can be found below and on Trixi.jl's youtube channel\n", + "[\"Trixi Framework\"](https://www.youtube.com/channel/UCpd92vU2HjjTPup-AIN0pkg)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "First, we give a [purely hyperbolic simulation of a Sedov blast wave with self-gravity](https://www.youtube.com/watch?v=dxgzgteJdOA).\n", + "This simulation uses the mesh type `TreeMesh` as we did and the AMR indicator `IndicatorHennemannGassner`.\n", + "\n", + " \n", + "
\n", + "\n", + "Source: Trixi.jl's YouTube channel [`Trixi Framework`](https://www.youtube.com/channel/UCpd92vU2HjjTPup-AIN0pkg)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The next example is a numerical simulation of an [ideal MHD rotor on an unstructured AMR mesh](https://www.youtube.com/watch?v=Iei7e9oQ0hs).\n", + "The used mesh type is a `P4estMesh`.\n", + "\n", + " \n", + "
\n", + "\n", + "Source: Trixi.jl's YouTube channel [`Trixi Framework`](https://www.youtube.com/channel/UCpd92vU2HjjTPup-AIN0pkg)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For more information, please have a look at the respective links." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/adding_new_parabolic_terms.ipynb b/v0.8.7/tutorials/notebooks/adding_new_parabolic_terms.ipynb new file mode 100644 index 0000000000..8b6962f175 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/adding_new_parabolic_terms.ipynb @@ -0,0 +1,316 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 14: Adding new parabolic terms" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This demo illustrates the steps involved in adding new parabolic terms for the scalar\n", + "advection equation. In particular, we will add an anisotropic diffusion. We begin by\n", + "defining the hyperbolic (advection) part of the advection-diffusion equation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "using Trixi\n", + "\n", + "\n", + "advection_velocity = (1.0, 1.0)\n", + "equations_hyperbolic = LinearScalarAdvectionEquation2D(advection_velocity);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Define a new parabolic equation type\n", + "\n", + "Next, we define a 2D parabolic diffusion term type. This is similar to `LaplaceDiffusion2D`\n", + "except that the `diffusivity` field refers to a spatially constant diffusivity matrix now. Note that\n", + "`ConstantAnisotropicDiffusion2D` has a field for `equations_hyperbolic`. It is useful to have\n", + "information about the hyperbolic system available to the parabolic part so that we can reuse\n", + "functions defined for hyperbolic equations (such as `varnames`).\n", + "\n", + "The abstract type `Trixi.AbstractEquationsParabolic` has three parameters: `NDIMS` (the spatial dimension,\n", + "e.g., 1D, 2D, or 3D), `NVARS` (the number of variables), and `GradientVariable`, which we set as\n", + "`GradientVariablesConservative`. This indicates that the gradient should be taken with respect to the\n", + "conservative variables (e.g., the same variables used in `equations_hyperbolic`). Users can also take\n", + "the gradient with respect to a different set of variables; see, for example, the implementation of\n", + "`CompressibleNavierStokesDiffusion2D`, which can utilize either \"primitive\" or \"entropy\" variables." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct ConstantAnisotropicDiffusion2D{E, T} <: Trixi.AbstractEquationsParabolic{2, 1, GradientVariablesConservative}\n", + " diffusivity::T\n", + " equations_hyperbolic::E\n", + "end\n", + "\n", + "varnames(variable_mapping, equations_parabolic::ConstantAnisotropicDiffusion2D) =\n", + " varnames(variable_mapping, equations_parabolic.equations_hyperbolic)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we define the viscous flux function. We assume that the mixed hyperbolic-parabolic system\n", + "is of the form\n", + "$$\n", + "\\partial_t u(t,x) + \\partial_x (f_1(u) - g_1(u, \\nabla u))\n", + " + \\partial_y (f_2(u) - g_2(u, \\nabla u)) = 0\n", + "$$\n", + "where $f_1(u)$, $f_2(u)$ are the hyperbolic fluxes and $g_1(u, \\nabla u)$, $g_2(u, \\nabla u)$ denote\n", + "the viscous fluxes. For anisotropic diffusion, the viscous fluxes are the first and second components\n", + "of the matrix-vector product involving `diffusivity` and the gradient vector.\n", + "\n", + "Here, we specialize the flux to our new parabolic equation type `ConstantAnisotropicDiffusion2D`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function Trixi.flux(u, gradients, orientation::Integer, equations_parabolic::ConstantAnisotropicDiffusion2D)\n", + " @unpack diffusivity = equations_parabolic\n", + " dudx, dudy = gradients\n", + " if orientation == 1\n", + " return SVector(diffusivity[1, 1] * dudx + diffusivity[1, 2] * dudy)\n", + " else # if orientation == 2\n", + " return SVector(diffusivity[2, 1] * dudx + diffusivity[2, 2] * dudy)\n", + " end\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Defining boundary conditions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl's implementation of parabolic terms discretizes both the gradient and divergence\n", + "using weak formulation. In other words, we discretize the system\n", + "$$\n", + "\\begin{aligned}\n", + "\\bm{q} &= \\nabla u \\\\\n", + "\\bm{\\sigma} &= \\begin{pmatrix} g_1(u, \\bm{q}) \\\\ g_2(u, \\bm{q}) \\end{pmatrix} \\\\\n", + "\\text{viscous contribution } &= \\nabla \\cdot \\bm{\\sigma}\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "Boundary data must be specified for all spatial derivatives, e.g., for both the gradient\n", + "equation $\\bm{q} = \\nabla u$ and the divergence of the viscous flux\n", + "$\\nabla \\cdot \\bm{\\sigma}$. We account for this by introducing internal `Gradient`\n", + "and `Divergence` types which are used to dispatch on each type of boundary condition.\n", + "\n", + "As an example, let us introduce a Dirichlet boundary condition with constant boundary data." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct BoundaryConditionConstantDirichlet{T <: Real}\n", + " boundary_value::T\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This boundary condition contains only the field `boundary_value`, which we assume to be some\n", + "real-valued constant which we will impose as the Dirichlet data on the boundary.\n", + "\n", + "Boundary conditions have generally been defined as \"callable structs\" (also known as \"functors\").\n", + "For each boundary condition, we need to specify the appropriate boundary data to return for both\n", + "the `Gradient` and `Divergence`. Since the gradient is operating on the solution `u`, the boundary\n", + "data should be the value of `u`, and we can directly impose Dirichlet data." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "@inline function (boundary_condition::BoundaryConditionConstantDirichlet)(flux_inner, u_inner, normal::AbstractVector,\n", + " x, t, operator_type::Trixi.Gradient,\n", + " equations_parabolic::ConstantAnisotropicDiffusion2D)\n", + " return boundary_condition.boundary_value\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "While the gradient acts on the solution `u`, the divergence acts on the viscous flux $\\bm{\\sigma}$.\n", + "Thus, we have to supply boundary data for the `Divergence` operator that corresponds to $\\bm{\\sigma}$.\n", + "However, we've already imposed boundary data on `u` for a Dirichlet boundary condition, and imposing\n", + "boundary data for $\\bm{\\sigma}$ might overconstrain our problem.\n", + "\n", + "Thus, for the `Divergence` boundary data under a Dirichlet boundary condition, we simply return\n", + "`flux_inner`, which is boundary data for $\\bm{\\sigma}$ computed using the \"inner\" or interior solution.\n", + "This way, we supply boundary data for the divergence operation without imposing any additional conditions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "@inline function (boundary_condition::BoundaryConditionConstantDirichlet)(flux_inner, u_inner, normal::AbstractVector,\n", + " x, t, operator_type::Trixi.Divergence,\n", + " equations_parabolic::ConstantAnisotropicDiffusion2D)\n", + " return flux_inner\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### A note on the choice of gradient variables\n", + "\n", + "It is often simpler to transform the solution variables (and solution gradients) to another set of\n", + "variables prior to computing the viscous fluxes (see `CompressibleNavierStokesDiffusion2D`\n", + "for an example of this). If this is done, then the boundary condition for the `Gradient` operator\n", + "should be modified accordingly as well.\n", + "\n", + "## Putting things together\n", + "\n", + "Finally, we can instantiate our new parabolic equation type, define boundary conditions,\n", + "and run a simulation. The specific anisotropic diffusion matrix we use produces more\n", + "dissipation in the direction $(1, -1)$ as an isotropic diffusion.\n", + "\n", + "For boundary conditions, we impose that $u=1$ on the left wall, $u=2$ on the bottom\n", + "wall, and $u = 0$ on the outflow walls. The initial condition is taken to be $u = 0$.\n", + "Note that we use `BoundaryConditionConstantDirichlet` only for the parabolic boundary\n", + "conditions, since we have not defined its behavior for the hyperbolic part." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi: SMatrix\n", + "diffusivity = 5.0e-2 * SMatrix{2, 2}([2 -1; -1 2])\n", + "equations_parabolic = ConstantAnisotropicDiffusion2D(diffusivity, equations_hyperbolic);\n", + "\n", + "boundary_conditions_hyperbolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1.0)),\n", + " y_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(2.0)),\n", + " y_pos = boundary_condition_do_nothing,\n", + " x_pos = boundary_condition_do_nothing)\n", + "\n", + "boundary_conditions_parabolic = (; x_neg = BoundaryConditionConstantDirichlet(1.0),\n", + " y_neg = BoundaryConditionConstantDirichlet(2.0),\n", + " y_pos = BoundaryConditionConstantDirichlet(0.0),\n", + " x_pos = BoundaryConditionConstantDirichlet(0.0));\n", + "\n", + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n", + "coordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))\n", + "coordinates_max = ( 1.0, 1.0) # maximum coordinates (max(x), max(y))\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=4,\n", + " periodicity=false, n_cells_max=30_000) # set maximum capacity of tree data structure\n", + "\n", + "initial_condition = (x, t, equations) -> SVector(0.0)\n", + "\n", + "semi = SemidiscretizationHyperbolicParabolic(mesh,\n", + " (equations_hyperbolic, equations_parabolic),\n", + " initial_condition, solver;\n", + " boundary_conditions=(boundary_conditions_hyperbolic,\n", + " boundary_conditions_parabolic))\n", + "\n", + "tspan = (0.0, 2.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "callbacks = CallbackSet(SummaryCallback())\n", + "time_int_tol = 1.0e-6\n", + "sol = solve(ode, RDPK3SpFSAL49(); abstol=time_int_tol, reltol=time_int_tol,\n", + " ode_default_options()..., callback=callbacks);\n", + "\n", + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/adding_new_scalar_equations.ipynb b/v0.8.7/tutorials/notebooks/adding_new_scalar_equations.ipynb new file mode 100644 index 0000000000..fa394a34c6 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/adding_new_scalar_equations.ipynb @@ -0,0 +1,451 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 11: Adding a new scalar conservation law" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you want to use Trixi.jl for your own research, you might be interested in\n", + "a new physics model that's not already included in Trixi.jl. In this tutorial,\n", + "we will implement the cubic conservation law\n", + "$$\n", + "\\partial_t u(t,x) + \\partial_x u(t,x)^3 = 0\n", + "$$\n", + "in a periodic domain in one space dimension. In Trixi.jl, such a mathematical model\n", + "is encoded as a subtype of `Trixi.AbstractEquations`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Basic setup" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "\n", + "struct CubicEquation <: Trixi.AbstractEquations{1 #= number of spatial dimensions =#,\n", + " 1 #= number of primary variables, i.e. scalar =#};\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We create `CubicEquation` as an empty `struct` since we do not use any parameters\n", + "for this equation. Other models could bundle arbitrary parameters, e.g., the\n", + "ideal gas constant for the compressible Euler equations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, we define the physical flux `f(u) = u^3` using the calling structure\n", + "used in Trixi.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Trixi.flux(u, orientation, equation::CubicEquation) = u.^3\n", + "Trixi.varnames(_, ::CubicEquation) = (\"scalar\",)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "In Trixi.jl, the conserved variables `u` are usually passed as `SVector`s of variables\n", + "at a single physical location. Hence, we must use `u.^3` instead of the scalar\n", + "operation `u^3`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "That's already enough to run a simple simulation with a standard DGSEM discretization\n", + "using the non-dissipative central flux at interfaces." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "\n", + "# Create a simulation setup\n", + "equation = CubicEquation()\n", + "\n", + "initial_condition_sine(x, t, equation::CubicEquation) = SVector(sinpi(x[1]))\n", + "\n", + "mesh = TreeMesh(-1.0, 1.0, # min/max coordinates\n", + " initial_refinement_level=4,\n", + " n_cells_max=10^4)\n", + "\n", + "solver = DGSEM(3 #= polynomial degree =#, flux_central)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We wrap the return value of the `initial_condition_sine` inside an `SVector` since that's the approach\n", + "used in Trixi.jl also for systems of equations. We need to index the spatial coordinate `x[1]`,\n", + "since it is an `SVector` with one component. In multiple space dimensions, all spatial coordinates\n", + "are passed together." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, we create an `ODEProblem` from the SciML/DifferentialEquations ecosystem.\n", + "We can solve this ODE numerically using any time integration method,\n", + "e.g., `SSPRK43` from [OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl).\n", + "Before, we set up a callback to summarize the simulation setup." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Create ODE problem with given time span\n", + "tspan = (0.0, 0.09)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "summary_callback = SummaryCallback()\n", + "callbacks = CallbackSet(summary_callback)\n", + "\n", + "# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks\n", + "sol = solve(ode, SSPRK43();\n", + " ode_default_options()..., callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "That's it, you ran your first simulation using your new equation with Trixi.jl! Now, we can plot\n", + "the solution at the final time using Plots.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can already see that discontinuities will develop and oscillations start to\n", + "occur around steep parts of the wave. That's expected from our central discretization.\n", + "To avoid these issues, we need to use dissipative numerical fluxes (approximate\n", + "Riemann solvers) at interfaces." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Advanced setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Thus, we add a Godunov's flux for our cubic equation. That is easy for this equation\n", + "since the wave speed `f'(u) = 3u^2` is always non-negative." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "@inline Trixi.flux_godunov(u_ll, u_rr, orientation, equation::CubicEquation) = flux(u_ll, orientation, equation)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Let's run the example again but with a dissipative numerical flux at interfaces.\n", + "`remake` will recreate the semidiscretization we used before and only change\n", + "selected parameters, in this case the `solver`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# A new setup with dissipation\n", + "semi = remake(semi, solver=DGSEM(3, flux_godunov))\n", + "ode = semidiscretize(semi, tspan)\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...)\n", + "plot!(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can see that there are fewer oscillations, in particular around steep edges.\n", + "Now let's increase the final time (and also the spatial resolution)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# A larger final time: Nonclassical shocks develop (you can even increase the refinement to 12)\n", + "semi = remake(semi, mesh=TreeMesh(-1.0, 1.0, initial_refinement_level=8, n_cells_max=10^5))\n", + "ode = semidiscretize(semi, (0.0, 0.5) #= tspan =#)\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...)\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can observe that nonclassical shocks develop and are stable under grid refinement,\n", + "e.g. for `initial_refinement_level=12`. In this case, these nonclassical shocks\n", + "can be avoided by using an entropy-dissipative semidiscretization. Thus, we need\n", + "to define an entropy-conservative numerical flux" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "@inline function Trixi.flux_ec(u_ll, u_rr, orientation, equation::CubicEquation)\n", + " return SVector(0.25 * (u_ll[1]^3 + u_ll[1]^2 * u_rr[1] + u_ll[1] * u_rr[1]^2 + u_rr[1]^3))\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "and use a `VolumeIntegralFluxDifferencing` instead of the standard\n", + "`VolumeIntegralWeakForm` in the DGSEM." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Let's use a provably entropy-dissipative semidiscretization\n", + "semi = remake(semi, solver=DGSEM(3, flux_godunov, VolumeIntegralFluxDifferencing(flux_ec)))\n", + "ode = semidiscretize(semi, (0.0, 0.5))\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...);\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Possible next steps could be\n", + "- to define `Trixi.max_abs_speeds(u, equations::CubicEquation) = 3 * u[1]^2`\n", + " to use CFL-based time step control via a `StepsizeCallback`\n", + "- to define quantities of interest like `Trixi.entropy(u, equations::CubicEquation) = u[1]^2`\n", + " and integrate them in a simulation using the `AnalysisCallback`\n", + "- to experiment with shock-capturing volume integrals `VolumeIntegralShockCapturingHG`\n", + " and adaptive mesh refinement `AMRCallback`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For further reading, Trixi.jl provides another example on adding a scalar equation. In the\n", + "[elixir about the KPP problem](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_kpp.jl),\n", + "the 2D scalar \"KPP equation\" from [Kurganov, Petrova, Popov (2007)](https://doi.org/10.1137/040614189) is\n", + "implemented." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Summary of the code" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To sum up, here is the complete code that we used (without the callbacks since these create a\n", + "lot of unnecessary output in the doctests of this tutorial).\n", + "In addition, we create the `struct` inside the new module `CubicConservationLaw`. That\n", + "ensures that we can re-create `struct`s defined therein without having to restart Julia." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Define new physics\n", + "module CubicConservationLaw\n", + "\n", + "using Trixi\n", + "\n", + "struct CubicEquation <: Trixi.AbstractEquations{1 #= number of spatial dimensions =#,\n", + " 1 #= number of primary variables, i.e. scalar =#}\n", + "end\n", + "\n", + "@inline Trixi.flux(u, orientation, equation::CubicEquation) = u.^3\n", + "Trixi.varnames(_, ::CubicEquation) = (\"scalar\",)\n", + "\n", + "@inline Trixi.flux_godunov(u_ll, u_rr, orientation, equation::CubicEquation) = flux(u_ll, orientation, equation)\n", + "@inline function Trixi.flux_ec(u_ll, u_rr, orientation, equation::CubicEquation)\n", + " return SVector(0.25 * (u_ll[1]^3 + u_ll[1]^2 * u_rr[1] + u_ll[1] * u_rr[1]^2 + u_rr[1]^3))\n", + "end\n", + "\n", + "end # module\n", + "\n", + "\n", + "# Create a simulation setup\n", + "import .CubicConservationLaw\n", + "using Trixi\n", + "using OrdinaryDiffEq\n", + "using Plots\n", + "\n", + "equation = CubicConservationLaw.CubicEquation()\n", + "\n", + "initial_condition_sine(x, t, equation::CubicConservationLaw.CubicEquation) = SVector(sinpi(x[1]))\n", + "\n", + "mesh = TreeMesh(-1.0, 1.0, # min/max coordinates\n", + " initial_refinement_level=4,\n", + " n_cells_max=10^4)\n", + "\n", + "solver = DGSEM(3 #= polynomial degree =#, flux_central)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n", + "\n", + "# Create ODE problem with given time span\n", + "tspan = (0.0, 0.1)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "# OrdinaryDiffEq's `solve` method evolves the solution in time and executes the passed callbacks\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...)\n", + "plot(sol)\n", + "\n", + "\n", + "# A new setup with dissipation\n", + "semi = remake(semi, solver=DGSEM(3, flux_godunov))\n", + "ode = semidiscretize(semi, tspan)\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...)\n", + "plot!(sol)\n", + "\n", + "\n", + "# A larger final time: Nonclassical shocks develop (you can even increase the refinement to 12)\n", + "semi = remake(semi, mesh=TreeMesh(-1.0, 1.0, initial_refinement_level=8, n_cells_max=10^5))\n", + "ode = semidiscretize(semi, (0.0, 0.5))\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...)\n", + "plot(sol)\n", + "\n", + "\n", + "# Let's use a provably entropy-dissipative semidiscretization\n", + "semi = remake(semi, solver=DGSEM(3, flux_godunov, VolumeIntegralFluxDifferencing(flux_ec)))\n", + "ode = semidiscretize(semi, (0.0, 0.5))\n", + "sol = solve(ode, SSPRK43(); ode_default_options()...)\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/adding_nonconservative_equation.ipynb b/v0.8.7/tutorials/notebooks/adding_nonconservative_equation.ipynb new file mode 100644 index 0000000000..7521530001 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/adding_nonconservative_equation.ipynb @@ -0,0 +1,455 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 12: Adding a non-conservative equation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you want to use Trixi.jl for your own research, you might be interested in\n", + "a new physics model that is not present in Trixi.jl. In this tutorial,\n", + "we will implement the nonconservative linear advection equation in a periodic domain\n", + "$$\n", + "\\left\\{\n", + "\\begin{aligned}&\\partial_t u(t,x) + a(x) \\partial_x u(t,x) = 0 \\\\\n", + "&u(0,x)=\\sin(x) \\\\\n", + "&u(t,-\\pi)=u(t,\\pi)\n", + "\\end{aligned}\n", + "\\right.\n", + "$$\n", + "where $a(x) = 2 + \\cos(x)$. The analytic solution is\n", + "$$\n", + "u(t,x)=-\\sin \\left(2 \\tan ^{-1}\\left(\\sqrt{3} \\tan \\left(\\frac{\\sqrt{3} t}{2}-\\tan ^{-1}\\left(\\frac{1}{\\sqrt{3}}\\tan \\left(\\frac{x}{2}\\right)\\right)\\right)\\right)\\right)\n", + "$$\n", + "In Trixi.jl, such a mathematical model\n", + "is encoded as a subtype of `Trixi.AbstractEquations`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Basic setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Since there is no native support for variable coefficients, we need to transform the PDE to the following system:\n", + "$$\n", + "\\left\\{\n", + "\\begin{aligned}&\\partial_t \\begin{pmatrix}u(t,x)\\\\a(t,x) \\end{pmatrix} +\\begin{pmatrix} a(t,x) \\partial_x u(t,x) \\\\ 0 \\end{pmatrix} = 0 \\\\\n", + "&u(0,x)=\\sin(x) \\\\\n", + "&a(0,x)=2+\\cos(x) \\\\\n", + "&u(t,-\\pi)=u(t,\\pi)\n", + "\\end{aligned}\n", + "\\right.\n", + "$$" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Define new physics\n", + "using Trixi\n", + "using Trixi: AbstractEquations, get_node_vars\n", + "import Trixi: varnames, default_analysis_integrals, flux, max_abs_speed_naive,\n", + " have_nonconservative_terms\n", + "\n", + "# Since there is no native support for variable coefficients, we use two\n", + "# variables: one for the basic unknown `u` and another one for the coefficient `a`\n", + "struct NonconservativeLinearAdvectionEquation <: AbstractEquations{1 #= spatial dimension =#,\n", + " 2 #= two variables (u,a) =#}\n", + "end\n", + "\n", + "varnames(::typeof(cons2cons), ::NonconservativeLinearAdvectionEquation) = (\"scalar\", \"advection_velocity\")\n", + "\n", + "default_analysis_integrals(::NonconservativeLinearAdvectionEquation) = ()\n", + "\n", + "\n", + "# The conservative part of the flux is zero\n", + "flux(u, orientation, equation::NonconservativeLinearAdvectionEquation) = zero(u)\n", + "\n", + "# Calculate maximum wave speed for local Lax-Friedrichs-type dissipation\n", + "function max_abs_speed_naive(u_ll, u_rr, orientation::Integer, ::NonconservativeLinearAdvectionEquation)\n", + " _, advection_velocity_ll = u_ll\n", + " _, advection_velocity_rr = u_rr\n", + "\n", + " return max(abs(advection_velocity_ll), abs(advection_velocity_rr))\n", + "end\n", + "\n", + "\n", + "# We use nonconservative terms\n", + "have_nonconservative_terms(::NonconservativeLinearAdvectionEquation) = Trixi.True()\n", + "\n", + "# This \"nonconservative numerical flux\" implements the nonconservative terms.\n", + "# In general, nonconservative terms can be written in the form\n", + "# g(u) ∂ₓ h(u)\n", + "# Thus, a discrete difference approximation of this nonconservative term needs\n", + "# - `u mine`: the value of `u` at the current position (for g(u))\n", + "# - `u_other`: the values of `u` in a neighborhood of the current position (for ∂ₓ h(u))\n", + "function flux_nonconservative(u_mine, u_other, orientation,\n", + " equations::NonconservativeLinearAdvectionEquation)\n", + " _, advection_velocity = u_mine\n", + " scalar, _ = u_other\n", + "\n", + " return SVector(advection_velocity * scalar, zero(scalar))\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The implementation of nonconservative terms uses a single \"nonconservative flux\"\n", + "function `flux_nonconservative`. It will basically be applied in a loop of the\n", + "form\n", + "```julia\n", + "du_m(D, u) = sum(D[m, l] * flux_nonconservative(u[m], u[l], 1, equations)) # orientation 1: x\n", + "```\n", + "where `D` is the derivative matrix and `u` contains the nodal solution values." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can run a simple simulation using a DGSEM discretization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Create a simulation setup\n", + "using Trixi\n", + "using OrdinaryDiffEq\n", + "\n", + "equation = NonconservativeLinearAdvectionEquation()\n", + "\n", + "# You can derive the exact solution for this setup using the method of\n", + "# characteristics\n", + "function initial_condition_sine(x, t, equation::NonconservativeLinearAdvectionEquation)\n", + " x0 = -2 * atan(sqrt(3) * tan(sqrt(3) / 2 * t - atan(tan(x[1] / 2) / sqrt(3))))\n", + " scalar = sin(x0)\n", + " advection_velocity = 2 + cos(x[1])\n", + " SVector(scalar, advection_velocity)\n", + "end\n", + "\n", + "# Create a uniform mesh in 1D in the interval [-π, π] with periodic boundaries\n", + "mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates\n", + " initial_refinement_level=4, n_cells_max=10^4)\n", + "\n", + "# Create a DGSEM solver with polynomials of degree `polydeg`\n", + "# Remember to pass a tuple of the form `(conservative_flux, nonconservative_flux)`\n", + "# as `surface_flux` and `volume_flux` when working with nonconservative terms\n", + "volume_flux = (flux_central, flux_nonconservative)\n", + "surface_flux = (flux_lax_friedrichs, flux_nonconservative)\n", + "solver = DGSEM(polydeg=3, surface_flux=surface_flux,\n", + " volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n", + "\n", + "# Setup the spatial semidiscretization containing all ingredients\n", + "semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n", + "\n", + "# Create an ODE problem with given time span\n", + "tspan = (0.0, 1.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "# Set up some standard callbacks summarizing the simulation setup and computing\n", + "# errors of the numerical solution\n", + "summary_callback = SummaryCallback()\n", + "analysis_callback = AnalysisCallback(semi, interval=50)\n", + "callbacks = CallbackSet(summary_callback, analysis_callback)\n", + "\n", + "# OrdinaryDiffEq's `solve` method evolves the solution in time and executes\n", + "# the passed callbacks\n", + "sol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,\n", + " save_everystep=false, callback=callbacks)\n", + "\n", + "# Print the timer summary\n", + "summary_callback()\n", + "\n", + "# Plot the numerical solution at the final time\n", + "using Plots: plot\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You see a plot of the final solution." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can check whether everything fits together by refining the grid and comparing\n", + "the numerical errors. First, we look at the error using the grid resolution\n", + "above." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "error_1 = analysis_callback(sol).l2 |> first" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we increase the grid resolution by one refinement level and run the\n", + "simulation again." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates\n", + " initial_refinement_level=5, n_cells_max=10^4)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n", + "\n", + "tspan = (0.0, 1.0)\n", + "ode = semidiscretize(semi, tspan);\n", + "\n", + "summary_callback = SummaryCallback()\n", + "analysis_callback = AnalysisCallback(semi, interval=50)\n", + "callbacks = CallbackSet(summary_callback, analysis_callback);\n", + "\n", + "sol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,\n", + " save_everystep=false, callback=callbacks);\n", + "summary_callback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "error_2 = analysis_callback(sol).l2 |> first" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "error_1 / error_2" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As expected, the new error is roughly reduced by a factor of 16, corresponding\n", + "to an experimental order of convergence of 4 (for polynomials of degree 3)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Summary of the code" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Here is the complete code that we used (without the callbacks since these\n", + "create a lot of unnecessary output in the doctests of this tutorial).\n", + "In addition, we create the `struct` inside the new module `NonconservativeLinearAdvection`.\n", + "That ensures that we can re-create `struct`s defined therein without having to\n", + "restart Julia." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Define new physics" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "module NonconservativeLinearAdvection\n", + "\n", + "using Trixi\n", + "using Trixi: AbstractEquations, get_node_vars\n", + "import Trixi: varnames, default_analysis_integrals, flux, max_abs_speed_naive,\n", + " have_nonconservative_terms\n", + "\n", + "# Since there is not yet native support for variable coefficients, we use two\n", + "# variables: one for the basic unknown `u` and another one for the coefficient `a`\n", + "struct NonconservativeLinearAdvectionEquation <: AbstractEquations{1 #= spatial dimension =#,\n", + " 2 #= two variables (u,a) =#}\n", + "end\n", + "\n", + "varnames(::typeof(cons2cons), ::NonconservativeLinearAdvectionEquation) = (\"scalar\", \"advection_velocity\")\n", + "\n", + "default_analysis_integrals(::NonconservativeLinearAdvectionEquation) = ()\n", + "\n", + "\n", + "# The conservative part of the flux is zero\n", + "flux(u, orientation, equation::NonconservativeLinearAdvectionEquation) = zero(u)\n", + "\n", + "# Calculate maximum wave speed for local Lax-Friedrichs-type dissipation\n", + "function max_abs_speed_naive(u_ll, u_rr, orientation::Integer, ::NonconservativeLinearAdvectionEquation)\n", + " _, advection_velocity_ll = u_ll\n", + " _, advection_velocity_rr = u_rr\n", + "\n", + " return max(abs(advection_velocity_ll), abs(advection_velocity_rr))\n", + "end\n", + "\n", + "\n", + "# We use nonconservative terms\n", + "have_nonconservative_terms(::NonconservativeLinearAdvectionEquation) = Trixi.True()\n", + "\n", + "# This \"nonconservative numerical flux\" implements the nonconservative terms.\n", + "# In general, nonconservative terms can be written in the form\n", + "# g(u) ∂ₓ h(u)\n", + "# Thus, a discrete difference approximation of this nonconservative term needs\n", + "# - `u mine`: the value of `u` at the current position (for g(u))\n", + "# - `u_other`: the values of `u` in a neighborhood of the current position (for ∂ₓ h(u))\n", + "function flux_nonconservative(u_mine, u_other, orientation,\n", + " equations::NonconservativeLinearAdvectionEquation)\n", + " _, advection_velocity = u_mine\n", + " scalar, _ = u_other\n", + "\n", + " return SVector(advection_velocity * scalar, zero(scalar))\n", + "end\n", + "\n", + "end # module\n", + "\n", + "\n", + "\n", + "# Create a simulation setup\n", + "import .NonconservativeLinearAdvection\n", + "using Trixi\n", + "using OrdinaryDiffEq\n", + "\n", + "equation = NonconservativeLinearAdvection.NonconservativeLinearAdvectionEquation()\n", + "\n", + "# You can derive the exact solution for this setup using the method of\n", + "# characteristics\n", + "function initial_condition_sine(x, t, equation::NonconservativeLinearAdvection.NonconservativeLinearAdvectionEquation)\n", + " x0 = -2 * atan(sqrt(3) * tan(sqrt(3) / 2 * t - atan(tan(x[1] / 2) / sqrt(3))))\n", + " scalar = sin(x0)\n", + " advection_velocity = 2 + cos(x[1])\n", + " SVector(scalar, advection_velocity)\n", + "end\n", + "\n", + "# Create a uniform mesh in 1D in the interval [-π, π] with periodic boundaries\n", + "mesh = TreeMesh(-Float64(π), Float64(π), # min/max coordinates\n", + " initial_refinement_level=4, n_cells_max=10^4)\n", + "\n", + "# Create a DGSEM solver with polynomials of degree `polydeg`\n", + "# Remember to pass a tuple of the form `(conservative_flux, nonconservative_flux)`\n", + "# as `surface_flux` and `volume_flux` when working with nonconservative terms\n", + "volume_flux = (flux_central, NonconservativeLinearAdvection.flux_nonconservative)\n", + "surface_flux = (flux_lax_friedrichs, NonconservativeLinearAdvection.flux_nonconservative)\n", + "solver = DGSEM(polydeg=3, surface_flux=surface_flux,\n", + " volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n", + "\n", + "# Setup the spatial semidiscretization containing all ingredients\n", + "semi = SemidiscretizationHyperbolic(mesh, equation, initial_condition_sine, solver)\n", + "\n", + "# Create an ODE problem with given time span\n", + "tspan = (0.0, 1.0)\n", + "ode = semidiscretize(semi, tspan);\n", + "\n", + "# Set up some standard callbacks summarizing the simulation setup and computing\n", + "# errors of the numerical solution\n", + "summary_callback = SummaryCallback()\n", + "analysis_callback = AnalysisCallback(semi, interval=50)\n", + "callbacks = CallbackSet(summary_callback, analysis_callback);\n", + "\n", + "# OrdinaryDiffEq's `solve` method evolves the solution in time and executes\n", + "# the passed callbacks\n", + "sol = solve(ode, Tsit5(), abstol=1.0e-6, reltol=1.0e-6,\n", + " save_everystep=false);\n", + "\n", + "# Plot the numerical solution at the final time\n", + "using Plots: plot\n", + "plot(sol);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/behind_the_scenes_simulation_setup.ipynb b/v0.8.7/tutorials/notebooks/behind_the_scenes_simulation_setup.ipynb new file mode 100644 index 0000000000..6bcf8db6fc --- /dev/null +++ b/v0.8.7/tutorials/notebooks/behind_the_scenes_simulation_setup.ipynb @@ -0,0 +1,628 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 2: Behind the scenes of a simulation setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial will guide you through a simple Trixi.jl setup (\"elixir\"), giving an overview of\n", + "what happens in the background during the initialization of a simulation. While the setup\n", + "described herein does not cover all details, it involves relatively stable parts of Trixi.jl that\n", + "are unlikely to undergo significant changes in the near future. The goal is to clarify some of\n", + "the more fundamental, *technical* concepts that are applicable to a variety of\n", + "(also more complex) configurations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl follows the [method of lines](http://www.scholarpedia.org/article/Method_of_lines) concept for solving partial differential equations (PDEs).\n", + "Firstly, the PDEs are reduced to a (potentially huge) system of\n", + "ordinary differential equations (ODEs) by discretizing the spatial derivatives. Subsequently,\n", + "these generated ODEs may be solved with methods available in OrdinaryDiffEq.jl or those specifically\n", + "implemented in Trixi.jl. The following steps elucidate the process of transitioning from PDEs to\n", + "ODEs within the framework of Trixi.jl." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Basic setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Import essential libraries and specify an equation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq\n", + "equations = LinearScalarAdvectionEquation2D((-0.2, 0.7))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Generate a spatial discretization using a `TreeMesh` with a pre-coarsened set of cells." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = (-2.0, -2.0)\n", + "coordinates_max = (2.0, 2.0)\n", + "\n", + "coarsening_patches = ((type = \"box\", coordinates_min = [0.0, -2.0],\n", + " coordinates_max = [2.0, 0.0]),)\n", + "\n", + "mesh = TreeMesh(coordinates_min, coordinates_max, initial_refinement_level = 2,\n", + " n_cells_max = 30_000,\n", + " coarsening_patches = coarsening_patches)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The created `TreeMesh` looks like the following:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![TreeMesh_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/d5ef76ee-8246-4730-a692-b472c06063a3)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Instantiate a `DGSEM` solver with a user-specified polynomial degree. The solver\n", + "will define `polydeg + 1` [Gauss-Lobatto nodes](https://en.wikipedia.org/wiki/Gaussian_quadrature#Gauss%E2%80%93Lobatto_rules) and their associated weights within\n", + "the reference interval $[-1, 1]$ in each spatial direction. These nodes will be subsequently\n", + "used to approximate solutions on each leaf cell of the `TreeMesh`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg = 3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Gauss-Lobatto nodes with `polydeg = 3`:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![Gauss-Lobatto_nodes_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/1d894611-801e-4f75-bff0-d77ca1c672e5)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Overview of the `SemidiscretizationHyperbolic` type" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At this stage, all necessary components for configuring the spatial discretization are in place.\n", + "The remaining task is to combine these components into a single structure that will be used\n", + "throughout the entire simulation process. This is where `SemidiscretizationHyperbolic`\n", + "comes into play." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test,\n", + " solver)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The constructor for the `SemidiscretizationHyperbolic` object calls numerous sub-functions to\n", + "perform the necessary initialization steps. A brief description of the key sub-functions is\n", + "provided below." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `init_elements(leaf_cell_ids, mesh, equations, dg.basis, RealT, uEltype)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " The fundamental elements for approximating the solution are the leaf\n", + " cells. The solution is constructed as a polynomial of the degree specified in the `DGSEM`\n", + " solver in each spatial direction on each leaf cell. This polynomial approximation is evaluated\n", + " at the Gauss-Lobatto nodes mentioned earlier. The `init_elements` function extracts\n", + " these leaf cells from the `TreeMesh`, assigns them the label \"elements\", records their\n", + " coordinates, and maps the Gauss-Lobatto nodes from the 1D interval $[-1, 1]$ onto each coordinate axis\n", + " of every element." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " ![elements_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/9f486670-b579-4e42-8697-439540c8bbb4)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " The visualization of elements with nodes shown here includes spaces between elements, which do\n", + " not exist in reality. This spacing is included only for illustrative purposes to underscore the\n", + " separation of elements and the independent projection of nodes onto each element." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `init_interfaces(leaf_cell_ids, mesh, elements)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " At this point, the elements with nodes have been defined; however, they lack the necessary\n", + " communication functionality. This is crucial because the local solution polynomials on the\n", + " elements are not independent of each other. Furthermore, nodes on the boundary of adjacent\n", + " elements share the same spatial location, which requires a method to combine this into a\n", + " meaningful solution.\n", + " Here [Riemann solvers](https://en.wikipedia.org/wiki/Riemann_solver#Approximate_solvers)\n", + " come into play which can handle the principal ambiguity of a multi-valued solution at the\n", + " same spatial location." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " As demonstrated earlier, the elements can have varying sizes. Let us initially consider\n", + " neighbors with equal size. For these elements, the `init_interfaces` function generates\n", + " interfaces that store information about adjacent elements, their relative positions, and\n", + " allocate containers for sharing solution data between neighbors during the solution process." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " In our visualization, these interfaces would conceptually resemble tubes connecting the\n", + " corresponding elements." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " ![interfaces_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/bc3b6b02-afbc-4371-aaf7-c7bdc5a6c540)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `init_mortars(leaf_cell_ids, mesh, elements, dg.mortar)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " Returning to the consideration of different sizes among adjacent elements, within the\n", + " `TreeMesh`, adjacent leaf cells can vary in side length by a maximum factor of two. This\n", + " implies that a large element has one neighbor of\n", + " equal size with a connection through an interface, or two neighbors at half the size,\n", + " requiring a connection through so called \"mortars\". In 3D, a large element would have\n", + " four small neighbor elements." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " Mortars store information about the connected elements, their relative positions, and allocate\n", + " containers for storing the solutions along the boundaries between these elements." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " Due to the differing sizes of adjacent elements, it is not feasible to directly map boundary\n", + " nodes of adjacent elements. Therefore, the concept of mortars employs a mass-conserving\n", + " interpolation function to map boundary nodes from a larger element to a smaller one." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " In our visualization, mortars are represented as branched tubes." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " ![mortars_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/43a95a60-3a31-4b1f-8724-14049e7a0481)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `init_boundaries(leaf_cell_ids, mesh, elements)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " In order to apply boundary conditions, it is necessary to identify the locations of the\n", + " boundaries. Therefore, we initialize a \"boundaries\" object, which records the elements that\n", + " contain boundaries, specifies which side of an element is a boundary, stores the coordinates\n", + " of boundary nodes, and allocates containers for managing solutions at these boundaries." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " In our visualization, boundaries and their corresponding nodes are highlighted with green,\n", + " semi-transparent lines." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " ![boundaries_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/21996b20-4a22-4dfb-b16a-e2c22c2f29fe)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "All the structures mentioned earlier are collected as a cache of type `NamedTuple`. Subsequently,\n", + "an object of type `SemidiscretizationHyperbolic` is initialized using this cache, initial and\n", + "boundary conditions, equations, mesh and solver." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In conclusion, the primary purpose of a `SemidiscretizationHyperbolic` is to collect equations,\n", + "the geometric representation of the domain, and approximation instructions, creating specialized\n", + "structures to interconnect these components in a manner that enables their utilization for\n", + "the numerical solution of partial differential equations (PDEs)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As evident from the earlier description of `SemidiscretizationHyperbolic`, it comprises numerous\n", + "functions called subsequently. Without delving into details, the structure of the primary calls\n", + "are illustrated as follows:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![SemidiscretizationHyperbolic_structure](https://github.com/trixi-framework/Trixi.jl/assets/119304909/8bf59422-0537-4d7a-9f13-d9b2253c19d7)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Overview of the `semidiscretize` function" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At this stage, we have defined the equations and configured the domain's discretization. The\n", + "final step before solving is to select a suitable time span and apply the corresponding initial\n", + "conditions, which are already stored in the initialized `SemidiscretizationHyperbolic` object." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The purpose of the `semidiscretize` function is to wrap the semidiscretization as an\n", + "`ODEProblem` within the specified time interval. During this procedure the approximate solution\n", + " is created at the given initial time via the specified `initial_condition` function from the\n", + " `SemidiscretizationHyperbolic` object. This `ODEProblem` can be subsequently passed to the\n", + "`solve` function from the [OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl) package\n", + "or to `Trixi.solve`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ode = semidiscretize(semi, (0.0, 1.0));" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The `semidiscretize` function involves a deep tree of subsequent calls, with the primary ones\n", + "explained below." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `allocate_coefficients(mesh, equations, solver, cache)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " To apply initial conditions, a data structure (\"container\") needs to be generated to store the\n", + " initial values of the target variables for each node within each element." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " Since only one-dimensional `Array`s are `resize!`able in Julia, we use `Vector`s as an internal\n", + " storage for the target variables and `resize!` them whenever needed, e.g. to change the number\n", + " of elements. Then, during the solving process the same memory is reused by `unsafe_wrap`ping\n", + " multi-dimensional `Array`s around the internal storage." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `wrap_array(u_ode, semi)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " As previously noted, `u_ode` is constructed as a 1D vector to ensure compatibility with\n", + " OrdinaryDiffEq.jl. However, for internal use within Trixi.jl, identifying which part of the\n", + " vector relates to specific variables, elements, or nodes can be challenging." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " This is why the `u_ode` vector is wrapped by the `wrap_array` function using `unsafe_wrap`\n", + " to form a multidimensional array `u`. In this array, the first dimension corresponds to\n", + " variables, followed by N dimensions corresponding to nodes for each of N space dimensions.\n", + " The last dimension corresponds to the elements.\n", + " Consequently, navigation within this multidimensional array becomes noticeably easier." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " \"Wrapping\" in this context involves the creation of a reference to the same storage location\n", + " but with an alternative structural representation. This approach enables the use of both\n", + " instances `u` and `u_ode` as needed, so that changes are simultaneously reflected in both.\n", + " This is possible because, from a storage perspective, they share the same stored data, while\n", + " access to this data is provided in different ways." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- `compute_coefficients!(u, initial_conditions, t, mesh::DG, equations, solver, cache)`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + " Now the variable `u`, intended to store solutions, has been allocated and wrapped, it is time\n", + " to apply the initial conditions. The `compute_coefficients!` function calculates the initial\n", + " conditions for each variable at every node within each element and properly stores them in the\n", + " `u` array." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At this stage, the `semidiscretize` function has all the necessary components to initialize and\n", + "return an `ODEProblem` object, which will be used by the `solve` function to compute the\n", + "solution." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In summary, the internal workings of `semidiscretize` with brief descriptions can be presented\n", + "as follows." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![semidiscretize_structure](https://github.com/trixi-framework/Trixi.jl/assets/119304909/491eddc4-aadb-4e29-8c76-a7c821d0674e)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Functions `solve` and `rhs!`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Once the `ODEProblem` object is initialized, the `solve` function and one of the ODE solvers from\n", + "the OrdinaryDiffEq.jl package can be utilized to compute an approximated solution using the\n", + "instructions contained in the `ODEProblem` object." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false), dt = 0.01,\n", + " save_everystep = false);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Since the `solve` function and the ODE solver have no knowledge\n", + "of a particular spatial discretization, it is necessary to define a\n", + "\"right-hand-side function\", `rhs!`, within Trixi.jl." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl includes a set of `rhs!` functions designed to compute `du`, i.e.,\n", + "$\\frac{\\partial u}{\\partial t}$ according to the structure\n", + "of the setup. These `rhs!` functions calculate interface, mortars, and boundary fluxes, in\n", + "addition to surface and volume integrals, in order to construct the `du` vector. This `du` vector\n", + "is then used by the time integration method to obtain the solution at the subsequent time step.\n", + "The `rhs!` function is called by time integration methods in each iteration of the solve loop\n", + "within OrdinaryDiffEq.jl, with arguments `du`, `u`, `semidiscretization`, and the current time." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl uses a two-levels approach for `rhs!` functions. The first level is limited to a\n", + "single function for each `semidiscretization` type, and its role is to redirect data to the\n", + "target `rhs!` for specific solver and mesh types. This target `rhs!` function is responsible\n", + "for calculating `du`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Path from the `solve` function call to the appropriate `rhs!` function call:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![rhs_structure](https://github.com/trixi-framework/Trixi.jl/assets/119304909/dbea9a0e-25a4-4afa-855e-01f1ad619982)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Computed solution:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)\n", + "pd = PlotData2D(sol)\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/custom_semidiscretization.ipynb b/v0.8.7/tutorials/notebooks/custom_semidiscretization.ipynb new file mode 100644 index 0000000000..b5e5d727a7 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/custom_semidiscretization.ipynb @@ -0,0 +1,673 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 21: Custom semidiscretizations" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As described in the overview section,\n", + "semidiscretizations are high-level descriptions of spatial discretizations\n", + "in Trixi.jl. Trixi.jl's main focus is on hyperbolic conservation\n", + "laws represented in a `SemidiscretizationHyperbolic`.\n", + "Hyperbolic-parabolic problems based on the advection-diffusion equation or\n", + "the compressible Navier-Stokes equations can be represented in a\n", + "`SemidiscretizationHyperbolicParabolic`. This is described in the\n", + "basic tutorial on parabolic terms and its extension to\n", + "custom parabolic terms.\n", + "In this tutorial, we will describe how these semidiscretizations work and how\n", + "they can be used to create custom semidiscretizations involving also other tasks." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Overview of the right-hand side evaluation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The semidiscretizations provided by Trixi.jl are set up to create `ODEProblem`s from the\n", + "[SciML ecosystem for ordinary differential equations](https://diffeq.sciml.ai/latest/).\n", + "In particular, a spatial semidiscretization can be wrapped in an ODE problem\n", + "using `semidiscretize`, which returns an `ODEProblem`. This `ODEProblem`\n", + "bundles an initial condition, a right-hand side (RHS) function, the time span,\n", + "and possible parameters. The `ODEProblem`s created by Trixi.jl use the semidiscretization\n", + "passed to `semidiscretize` as a parameter.\n", + "For a `SemidiscretizationHyperbolic`, the `ODEProblem` wraps\n", + "`Trixi.rhs!` as ODE RHS.\n", + "For a `SemidiscretizationHyperbolicParabolic`, Trixi.jl\n", + "uses a `SplitODEProblem` combining `Trixi.rhs_parabolic!` for the\n", + "(potentially) stiff part and `Trixi.rhs!` for the other part." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Standard Trixi.jl setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this tutorial, we will consider the linear advection equation\n", + "with source term\n", + "$$\n", + "\\partial_t u(t,x) + \\partial_x u(t,x) = -\\exp(-t) \\sin\\bigl(\\pi (x - t) \\bigr)\n", + "$$\n", + "with periodic boundary conditions in the domain `[-1, 1]` as a\n", + "model problem.\n", + "The initial condition is\n", + "$$\n", + "u(0,x) = \\sin(\\pi x).\n", + "$$\n", + "The source term results in some damping and the analytical solution\n", + "$$\n", + "u(t,x) = \\exp(-t) \\sin\\bigl(\\pi (x - t) \\bigr).\n", + "$$\n", + "First, we discretize this equation using the standard functionality\n", + "of Trixi.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq, Plots" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The linear scalar advection equation is already implemented in\n", + "Trixi.jl as `LinearScalarAdvectionEquation1D`. We construct\n", + "it with an advection velocity `1.0`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "equations = LinearScalarAdvectionEquation1D(1.0)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we use a standard `DGSEM` solver." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg = 3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We create a simple `TreeMesh` in 1D." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = (-1.0,)\n", + "coordinates_max = (+1.0,)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max;\n", + " initial_refinement_level = 4,\n", + " n_cells_max = 10^4,\n", + " periodicity = true)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We wrap everything in in a semidiscretization and pass the source\n", + "terms as a standard Julia function. Please note that Trixi.jl uses\n", + "`SVector`s from\n", + "[StaticArrays.jl](https://github.com/JuliaArrays/StaticArrays.jl)\n", + "to store the conserved variables `u`. Thus, the return value of the\n", + "source terms must be wrapped in an `SVector` - even if we consider\n", + "just a scalar problem." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function initial_condition(x, t, equations)\n", + " return SVector(exp(-t) * sinpi(x[1] - t))\n", + "end\n", + "\n", + "function source_terms_standard(u, x, t, equations)\n", + " return -initial_condition(x, t, equations)\n", + "end\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition,\n", + " solver;\n", + " source_terms = source_terms_standard)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can create the `ODEProblem`, solve the resulting ODE\n", + "using a time integration method from\n", + "[OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl),\n", + "and visualize the numerical solution at the final time using\n", + "[Plots.jl](https://github.com/JuliaPlots/Plots.jl)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tspan = (0.0, 3.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "sol = solve(ode, RDPK3SpFSAL49(); ode_default_options()...)\n", + "\n", + "plot(sol; label = \"numerical sol.\", legend = :topright)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We can also plot the analytical solution for comparison.\n", + "Since Trixi.jl uses `SVector`s for the variables, we take their `first`\n", + "(and only) component to get the scalar value for manual plotting." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "let\n", + " x = range(-1.0, 1.0; length = 200)\n", + " plot!(x, first.(initial_condition.(x, sol.t[end], equations)),\n", + " label = \"analytical sol.\", linestyle = :dash, legend = :topright)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We can also add the initial condition to the plot." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot!(sol.u[1], semi, label = \"u0\", linestyle = :dot, legend = :topleft)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can of course also use some\n", + "[callbacks](https://trixi-framework.github.io/Trixi.jl/stable/callbacks/)\n", + "provided by Trixi.jl as usual." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "summary_callback = SummaryCallback()\n", + "analysis_interval = 100\n", + "analysis_callback = AnalysisCallback(semi; interval = analysis_interval)\n", + "alive_callback = AliveCallback(; analysis_interval)\n", + "callbacks = CallbackSet(summary_callback,\n", + " analysis_callback,\n", + " alive_callback)\n", + "\n", + "sol = solve(ode, RDPK3SpFSAL49();\n", + " ode_default_options()..., callback = callbacks)\n", + "summary_callback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Using a custom ODE right-hand side function" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, we will solve the same problem but use our own ODE RHS function.\n", + "To demonstrate this, we will artificially create a global variable\n", + "containing the current time of the simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "const GLOBAL_TIME = Ref(0.0)\n", + "\n", + "function source_terms_custom(u, x, t, equations)\n", + " t = GLOBAL_TIME[]\n", + " return -initial_condition(x, t, equations)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we create our own RHS function to update the global time of\n", + "the simulation before calling the RHS function from Trixi.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function rhs_source_custom!(du_ode, u_ode, semi, t)\n", + " GLOBAL_TIME[] = t\n", + " Trixi.rhs!(du_ode, u_ode, semi, t)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we create an `ODEProblem` manually copying over the data from\n", + "the one we got from `semidiscretize` earlier." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ode_source_custom = ODEProblem(rhs_source_custom!,\n", + " ode.u0,\n", + " ode.tspan,\n", + " ode.p #= semi =#)\n", + "sol_source_custom = solve(ode_source_custom, RDPK3SpFSAL49();\n", + " ode_default_options()...)\n", + "\n", + "plot(sol_source_custom; label = \"numerical sol.\")\n", + "let\n", + " x = range(-1.0, 1.0; length = 200)\n", + " plot!(x, first.(initial_condition.(x, sol_source_custom.t[end], equations)),\n", + " label = \"analytical sol.\", linestyle = :dash, legend = :topleft)\n", + "end\n", + "plot!(sol_source_custom.u[1], semi, label = \"u0\", linestyle = :dot, legend = :topleft)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This also works with callbacks as usual." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "summary_callback = SummaryCallback()\n", + "analysis_interval = 100\n", + "analysis_callback = AnalysisCallback(semi; interval = analysis_interval)\n", + "alive_callback = AliveCallback(; analysis_interval)\n", + "callbacks = CallbackSet(summary_callback,\n", + " analysis_callback,\n", + " alive_callback)\n", + "\n", + "sol = solve(ode_source_custom, RDPK3SpFSAL49();\n", + " ode_default_options()..., callback = callbacks)\n", + "summary_callback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Setting up a custom semidiscretization" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Using a global constant is of course not really nice from a software\n", + "engineering point of view. Thus, it can often be useful to collect\n", + "additional data in the parameters of the `ODEProblem`. Thus, it is\n", + "time to create our own semidiscretization. Here, we create a small\n", + "wrapper of a standard semidiscretization of Trixi.jl and the current\n", + "global time of the simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct CustomSemidiscretization{Semi, T} <: Trixi.AbstractSemidiscretization\n", + " semi::Semi\n", + " t::T\n", + "end\n", + "\n", + "semi_custom = CustomSemidiscretization(semi, Ref(0.0))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To get pretty printing in the REPL, you can consider specializing\n", + "\n", + "- `Base.show(io::IO, parameters::CustomSemidiscretization)`\n", + "- `Base.show(io::IO, ::MIME\"text/plain\", parameters::CustomSemidiscretization)`\n", + "\n", + "for your custom semidiscretiation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, we create our own source terms that use the global time stored\n", + "in the custom semidiscretiation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "source_terms_custom_semi = let semi_custom = semi_custom\n", + " function source_terms_custom_semi(u, x, t, equations)\n", + " t = semi_custom.t[]\n", + " return -initial_condition(x, t, equations)\n", + " end\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We also create a custom ODE RHS to update the current global time\n", + "stored in the custom semidiscretization. We unpack the standard\n", + "semidiscretization created by Trixi.jl and pass it to `Trixi.rhs!`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function rhs_semi_custom!(du_ode, u_ode, semi_custom, t)\n", + " semi_custom.t[] = t\n", + " Trixi.rhs!(du_ode, u_ode, semi_custom.semi, t)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Finally, we set up an `ODEProblem` and solve it numerically." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ode_semi_custom = ODEProblem(rhs_semi_custom!,\n", + " ode.u0,\n", + " ode.tspan,\n", + " semi_custom)\n", + "sol_semi_custom = solve(ode_semi_custom, RDPK3SpFSAL49();\n", + " ode_default_options()...)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "If we want to make use of additional functionality provided by\n", + "Trixi.jl, e.g., for plotting, we need to implement a few additional\n", + "specializations. In this case, we forward everything to the standard\n", + "semidiscretization provided by Trixi.jl wrapped in our custom\n", + "semidiscretization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Base.ndims(semi::CustomSemidiscretization) = ndims(semi.semi)\n", + "function Trixi.mesh_equations_solver_cache(semi::CustomSemidiscretization)\n", + " Trixi.mesh_equations_solver_cache(semi.semi)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can plot the numerical solution as usual." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(sol_semi_custom; label = \"numerical sol.\")\n", + "let\n", + " x = range(-1.0, 1.0; length = 200)\n", + " plot!(x, first.(initial_condition.(x, sol_semi_custom.t[end], equations)),\n", + " label = \"analytical sol.\", linestyle = :dash, legend = :topleft)\n", + "end\n", + "plot!(sol_semi_custom.u[1], semi, label = \"u0\", linestyle = :dot, legend = :topleft)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This also works with many callbacks as usual. However, the\n", + "`AnalysisCallback` requires some special handling since it\n", + "makes use of a performance counter contained in the standard\n", + "semidiscretizations of Trixi.jl to report some\n", + "performance metrics.\n", + "Here, we forward all accesses to the performance counter to the\n", + "wrapped semidiscretization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function Base.getproperty(semi::CustomSemidiscretization, s::Symbol)\n", + " if s === :performance_counter\n", + " wrapped_semi = getfield(semi, :semi)\n", + " wrapped_semi.performance_counter\n", + " else\n", + " getfield(semi, s)\n", + " end\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Moreover, the `AnalysisCallback` also performs some error\n", + "calculations. We also need to forward them to the wrapped\n", + "semidiscretization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function Trixi.calc_error_norms(func, u, t, analyzer,\n", + " semi::CustomSemidiscretization,\n", + " cache_analysis)\n", + " Trixi.calc_error_norms(func, u, t, analyzer,\n", + " semi.semi,\n", + " cache_analysis)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can work with the callbacks used before as usual." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "summary_callback = SummaryCallback()\n", + "analysis_interval = 100\n", + "analysis_callback = AnalysisCallback(semi_custom;\n", + " interval = analysis_interval)\n", + "alive_callback = AliveCallback(; analysis_interval)\n", + "callbacks = CallbackSet(summary_callback,\n", + " analysis_callback,\n", + " alive_callback)\n", + "\n", + "sol = solve(ode_semi_custom, RDPK3SpFSAL49();\n", + " ode_default_options()..., callback = callbacks)\n", + "summary_callback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "For even more advanced usage of custom semidiscretizations, you\n", + "may look at the source code of the ones contained in Trixi.jl, e.g.,\n", + "- `SemidiscretizationHyperbolicParabolic`\n", + "- `SemidiscretizationEulerGravity`\n", + "- `SemidiscretizationEulerAcoustics`\n", + "- `SemidiscretizationCoupled`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/differentiable_programming.ipynb b/v0.8.7/tutorials/notebooks/differentiable_programming.ipynb new file mode 100644 index 0000000000..e1f2a09005 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/differentiable_programming.ipynb @@ -0,0 +1,956 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 20: Differentiable programming" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "[Julia and its ecosystem provide some tools for differentiable programming](https://sinews.siam.org/Details-Page/scientific-machine-learning-how-julia-employs-differentiable-programming-to-do-it-best).\n", + "Trixi.jl is designed to be flexible, extendable, and composable with Julia's growing ecosystem for\n", + "scientific computing and machine learning. Thus, the ultimate goal is to have fast implementations\n", + "that allow automatic differentiation (AD) without too much hassle for users. If some parts do not\n", + "meet these requirements, please feel free to open an issue or propose a fix in a PR." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In the following, we will walk through some examples demonstrating how to differentiate through\n", + "Trixi.jl." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Forward mode automatic differentiation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl integrates well with [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl)\n", + "for forward mode AD." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Computing the Jacobian\n", + "The high-level interface to compute the Jacobian this way is `jacobian_ad_forward`.\n", + "First, we load the required packages and compute the Jacobian of a semidiscretization\n", + "of the compressible Euler equations, a system of nonlinear conservation laws." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, LinearAlgebra, Plots\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "\n", + "solver = DGSEM(3, flux_central)\n", + "mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n", + "\n", + "J = jacobian_ad_forward(semi);\n", + "size(J)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we compute the eigenvalues of the Jacobian." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "λ = eigvals(J)\n", + "scatter(real.(λ), imag.(λ), label=\"central flux\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As you can see here, the maximal real part is close to zero." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "relative_maximum = maximum(real, λ) / maximum(abs, λ)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Interestingly, if we add dissipation by switching to the `flux_lax_friedrichs`\n", + "at the interfaces, the maximal real part of the eigenvalues increases." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(3, flux_lax_friedrichs)\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n", + "\n", + "J = jacobian_ad_forward(semi)\n", + "λ = eigvals(J)\n", + "\n", + "scatter!(real.(λ), imag.(λ), label=\"Lax-Friedrichs flux\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Although the maximal real part is still somewhat small, it's larger than for\n", + "the purely central discretization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "relative_maximum = maximum(real, λ) / maximum(abs, λ)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "However, we should be careful when using this analysis, since the eigenvectors\n", + "are not necessarily well-conditioned." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "λ, V = eigen(J)\n", + "condition_number = cond(V)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "In one space dimension, the situation is a bit different." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "equations = CompressibleEulerEquations1D(1.4)\n", + "\n", + "solver = DGSEM(3, flux_central)\n", + "mesh = TreeMesh((-1.0,), (1.0,), initial_refinement_level=6, n_cells_max=10^5)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n", + "\n", + "J = jacobian_ad_forward(semi)\n", + "\n", + "λ = eigvals(J)\n", + "\n", + "scatter(real.(λ), imag.(λ), label=\"central flux\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Here, the maximal real part is basically zero to machine accuracy." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "relative_maximum = maximum(real, λ) / maximum(abs, λ)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Moreover, the eigenvectors are not as ill-conditioned as in 2D." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "λ, V = eigen(J)\n", + "condition_number = cond(V)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "If we add dissipation, the maximal real part is still approximately zero." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(3, flux_lax_friedrichs)\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n", + "\n", + "J = jacobian_ad_forward(semi)\n", + "λ = eigvals(J)\n", + "\n", + "scatter!(real.(λ), imag.(λ), label=\"Lax-Friedrichs flux\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As you can see from the plot generated above, the maximal real part is still\n", + "basically zero to machine precision." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "relative_maximum = maximum(real, λ) / maximum(abs, λ)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Let's check the condition number of the eigenvectors." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "λ, V = eigen(J)\n", + "\n", + "condition_number = cond(V)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Note that the condition number of the eigenvector matrix increases but is\n", + "still smaller than for the example in 2D." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Computing other derivatives" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It is also possible to compute derivatives of other dependencies using AD in Trixi.jl. For example,\n", + "you can compute the gradient of an entropy-dissipative semidiscretization with respect to the\n", + "ideal gas constant of the compressible Euler equations as described in the following. This example\n", + "is also available as the elixir\n", + "[`examples/special_elixirs/elixir_euler_ad.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/special_elixirs/elixir_euler_ad.jl)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "First, we create a semidiscretization of the compressible Euler equations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, LinearAlgebra, ForwardDiff\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "\n", + "\"\"\"\n", + " initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)\n", + "\n", + "The classical isentropic vortex test case of\n", + "- Chi-Wang Shu (1997)\n", + " Essentially Non-Oscillatory and Weighted Essentially Non-Oscillatory\n", + " Schemes for Hyperbolic Conservation Laws\n", + " [NASA/CR-97-206253](https://ntrs.nasa.gov/citations/19980007543)\n", + "\"\"\"\n", + "function initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)\n", + " inicenter = SVector(0.0, 0.0) # initial center of the vortex\n", + " iniamplitude = 5.0 # size and strength of the vortex\n", + "\n", + " rho = 1.0 # base flow\n", + " v1 = 1.0\n", + " v2 = 1.0\n", + " vel = SVector(v1, v2)\n", + " p = 25.0\n", + "\n", + " rt = p / rho # ideal gas equation\n", + " t_loc = 0.0\n", + "\n", + " cent = inicenter + vel*t_loc # shift advection of center to handle periodic BC, but only for v1 = v2 = 1.0\n", + " cent = x - cent # distance to center point\n", + " cent = SVector(-cent[2], cent[1])\n", + "\n", + " r2 = cent[1]^2 + cent[2]^2\n", + " du = iniamplitude / (2*π) * exp(0.5 * (1 - r2)) # vel. perturbation\n", + " dtemp = -(equations.gamma - 1) / (2 * equations.gamma * rt) * du^2 # isentropic\n", + "\n", + " rho = rho * (1 + dtemp)^(1 / (equations.gamma - 1))\n", + " vel = vel + du * cent\n", + " v1, v2 = vel\n", + " p = p * (1 + dtemp)^(equations.gamma / (equations.gamma - 1))\n", + "\n", + " prim = SVector(rho, v1, v2, p)\n", + " return prim2cons(prim, equations)\n", + "end\n", + "\n", + "mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n", + "\n", + "solver = DGSEM(3, flux_lax_friedrichs, VolumeIntegralFluxDifferencing(flux_ranocha))\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_isentropic_vortex, solver)\n", + "\n", + "u0_ode = Trixi.compute_coefficients(0.0, semi)\n", + "size(u0_ode)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we compute the Jacobian using `ForwardDiff.jacobian`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "J = ForwardDiff.jacobian((du_ode, γ) -> begin\n", + " equations_inner = CompressibleEulerEquations2D(first(γ))\n", + " semi_inner = Trixi.remake(semi, equations=equations_inner, uEltype=eltype(γ))\n", + " Trixi.rhs!(du_ode, u0_ode, semi_inner, 0.0)\n", + "end, similar(u0_ode), [1.4]); # γ needs to be an `AbstractArray`\n", + "\n", + "round.(extrema(J), sigdigits=2)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Note that we create a semidiscretization `semi` at first to determine the state `u0_ode` around\n", + "which we want to perform the linearization. Next, we wrap the RHS evaluation inside a closure\n", + "and pass that to `ForwardDiff.jacobian`. There, we need to make sure that the internal caches\n", + "are able to store dual numbers from ForwardDiff.jl by setting `uEltype` appropriately. A similar\n", + "approach is used by `jacobian_ad_forward`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Note that the ideal gas constant does not influence the semidiscrete rate of change of the\n", + "density, as demonstrated by" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "norm(J[1:4:end])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Here, we used some knowledge about the internal memory layout of Trixi.jl, an array of structs\n", + "with the conserved variables as fastest-varying index in memory." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Differentiating through a complete simulation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It is also possible to differentiate through a complete simulation. As an example, let's differentiate\n", + "the total energy of a simulation using the linear scalar advection equation with respect to the\n", + "wave number (frequency) of the initial data." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq, ForwardDiff, Plots\n", + "\n", + "function energy_at_final_time(k) # k is the wave number of the initial condition\n", + " equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n", + " mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)\n", + " solver = DGSEM(3, flux_lax_friedrichs)\n", + " initial_condition = (x, t, equation) -> begin\n", + " x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)\n", + " return SVector(sinpi(k * sum(x_trans)))\n", + " end\n", + " semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " uEltype=typeof(k))\n", + " ode = semidiscretize(semi, (0.0, 1.0))\n", + " sol = solve(ode, BS3(), save_everystep=false)\n", + " Trixi.integrate(energy_total, sol.u[end], semi)\n", + "end\n", + "\n", + "k_values = range(0.9, 1.1, length=101)\n", + "\n", + "plot(k_values, energy_at_final_time.(k_values), label=\"Energy\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You see a plot of a curve that resembles a parabola with local maximum around `k = 1.0`.\n", + "Why's that? Well, the domain is fixed but the wave number changes. Thus, if the wave number is\n", + "not chosen as an integer, the initial condition will not be a smooth periodic function in the\n", + "given domain. Hence, the dissipative surface flux (`flux_lax_friedrichs` in this example)\n", + "will introduce more dissipation. In particular, it will introduce more dissipation for \"less smooth\"\n", + "initial data, corresponding to wave numbers `k` further away from integers." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can compute the discrete derivative of the energy at the final time with respect to the wave\n", + "number `k` as follows." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "round(ForwardDiff.derivative(energy_at_final_time, 1.0), sigdigits=2)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This is rather small and we can treat it as zero in comparison to the value of this derivative at\n", + "other wave numbers `k`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "dk_values = ForwardDiff.derivative.((energy_at_final_time,), k_values);\n", + "\n", + "plot(k_values, dk_values, label=\"Derivative\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "If you remember basic calculus, a sufficient condition for a local maximum is that the first derivative\n", + "vanishes and the second derivative is negative. We can also check this discretely." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "second_derivative = round(ForwardDiff.derivative(\n", + " k -> Trixi.ForwardDiff.derivative(energy_at_final_time, k), 1.0),\n", + " sigdigits=2)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Having seen this application, let's break down what happens step by step." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function energy_at_final_time(k) # k is the wave number of the initial condition\n", + " equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n", + " mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)\n", + " solver = DGSEM(3, flux_lax_friedrichs)\n", + " initial_condition = (x, t, equation) -> begin\n", + " x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)\n", + " return SVector(sinpi(k * sum(x_trans)))\n", + " end\n", + " semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " uEltype=typeof(k))\n", + " ode = semidiscretize(semi, (0.0, 1.0))\n", + " sol = solve(ode, BS3(), save_everystep=false)\n", + " Trixi.integrate(energy_total, sol.u[end], semi)\n", + "end\n", + "\n", + "k = 1.0\n", + "round(ForwardDiff.derivative(energy_at_final_time, k), sigdigits=2)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "When calling `ForwardDiff.derivative(energy_at_final_time, k)` with `k=1.0`, ForwardDiff.jl\n", + "will basically use the chain rule and known derivatives of existing basic functions\n", + "to calculate the derivative of the energy at the final time with respect to the\n", + "wave number `k` at `k0 = 1.0`. To do this, ForwardDiff.jl uses dual numbers, which\n", + "basically store the result and its derivative w.r.t. a specified parameter at the\n", + "same time. Thus, we need to make sure that we can treat these `ForwardDiff.Dual`\n", + "numbers everywhere during the computation. Fortunately, generic Julia code usually\n", + "supports these operations. The most basic problem for a developer is to ensure\n", + "that all types are generic enough, in particular the ones of internal caches." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The first step in this example creates some basic ingredients of our simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n", + "mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=3, n_cells_max=10^4)\n", + "solver = DGSEM(3, flux_lax_friedrichs);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "These do not have internal caches storing intermediate values of the numerical\n", + "solution, so we do not need to adapt them. In fact, we could also define them\n", + "outside of `energy_at_final_time` (but would need to take care of globals or\n", + "wrap everything in another function)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, we define the initial condition" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "initial_condition = (x, t, equation) -> begin\n", + " x_trans = Trixi.x_trans_periodic_2d(x - equation.advection_velocity * t)\n", + " return SVector(sinpi(k * sum(x_trans)))\n", + "end;" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "as a closure capturing the wave number `k` passed to `energy_at_final_time`.\n", + "If you call `energy_at_final_time(1.0)`, `k` will be a `Float64`. Thus, the\n", + "return values of `initial_condition` will be `SVector`s of `Float64`s. When\n", + "calculating the `ForwardDiff.derivative`, `k` will be a `ForwardDiff.Dual` number.\n", + "Hence, the `initial_condition` will return `SVector`s of `ForwardDiff.Dual`\n", + "numbers." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The semidiscretization `semi` uses some internal caches to avoid repeated allocations\n", + "and speed up the computations, e.g. for numerical fluxes at interfaces. Thus, we\n", + "need to tell Trixi.jl to allow `ForwardDiff.Dual` numbers in these caches. That's what\n", + "the keyword argument `uEltype=typeof(k)` in" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " uEltype=typeof(k));" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "does. This is basically the only part where you need to modify your standard Trixi.jl\n", + "code to enable automatic differentiation. From there on, the remaining steps" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ode = semidiscretize(semi, (0.0, 1.0))\n", + "sol = solve(ode, BS3(), save_everystep=false)\n", + "round(Trixi.integrate(energy_total, sol.u[end], semi), sigdigits=5)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "do not need any modifications since they are sufficiently generic (and enough effort\n", + "has been spend to allow general types inside these calls)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Propagating errors using Measurements.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "[![Error bars by Randall Munroe](https://imgs.xkcd.com/comics/error_bars.png)](https://xkcd.com/2110/)\n", + "\"Error bars\" by Randall Munroe, linked from https://xkcd.com/2110" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Similar to AD, Trixi.jl also allows propagating uncertainties using linear error propagation\n", + "theory via [Measurements.jl](https://github.com/JuliaPhysics/Measurements.jl).\n", + "As an example, let's create a system representing the linear advection equation\n", + "in 1D with an uncertain velocity. Then, we create a semidiscretization using a\n", + "sine wave as initial condition, solve the ODE, and plot the resulting uncertainties\n", + "in the primitive variables." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq, Measurements, Plots, LaTeXStrings\n", + "\n", + "equations = LinearScalarAdvectionEquation1D(1.0 ± 0.1)\n", + "\n", + "mesh = TreeMesh((-1.0,), (1.0,), n_cells_max=10^5, initial_refinement_level=5)\n", + "\n", + "solver = DGSEM(3)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test,\n", + " solver, uEltype=Measurement{Float64})\n", + "\n", + "ode = semidiscretize(semi, (0.0, 1.5))\n", + "\n", + "sol = solve(ode, BS3(), save_everystep=false);\n", + "\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You should see a plot where small error bars are shown around the extrema\n", + "and larger error bars are shown in the remaining parts.\n", + "This result is in accordance with expectations. Indeed, the uncertain propagation\n", + "speed will affect the extrema less since the local variation of the solution is\n", + "relatively small there. In contrast, the local variation of the solution is large\n", + "around the turning points of the sine wave, so the uncertainties will be relatively\n", + "large there." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "All this is possible due to allowing generic types and having good abstractions\n", + "in Julia that allow packages to work together seamlessly." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Finite difference approximations" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl provides the convenience function `jacobian_fd` to approximate the Jacobian\n", + "via central finite differences." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, LinearAlgebra\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "\n", + "solver = DGSEM(3, flux_central)\n", + "\n", + "mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_density_wave, solver)\n", + "\n", + "J_fd = jacobian_fd(semi)\n", + "\n", + "J_ad = jacobian_ad_forward(semi)\n", + "\n", + "relative_difference = norm(J_fd - J_ad) / size(J_fd, 1)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This discrepancy is of the expected order of magnitude for central finite difference approximations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Linear systems" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "When a linear PDE is discretized using a linear scheme such as a standard DG method,\n", + "the resulting semidiscretization yields an affine ODE of the form" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "$$\n", + "\\partial_t u(t) = A u(t) + b,\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "where `A` is a linear operator (\"matrix\") and `b` is a vector. Trixi.jl allows you\n", + "to obtain this linear structure in a matrix-free way by using `linear_structure`.\n", + "The resulting operator `A` can be used in multiplication, e.g. `mul!` from\n", + "LinearAlgebra, converted to a sparse matrix using `sparse` from SparseArrays,\n", + "or converted to a dense matrix using `Matrix` for detailed eigenvalue analyses.\n", + "For example," + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, LinearAlgebra, Plots\n", + "\n", + "equations = LinearScalarAdvectionEquation2D(1.0, -0.3)\n", + "\n", + "solver = DGSEM(3, flux_lax_friedrichs)\n", + "\n", + "mesh = TreeMesh((-1.0, -1.0), (1.0, 1.0), initial_refinement_level=2, n_cells_max=10^5)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_convergence_test, solver)\n", + "\n", + "A, b = linear_structure(semi)\n", + "\n", + "size(A), size(b)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we compute the eigenvalues of the linear operator." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "λ = eigvals(Matrix(A))\n", + "\n", + "scatter(real.(λ), imag.(λ))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As you can see here, the maximal real part is close to machine precision." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "λ = eigvals(Matrix(A))\n", + "relative_maximum = maximum(real, λ) / maximum(abs, λ)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\", \"ForwardDiff\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/first_steps/changing_trixi.ipynb b/v0.8.7/tutorials/notebooks/first_steps/changing_trixi.ipynb new file mode 100644 index 0000000000..5087c10558 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/first_steps/changing_trixi.ipynb @@ -0,0 +1,230 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 1.3: First steps in Trixi.jl: Changing Trixi.jl itself" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you plan on editing Trixi.jl itself, you can download Trixi.jl locally and run it from\n", + "the cloned directory." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Forking Trixi.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To create your own fork of Trixi.jl, log in to your GitHub account, visit the\n", + "[Trixi.jl GitHub repository](https://github.com/trixi-framework/Trixi.jl) and click the `Fork`\n", + "button located in the upper-right corner of the page. Then, click on `Create fork` in the opened\n", + "window to complete the forking process." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Cloning Trixi.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Windows" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you are using Windows, you can clone Trixi.jl by using the GitHub Desktop tool:\n", + "- If you do not have a GitHub account yet, create it on\n", + " the [GitHub website](https://github.com/join).\n", + "- Download and install [GitHub Desktop](https://desktop.github.com/) and then log in to\n", + " your account.\n", + "- Open GitHub Desktop, press `Ctrl+Shift+O`.\n", + "- In the opened window, navigate to the `URL` tab and paste `trixi-framework/Trixi.jl` or\n", + " `YourGitHubUserName/Trixi.jl` to clone your own fork of Trixi.jl, and choose the\n", + " path to the folder where you want to save Trixi.jl. Then click `Clone` and Trixi.jl will be\n", + " cloned to your computer." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now you cloned Trixi.jl and only need to tell Julia to use the local clone as the package sources:\n", + "- Open a terminal using `Win+r` and `cmd`. Navigate to the folder with the cloned Trixi.jl using `cd`.\n", + "- Create a new directory `run`, enter it, and start Julia with the `--project=.` flag:\n", + " ```shell\n", + " mkdir run\n", + " cd run\n", + " julia --project=.\n", + " ```\n", + "- Now run the following commands to install all relevant packages:\n", + " ```julia\n", + " using Pkg; Pkg.develop(PackageSpec(path=\"..\")) # Tell Julia to use the local Trixi.jl clone\n", + " Pkg.add([\"OrdinaryDiffEq\", \"Plots\"]) # Install additional packages\n", + " ```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now you already installed Trixi.jl from your local clone. Note that if you installed Trixi.jl\n", + "this way, you always have to start Julia with the `--project` flag set to your `run` directory,\n", + "e.g.,\n", + "```shell\n", + "julia --project=.\n", + "```\n", + "if already inside the `run` directory." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Linux" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "You can clone Trixi.jl to your computer by executing the following commands:\n", + "```shell\n", + "git clone git@github.com:trixi-framework/Trixi.jl.git\n", + "# If an error occurs, try the following:\n", + "# git clone https://github.com/trixi-framework/Trixi.jl\n", + "cd Trixi.jl\n", + "mkdir run\n", + "cd run\n", + "julia --project=. -e 'using Pkg; Pkg.develop(PackageSpec(path=\"..\"))' # Tell Julia to use the local Trixi.jl clone\n", + "julia --project=. -e 'using Pkg; Pkg.add([\"OrdinaryDiffEq\", \"Plots\"])' # Install additional packages\n", + "```\n", + "Alternatively, you can clone your own fork of Trixi.jl by replacing the link\n", + "`git@github.com:trixi-framework/Trixi.jl.git` with `git@github.com:YourGitHubUserName/Trixi.jl.git`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Note that if you installed Trixi.jl this way,\n", + "you always have to start Julia with the `--project` flag set to your `run` directory, e.g.,\n", + "```shell\n", + "julia --project=.\n", + "```\n", + "if already inside the `run` directory." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Developing Trixi.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you've created and cloned your own fork of Trixi.jl, you can make local changes to Trixi.jl\n", + "and propose them as a Pull Request (PR) to be merged into `trixi-framework/Trixi.jl`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Linux and MacOS utilize the `git` version control system to manage changes between your local and\n", + "remote repositories. The most commonly used commands include `add`, `commit`, `push` and `pull`.\n", + "You can find detailed information about these functions in the\n", + "[Git documentation](https://git-scm.com/docs)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For Windows and GitHub Desktop users, refer to the\n", + "[documentation of GitHub Desktop](https://docs.github.com/en/desktop/overview/getting-started-with-github-desktop#making-changes-in-a-branch)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "After making local changes to Trixi.jl and pushing them to the remote repository, you can open a\n", + "Pull Request (PR) from your branch to the main branch of `trixi-framework/Trixi.jl`. Then, follow\n", + "the Review checklist provided in the Pull Request to streamline the review process." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Additional reading" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To further delve into Trixi.jl, you may have a look at the following introductory tutorials.\n", + "- Behind the scenes of a simulation setup will guide\n", + " you through a simple Trixi.jl setup (\"elixir\"), giving an overview of what happens in the\n", + " background during the initialization of a simulation. It clarifies some of the more\n", + " fundamental, technical concepts that are applicable to a variety of (also more complex)\n", + " configurations.\n", + "- Introduction to DG methods will teach you how to set up a\n", + " simple way to approximate the solution of a hyperbolic partial differential equation. It will\n", + " be especially useful to learn about the\n", + " [Discontinuous Galerkin method](https://en.wikipedia.org/wiki/Discontinuous_Galerkin_method)\n", + " and the way it is implemented in Trixi.jl.\n", + "- Adding a new scalar conservation law and\n", + " Adding a non-conservative equation\n", + " describe how to add new physics models that are not yet included in Trixi.jl.\n", + "- Callbacks gives an overview of how to regularly execute specific actions\n", + " during a simulation, e.g., to store the solution or adapt the mesh." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/first_steps/create_first_setup.ipynb b/v0.8.7/tutorials/notebooks/first_steps/create_first_setup.ipynb new file mode 100644 index 0000000000..607a7ab58a --- /dev/null +++ b/v0.8.7/tutorials/notebooks/first_steps/create_first_setup.ipynb @@ -0,0 +1,685 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 1.2: First steps in Trixi.jl: Create your first setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this part of the introductory guide, we will create a first Trixi.jl setup as an extension of\n", + "[`elixir_advection_basic.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_advection_basic.jl).\n", + "Since Trixi.jl has a common basic structure for the setups, you can create your own by extending\n", + "and modifying the following example." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's consider the linear advection equation for a state $u = u(x, y, t)$ on the two-dimensional spatial domain\n", + "$[-1, 1] \\times [-1, 1]$ with a source term\n", + "$$\n", + "\\frac{\\partial}{\\partial t}u + \\frac{\\partial}{\\partial x} (0.2 u) - \\frac{\\partial}{\\partial y} (0.7 u) = - 2 e^{-t}\n", + "\\sin\\bigl(2 \\pi (x - t) \\bigr) \\sin\\bigl(2 \\pi (y - t) \\bigr),\n", + "$$\n", + "with the initial condition\n", + "$$\n", + "u(x, y, 0) = \\sin\\bigl(\\pi x \\bigr) \\sin\\bigl(\\pi y \\bigr),\n", + "$$\n", + "and periodic boundary conditions." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The first step is to create and open a file with the .jl extension. You can do this with your\n", + "favorite text editor (if you do not have one, we recommend [VS Code](https://code.visualstudio.com/)).\n", + "In this file, you will create your setup. The file can then be executed in Julia using, for example, `trixi_include()`.\n", + "Alternatively, you can execute each line of the following code one by one in the\n", + "Julia REPL. This will generate useful output for nearly every\n", + "command and improve your comprehension of the process." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To be able to use functionalities of Trixi.jl, you always need to load Trixi.jl itself\n", + "and the [OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl) package." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "using OrdinaryDiffEq" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The next thing to do is to choose an equation that is suitable for your problem. To see all the\n", + "currently implemented equations, take a look at\n", + "[`src/equations`](https://github.com/trixi-framework/Trixi.jl/tree/main/src/equations).\n", + "If you are interested in adding a new physics model that has not yet been implemented in\n", + "Trixi.jl, take a look at the tutorials\n", + "Adding a new scalar conservation law or\n", + "Adding a non-conservative equation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The linear scalar advection equation in two spatial dimensions\n", + "$$\n", + "\\frac{\\partial}{\\partial t}u + \\frac{\\partial}{\\partial x} (a_1 u) + \\frac{\\partial}{\\partial y} (a_2 u) = 0\n", + "$$\n", + "is already implemented in Trixi.jl as\n", + "`LinearScalarAdvectionEquation2D`, for which we need to define a two-dimensional parameter\n", + "`advection_velocity` describing the parameters $a_1$ and $a_2$. Appropriate for our problem is `(0.2, -0.7)`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "advection_velocity = (0.2, -0.7)\n", + "equations = LinearScalarAdvectionEquation2D(advection_velocity)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To solve our problem numerically using Trixi.jl, we have to discretize the spatial\n", + "domain, for which we set up a mesh. One of the most used meshes in Trixi.jl is the\n", + "`TreeMesh`. The spatial domain used is $[-1, 1] \\times [-1, 1]$. We set an initial number\n", + "of elements in the mesh using `initial_refinement_level`, which describes the initial number of\n", + "hierarchical refinements. In this simple case, the total number of elements is `2^initial_refinement_level`\n", + "throughout the simulation. The variable `n_cells_max` is used to limit the number of elements in the mesh,\n", + "which cannot be exceeded when using adaptive mesh refinement." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "All minimum and all maximum coordinates must be combined into `Tuples`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = (-1.0, -1.0)\n", + "coordinates_max = ( 1.0, 1.0)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level = 4,\n", + " n_cells_max = 30_000)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To approximate the solution of the defined model, we create a `DGSEM` solver.\n", + "The solution in each of the recently defined mesh elements will be approximated by a polynomial\n", + "of degree `polydeg`. For more information about discontinuous Galerkin methods,\n", + "check out the Introduction to DG methods tutorial. By default,\n", + "in the weak formulation `DGSEM` initializes the surface flux as `flux_central` and uses the physical flux for\n", + "the volume integral." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg=3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now we need to define an initial condition for our problem. All the already implemented\n", + "initial conditions for `LinearScalarAdvectionEquation2D` can be found in\n", + "[`src/equations/linear_scalar_advection_2d.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/src/equations/linear_scalar_advection_2d.jl).\n", + "If you want to use, for example, a Gaussian pulse, it can be used as follows:\n", + "```julia\n", + "initial_conditions = initial_condition_gauss\n", + "```\n", + "But to show you how an arbitrary initial condition can be implemented in a way suitable for\n", + "Trixi.jl, we define our own initial conditions.\n", + "$$\n", + "u(x, y, 0) = \\sin\\bigl(\\pi x \\bigr) \\sin\\bigl(\\pi y \\bigr).\n", + "$$\n", + "The initial conditions function must take spatial coordinates, time and equation as arguments\n", + "and returns an initial condition as a statically sized vector `SVector`. Following the same structure, you\n", + "can define your own initial conditions. The time variable `t` can be unused in the initial\n", + "condition, but might also be used to describe an analytical solution if known. If you use the\n", + "initial condition as analytical solution, you can analyze your numerical solution by computing\n", + "the error, see also the\n", + "[section about analyzing the solution](https://trixi-framework.github.io/Trixi.jl/stable/callbacks/#Analyzing-the-numerical-solution)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function initial_condition_sinpi(x, t, equations::LinearScalarAdvectionEquation2D)\n", + " u = sinpi(x[1]) * sinpi(x[2])\n", + " return SVector(u)\n", + "end\n", + "initial_condition = initial_condition_sinpi" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The next step is to define a function of the source term corresponding to our problem.\n", + "$$\n", + "f(u, x, y, t) = - 2 e^{-t} \\sin\\bigl(2 \\pi (x - t) \\bigr) \\sin\\bigl(2 \\pi (y - t) \\bigr)\n", + "$$\n", + "This function must take the state variable, the spatial coordinates, the time and the\n", + "equation itself as arguments and returns the source term as a static vector `SVector`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function source_term_exp_sinpi(u, x, t, equations::LinearScalarAdvectionEquation2D)\n", + " u = - 2 * exp(-t) * sinpi(2*(x[1] - t)) * sinpi(2*(x[2] - t))\n", + " return SVector(u)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now we collect all the information that is necessary to define a spatial discretization," + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;\n", + " source_terms = source_term_exp_sinpi)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "which leaves us with an ODE problem in time with a span from `0.0` to `1.0`.\n", + "This approach is commonly referred to as the method of lines." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tspan = (0.0, 1.0)\n", + "ode = semidiscretize(semi, tspan)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "At this point, our problem is defined. We will use the `solve` function defined in\n", + "[OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl) to get the solution.\n", + "OrdinaryDiffEq.jl gives us the ability to customize the solver\n", + "using callbacks without actually modifying it. Trixi.jl already has some implemented\n", + "Callbacks. The most widely used callbacks in Trixi.jl are\n", + "[step control callbacks](https://docs.sciml.ai/DiffEqCallbacks/stable/step_control/) that are\n", + "activated at the end of each time step to perform some actions, e.g. to print statistics.\n", + "We will show you how to use some of the common callbacks." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To print a summary of the simulation setup at the beginning\n", + "and to reset timers to zero, we use the `SummaryCallback`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "summary_callback = SummaryCallback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We also want to analyze the current state of the solution in regular intervals.\n", + "The `AnalysisCallback` outputs some useful statistical information during the simulation\n", + "every `interval` time steps." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "analysis_callback = AnalysisCallback(semi, interval = 20)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To indicate that a simulation is still running, we utilize the inexpensive `AliveCallback`\n", + "to periodically print information to the screen, such as the\n", + "current time, every `alive_interval` time steps." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "alive_callback = AliveCallback(alive_interval = 10)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "It is also possible to control the time step size using the `StepsizeCallback` if the time\n", + "integration method isn't adaptive itself. To get more details, look at\n", + "CFL based step size control." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "stepsize_callback = StepsizeCallback(cfl = 0.9)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To save the current solution in regular intervals we use the `SaveSolutionCallback`.\n", + "We would like to save the initial and final solutions as well. The data\n", + "will be saved as HDF5 files located in the `out` folder. Afterwards it is possible to visualize\n", + "a solution from saved files using Trixi2Vtk.jl and ParaView, which is described below in the\n", + "section Visualize the solution." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "save_solution = SaveSolutionCallback(interval = 20,\n", + " save_initial_solution = true,\n", + " save_final_solution = true)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Alternatively, we have the option to print solution files at fixed time intervals.\n", + "```julua\n", + "save_solution = SaveSolutionCallback(dt = 0.1,\n", + " save_initial_solution = true,\n", + " save_final_solution = true)\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Another useful callback is the `SaveRestartCallback`. It saves information for restarting\n", + "in regular intervals. We are interested in saving a restart file for the final solution as\n", + "well. To perform a restart, you need to configure the restart setup in a special way, which is\n", + "described in the section Restart simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "save_restart = SaveRestartCallback(interval = 100, save_final_restart = true)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Create a `CallbackSet` to collect all callbacks so that they can be passed to the `solve`\n", + "function." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback, stepsize_callback,\n", + " save_solution, save_restart);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The last step is to choose the time integration method. OrdinaryDiffEq.jl defines a wide range of\n", + "[ODE solvers](https://docs.sciml.ai/DiffEqDocs/latest/solvers/ode_solve/), including the\n", + "three-stage, third-order strong stability preserving Runge-Kutta method `SSPRK33`. We will pass\n", + "the ODE problem, the ODE solver and the callbacks to the `solve` function. Also, to use\n", + "`StepsizeCallback`, we must explicitly specify the initial trial time step `dt`, the selected\n", + "value is not important, because it will be overwritten by the `StepsizeCallback`. And there is no\n", + "need to save every step of the solution, as we are only interested the output provided by\n", + "our callback `SaveSolutionCallback`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, SSPRK33(); dt = 1.0, save_everystep = false, callback = callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Finally, we print the timer summary." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "summary_callback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now you can plot the solution as shown below, analyze it and improve the stability, accuracy or\n", + "efficiency of your setup." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Visualize the solution" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In the previous part of the tutorial, we calculated the final solution of the given problem, now we want\n", + "to visualize it. A more detailed explanation of visualization methods can be found in the section\n", + "Visualization." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Using Plots.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The first option is to use the [Plots.jl](https://github.com/JuliaPlots/Plots.jl) package\n", + "directly after calculations, when the solution is saved in the `sol` variable." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As was shown in the Getting started section, you can plot all\n", + "variables from the system of equations by executing the following.\n", + "```julia\n", + "plot(sol)\n", + "```\n", + "Alternatively, you can configure the plot more precisely. Trixi.jl provides a special data type,\n", + "`PlotData2D`, to extract the visualization data from the solution." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "pd = PlotData2D(sol);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "You can plot specific variables from the system of equations by referring to their names.\n", + "To obtain the names of all variables, execute the following." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "@show pd.variable_names;" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Plot the variable named \"scalar\" (which is the name of the variable for the\n", + "linear advection equation in Trixi.jl)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot(pd[\"scalar\"])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Mesh extraction is possible using the `getmesh` function.\n", + "Plots.jl has the `plot!` function that allows you to modify an already built graph." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Using Trixi2Vtk.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Another way to visualize a solution is to extract it from a saved HDF5 file. After we used the\n", + "`solve` function with `SaveSolutionCallback` there is a file with the final solution.\n", + "It is located in the `out` folder and is named as follows: `solution_index.h5`. The `index`\n", + "is the final time step of the solution that is padded to 6 digits with zeros from the beginning.\n", + "With Trixi2Vtk you can convert the HDF5 output file generated by Trixi.jl into a VTK/VTU\n", + "files. VTK/VTU are specialized formats designed to store structured data required for\n", + "visualization purposes. This can be used in visualization tools such as\n", + "[ParaView](https://www.paraview.org) or [VisIt](https://visit.llnl.gov) to plot the solution." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you haven't added Trixi2Vtk.jl to your project yet, you can add it as follows.\n", + "```julia\n", + "import Pkg\n", + "Pkg.add([\"Trixi2Vtk\"])\n", + "```\n", + "Now we load the Trixi2Vtk.jl package and convert the file `out/solution_000000032.h5` with\n", + "the final solution using the `trixi2vtk` function saving the resulting file in the\n", + "`out` folder." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi2Vtk\n", + "trixi2vtk(joinpath(\"out\", \"solution_000000032.h5\"), output_directory=\"out\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now two files `solution_000000032.vtu` and `solution_000000032_celldata.vtu` have been generated in the\n", + "`out` folder. The first one contains all the information for visualizing the solution, the\n", + "second one contains all the cell-based or discretization-based information." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now let's visualize the solution from the generated files in ParaView. Follow this short\n", + "instruction to get the visualization.\n", + "- Download, install and open [ParaView](https://www.paraview.org/download/).\n", + "- Press `Ctrl+O` and select the generated files `solution_000000032.vtu` and\n", + " `solution_000000032_celldata.vtu` from the `out` folder.\n", + "- In the upper-left corner in the Pipeline Browser window, left-click on the eye-icon near\n", + " `solution_000000032.vtu`.\n", + "- In the lower-left corner in the Properties window, change the Coloring from Solid Color to\n", + " scalar. This already generates the visualization of the final solution.\n", + "- Now let's add the mesh to the visualization. In the upper-left corner in the\n", + " Pipeline Browser window, left-click on the eye-icon near `solution_000000032_celldata.vtu`.\n", + "- In the lower-left corner in the Properties window, change the Representation from Surface\n", + " to Wireframe. Then a white grid should appear on the visualization.\n", + "Now, if you followed the instructions exactly, you should get a similar image as shown in the\n", + "section Using Plots.jl:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![paraview_trixi2vtk_example](https://github.com/trixi-framework/Trixi.jl/assets/119304909/0c29139b-6c5d-4d5c-86e1-f4ebc95aca7e)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "After completing this tutorial you are able to set up your own simulations with\n", + "Trixi.jl. If you have an interest in contributing to Trixi.jl as a developer, refer to the third\n", + "part of the introduction titled Changing Trixi.jl itself." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/first_steps/getting_started.ipynb b/v0.8.7/tutorials/notebooks/first_steps/getting_started.ipynb new file mode 100644 index 0000000000..b7a687203d --- /dev/null +++ b/v0.8.7/tutorials/notebooks/first_steps/getting_started.ipynb @@ -0,0 +1,466 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 1.1: First steps in Trixi.jl: Getting started" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl is a numerical simulation framework for conservation laws and\n", + "is written in the [Julia programming language](https://julialang.org/).\n", + "This tutorial is intended for beginners in Julia and Trixi.jl.\n", + "After reading it, you will know how to install Julia and Trixi.jl on your computer,\n", + "and you will be able to download setup files from our GitHub repository, modify them,\n", + "and run simulations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The contents of this tutorial:\n", + "- Julia installation\n", + "- Trixi.jl installation\n", + "- Running a simulation\n", + "- Getting an existing setup file\n", + "- Modifying an existing setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Julia installation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl is compatible with the latest stable release of Julia. Additional details regarding Julia\n", + "support can be found in the [`README.md`](https://github.com/trixi-framework/Trixi.jl#installation)\n", + "file. After installation, the current default Julia version can be managed through the command\n", + "line tool `juliaup`. You may follow our concise installation guidelines for Windows, Linux, and\n", + "MacOS provided below. In the event of any issues during the installation process, please consult\n", + "the official [Julia installation instruction](https://julialang.org/downloads/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Windows" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Open a terminal by pressing `Win+r` and entering `cmd` in the opened window.\n", + "- To install Julia, execute the following command in the terminal:\n", + " ```shell\n", + " winget install julia -s msstore\n", + " ```\n", + " Note: For this installation an MS Store account is necessary to proceed.\n", + "- Verify the successful installation of Julia by executing the following command in the terminal:\n", + " ```shell\n", + " julia\n", + " ```\n", + " To exit Julia, execute `exit()` or press `Ctrl+d`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Linux and MacOS" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- To install Julia, run the following command in a terminal:\n", + " ```shell\n", + " curl -fsSL https://install.julialang.org | sh\n", + " ```\n", + " Follow the instructions displayed in the terminal during the installation process.\n", + "- If an error occurs during the execution of the previous command, you may need to install\n", + " `curl`. On Ubuntu-type systems, you can use the following command:\n", + " ```shell\n", + " sudo apt install curl\n", + " ```\n", + " After installing `curl`, repeat the first step once more to proceed with Julia installation.\n", + "- Verify the successful installation of Julia by executing the following command in the terminal:\n", + " ```shell\n", + " julia\n", + " ```\n", + " To exit Julia, execute `exit()` or press `Ctrl+d`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Trixi.jl installation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl and its related tools are registered Julia packages, thus their installation\n", + "happens inside Julia.\n", + "For a smooth workflow experience with Trixi.jl, you need to install\n", + "[Trixi.jl](https://github.com/trixi-framework/Trixi.jl),\n", + "[OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl), and\n", + "[Plots.jl](https://github.com/JuliaPlots/Plots.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Open a terminal and start Julia.\n", + "- Execute the following commands to install all mentioned packages. Please note that the\n", + " installation process involves downloading and precompiling the source code, which may take\n", + " some time depending on your machine.\n", + " ```julia\n", + " import Pkg\n", + " Pkg.add([\"OrdinaryDiffEq\", \"Plots\", \"Trixi\"])\n", + " ```\n", + "- On Windows, the firewall may request permission to install packages." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Besides Trixi.jl you have now installed two additional\n", + "packages: [OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl) provides time\n", + "integration schemes used by Trixi.jl and [Plots.jl](https://github.com/JuliaPlots/Plots.jl)\n", + "can be used to directly visualize Trixi.jl results from the Julia REPL." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Usage" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Running a simulation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To get you started, Trixi.jl has a large set\n", + "of [example setups](https://github.com/trixi-framework/Trixi.jl/tree/main/examples), that can be\n", + "taken as a basis for your future investigations. In Trixi.jl, we call these setup files\n", + "\"elixirs\", since they contain Julia code that takes parts of Trixi.jl and combines them into\n", + "something new." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Any of the examples can be executed using the `trixi_include`\n", + "function. `trixi_include(...)` expects\n", + "a single string argument with a path to a file containing Julia code.\n", + "For convenience, the `examples_dir` function returns a path to the\n", + "[`examples`](https://github.com/trixi-framework/Trixi.jl/tree/main/examples)\n", + "folder, which has been locally downloaded while installing Trixi.jl.\n", + "`joinpath(...)` can be used to join path components into a full path." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let's execute a short two-dimensional problem setup. It approximates the solution of\n", + "the compressible Euler equations in 2D for an ideal gas (`CompressibleEulerEquations2D`)\n", + "with a weak blast wave as the initial condition and periodic boundary conditions." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The compressible Euler equations in two spatial dimensions are given by\n", + "$$\n", + "\\frac{\\partial}{\\partial t}\n", + "\\begin{pmatrix}\n", + "\\rho \\\\ \\rho v_1 \\\\ \\rho v_2 \\\\ \\rho e\n", + "\\end{pmatrix}\n", + "+\n", + "\\frac{\\partial}{\\partial x}\n", + "\\begin{pmatrix}\n", + "\\rho v_1 \\\\ \\rho v_1^2 + p \\\\ \\rho v_1 v_2 \\\\ (\\rho e + p) v_1\n", + "\\end{pmatrix}\n", + "+\n", + "\\frac{\\partial}{\\partial y}\n", + "\\begin{pmatrix}\n", + "\\rho v_2 \\\\ \\rho v_1 v_2 \\\\ \\rho v_2^2 + p \\\\ (\\rho e + p) v_2\n", + "\\end{pmatrix}\n", + "=\n", + "\\begin{pmatrix}\n", + "0 \\\\ 0 \\\\ 0 \\\\ 0\n", + "\\end{pmatrix},\n", + "$$\n", + "for an ideal gas with the specific heat ratio $\\gamma$.\n", + "Here, $\\rho$ is the density, $v_1$ and $v_2$ are the velocities, $e$ is the specific\n", + "total energy, and\n", + "$$\n", + "p = (\\gamma - 1) \\left( \\rho e - \\frac{1}{2} \\rho (v_1^2 + v_2^2) \\right)\n", + "$$\n", + "is the pressure." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The `initial_condition_weak_blast_wave` is specified in\n", + "[`compressible_euler_2d.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/src/equations/compressible_euler_2d.jl)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Start Julia in a terminal and execute the following code:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "```julia\n", + "using Trixi, OrdinaryDiffEq\n", + "trixi_include(joinpath(examples_dir(), \"tree_2d_dgsem\", \"elixir_euler_ec.jl\"))\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The output contains a recap of the setup and various information about the course of the simulation.\n", + "For instance, the solution was approximated over the `TreeMesh` with 1024 effective cells using\n", + "the `CarpenterKennedy2N54` ODE\n", + "solver. Further details about the ODE solver can be found in the\n", + "[documentation of OrdinaryDiffEq.jl](https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/#Low-Storage-Methods)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To analyze the result of the computation, we can use the Plots.jl package and the function\n", + "`plot(...)`, which creates a graphical representation of the solution. `sol` is a variable\n", + "defined in the executed example and it contains the solution after the simulation\n", + "finishes. `sol.u` holds the vector of values at each saved timestep, while `sol.t` holds the\n", + "corresponding times for each saved timestep. In this instance, only two timesteps were saved: the\n", + "initial and final ones. The plot depicts the distribution of the weak blast wave at the final moment\n", + "of time, showing the density, velocities, and pressure of the ideal gas across a 2D domain." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Getting an existing setup file" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To obtain a list of all Trixi.jl elixirs execute\n", + "`get_examples`. It returns the paths to all example setups." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "get_examples()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Editing an existing elixir is the best way to start your first own investigation using Trixi.jl." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To edit an existing elixir, you first have to find a suitable one and then copy it to a local\n", + "folder. Let's have a look at how to download the `elixir_euler_ec.jl` elixir used in the previous\n", + "section from the [Trixi.jl GitHub repository](https://github.com/trixi-framework/Trixi.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- All examples are located inside\n", + " the [`examples`](https://github.com/trixi-framework/Trixi.jl/tree/main/examples) folder.\n", + "- Navigate to the\n", + " file [`elixir_euler_ec.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_ec.jl).\n", + "- Right-click the `Raw` button on the right side of the webpage and choose `Save as...`\n", + " (or `Save Link As...`).\n", + "- Choose a folder and save the file." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Modifying an existing setup" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As an example, we will change the initial condition for calculations that occur in\n", + "`elixir_euler_ec.jl`. Initial conditions for `CompressibleEulerEquations2D` consist of\n", + "initial values for $\\rho$, $\\rho v_1$, $\\rho v_2$ and $\\rho e$. One of the common initial\n", + "conditions for the compressible Euler equations is a simple density wave. Let's implement it." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Open the downloaded file `elixir_euler_ec.jl` with a text editor.\n", + "- Go to the line with the following code:\n", + " ```julia\n", + " initial_condition = initial_condition_weak_blast_wave\n", + " ```\n", + " Here, `initial_condition_weak_blast_wave` is used as the initial condition.\n", + "- Comment out the line using the `#` symbol:\n", + " ```julia\n", + " # initial_condition = initial_condition_weak_blast_wave\n", + " ```\n", + "- Now you can create your own initial conditions. Add the following code after the\n", + " commented line:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function initial_condition_density_waves(x, t, equations::CompressibleEulerEquations2D)\n", + " v1 = 0.1 # velocity along x-axis\n", + " v2 = 0.2 # velocity along y-axis\n", + " rho = 1.0 + 0.98 * sinpi(sum(x) - t * (v1 + v2)) # density wave profile\n", + " p = 20 # pressure\n", + " rho_e = p / (equations.gamma - 1) + 1/2 * rho * (v1^2 + v2^2)\n", + " return SVector(rho, rho*v1, rho*v2, rho_e)\n", + "end\n", + "initial_condition = initial_condition_density_waves" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "- Execute the following code one more time, but instead of `path/to/file` paste the path to the\n", + " `elixir_euler_ec.jl` file that you just edited.\n", + " ```julia\n", + " using Trixi\n", + " trixi_include(path/to/file)\n", + " using Plots\n", + " plot(sol)\n", + " ```\n", + "Then you will obtain a new solution from running the simulation with a different initial\n", + "condition." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To get exactly the same picture execute the following.\n", + "```julia\n", + "pd = PlotData2D(sol)\n", + "p1 = plot(pd[\"rho\"])\n", + "p2 = plot(pd[\"v1\"], clim=(0.05, 0.15))\n", + "p3 = plot(pd[\"v2\"], clim=(0.15, 0.25))\n", + "p4 = plot(pd[\"p\"], clim=(10, 30))\n", + "plot(p1, p2, p3, p4)\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Feel free to make further changes to the initial condition to observe different solutions." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now you are able to download, modify and execute simulation setups for Trixi.jl. To explore\n", + "further details on setting up a new simulation with Trixi.jl, refer to the second part of\n", + "the introduction titled Create your first setup." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/hohqmesh_tutorial.ipynb b/v0.8.7/tutorials/notebooks/hohqmesh_tutorial.ipynb new file mode 100644 index 0000000000..3c17090b57 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/hohqmesh_tutorial.ipynb @@ -0,0 +1,1034 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 17: Unstructured meshes with HOHQMesh.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl supports numerical approximations on unstructured quadrilateral meshes\n", + "with the `UnstructuredMesh2D` mesh type." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The purpose of this tutorial is to demonstrate how to use the `UnstructuredMesh2D`\n", + "functionality of Trixi.jl. This begins by running and visualizing an available unstructured\n", + "quadrilateral mesh example. Then, the tutorial will demonstrate how to\n", + "conceptualize a problem with curved boundaries, generate\n", + "a curvilinear mesh using the available software in the Trixi.jl ecosystem,\n", + "and then run a simulation using Trixi.jl on said mesh." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Unstructured quadrilateral meshes can be made\n", + "with the [High-Order Hex-Quad Mesh (HOHQMesh) generator](https://github.com/trixi-framework/HOHQMesh)\n", + "created and developed by David Kopriva.\n", + "HOHQMesh is a mesh generator specifically designed for spectral element methods.\n", + "It provides high-order boundary curve information (needed to accurately set boundary conditions)\n", + "and elements can be larger (due to the high accuracy of the spatial approximation)\n", + "compared to traditional finite element mesh generators.\n", + "For more information about the design and features of HOHQMesh one can refer to its\n", + "[official documentation](https://trixi-framework.github.io/HOHQMesh/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "HOHQMesh is incorporated into the Trixi.jl framework via the registered Julia package\n", + "[HOHQMesh.jl](https://github.com/trixi-framework/HOHQMesh.jl).\n", + "This package provides a Julia wrapper for the HOHQMesh generator that allows users to easily create mesh\n", + "files without the need to build HOHQMesh from source. To install the HOHQMesh package execute\n", + "```julia\n", + "import Pkg; Pkg.add(\"HOHQMesh\")\n", + "```\n", + "Now we are ready to generate an unstructured quadrilateral mesh that can be used by Trixi.jl." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Running and visualizing an unstructured simulation" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl supports solving hyperbolic problems on several mesh types.\n", + "There is a default example for this mesh type that can be executed by" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "trixi_include(default_example_unstructured())" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "This will compute a smooth, manufactured solution test case for the 2D compressible Euler equations\n", + "on the curved quadrilateral mesh described in the\n", + "[Trixi.jl documentation](https://trixi-framework.github.io/Trixi.jl/stable/meshes/unstructured_quad_mesh/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Apart from the usual error and timing output provided by the Trixi.jl run, it is useful to visualize and inspect\n", + "the solution. One option available in the Trixi.jl framework to visualize the solution on\n", + "unstructured quadrilateral meshes is post-processing the\n", + "Trixi.jl output file(s) with the [`Trixi2Vtk`](https://github.com/trixi-framework/Trixi2Vtk.jl) tool\n", + "and plotting them with [ParaView](https://www.paraview.org/download/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To convert the HDF5-formatted `.h5` output file(s) from Trixi.jl into VTK format execute the following" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi2Vtk\n", + "trixi2vtk(\"out/solution_000000180.h5\", output_directory=\"out\")" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Note this step takes about 15-30 seconds as the package `Trixi2Vtk` must be precompiled and executed for the first time\n", + "in your REPL session. The `trixi2vtk` command above will convert the solution file at the final time into a `.vtu` file\n", + "which can be read in and visualized with ParaView. Optional arguments for `trixi2vtk` are: (1) Pointing to the `output_directory`\n", + "where the new files will be saved; it defaults to the current directory. (2) Specifying a higher number of\n", + "visualization nodes. For instance, if we want to use 12 uniformly spaced nodes for visualization we can execute" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "trixi2vtk(\"out/solution_000000180.h5\", output_directory=\"out\", nvisnodes=12)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "By default `trixi2vtk` sets `nvisnodes` to be the same as the number of nodes specified in\n", + "the `elixir` file used to run the simulation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Finally, if you want to convert all the solution files to VTK execute" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "trixi2vtk(\"out/solution_000*.h5\", output_directory=\"out\", nvisnodes=12)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "then it is possible to open the `.pvd` file with ParaView and create a video of the simulation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Creating a mesh using HOHQMesh" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The creation of an unstructured quadrilateral mesh using HOHQMesh.jl is driven by a **control file**. In this file the user dictates\n", + "the domain to be meshed, prescribes any desired boundary curvature, the polynomial order of said boundaries, etc.\n", + "In this tutorial we cover several basic features of the possible control inputs. For a complete discussion\n", + "on this topic see the [HOHQMesh control file documentation](https://trixi-framework.github.io/HOHQMesh/the-control-file/)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To begin, we provide a complete control file in this tutorial. After this we give a breakdown\n", + "of the control file components to explain the chosen parameters." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Suppose we want to create a mesh of a domain with straight sided\n", + "outer boundaries and a curvilinear \"ice cream cone\" shaped object at its center." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![mesh_boundary_cartoon](https://user-images.githubusercontent.com/25242486/129603954-9788500d-bba8-49be-8e6f-7555099dbf7c.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The associated `ice_cream_straight_sides.control` file is created below." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "open(\"out/ice_cream_straight_sides.control\", \"w\") do io\n", + " println(io, raw\"\"\"\n", + "\\begin{CONTROL_INPUT}\n", + " \\begin{RUN_PARAMETERS}\n", + " mesh file name = ice_cream_straight_sides.mesh\n", + " plot file name = ice_cream_straight_sides.tec\n", + " stats file name = none\n", + " mesh file format = ISM-v2\n", + " polynomial order = 4\n", + " plot file format = skeleton\n", + " \\end{RUN_PARAMETERS}\n", + "\n", + " \\begin{BACKGROUND_GRID}\n", + " x0 = [-8.0, -8.0, 0.0]\n", + " dx = [1.0, 1.0, 0.0]\n", + " N = [16,16,1]\n", + " \\end{BACKGROUND_GRID}\n", + "\n", + " \\begin{SPRING_SMOOTHER}\n", + " smoothing = ON\n", + " smoothing type = LinearAndCrossBarSpring\n", + " number of iterations = 25\n", + " \\end{SPRING_SMOOTHER}\n", + "\n", + "\\end{CONTROL_INPUT}\n", + "\n", + "\\begin{MODEL}\n", + "\n", + " \\begin{INNER_BOUNDARIES}\n", + "\n", + " \\begin{CHAIN}\n", + " name = IceCreamCone\n", + " \\begin{END_POINTS_LINE}\n", + " name = LeftSlant\n", + " xStart = [-2.0, 1.0, 0.0]\n", + " xEnd = [ 0.0, -3.0, 0.0]\n", + " \\end{END_POINTS_LINE}\n", + "\n", + " \\begin{END_POINTS_LINE}\n", + " name = RightSlant\n", + " xStart = [ 0.0, -3.0, 0.0]\n", + " xEnd = [ 2.0, 1.0, 0.0]\n", + " \\end{END_POINTS_LINE}\n", + "\n", + " \\begin{CIRCULAR_ARC}\n", + " name = IceCream\n", + " units = degrees\n", + " center = [ 0.0, 1.0, 0.0]\n", + " radius = 2.0\n", + " start angle = 0.0\n", + " end angle = 180.0\n", + " \\end{CIRCULAR_ARC}\n", + " \\end{CHAIN}\n", + "\n", + " \\end{INNER_BOUNDARIES}\n", + "\n", + "\\end{MODEL}\n", + "\\end{FILE}\n", + "\"\"\")\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The first three blocks of information are wrapped within a `CONTROL_INPUT` environment block as they define the\n", + "core components of the quadrilateral mesh that will be generated." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The first block of information in `RUN_PARAMETERS` is\n", + "```\n", + "\\begin{RUN_PARAMETERS}\n", + " mesh file name = ice_cream_straight_sides.mesh\n", + " plot file name = ice_cream_straight_sides.tec\n", + " stats file name = none\n", + " mesh file format = ISM-v2\n", + " polynomial order = 4\n", + " plot file format = skeleton\n", + "\\end{RUN_PARAMETERS}\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The mesh and plot file names will be the files created by HOHQMesh once successfully executed. The stats file name is\n", + "available if you wish to also save a collection of mesh statistics. For this example it is deactivated.\n", + "These file names given within `RUN_PARAMETERS` **should match** that of the control file, and although this is not required by\n", + "HOHQMesh, it is a useful style convention.\n", + "The mesh file format `ISM-v2` in the format currently required by Trixi.jl. The `polynomial order` prescribes the order\n", + "of an interpolant constructed on the Chebyshev-Gauss-Lobatto nodes that is used to represent any curved boundaries on a particular element.\n", + "The plot file format of `skeleton` means that visualizing the plot file will only draw the element boundaries (and no internal nodes).\n", + "Alternatively, the format can be set to `sem` to visualize the interior nodes of the approximation as well." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The second block of information in `BACKGROUND_GRID` is\n", + "```\n", + "\\begin{BACKGROUND_GRID}\n", + " x0 = [-8.0, -8.0, 0.0]\n", + " dx = [1.0, 1.0, 0.0]\n", + " N = [16,16,1]\n", + "\\end{BACKGROUND_GRID}\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This lays a grid of Cartesian elements for the domain beginning at the point `x0` as its bottom-left corner.\n", + "The value of `dx`, which could differ in each direction if desired, controls the step size taken in each Cartesian direction.\n", + "The values in `N` set how many Cartesian box elements are set in each coordinate direction.\n", + "The above parameters define a $16\\times 16$ element square mesh on $[-8,8]^2$.\n", + "Further, this sets up four outer boundaries of the domain that are given the default names: `Top, Left, Bottom, Right`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The third block of information in `SPRING_SMOOTHER` is\n", + "```\n", + "\\begin{SPRING_SMOOTHER}\n", + " smoothing = ON\n", + " smoothing type = LinearAndCrossBarSpring\n", + " number of iterations = 25\n", + "\\end{SPRING_SMOOTHER}\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Once HOHQMesh generates the mesh, a spring-mass-dashpot model is created to smooth the mesh and create \"nicer\" quadrilateral elements.\n", + "The [default parameters of Hooke's law](https://trixi-framework.github.io/HOHQMesh/the-control-input/#the-smoother)\n", + "for the spring-mass-dashpot model have been selected after a fair amount of experimentation across many meshes.\n", + "If you wish to deactivate this feature you can set `smoothing = OFF` (or remove this block from the control file)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "After the `CONTROL_INPUT` environment block comes the `MODEL` environment block. It is here where the user prescribes curved boundary information with either:\n", + "* An `OUTER_BOUNDARY` (covered in the next section of this tutorial).\n", + "* One or more `INNER_BOUNDARIES`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "There are several options to describe the boundary curve data to HOHQMesh like splines or parametric curves." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For the example `ice_cream_straight_sides.control` we define three internal boundaries; two straight-sided and\n", + "one as a circular arc.\n", + "Within the HOHQMesh control input each curve must be assigned to a `CHAIN` as shown below in the complete\n", + "`INNER_BOUNDARIES` block.\n", + "```\n", + "\\begin{INNER_BOUNDARIES}\n", + "\n", + " \\begin{CHAIN}\n", + " name = IceCreamCone\n", + " \\begin{END_POINTS_LINE}\n", + " name = LeftSlant\n", + " xStart = [-2.0, 1.0, 0.0]\n", + " xEnd = [ 0.0, -3.0, 0.0]\n", + " \\end{END_POINTS_LINE}\n", + "\n", + " \\begin{END_POINTS_LINE}\n", + " name = RightSlant\n", + " xStart = [ 0.0, -3.0, 0.0]\n", + " xEnd = [ 2.0, 1.0, 0.0]\n", + " \\end{END_POINTS_LINE}\n", + "\n", + " \\begin{CIRCULAR_ARC}\n", + " name = IceCream\n", + " units = degrees\n", + " center = [ 0.0, 1.0, 0.0]\n", + " radius = 2.0\n", + " start angle = 0.0\n", + " end angle = 180.0\n", + " \\end{CIRCULAR_ARC}\n", + " \\end{CHAIN}\n", + "\n", + "\\end{INNER_BOUNDARIES}\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It is important to note there are two `name` quantities one for the `CHAIN` and one for the `PARAMETRIC_EQUATION_CURVE`.\n", + "The name for the `CHAIN` is used internally by HOHQMesh, so if you have multiple `CHAIN`s they **must be given a unique name**.\n", + "The name for the `PARAMETRIC_EQUATION_CURVE` will be printed to the appropriate boundaries within the `.mesh` file produced by\n", + "HOHQMesh." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We create the mesh file `ice_cream_straight_sides.mesh` and its associated file for plotting\n", + "`ice_cream_straight_sides.tec` by using HOHQMesh.jl's function `generate_mesh`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using HOHQMesh\n", + "control_file = joinpath(\"out\", \"ice_cream_straight_sides.control\")\n", + "output = generate_mesh(control_file);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The mesh file `ice_cream_straight_sides.mesh` and its associated file for plotting\n", + "`ice_cream_straight_sides.tec` are placed in the `out` folder.\n", + "The resulting mesh generated by HOHQMesh.jl is given in the following figure." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![mesh_straight_sides](https://user-images.githubusercontent.com/25242486/129603958-08e4b874-53d5-4511-9a54-6daf4c21edca.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We note that Trixi.jl uses the boundary name information from the control file\n", + "to assign boundary conditions in an elixir file.\n", + "Therefore, the name should start with a letter and consist only of alphanumeric characters and underscores. Please note that the name will be treated as case sensitive." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Example simulation on `ice_cream_straight_sides.mesh`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "With this newly generated mesh we are ready to run a Trixi.jl simulation on an unstructured quadrilateral mesh.\n", + "For this we must create a new elixir file." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The elixir file given below creates an initial condition for a\n", + "uniform background flow state with a free stream Mach number of 0.3.\n", + "A focus for this part of the tutorial is to specify the boundary conditions and to construct the new mesh from the\n", + "file that was generated in the previous exercise." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It is straightforward to set the different boundary\n", + "condition types in an elixir by assigning a particular function to a boundary name inside a\n", + "Julia dictionary, `Dict`, variable. Observe that the names of these boundaries match those provided by HOHQMesh\n", + "either by default, e.g. `Bottom`, or user assigned, e.g. `IceCream`. For this problem setup use\n", + "* Freestream boundary conditions on the four box edges.\n", + "* Free slip wall boundary condition on the interior curved boundaries." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To construct the unstructured quadrilateral mesh from the HOHQMesh file we point to the appropriate location\n", + "with the variable `mesh_file` and then feed this into the constructor for the `UnstructuredMesh2D` type in Trixi.jl" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "```julia\n", + "# create the unstructured mesh from your mesh file\n", + "using Trixi\n", + "mesh_file = joinpath(\"out\", \"ice_cream_straight_sides.mesh\")\n", + "mesh = UnstructuredMesh2D(mesh_file);\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The complete elixir file for this simulation example is given below." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq, Trixi\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4) # set gas gamma = 1.4\n", + "\n", + "# freestream flow state with Ma_inf = 0.3\n", + "@inline function uniform_flow_state(x, t, equations::CompressibleEulerEquations2D)\n", + "\n", + " # set the freestream flow parameters\n", + " rho_freestream = 1.0\n", + " u_freestream = 0.3\n", + " p_freestream = inv(equations.gamma)\n", + "\n", + " theta = 0.0 # zero angle of attack\n", + " si, co = sincos(theta)\n", + " v1 = u_freestream * co\n", + " v2 = u_freestream * si\n", + "\n", + " prim = SVector(rho_freestream, v1, v2, p_freestream)\n", + " return prim2cons(prim, equations)\n", + "end\n", + "\n", + "# initial condition\n", + "initial_condition = uniform_flow_state\n", + "\n", + "# boundary condition types\n", + "boundary_condition_uniform_flow = BoundaryConditionDirichlet(uniform_flow_state)\n", + "\n", + "# boundary condition dictionary\n", + "boundary_conditions = Dict( :Bottom => boundary_condition_uniform_flow,\n", + " :Top => boundary_condition_uniform_flow,\n", + " :Right => boundary_condition_uniform_flow,\n", + " :Left => boundary_condition_uniform_flow,\n", + " :LeftSlant => boundary_condition_slip_wall,\n", + " :RightSlant => boundary_condition_slip_wall,\n", + " :IceCream => boundary_condition_slip_wall );\n", + "\n", + "# DGSEM solver.\n", + "# 1) polydeg must be >= the polynomial order set in the HOHQMesh control file to guarantee\n", + "# freestream preservation. As a extra task try setting polydeg=3\n", + "# 2) VolumeIntegralFluxDifferencing with central volume flux is activated\n", + "# for dealiasing\n", + "volume_flux = flux_ranocha\n", + "solver = DGSEM(polydeg=4, surface_flux=flux_hll,\n", + " volume_integral=VolumeIntegralFluxDifferencing(volume_flux))\n", + "\n", + "# create the unstructured mesh from your mesh file\n", + "mesh_file = joinpath(\"out\", \"ice_cream_straight_sides.mesh\")\n", + "mesh = UnstructuredMesh2D(mesh_file)\n", + "\n", + "# Create semidiscretization with all spatial discretization-related components\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " boundary_conditions=boundary_conditions)\n", + "\n", + "# Create ODE problem from semidiscretization with time span from 0.0 to 2.0\n", + "tspan = (0.0, 2.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "\n", + "# Create the callbacks to output solution files and adapt the time step\n", + "summary_callback = SummaryCallback()\n", + "save_solution = SaveSolutionCallback(interval=10,\n", + " save_initial_solution=true,\n", + " save_final_solution=true)\n", + "stepsize_callback = StepsizeCallback(cfl=1.0)\n", + "\n", + "callbacks = CallbackSet(summary_callback, save_solution, stepsize_callback)\n", + "\n", + "# Evolve ODE problem in time using `solve` from OrdinaryDiffEq\n", + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n", + " dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " save_everystep=false, callback=callbacks);\n", + "# print the timer summary\n", + "summary_callback()" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Visualization of the solution is carried out in a similar way as above. That is, one converts the `.h5`\n", + "output files with `trixi2vtk` and then plot the solution in ParaView. An example plot of the pressure\n", + "at the final time is shown below." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![simulation_straight_sides](https://user-images.githubusercontent.com/25242486/129733926-6ef80676-779b-4f1e-9826-3ebf750cf382.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Making a mesh with a curved outer boundary" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let us modify the mesh from the previous task and place a circular outer boundary instead\n", + "of straight-sided outer boundaries.\n", + "Note, the \"ice cream cone\" shape is still placed at the center of the domain." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We create the new control file `ice_cream_curved_sides.control` file below and will then highlight the\n", + "major differences compared to `ice_cream_straight_sides.control`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "open(\"out/ice_cream_curved_sides.control\", \"w\") do io\n", + " println(io, raw\"\"\"\n", + "\\begin{CONTROL_INPUT}\n", + " \\begin{RUN_PARAMETERS}\n", + " mesh file name = ice_cream_curved_sides.mesh\n", + " plot file name = ice_cream_curved_sides.tec\n", + " stats file name = none\n", + " mesh file format = ISM-v2\n", + " polynomial order = 4\n", + " plot file format = skeleton\n", + " \\end{RUN_PARAMETERS}\n", + "\n", + " \\begin{BACKGROUND_GRID}\n", + " background grid size = [1.0, 1.0, 0.0]\n", + " \\end{BACKGROUND_GRID}\n", + "\n", + " \\begin{SPRING_SMOOTHER}\n", + " smoothing = ON\n", + " smoothing type = LinearAndCrossBarSpring\n", + " number of iterations = 25\n", + " \\end{SPRING_SMOOTHER}\n", + "\n", + "\\end{CONTROL_INPUT}\n", + "\n", + "\\begin{MODEL}\n", + "\n", + " \\begin{OUTER_BOUNDARY}\n", + " \\begin{PARAMETRIC_EQUATION_CURVE}\n", + " name = OuterCircle\n", + " xEqn = x(t) = 8.0*sin(2.0*pi*t)\n", + " yEqn = y(t) = 8.0*cos(2.0*pi*t)\n", + " zEqn = z(t) = 0.0\n", + " \\end{PARAMETRIC_EQUATION_CURVE}\n", + "\n", + " \\end{OUTER_BOUNDARY}\n", + "\n", + " \\begin{INNER_BOUNDARIES}\n", + "\n", + " \\begin{CHAIN}\n", + " name = IceCreamCone\n", + " \\begin{END_POINTS_LINE}\n", + " name = LeftSlant\n", + " xStart = [-2.0, 1.0, 0.0]\n", + " xEnd = [ 0.0, -3.0, 0.0]\n", + " \\end{END_POINTS_LINE}\n", + "\n", + " \\begin{END_POINTS_LINE}\n", + " name = RightSlant\n", + " xStart = [ 0.0, -3.0, 0.0]\n", + " xEnd = [ 2.0, 1.0, 0.0]\n", + " \\end{END_POINTS_LINE}\n", + "\n", + " \\begin{CIRCULAR_ARC}\n", + " name = IceCream\n", + " units = degrees\n", + " center = [ 0.0, 1.0, 0.0]\n", + " radius = 2.0\n", + " start angle = 0.0\n", + " end angle = 180.0\n", + " \\end{CIRCULAR_ARC}\n", + " \\end{CHAIN}\n", + "\n", + " \\end{INNER_BOUNDARIES}\n", + "\n", + "\\end{MODEL}\n", + "\\end{FILE}\n", + "\"\"\")\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The first alteration is that we have altered the second block of information\n", + "`BACKGROUND_GRID` within the `CONTROL_INPUT` to be\n", + "```\n", + "\\begin{BACKGROUND_GRID}\n", + " background grid size = [1.0, 1.0, 0.0]\n", + "\\end{BACKGROUND_GRID}\n", + "```\n", + "This mesh control file has an outer boundary that determines the extent of the domain to be meshed.\n", + "Therefore, we only need to supply the `background grid size` to the `BACKGROUND_GRID` control input." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The second alteration is that the `MODEL` now contains information for an `OUTER_BOUNDARY`.\n", + "In this case it is a circle of radius `8` centered at `[0.0, 0.0, 0.0]` written as a set of\n", + "`PARAMETRIC_EQUATION_CURVE`s.\n", + "```\n", + " \\begin{OUTER_BOUNDARY}\n", + "\n", + " \\begin{PARAMETRIC_EQUATION_CURVE}\n", + " name = OuterCircle\n", + " xEqn = x(t) = 8.0*sin(2.0*pi*t)\n", + " yEqn = y(t) = 8.0*cos(2.0*pi*t)\n", + " zEqn = z(t) = 0.0\n", + " \\end{PARAMETRIC_EQUATION_CURVE}\n", + "\n", + " \\end{OUTER_BOUNDARY}\n", + "```\n", + "Just as with the inner boundary curves, we must assign a name to the `OUTER_BOUNDARY`. It will be included\n", + "in the generated `.mesh` file and is used within the Trixi.jl elixir file to set boundary conditions." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Again, we create the `.mesh` and `.tec` files with HOHQMesh.jl's function `generate_mesh`" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "control_file = joinpath(\"out\", \"ice_cream_curved_sides.control\")\n", + "output = generate_mesh(control_file);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The files are placed in the `out` folder." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The resulting mesh generated by HOHQMesh.jl is given in the following figure." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![mesh_curved_sides](https://user-images.githubusercontent.com/25242486/129603957-6a92618f-9ed8-4072-b6ab-05533bea746a.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Running Trixi.jl on `ice_cream_curved_sides.mesh`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can reuse much of the elixir file to setup the uniform flow over an ice cream cone from the\n", + "previous part of this tutorial. The only component of the elixir file that must be changed is the boundary condition\n", + "dictionary because we now have a boundary named `OuterCircle` instead of four edges of a bounding box." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# boundary condition dictionary\n", + "boundary_conditions = Dict( :OuterCircle => boundary_condition_uniform_flow,\n", + " :LeftSlant => boundary_condition_slip_wall,\n", + " :RightSlant => boundary_condition_slip_wall,\n", + " :IceCream => boundary_condition_slip_wall );" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Also, we must update the construction of the mesh from our new mesh file `ice_cream_curved_sides.mesh` that\n", + "is located in the `out` folder." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# create the unstructured mesh from your mesh file\n", + "mesh_file = joinpath(\"out\", \"ice_cream_curved_sides.mesh\")\n", + "mesh = UnstructuredMesh2D(mesh_file);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We can then post-process the solution file at the final time on the new mesh with `Trixi2Vtk` and visualize with ParaView." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![simulation_curved_sides](https://user-images.githubusercontent.com/25242486/129733924-778795c1-9119-419a-8b89-bcbe13e33cd7.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Setting up a simulation with AMR via `P4estMesh`\n", + "The above explained mesh file format of `ISM-V2` only works with `UnstructuredMesh2D` and so does\n", + "not support AMR. On the other hand, the mesh type `P4estMesh` allows AMR. The mesh\n", + "constructor for the `P4estMesh` imports an unstructured, conforming mesh from an Abaqus mesh file\n", + "(`.inp`)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As described above, the first block of the HOHQMesh control file contains the parameter\n", + "`mesh file format`. If you set `mesh file format = ABAQUS` instead of `ISM-V2`,\n", + "HOHQMesh.jl's function `generate_mesh` creates an Abaqus mesh file `.inp`.\n", + "```julia\n", + "using HOHQMesh\n", + "control_file = joinpath(\"out\", \"ice_cream_straight_sides.control\")\n", + "output = generate_mesh(control_file);\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now, you can create a `P4estMesh` from your mesh file. It is described in detail in the\n", + "[P4est-based mesh](https://trixi-framework.github.io/Trixi.jl/stable/meshes/p4est_mesh/#P4est-based-mesh)\n", + "part of the Trixi.jl docs.\n", + "```julia\n", + "using Trixi\n", + "mesh_file = joinpath(\"out\", \"ice_cream_straight_sides.inp\")\n", + "mesh = P4estMesh{2}(mesh_file)\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Since `P4estMesh` supports AMR, we just have to extend the setup from the first example by the\n", + "standard AMR procedure. For more information about AMR in Trixi.jl, see the matching tutorial." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "```julia\n", + "amr_indicator = IndicatorLöhner(semi, variable=density)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "amr_controller = ControllerThreeLevel(semi, amr_indicator,\n", + " base_level=0,\n", + " med_level =1, med_threshold=0.05,\n", + " max_level =3, max_threshold=0.1)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "amr_callback = AMRCallback(semi, amr_controller,\n", + " interval=5,\n", + " adapt_initial_condition=true,\n", + " adapt_initial_condition_only_refine=true)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "callbacks = CallbackSet(..., amr_callback)\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can then post-process the solution file at the final time on the new mesh with `Trixi2Vtk` and visualize\n", + "with ParaView, see the appropriate [visualization section](https://trixi-framework.github.io/Trixi.jl/stable/visualization/#Trixi2Vtk)\n", + "for details." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![simulation_straight_sides_p4est_amr](https://user-images.githubusercontent.com/74359358/168049930-8abce6ac-cd47-4d04-b40b-0fa459bbd98d.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\", \"Trixi2Vtk\", \"HOHQMesh\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/non_periodic_boundaries.ipynb b/v0.8.7/tutorials/notebooks/non_periodic_boundaries.ipynb new file mode 100644 index 0000000000..1a31bda75a --- /dev/null +++ b/v0.8.7/tutorials/notebooks/non_periodic_boundaries.ipynb @@ -0,0 +1,348 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 7: Non-periodic boundaries" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Dirichlet boundary condition\n", + "First, let's look at the Dirichlet boundary condition `BoundaryConditionDirichlet`.\n", + "```julia\n", + "BoundaryConditionDirichlet(boundary_value_function)\n", + "```\n", + "In Trixi.jl, this creates a Dirichlet boundary condition where the function `boundary_value_function`\n", + "is used to set the values at the boundary. It can be used to create a boundary condition that sets\n", + "exact boundary values by passing the exact solution of the equation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It is important to note that standard Dirichlet boundary conditions for hyperbolic PDEs do not\n", + "make sense in most cases. However, we are using a special weak form of the Dirichlet boundary\n", + "condition, based on the application of the numerical surface flux. The numerical surface flux\n", + "takes the solution value from inside the domain and the prescribed value of the outer boundary\n", + "state as arguments, and solves an approximate Riemann problem to introduce dissipation (and\n", + "hence stabilization) at the boundary. Hence, the performance of the Dirichlet BC depends on the\n", + "fidelity of the numerical surface flux.\n", + "An easy-to read introductory reference on this topic is the paper by\n", + "[Mengaldo et al.](https://doi.org/10.2514/6.2014-2923)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The passed boundary value function is called with the same arguments as an initial condition\n", + "function, i.e.\n", + "```julia\n", + "boundary_value_function(x, t, equations)\n", + "```\n", + "where `x` specifies the spatial coordinates, `t` is the current time, and `equations` is the\n", + "corresponding system of equations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We want to give a short example for a simulation with such a Dirichlet BC." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Consider the one-dimensional linear advection equation with domain $\\Omega=[0, 2]$ and a constant\n", + "zero initial condition." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq, Trixi\n", + "\n", + "advection_velocity = 1.0\n", + "equations = LinearScalarAdvectionEquation1D(advection_velocity)\n", + "\n", + "initial_condition_zero(x, t, equation::LinearScalarAdvectionEquation1D) = SVector(0.0)\n", + "initial_condition = initial_condition_zero\n", + "\n", + "using Plots\n", + "plot(x -> sum(initial_condition(x, 0.0, equations)), label=\"initial condition\", ylim=(-1.5, 1.5))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Using an advection velocity of `1.0` and the (local) Lax-Friedrichs/Rusanov flux\n", + "`FluxLaxFriedrichs` as a numerical surface flux, we are able to create an inflow boundary\n", + "on the left and an outflow boundary on the right, as the Lax-Friedrichs flux is in this case an\n", + "exact characteristics Riemann solver. We note that for more complex PDEs different strategies for\n", + "inflow/outflow boundaries are necessary. To define the inflow values, we initialize a `boundary_value_function`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function boundary_condition_sine_sector(x, t, equation::LinearScalarAdvectionEquation1D)\n", + " if 1 <= t <= 3\n", + " scalar = sin(2 * pi * sum(t - 1))\n", + " else\n", + " scalar = zero(t)\n", + " end\n", + " return SVector(scalar)\n", + "end\n", + "boundary_condition = boundary_condition_sine_sector" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We set the BC in negative and positive x-direction." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "boundary_conditions = (x_neg=BoundaryConditionDirichlet(boundary_condition),\n", + " x_pos=BoundaryConditionDirichlet(boundary_condition))" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n", + "\n", + "coordinates_min = (0.0,)\n", + "coordinates_max = (2.0,)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "For the mesh type `TreeMesh` the parameter `periodicity` must be set to `false` in the\n", + "corresponding direction." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=4,\n", + " n_cells_max=10_000,\n", + " periodicity=false)\n", + "\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations,\n", + " initial_condition,\n", + " solver,\n", + " boundary_conditions=boundary_conditions)\n", + "\n", + "tspan = (0.0, 6.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "analysis_callback = AnalysisCallback(semi, interval=100,)\n", + "\n", + "stepsize_callback = StepsizeCallback(cfl=0.9)\n", + "\n", + "callbacks = CallbackSet(analysis_callback,\n", + " stepsize_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We define some equidistant nodes for the visualization" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "visnodes = range(tspan[1], tspan[2], length=300)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "and run the simulation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n", + " dt=1, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " save_everystep=false, saveat=visnodes, callback=callbacks);\n", + "\n", + "using Plots\n", + "@gif for step in eachindex(sol.u)\n", + " plot(sol.u[step], semi, ylim=(-1.5, 1.5), legend=true, label=\"approximation\", title=\"time t=$(round(sol.t[step], digits=5))\")\n", + " scatter!([0.0], [sum(boundary_condition(SVector(0.0), sol.t[step], equations))], label=\"boundary condition\")\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "# Other available example elixirs with non-trivial BC\n", + "Moreover, there are other boundary conditions in Trixi.jl. For instance, you can use the slip wall\n", + "boundary condition `boundary_condition_slip_wall`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl provides some interesting examples with different combinations of boundary conditions, e.g.\n", + "using `boundary_condition_slip_wall` and other self-defined boundary conditions using\n", + "`BoundaryConditionDirichlet`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For instance, there is a 2D compressible Euler setup for a Mach 3 wind tunnel flow with a forward\n", + "facing step in the elixir [`elixir_euler_forward_step_amr.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/p4est_2d_dgsem/elixir_euler_forward_step_amr.jl)\n", + "discretized with a `P4estMesh` using adaptive mesh refinement (AMR).\n", + "\n", + " \n", + "
\n", + "\n", + "Source: [`Video`](https://www.youtube.com/watch?v=glAug1aIxio) on Trixi.jl's YouTube channel [`Trixi Framework`](https://www.youtube.com/watch?v=WElqqdMhY4A)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "A double Mach reflection problem for the 2D compressible Euler equations\n", + "[`elixir_euler_double_mach_amr.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/p4est_2d_dgsem/elixir_euler_double_mach_amr.jl)\n", + "exercises a special boundary conditions along the bottom of the domain that is a mixture of\n", + "Dirichlet and slip wall.\n", + "\n", + " \n", + "
\n", + "\n", + "Source: [`Video`](https://www.youtube.com/watch?v=WElqqdMhY4A) on Trixi.jl's YouTube channel [`Trixi Framework`](https://www.youtube.com/watch?v=WElqqdMhY4A)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "A channel flow around a cylinder at Mach 3\n", + "[`elixir_euler_supersonic_cylinder.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/p4est_2d_dgsem/elixir_euler_supersonic_cylinder.jl)\n", + "contains supersonic Mach 3 inflow at the left portion of the domain and supersonic outflow at the\n", + "right portion of the domain. The top and bottom of the channel as well as the cylinder are treated\n", + "as Euler slip wall boundaries.\n", + "\n", + " \n", + "
\n", + "\n", + "Source: [`Video`](https://www.youtube.com/watch?v=w0A9X38cSe4) on Trixi.jl's YouTube channel [`Trixi Framework`](https://www.youtube.com/watch?v=WElqqdMhY4A)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/p4est_from_gmsh.ipynb b/v0.8.7/tutorials/notebooks/p4est_from_gmsh.ipynb new file mode 100644 index 0000000000..cd2d6ccb9d --- /dev/null +++ b/v0.8.7/tutorials/notebooks/p4est_from_gmsh.ipynb @@ -0,0 +1,559 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 18: P4est mesh from gmsh" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl supports numerical approximations from structured and unstructured quadrilateral meshes\n", + "with the `P4estMesh` mesh type." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The purpose of this tutorial is to demonstrate how to use the `P4estMesh`\n", + "functionality of Trixi.jl for existing meshes with straight-sided (bilinear) elements/cells.\n", + "This begins by running and visualizing an available unstructured quadrilateral mesh example.\n", + "Then, the tutorial will cover how to use existing meshes generated by [`gmsh`](https://gmsh.info/)\n", + "or any other meshing software that can export to the Abaqus input `.inp` format." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Running the simulation of a near-field flow around an airfoil" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl supports solving hyperbolic-parabolic problems on several mesh types.\n", + "A somewhat complex example that employs the `P4estMesh` is the near-field simulation of a\n", + "Mach 2 flow around the NACA6412 airfoil." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "trixi_include(joinpath(examples_dir(), \"p4est_2d_dgsem\", \"elixir_euler_NACA6412airfoil_mach2.jl\"), tspan=(0.0, 0.5))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Conveniently, we use the Plots package to have a first look at the results:\n", + "```julia\n", + "using Plots\n", + "pd = PlotData2D(sol)\n", + "plot(pd[\"rho\"])\n", + "plot!(getmesh(pd))\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Creating a mesh using `gmsh`" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The creation of an unstructured quadrilateral mesh using `gmsh` is driven by a **geometry file**.\n", + "There are plenty of possibilities for the user, see the [documentation](https://gmsh.info/doc/texinfo/gmsh.html) and [tutorials](https://gitlab.onelab.info/gmsh/gmsh/tree/master/tutorials)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To begin, we provide a complete geometry file for the NACA6412 airfoil bounded by a rectangular box. After this we give a breakdown\n", + "of the most important parts required for successful mesh generation that can later be used by the `p4est` library\n", + "and Trixi.jl.\n", + "We emphasize that this near-field mesh should only be used for instructive purposes and not for actual production runs." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The associated `NACA6412.geo` file is given below:\n", + "```c++\n", + " // GMSH geometry script for a NACA 6412 airfoil with 11 degree angle of attack\n", + " // in a box (near-field mesh).\n", + " // see https://github.com/cfsengineering/GMSH-Airfoil-2D\n", + " // for software to generate gmsh `.geo` geometry files for NACA airfoils.\n", + "\n", + " // outer bounding box\n", + " Point(1) = {-1.25, -0.5, 0, 1.0};\n", + " Point(2) = {1.25, -0.5, 0, 1.0};\n", + " Point(3) = {1.25, 0.5, 0, 1.0};\n", + " Point(4) = {-1.25, 0.5, 0, 1.0};\n", + "\n", + " // lines of the bounding box\n", + " Line(1) = {1, 2};\n", + " Line(2) = {2, 3};\n", + " Line(3) = {3, 4};\n", + " Line(4) = {4, 1};\n", + " // outer box\n", + " Line Loop(8) = {1, 2, 3, 4};\n", + "\n", + " // Settings\n", + " // This value gives the global element size factor (lower -> finer mesh)\n", + " Mesh.CharacteristicLengthFactor = 1.0 * 2^(-3);\n", + " // Insist on quads instead of default triangles\n", + " Mesh.RecombineAll = 1;\n", + " // Violet instead of green base color for better visibility\n", + " Mesh.ColorCarousel = 0;\n", + "\n", + " // points of the airfoil contour\n", + " // Format: {x, y, z, DesiredCellSize}. See the documentation: https://gmsh.info/doc/texinfo/gmsh.html#Points\n", + " // These concrete points are generated using the tool from https://github.com/cfsengineering/GMSH-Airfoil-2D\n", + " Point(5) = {-0.4900332889206208, 0.09933466539753061, 0, 0.125};\n", + " Point(6) = {-0.4900274857651495, 0.1021542752054094, 0, 0.125};\n", + " Point(7) = {-0.4894921489729144, 0.1049830248247787, 0, 0.125};\n", + " Point(8) = {-0.4884253336670712, 0.1078191282319664, 0, 0.125};\n", + " Point(9) = {-0.4868257975566199, 0.1106599068424483, 0, 0.125};\n", + " Point(10) = {-0.4846930063965668, 0.1135018003016681, 0, 0.125};\n", + " Point(11) = {-0.4820271400142729, 0.1163403835785654, 0, 0.125};\n", + " Point(12) = {-0.4788290988083472, 0.1191703902233889, 0, 0.125};\n", + " Point(13) = {-0.4751005105908123, 0.1219857416089041, 0, 0.125};\n", + " Point(14) = {-0.4708437376101668, 0.1247795819332056, 0, 0.125};\n", + " Point(15) = {-0.4660618835629463, 0.1275443187232316, 0, 0.125};\n", + " Point(16) = {-0.4607588003749649, 0.1302716685409717, 0, 0.125};\n", + " Point(17) = {-0.4549390945110529, 0.132952707559475, 0, 0.125};\n", + " Point(18) = {-0.448608132554204, 0.1355779266432996, 0, 0.125};\n", + " Point(19) = {-0.4417720457819508, 0.138137290538182, 0, 0.125};\n", + " Point(20) = {-0.4344377334597768, 0.140620300747629, 0, 0.125};\n", + " Point(21) = {-0.4266128645686593, 0.1430160616500159, 0, 0.125};\n", + " Point(22) = {-0.4183058776865576, 0.1453133493887722, 0, 0.125};\n", + " Point(23) = {-0.4095259787518715, 0.147500683050503, 0, 0.125};\n", + " Point(24) = {-0.4002831364505879, 0.1495663976315875, 0, 0.125};\n", + " Point(25) = {-0.3905880749878933, 0.1514987182830453, 0, 0.125};\n", + " Point(26) = {-0.3804522640292948, 0.1532858353164163, 0, 0.125};\n", + " Point(27) = {-0.3698879056254708, 0.1549159794501833, 0, 0.125};\n", + " Point(28) = {-0.3589079179688306, 0.1563774967770029, 0, 0.125};\n", + " Point(29) = {-0.3475259158676376, 0.1576589229368209, 0, 0.125};\n", + " Point(30) = {-0.3357561878650377, 0.158749055989923, 0, 0.125};\n", + " Point(31) = {-0.3236136699747923, 0.1596370274972017, 0, 0.125};\n", + " Point(32) = {-0.3111139160522804, 0.1603123713324616, 0, 0.125};\n", + " Point(33) = {-0.298273064867608, 0.160765089773461, 0, 0.125};\n", + " Point(34) = {-0.2851078039966239, 0.1609857164445887, 0, 0.125};\n", + " Point(35) = {-0.2716353306943914, 0.160965375714529, 0, 0.125};\n", + " Point(36) = {-0.2578733099632437, 0.1606958381868515, 0, 0.125};\n", + " Point(37) = {-0.2438398300730194, 0.1601695719599709, 0, 0.125};\n", + " Point(38) = {-0.2295533558334121, 0.1593797893750759, 0, 0.125};\n", + " Point(39) = {-0.2150326799566391, 0.1583204890160489, 0, 0.125};\n", + " Point(40) = {-0.2002968728818922, 0.1569864927736143, 0, 0.125};\n", + " Point(41) = {-0.18536523146042, 0.1553734778363979, 0, 0.125};\n", + " Point(42) = {-0.1702572269208345, 0.1534780035235666, 0, 0.125};\n", + " Point(43) = {-0.1549924525477129, 0.1512975329264932, 0, 0.125};\n", + " Point(44) = {-0.1395905715122586, 0.1488304493795921, 0, 0.125};\n", + " Point(45) = {-0.1240712652914332, 0.1460760678321895, 0, 0.125};\n", + " Point(46) = {-0.1084541831014299, 0.1430346412430583, 0, 0.125};\n", + " Point(47) = {-0.09275889275279087, 0.1397073621660917, 0, 0.125};\n", + " Point(48) = {-0.07700483330818747, 0.1360963597385416, 0, 0.125};\n", + " Point(49) = {-0.06151286635366404, 0.1323050298149023, 0, 0.125};\n", + " Point(50) = {-0.04602933219022032, 0.1283521764905442, 0, 0.125};\n", + " Point(51) = {-0.03051345534800332, 0.1242331665904082, 0, 0.125};\n", + " Point(52) = {-0.01498163190522334, 0.1199540932779839, 0, 0.125};\n", + " Point(53) = {0.0005498526140696458, 0.1155214539466913, 0, 0.125};\n", + " Point(54) = {0.01606484191716884, 0.1109421303284033, 0, 0.125};\n", + " Point(55) = {0.03154732664394777, 0.106223368423828, 0, 0.125};\n", + " Point(56) = {0.0469814611314705, 0.1013727584299359, 0, 0.125};\n", + " Point(57) = {0.06235157928986135, 0.09639821481480275, 0, 0.125};\n", + " Point(58) = {0.07764220964363855, 0.09130795666388933, 0, 0.125};\n", + " Point(59) = {0.09283808959671735, 0.08611048839446452, 0, 0.125};\n", + " Point(60) = {0.1079241789809607, 0.08081458090718853, 0, 0.125};\n", + " Point(61) = {0.1228856729475325, 0.07542925321638272, 0, 0.125};\n", + " Point(62) = {0.1377080142575372, 0.06996375457378261, 0, 0.125};\n", + " Point(63) = {0.1523769050236616, 0.06442754707512513, 0, 0.125};\n", + " Point(64) = {0.1668783179480157, 0.05883028871526293, 0, 0.125};\n", + " Point(65) = {0.1811985070933818, 0.05318181683604975, 0, 0.125};\n", + " Point(66) = {0.1953240182159306, 0.04749213189240609, 0, 0.125};\n", + " Point(67) = {0.2092416986775084, 0.04177138144606024, 0, 0.125};\n", + " Point(68) = {0.2229387069452062, 0.03602984428372727, 0, 0.125};\n", + " Point(69) = {0.2364025216754475, 0.03027791454712048, 0, 0.125};\n", + " Point(70) = {0.2496209503696738, 0.02452608575629232, 0, 0.125};\n", + " Point(71) = {0.2625821375791982, 0.01878493460541621, 0, 0.125};\n", + " Point(72) = {0.2752745726282818, 0.01306510441121807, 0, 0.125};\n", + " Point(73) = {0.28768709681727, 0.007377288098728577, 0, 0.125};\n", + " Point(74) = {0.2998089100619555, 0.001732210616722449, 0, 0.125};\n", + " Point(75) = {0.3116295769214332, -0.003859389314124759, 0, 0.125};\n", + " Point(76) = {0.3231390319647309, -0.009386778203927332, 0, 0.125};\n", + " Point(77) = {0.3343275844265582, -0.01483924761490708, 0, 0.125};\n", + " Point(78) = {0.3451859221046181, -0.02020613485126957, 0, 0.125};\n", + " Point(79) = {0.3557051144551212, -0.02547684454806881, 0, 0.125};\n", + " Point(80) = {0.3658766148492779, -0.03064087116872238, 0, 0.125};\n", + " Point(81) = {0.3756922619615632, -0.0356878223992288, 0, 0.125};\n", + " Point(82) = {0.3851442802702071, -0.0406074434050937, 0, 0.125};\n", + " Point(83) = {0.394225279661484, -0.04538964189492445, 0, 0.125};\n", + " Point(84) = {0.4029282541416501, -0.05002451391298904, 0, 0.125};\n", + " Point(85) = {0.4112465796735204, -0.05450237026215737, 0, 0.125};\n", + " Point(86) = {0.4191740111683733, -0.05881376343890812, 0, 0.125};\n", + " Point(87) = {0.4267046786777481, -0.06294951494382847, 0, 0.125};\n", + " Point(88) = {0.4338330828434404, -0.06690074281456823, 0, 0.125};\n", + " Point(89) = {0.4405540896772232, -0.07065888921378868, 0, 0.125};\n", + " Point(90) = {0.4468629247542237, -0.07421574789251445, 0, 0.125};\n", + " Point(91) = {0.4527551669150955, -0.0775634913396257, 0, 0.125};\n", + " Point(92) = {0.4582267415819197, -0.08069469742118066, 0, 0.125};\n", + " Point(93) = {0.4632739138007936, -0.08360237530891265, 0, 0.125};\n", + " Point(94) = {0.4678932811302005, -0.08627999049569551, 0, 0.125};\n", + " Point(95) = {0.4720817664982195, -0.08872148869699745, 0, 0.125};\n", + " Point(96) = {0.4758366111533843, -0.09092131844134463, 0, 0.125};\n", + " Point(97) = {0.4791553678333992, -0.09287445215953141, 0, 0.125};\n", + " Point(98) = {0.4820358942729613, -0.09457640559161551, 0, 0.125};\n", + " Point(99) = {0.4844763471666588, -0.09602325534252773, 0, 0.125};\n", + " Point(100) = {0.4864751766953637, -0.09721165443119822, 0, 0.125};\n", + " Point(101) = {0.4880311217148797, -0.09813884569428721, 0, 0.125};\n", + " Point(102) = {0.4891432056939881, -0.09880267292366274, 0, 0.125};\n", + " Point(103) = {0.4898107334756874, -0.09920158963645126, 0, 0.125};\n", + " Point(104) = {0.4900332889206208, -0.09933466539753058, 0, 0.125};\n", + " Point(105) = {0.4897824225031319, -0.09926905587549506, 0, 0.125};\n", + " Point(106) = {0.4890301110661922, -0.09907236506934192, 0, 0.125};\n", + " Point(107) = {0.4877772173496635, -0.09874500608402761, 0, 0.125};\n", + " Point(108) = {0.48602517690576, -0.09828766683852558, 0, 0.125};\n", + " Point(109) = {0.4837759946062035, -0.09770130916007558, 0, 0.125};\n", + " Point(110) = {0.4810322398085871, -0.09698716747297723, 0, 0.125};\n", + " Point(111) = {0.4777970402368822, -0.09614674703990023, 0, 0.125};\n", + " Point(112) = {0.4740740746447117, -0.09518182170326678, 0, 0.125};\n", + " Point(113) = {0.4698675643422793, -0.09409443106501386, 0, 0.125};\n", + " Point(114) = {0.4651822636784212, -0.09288687703518478, 0, 0.125};\n", + " Point(115) = {0.460023449577924, -0.09156171967354482, 0, 0.125};\n", + " Point(116) = {0.4543969102408585, -0.09012177224394632, 0, 0.125};\n", + " Point(117) = {0.4483089331151018, -0.08857009539864649, 0, 0.125};\n", + " Point(118) = {0.4417662922553667, -0.08690999040934186, 0, 0.125};\n", + " Point(119) = {0.4347762351819332, -0.0851449913634191, 0, 0.125};\n", + " Point(120) = {0.4273464693498908, -0.08327885624791403, 0, 0.125};\n", + " Point(121) = {0.419485148335155, -0.08131555684993674, 0, 0.125};\n", + " Point(122) = {0.411200857836944, -0.07925926741086739, 0, 0.125};\n", + " Point(123) = {0.4025026015879757, -0.07711435198240155, 0, 0.125};\n", + " Point(124) = {0.3933997872536054, -0.07488535044544484, 0, 0.125};\n", + " Point(125) = {0.3839022123897198, -0.07257696316779733, 0, 0.125};\n", + " Point(126) = {0.3740200505167618, -0.07019403429336624, 0, 0.125};\n", + " Point(127) = {0.3637638373540689, -0.06774153367408606, 0, 0.125};\n", + " Point(128) = {0.3531444572451353, -0.06522453747557577, 0, 0.125};\n", + " Point(129) = {0.3421731297908021, -0.06264820750853495, 0, 0.125};\n", + " Point(130) = {0.3308613966940724, -0.06001776935966011, 0, 0.125};\n", + " Point(131) = {0.3192211088076166, -0.05733848941811218, 0, 0.125};\n", + " Point(132) = {0.3072644133633567, -0.05461565091590426, 0, 0.125};\n", + " Point(133) = {0.2950037413531683, -0.05185452912263369, 0, 0.125};\n", + " Point(134) = {0.2824517950208982, -0.04906036585632723, 0, 0.125};\n", + " Point(135) = {0.2696215354188702, -0.04623834349241404, 0, 0.125};\n", + " Point(136) = {0.2565261699769623, -0.04339355867155523, 0, 0.125};\n", + " Point(137) = {0.2431791400293651, -0.04053099592384862, 0, 0.125};\n", + " Point(138) = {0.2295941082432855, -0.03765550144139543, 0, 0.125};\n", + " Point(139) = {0.2157849458952252, -0.03477175724299444, 0, 0.125};\n", + " Point(140) = {0.2017657199439165, -0.03188425598348005, 0, 0.125};\n", + " Point(141) = {0.187550679854507, -0.02899727666564914, 0, 0.125};\n", + " Point(142) = {0.1731542441359161, -0.02611486151457043, 0, 0.125};\n", + " Point(143) = {0.1585909865622793, -0.02324079427214604, 0, 0.125};\n", + " Point(144) = {0.1438756220597465, -0.02037858016395433, 0, 0.125};\n", + " Point(145) = {0.129022992251319, -0.0175314277805827, 0, 0.125};\n", + " Point(146) = {0.1140480506645569, -0.01470223310184333, 0, 0.125};\n", + " Point(147) = {0.09896584761949168, -0.01189356587453844, 0, 0.125};\n", + " Point(148) = {0.08379151482656089, -0.009107658532933174, 0, 0.125};\n", + " Point(149) = {0.06854024973648176, -0.006346397826038436, 0, 0.125};\n", + " Point(150) = {0.05322729969528361, -0.003611319287478529, 0, 0.125};\n", + " Point(151) = {0.03786794596792287, -0.00090360465249055, 0, 0.125};\n", + " Point(152) = {0.0224774877026287, 0.00177591770710904, 0, 0.125};\n", + " Point(153) = {0.007071225915134205, 0.004426769294862437, 0, 0.125};\n", + " Point(154) = {-0.00833555242305456, 0.007048814950562587, 0, 0.125};\n", + " Point(155) = {-0.02372759010533726, 0.009642253300220296, 0, 0.125};\n", + " Point(156) = {-0.03908967513210498, 0.01220760427359278, 0, 0.125};\n", + " Point(157) = {-0.05440665578848514, 0.01474569380579989, 0, 0.125};\n", + " Point(158) = {-0.06966345527617318, 0.01725763587663899, 0, 0.125};\n", + " Point(159) = {-0.08484508582421563, 0.01974481207672138, 0, 0.125};\n", + " Point(160) = {-0.09987987792382108, 0.02219618763023203, 0, 0.125};\n", + " Point(161) = {-0.1145078729404739, 0.02450371976411331, 0, 0.125};\n", + " Point(162) = {-0.1290321771824579, 0.0267015185742735, 0, 0.125};\n", + " Point(163) = {-0.143440065923266, 0.02879471001709845, 0, 0.125};\n", + " Point(164) = {-0.1577189448447794, 0.03078883518202784, 0, 0.125};\n", + " Point(165) = {-0.1718563428491159, 0.03268980457290044, 0, 0.125};\n", + " Point(166) = {-0.1858399037768357, 0.03450385196323842, 0, 0.125};\n", + " Point(167) = {-0.1996573773370766, 0.03623748825421298, 0, 0.125};\n", + " Point(168) = {-0.2132966095779342, 0.03789745574015834, 0, 0.125};\n", + " Point(169) = {-0.2267455332406906, 0.0394906831577609, 0, 0.125};\n", + " Point(170) = {-0.2399921583489679, 0.04102424186233269, 0, 0.125};\n", + " Point(171) = {-0.2530245633834605, 0.04250530343879837, 0, 0.125};\n", + " Point(172) = {-0.2658308873846617, 0.04394109901707172, 0, 0.125};\n", + " Point(173) = {-0.2783993233102972, 0.04533888052223981, 0, 0.125};\n", + " Point(174) = {-0.2907181129514687, 0.04670588405019788, 0, 0.125};\n", + " Point(175) = {-0.3027755436824813, 0.0480492955198111, 0, 0.125};\n", + " Point(176) = {-0.3145599472847223, 0.04937621871394801, 0, 0.125};\n", + " Point(177) = {-0.3260597010456697, 0.05069364578437131, 0, 0.125};\n", + " Point(178) = {-0.337263231291058, 0.05200843025992359, 0, 0.125};\n", + " Point(179) = {-0.3481590194623916, 0.05332726256406103, 0, 0.125};\n", + " Point(180) = {-0.3587356108043638, 0.05465664801682354, 0, 0.125};\n", + " Point(181) = {-0.3689816256782782, 0.0560028872679817, 0, 0.125};\n", + " Point(182) = {-0.3788857734692287, 0.05737205908247899, 0, 0.125};\n", + " Point(183) = {-0.3884368690074614, 0.05877000537646382, 0, 0.125};\n", + " Point(184) = {-0.3976238513788748, 0.06020231838219783, 0, 0.125};\n", + " Point(185) = {-0.40643580495675, 0.06167432980291591, 0, 0.125};\n", + " Point(186) = {-0.4148619824472646, 0.06319110180426264, 0, 0.125};\n", + " Point(187) = {-0.4228918297057104, 0.06475741967717524, 0, 0.125};\n", + " Point(188) = {-0.43051501204915, 0.06637778599795482, 0, 0.125};\n", + " Point(189) = {-0.4377214417649294, 0.06805641610468524, 0, 0.125};\n", + " Point(190) = {-0.4445013064933708, 0.06979723470503821, 0, 0.125};\n", + " Point(191) = {-0.4508450981473512, 0.07160387342876083, 0, 0.125};\n", + " Point(192) = {-0.4567436420215075, 0.073479669138689, 0, 0.125};\n", + " Point(193) = {-0.4621881257395756, 0.07542766281688272, 0, 0.125};\n", + " Point(194) = {-0.4671701276898881, 0.07745059884734995, 0, 0.125};\n", + " Point(195) = {-0.471681644606229, 0.07955092452372269, 0, 0.125};\n", + " Point(196) = {-0.4757151179639407, 0.0817307896190848, 0, 0.125};\n", + " Point(197) = {-0.4792634588791559, 0.0839920458658267, 0, 0.125};\n", + " Point(198) = {-0.4823200712220043, 0.08633624620581726, 0, 0.125};\n", + " Point(199) = {-0.4848788726822436, 0.08876464368523246, 0, 0.125};\n", + " Point(200) = {-0.4869343135575803, 0.09127818988394577, 0, 0.125};\n", + " Point(201) = {-0.4884813930704814, 0.09387753278635144, 0, 0.125};\n", + " Point(202) = {-0.4895156730580155, 0.09656301401871749, 0, 0.125};\n", + "\n", + " // splines of the airfoil\n", + " Spline(5) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104};\n", + " Spline(6) = {104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,5};\n", + "\n", + " // airfoil\n", + " Line Loop(9) = {5, 6};\n", + " // complete domain\n", + " Plane Surface(1) = {8, 9};\n", + "\n", + " // labeling of the boundary parts\n", + " Physical Line(1) = {4}; // inflow\n", + " Physical Line(2) = {2}; // outflow\n", + " Physical Line(3) = {1, 3}; // airfoil\n", + " Physical Line(4) = {5, 6}; // upper/lower wall\n", + " Physical Surface(1) = {10};\n", + "```\n", + "From which we can construct a mesh like this:\n", + "![mesh_screenshot](https://github.com/trixi-framework/Trixi.jl/assets/75639095/67adfe3d-d403-4cd3-acaa-971a34df0709)\n", + "\n", + "The first four points define the bounding box = (near-field) domain:\n", + "```c++\n", + " // outer bounding box\n", + "Point(1) = {-1.25, -0.5, 0, 1.0};\n", + "Point(2) = {1.25, -0.5, 0, 1.0};\n", + "Point(3) = {1.25, 0.5, 0, 1.0};\n", + "Point(4) = {-1.25, 0.5, 0, 1.0};\n", + "```\n", + "which is constructed from connecting the points in lines:\n", + "```c++\n", + "// outer box\n", + "Line(1) = {1, 2};\n", + "Line(2) = {2, 3};\n", + "Line(3) = {3, 4};\n", + "Line(4) = {4, 1};\n", + "// outer box\n", + "Line Loop(8) = {1, 2, 3, 4};\n", + "```\n", + "\n", + "This is followed by a couple (in principle optional) settings where the most important one is\n", + "```c++\n", + "// Insist on quads instead of default triangles\n", + "Mesh.RecombineAll = 1;\n", + "```\n", + "which forces `gmsh` to generate quadrilateral elements instead of the default triangles.\n", + "This is strictly required to be able to use the mesh later with `p4est`, which supports only straight-sided quads,\n", + "i.e., `C2D4, CPS4, S4` in 2D and `C3D` in 3D.\n", + "See for more details the (short) [documentation](https://p4est.github.io/p4est-howto.pdf) on the interaction of `p4est` with `.inp` files.\n", + "In principle, it should also be possible to use the `recombine` function of `gmsh` to convert the triangles to quads,\n", + "but this is observed to be less robust than enforcing quads from the beginning.\n", + "\n", + "Then the airfoil is defined by a set of points:\n", + "```c++\n", + "// points of the airfoil contour\n", + " Point(5) = {-0.4900332889206208, 0.09933466539753061, 0, 0.125};\n", + " Point(6) = {-0.4900274857651495, 0.1021542752054094, 0, 0.125};\n", + " ...\n", + "```\n", + "which are connected by splines for the upper and lower part of the airfoil:\n", + "```c++\n", + "// splines of the airfoil\n", + " Spline(5) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,\n", + " ...\n", + " 96,97,98,99,100,101,102,103,104};\n", + " Spline(6) = {104,105,106,107,108,109,110,111,112,113,114,115,\n", + " ...\n", + " 200,201,202,5};\n", + "```\n", + "which are then connected to form a single line loop for easy physical group assignment:\n", + "```c++\n", + "// airfoil\n", + " Line Loop(9) = {5, 6};\n", + "```\n", + "\n", + "At the end of the file the physical groups are defined:\n", + "```c++\n", + "// labeling of the boundary parts\n", + " Physical Line(1) = {4}; // Inflow. Label in Abaqus .inp file: PhysicalLine1\n", + " Physical Line(2) = {2}; // Outflow. Label in Abaqus .inp file: PhysicalLine2\n", + " Physical Line(3) = {1, 3}; // Upper and lower wall/farfield/... Label in Abaqus .inp file: PhysicalLine3\n", + " Physical Line(4) = {5, 6}; // Airfoil. Label in Abaqus .inp file: PhysicalLine4\n", + "```\n", + "which are crucial for the correct assignment of boundary conditions in `Trixi.jl`.\n", + "In particular, it is the responsibility of a user to keep track on the physical boundary names between the mesh generation and assignment of boundary condition functions in an elixir.\n", + "\n", + "After opening this file in `gmsh`, meshing the geometry and exporting to Abaqus `.inp` format,\n", + "we can have a look at the input file:\n", + "```\n", + "*Heading\n", + " \n", + "*NODE\n", + "1, -1.25, -0.5, 0\n", + "2, 1.25, -0.5, 0\n", + "3, 1.25, 0.5, 0\n", + "4, -1.25, 0.5, 0\n", + "...\n", + "******* E L E M E N T S *************\n", + "*ELEMENT, type=T3D2, ELSET=Line1\n", + "1, 1, 7\n", + "...\n", + "*ELEMENT, type=CPS4, ELSET=Surface1\n", + "191, 272, 46, 263, 807\n", + "...\n", + "*NSET,NSET=PhysicalLine1\n", + "1, 4, 52, 53, 54, 55, 56, 57, 58,\n", + "*NSET,NSET=PhysicalLine2\n", + "2, 3, 26, 27, 28, 29, 30, 31, 32,\n", + "*NSET,NSET=PhysicalLine3\n", + "1, 2, 3, 4, 7, 8, 9, 10, 11, 12,\n", + "13, 14, 15, 16, 17, 18, 19, 20, 21, 22,\n", + "23, 24, 25, 33, 34, 35, 36, 37, 38, 39,\n", + "40, 41, 42, 43, 44, 45, 46, 47, 48, 49,\n", + "50, 51,\n", + "*NSET,NSET=PhysicalLine4\n", + "5, 6, 59, 60, 61, 62, 63, 64, 65, 66,\n", + "67, 68, 69, 70, 71, 72, 73, 74, 75, 76,\n", + "77, 78, 79, 80, 81, 82, 83, 84, 85, 86,\n", + "87, 88, 89, 90, 91, 92, 93, 94, 95, 96,\n", + "97, 98, 99, 100, 101, 102, 103, 104, 105, 106,\n", + "107, 108, 109, 110, 111, 112, 113, 114, 115, 116,\n", + "117, 118, 119, 120, 121, 122, 123, 124, 125, 126,\n", + "127, 128, 129, 130, 131, 132, 133, 134, 135, 136,\n", + "137, 138, 139, 140, 141, 142, 143, 144, 145, 146,\n", + "147, 148, 149, 150, 151, 152, 153, 154, 155, 156,\n", + "157, 158, 159, 160, 161, 162, 163, 164, 165, 166,\n", + "167, 168, 169, 170, 171, 172, 173, 174, 175, 176,\n", + "177, 178, 179, 180, 181, 182, 183, 184, 185, 186,\n", + "187, 188, 189, 190,\n", + "```\n", + "\n", + "First, the coordinates of the nodes are listed, followed by the elements.\n", + "Note that `gmsh` exports also line elements of type `T3D2` which are ignored by `p4est`.\n", + "The relevant elements in 2D which form the gridcells are of type `CPS4` which are defined by their four corner nodes.\n", + "This is followed by the nodesets encoded via `*NSET` which are used to assign boundary conditions in Trixi.jl.\n", + "Trixi.jl parses the `.inp` file and assigns the edges (in 2D, surfaces in 3D) of elements to the corresponding boundary condition based on\n", + "the supplied `boundary_symbols` that have to be supplied to the `P4estMesh` constructor:\n", + "```julia\n", + "# boundary symbols\n", + "boundary_symbols = [:PhysicalLine1, :PhysicalLine2, :PhysicalLine3, :PhysicalLine4]\n", + "mesh = P4estMesh{2}(mesh_file, polydeg = polydeg, boundary_symbols = boundary_symbols)\n", + "```\n", + "The same boundary symbols have then also be supplied to the semidiscretization alongside the\n", + "corresponding physical boundary conditions:\n", + "```julia\n", + "# Supersonic inflow boundary condition.\n", + "# Calculate the boundary flux entirely from the external solution state, i.e., set\n", + "# external solution state values for everything entering the domain.\n", + "@inline function boundary_condition_supersonic_inflow(u_inner,\n", + " normal_direction::AbstractVector,\n", + " x, t, surface_flux_function,\n", + " equations::CompressibleEulerEquations2D)\n", + " u_boundary = initial_condition_mach2_flow(x, t, equations)\n", + " flux = Trixi.flux(u_boundary, normal_direction, equations)\n", + "\n", + " return flux\n", + "end\n", + "\n", + "# Supersonic outflow boundary condition.\n", + "# Calculate the boundary flux entirely from the internal solution state. Analogous to supersonic inflow\n", + "# except all the solution state values are set from the internal solution as everything leaves the domain\n", + "@inline function boundary_condition_supersonic_outflow(u_inner,\n", + " normal_direction::AbstractVector, x,\n", + " t,\n", + " surface_flux_function,\n", + " equations::CompressibleEulerEquations2D)\n", + "flux = Trixi.flux(u_inner, normal_direction, equations)\n", + "\n", + "boundary_conditions = Dict(:PhysicalLine1 => boundary_condition_supersonic_inflow, # Left boundary\n", + " :PhysicalLine2 => boundary_condition_supersonic_outflow, # Right boundary\n", + " :PhysicalLine3 => boundary_condition_supersonic_outflow, # Top and bottom boundary\n", + " :PhysicalLine4 => boundary_condition_slip_wall) # Airfoil\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " boundary_conditions = boundary_conditions)\n", + "```\n", + "Note that you **have to** supply the `boundary_symbols` keyword to the `P4estMesh` constructor\n", + "to select the boundaries from the available nodesets in the `.inp` file.\n", + "If the `boundary_symbols` keyword is not supplied, all boundaries will be assigned to the default set `:all`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\", \"Download\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/parabolic_terms.ipynb b/v0.8.7/tutorials/notebooks/parabolic_terms.ipynb new file mode 100644 index 0000000000..90a5288d20 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/parabolic_terms.ipynb @@ -0,0 +1,264 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 13: Parabolic terms" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Experimental support for parabolic diffusion terms is available in Trixi.jl.\n", + "This demo illustrates parabolic terms for the advection-diffusion equation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "using Trixi" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Splitting a system into hyperbolic and parabolic parts." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For a mixed hyperbolic-parabolic system, we represent the hyperbolic and parabolic\n", + "parts of the system separately. We first define the hyperbolic (advection) part of\n", + "the advection-diffusion equation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "advection_velocity = (1.5, 1.0)\n", + "equations_hyperbolic = LinearScalarAdvectionEquation2D(advection_velocity);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Next, we define the parabolic diffusion term. The constructor requires knowledge of\n", + "`equations_hyperbolic` to be passed in because the `LaplaceDiffusion2D` applies\n", + "diffusion to every variable of the hyperbolic system." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "diffusivity = 5.0e-2\n", + "equations_parabolic = LaplaceDiffusion2D(diffusivity, equations_hyperbolic);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Boundary conditions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As with the equations, we define boundary conditions separately for the hyperbolic and\n", + "parabolic part of the system. For this example, we impose inflow BCs for the hyperbolic\n", + "system (no condition is imposed on the outflow), and we impose Dirichlet boundary conditions\n", + "for the parabolic equations. Both `BoundaryConditionDirichlet` and `BoundaryConditionNeumann`\n", + "are defined for `LaplaceDiffusion2D`.\n", + "\n", + "The hyperbolic and parabolic boundary conditions are assumed to be consistent with each other." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "boundary_condition_zero_dirichlet = BoundaryConditionDirichlet((x, t, equations) -> SVector(0.0))\n", + "\n", + "boundary_conditions_hyperbolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1 + 0.5 * x[2])),\n", + " y_neg = boundary_condition_zero_dirichlet,\n", + " y_pos = boundary_condition_do_nothing,\n", + " x_pos = boundary_condition_do_nothing)\n", + "\n", + "boundary_conditions_parabolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1 + 0.5 * x[2])),\n", + " y_neg = boundary_condition_zero_dirichlet,\n", + " y_pos = boundary_condition_zero_dirichlet,\n", + " x_pos = boundary_condition_zero_dirichlet);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Defining the solver and mesh" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The process of creating the DG solver and mesh is the same as for a purely\n", + "hyperbolic system of equations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n", + "coordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))\n", + "coordinates_max = ( 1.0, 1.0) # maximum coordinates (max(x), max(y))\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=4,\n", + " periodicity=false, n_cells_max=30_000) # set maximum capacity of tree data structure\n", + "\n", + "initial_condition = (x, t, equations) -> SVector(0.0);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Semidiscretizing and solving" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To semidiscretize a hyperbolic-parabolic system, we create a `SemidiscretizationHyperbolicParabolic`.\n", + "This differs from a `SemidiscretizationHyperbolic` in that we pass in a `Tuple` containing both the\n", + "hyperbolic and parabolic equation, as well as a `Tuple` containing the hyperbolic and parabolic\n", + "boundary conditions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "semi = SemidiscretizationHyperbolicParabolic(mesh,\n", + " (equations_hyperbolic, equations_parabolic),\n", + " initial_condition, solver;\n", + " boundary_conditions=(boundary_conditions_hyperbolic,\n", + " boundary_conditions_parabolic))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The rest of the code is identical to the hyperbolic case. We create a system of ODEs through\n", + "`semidiscretize`, defining callbacks, and then passing the system to OrdinaryDiffEq.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tspan = (0.0, 1.5)\n", + "ode = semidiscretize(semi, tspan)\n", + "callbacks = CallbackSet(SummaryCallback())\n", + "time_int_tol = 1.0e-6\n", + "sol = solve(ode, RDPK3SpFSAL49(); abstol=time_int_tol, reltol=time_int_tol,\n", + " ode_default_options()..., callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We can now visualize the solution, which develops a boundary layer at the outflow boundaries." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/scalar_linear_advection_1d.ipynb b/v0.8.7/tutorials/notebooks/scalar_linear_advection_1d.ipynb new file mode 100644 index 0000000000..7170853a87 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/scalar_linear_advection_1d.ipynb @@ -0,0 +1,976 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 3: Introduction to DG methods" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial is about how to set up a simple way to approximate the solution of a hyperbolic partial\n", + "differential equation. First, we will implement a basic and naive algorithm. Then, we will use predefined\n", + "features from [Trixi.jl](https://github.com/trixi-framework/Trixi.jl) to show how you can use Trixi.jl on your own." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We will implement the scalar linear advection equation in 1D with the advection velocity $1$.\n", + "$$\n", + "u_t + u_x = 0,\\; \\text{for} \\;t\\in \\mathbb{R}^+, x\\in\\Omega=[-1,1]\n", + "$$\n", + "We define the domain $\\Omega$ by setting the boundaries." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = -1.0 # minimum coordinate\n", + "coordinates_max = 1.0 # maximum coordinate" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We assume periodic boundaries and the following initial condition." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "initial_condition_sine_wave(x) = 1.0 + 0.5 * sin(pi * x)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## The discontinuous Galerkin collocation spectral element method (DGSEM)\n", + "### i. Discretization of the physical domain\n", + "To improve precision we want to approximate the solution on small parts of the physical domain.\n", + "So, we split the domain $\\Omega=[-1, 1]$ into elements $Q_l$ of length $dx$." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "n_elements = 16 # number of elements\n", + "\n", + "dx = (coordinates_max - coordinates_min) / n_elements # length of one element" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To make the calculation more efficient and storing less information, we transform each element\n", + "$Q_l$ with center point $x_l$ to a reference element $E=[-1, 1]$\n", + "$$\n", + "Q_l=\\Big[x_l-\\frac{dx}{2}, x_l+\\frac{dx}{2}\\Big] \\underset{x(\\xi)}{\\overset{\\xi(x)}{\\rightleftarrows}} [-1, 1].\n", + "$$\n", + "So, for every element the transformation from the reference domain to the physical domain is defined by\n", + "$$\n", + "x(\\xi) = x_l + \\frac{dx}{2} \\xi,\\; \\xi\\in[-1, 1]\n", + "$$\n", + "Therefore,\n", + "$$\n", + "\\begin{align*}\n", + "u &= u(x(\\xi), t) \\\\\n", + "u_x &= u_\\xi \\frac{d\\xi}{dx} \\\\[3pt]\n", + "\\frac{d\\xi}{dx} &= (x_\\xi)^{-1} = \\frac{2}{dx} =: J^{-1}. \\\\\n", + "\\end{align*}\n", + "$$\n", + "Here, $J$ is the Jacobian determinant of the transformation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Using this transformation, we can transform our equation for each element $Q_l$.\n", + "$$\n", + "\\frac{dx}{2} u_t^{Q_l} + u_\\xi^{Q_l} = 0 \\text{, for }t\\in\\mathbb{R}^+,\\; \\xi\\in[-1, 1]\n", + "$$\n", + "Here, $u_t^{Q_l}$ and $u_\\xi^{Q_l}$ denote the time and spatial derivatives of the solution on the element $Q_l$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### ii. Polynomial approach\n", + "Now, we want to approximate the solution in each element $Q_l$ by a polynomial of degree $N$. Since we transformed\n", + "the equation, we can use the same polynomial approach for the reference coordinate $\\xi\\in[-1, 1]$ in every\n", + "physical element $Q_l$. This saves a lot of resources by reducing the amount of calculations needed\n", + "and storing less information." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For DGSEM we choose [Lagrange basis functions](https://en.wikipedia.org/wiki/Lagrange_polynomial)\n", + "$\\{l_j\\}_{j=0}^N$ as our polynomial basis of degree $N$ in $[-1, 1]$.\n", + "The solution in element $Q_l$ can be approximated by\n", + "$$\n", + "u(x(\\xi), t)\\big|_{Q_l} \\approx u^{Q_l}(\\xi, t) = \\sum_{j=0}^N u_j^{Q_l}(t) l_j(\\xi)\n", + "$$\n", + "with $N+1$ coefficients $\\{u_j^{Q_l}\\}_{j=0}^N$.\n", + "By construction the Lagrange basis has some useful advantages. This basis is defined by $N+1$ nodes, which\n", + "fulfill a Kronecker property at the exact same nodes. Let $\\{\\xi_i\\}_{i=0}^N$ be these nodes.\n", + "$$\n", + "l_j(\\xi_i) = \\delta_{i,j} =\n", + "\\begin{cases}\n", + "1, & \\text{if } i=j \\\\\n", + "0, & \\text{else.}\n", + "\\end{cases}\n", + "$$\n", + "Because of this property, the polynomial coefficients are exact the values of $u^{Q_l}$ at the nodes\n", + "$$\n", + "u^{Q_l}(\\xi_i, t) = \\sum_{j=0}^N u_j^{Q_l}(t) \\underbrace{l_j(\\xi_i)}_{=\\delta_{ij}} = u_i^{Q_l}(t).\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, we want to select the nodes $\\{\\xi_i\\}_{i=0}^N$, which we use for the construction of the Lagrange\n", + "polynomials. We choose the $N+1$ Gauss-Lobatto nodes, which are used for the\n", + "[Gaussian-Lobatto quadrature](https://mathworld.wolfram.com/LobattoQuadrature.html).\n", + "These always contain the boundary points at $-1$ and $+1$ and are well suited as interpolation nodes.\n", + "The corresponding weights will be referred to as $\\{w_j\\}_{j=0}^N$.\n", + "In Trixi.jl the basis with Lagrange polynomials on Gauss-Lobatto nodes is already defined." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "polydeg = 3 #= polynomial degree = N =#\n", + "basis = LobattoLegendreBasis(polydeg)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The Gauss-Lobatto nodes are" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "nodes = basis.nodes" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "with the corresponding weights" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "weights = basis.weights" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To illustrate how you can integrate using numerical quadrature with this Legendre-Gauss-Lobatto nodes,\n", + "we give an example for $f(x)=x^3$. Since $f$ is of degree $3$, a polynomial interpolation with $N=3$ is exact.\n", + "Therefore, the integral on $[-1, 1]$ can be calculated by\n", + "$$\n", + "\\begin{align*}\n", + "\\int_{-1}^1 f(x) dx &= \\int_{-1}^1 \\Big( \\sum_{j=0}^3 f(\\xi_j)l_j(x) \\Big) dx\n", + "= \\sum_{j=0}^3 f(\\xi_j) \\int_{-1}^1 l_j(x)dx \\\\\n", + "&=: \\sum_{j=0}^3 f(\\xi_j) w_j\n", + "= \\sum_{j=0}^3 \\xi_j^3 w_j\n", + "\\end{align*}\n", + "$$\n", + "Let's use our nodes and weights for $N=3$ and plug in" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "integral = sum(nodes.^3 .* weights)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Using this polynomial approach leads to the equation\n", + "$$\n", + "\\frac{dx}{2} \\dot{u}^{Q_l}(\\xi, t) + u^{Q_l}(\\xi, t)' = 0\n", + "$$\n", + "with $\\dot{u}=\\frac{\\partial}{\\partial t}u$ and $u'=\\frac{\\partial}{\\partial x}u$.\n", + "To approximate the solution, we need to get the polynomial coefficients $\\{u_j^{Q_l}\\}_{j=0}^N$\n", + "for every element $Q_l$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "After defining all nodes, we can implement the spatial coordinate $x$ and its initial value $u0 = u(t_0)$\n", + "for every node." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x = Matrix{Float64}(undef, length(nodes), n_elements)\n", + "for element in 1:n_elements\n", + " x_l = coordinates_min + (element - 1) * dx + dx/2\n", + " for i in eachindex(nodes)\n", + " ξ = nodes[i] # nodes in [-1, 1]\n", + " x[i, element] = x_l + dx/2 * ξ\n", + " end\n", + "end\n", + "\n", + "u0 = initial_condition_sine_wave.(x)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To have a look at the initial sinus curve, we plot it." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(vec(x), vec(u0), label=\"initial condition\", legend=:topleft)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### iii. Variational formulation\n", + "After defining the equation and initial condition, we want to implement an algorithm to\n", + "approximate the solution." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "From now on, we only write $u$ instead of $u^{Q_l}$ for simplicity, but consider that all the following\n", + "calculation only concern one element.\n", + "Multiplying the new equation with the smooth Lagrange polynomials $\\{l_i\\}_{i=0}^N$ (test functions)\n", + "and integrating over the reference element $E=[-1,1]$, we get the variational formulation of our\n", + "transformed partial differential equation for $i=0,...,N$:\n", + "$$\n", + "\\begin{align*}\n", + "\\int_{-1}^1 \\Big( \\frac{dx}{2} \\dot{u}(\\xi, t) + u'(\\xi, t) \\Big) l_i(\\xi)d\\xi\n", + " &= \\underbrace{\\frac{dx}{2} \\int_{-1}^1 \\dot{u}(\\xi, t) l_i(\\xi)d\\xi}_{\\text{Term I}} + \\underbrace{\\int_{-1}^1 u'(\\xi, t) l_i(\\xi)d\\xi}_{\\text{Term II}} = 0\n", + "\\end{align*}\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We deal with the two terms separately. We write $\\int_{-1, N}^1 \\;\\cdot\\; d\\xi$ for the approximation\n", + "of the integral using numerical quadrature with $N+1$ basis points. We use the Gauss-Lobatto nodes\n", + "again. The numerical scalar product $\\langle\\cdot, \\cdot\\rangle_N$ is defined by\n", + "$\\langle f, g\\rangle_N := \\int_{-1, N}^1 f(\\xi) g(\\xi) d\\xi$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "#### Term I:\n", + "In the following calculation we approximate the integral numerically with quadrature on the Gauss-Lobatto\n", + "nodes $\\{\\xi_i\\}_{i=0}^N$ and then use the Kronecker property of the Lagrange polynomials. This approach\n", + "of using the same nodes for the interpolation and quadrature is called collocation.\n", + "$$\n", + "\\begin{align*}\n", + "\\frac{dx}{2} \\int_{-1}^1 \\dot{u}(\\xi, t) l_i(\\xi)d\\xi\n", + "&\\approx \\frac{dx}{2} \\int_{-1, N}^1 \\dot{u}(\\xi, t) l_i(\\xi)d\\xi \\\\\n", + "&= \\frac{dx}{2} \\sum_{k=0}^N \\underbrace{\\dot{u}(\\xi_k, t)}_{=\\dot{u}_k(t)} \\underbrace{l_i(\\xi_k)}_{=\\delta_{k,i}}w_k \\\\\n", + "&= \\frac{dx}{2} \\dot{u}_i(t) w_i\n", + "\\end{align*}\n", + "$$\n", + "We define the Legendre-Gauss-Lobatto (LGL) mass matrix $M$ and by the Kronecker property follows:\n", + "$$\n", + "M_{ij} = \\langle l_j, l_i\\rangle_N = \\delta_{ij} w_j,\\; i,j=0,...,N.\n", + "$$" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using LinearAlgebra\n", + "M = diagm(weights)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can write the integral with this new matrix.\n", + "$$\n", + "\\frac{dx}{2} \\int_{-1, N}^1 \\dot{u}(\\xi, t) \\underline{l}(\\xi)d\\xi = \\frac{dx}{2} M \\underline{\\dot{u}}(t),\n", + "$$\n", + "where $\\underline{\\dot{u}} = (\\dot{u}_0, ..., \\dot{u}_N)^T$ and $\\underline{l}$ respectively." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** Since the LGL quadrature with $N+1$ nodes is exact up to functions of degree $2N-1$ and\n", + "$\\dot{u}(\\xi, t) l_i(\\xi)$ is of degree $2N$, in general the following holds\n", + "$$\n", + "\\int_{-1}^1 \\dot{u}(\\xi, t) l_i(\\xi) d\\xi \\neq \\int_{-1, N}^1 \\dot{u}(\\xi, t) l_i(\\xi) d\\xi.\n", + "$$\n", + "With an exact integration the mass matrix would be dense. Choosing numerical integrating and quadrature\n", + "with the exact same nodes (collocation) leads to the sparse and diagonal mass matrix $M$. This\n", + "is called mass lumping and has the big advantage of an easy inversion of the matrix." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "#### Term II:\n", + "We use spatial partial integration for the second term:\n", + "$$\n", + "\\int_{-1}^1 u'(\\xi, t) l_i(\\xi) d\\xi = [u l_i]_{-1}^1 - \\int_{-1}^1 u l_i'd\\xi\n", + "$$\n", + "The resulting integral can be solved exactly with LGL quadrature since the polynomial is now\n", + "of degree $2N-1$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Again, we split the calculation in two steps." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "#### Surface term\n", + "As mentioned before, we approximate the solution with a polynomial in every element. Therefore, in\n", + "general the value of this approximation at the interfaces between two elements is not unique. To solve\n", + "this problem we introduce the idea of the numerical flux $u^*$, which will give an exact value at\n", + "the interfaces. One of many different approaches and definitions for the calculation of the\n", + "numerical flux we will deal with in 4. Numerical flux.\n", + "$$\n", + "[u l_i]_{-1}^1 = u^*\\big|^1 l_i(+1) - u^*\\big|_{-1} l_i(-1)\n", + "$$\n", + "Since the Gauss-Lobatto nodes contain the element boundaries $-1$ and $+1$, we can use the\n", + "Kronecker property of $l_i$ for the calculation of $l_i(-1)$ and $l_i(+1)$.\n", + "$$\n", + "[u \\underline{l}]_{-1}^1 = u^*\\big|^1 \\left(\\begin{array}{c} 0 \\\\ \\vdots \\\\ 0 \\\\ 1 \\end{array}\\right)\n", + "- u^*\\big|_{-1} \\left(\\begin{array}{c} 1 \\\\ 0 \\\\ \\vdots \\\\ 0\\end{array}\\right)\n", + "= B \\underline{u}^*(t)\n", + "$$\n", + "with the boundary matrix\n", + "$$\n", + "B = \\begin{pmatrix}\n", + "-1 & 0 & \\cdots & 0\\\\\n", + "0 & 0 & \\cdots & 0\\\\\n", + "\\vdots & \\vdots & 0 & 0\\\\\n", + "0 & \\cdots & 0 & 1\n", + "\\end{pmatrix}\n", + "\\qquad\\text{and}\\qquad\n", + "\\underline{u}^*(t) = \\left(\\begin{array}{c} u^*\\big|_{-1} \\\\ 0 \\\\ \\vdots \\\\ 0 \\\\ u^*\\big|^1\\end{array}\\right).\n", + "$$" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "B = diagm([-1; zeros(polydeg - 1); 1])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "#### Volume term\n", + "As mentioned before, the new integral can be solved exact since the function inside is of degree $2N-1$.\n", + "$$\n", + "- \\int_{-1}^1 u l_i'd\\xi = - \\int_{-1, N}^1 u l_i' d\\xi\n", + "= - \\sum_{k=0}^N u(\\xi_k, t) l_i'(\\xi_k) w_k\n", + "= - \\sum_{k=0}^N u_k(t) D_{ki} w_k\n", + "$$\n", + "where $D$ is the derivative matrix defined by $D_{ki} = l_i'(\\xi_k)$ for $i,k=0,...,N$." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "D = basis.derivative_matrix" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To show why this matrix is called the derivative matrix, we go back to our example $f(x)=x^3$.\n", + "We calculate the derivation of $f$ at the Gauss-Lobatto nodes $\\{\\xi_k\\}_{k=0}^N$ with $N=8$.\n", + "$$\n", + "f'|_{x=\\xi_k} = \\Big( \\sum_{j=0}^8 f(\\xi_j) l_j(x) \\Big)'|_{x=\\xi_k} = \\sum_{j=0}^8 f(\\xi_j) l_j'(\\xi_k)\n", + "= \\sum_{j=0}^8 f(\\xi_j) D_{kj}\n", + "$$\n", + "for $k=0,...,N$ and therefore, $\\underline{f}' = D \\underline{f}$." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "basis_N8 = LobattoLegendreBasis(8)\n", + "plot(vec(x), x -> 3 * x^2, label=\"f'\", lw=2)\n", + "scatter!(basis_N8.nodes, basis_N8.derivative_matrix * basis_N8.nodes.^3, label=\"Df\", lw=3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Combining the volume term for every $i=0,...,N$ results in\n", + "$$\n", + "\\int_{-1}^1 u \\underline{l'} d\\xi = - D^T M \\underline{u}(t)\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Putting all parts together we get the following equation for the element $Q_l$\n", + "$$\n", + "\\frac{dx}{2} M \\underline{\\dot{u}}(t) = - B \\underline{u}^*(t) + D^T M \\underline{u}(t)\n", + "$$\n", + "or equivalent\n", + "$$\n", + "\\underline{\\dot{u}}^{Q_l}(t) = \\frac{2}{dx} \\Big[ - M^{-1} B \\underline{u}^{{Q_l}^*}(t) + M^{-1} D^T M \\underline{u}^{Q_l}(t)\\Big].\n", + "$$\n", + "This is called the weak form of the DGSEM." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** For every element $Q_l$ we get a system of $N+1$ ordinary differential equations to\n", + "calculate $N+1$ coefficients. Since the numerical flux $u^*$ is depending on extern values at\n", + "the interfaces, the equation systems of adjacent elements are weakly linked." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### iv. Numerical flux\n", + "As mentioned above, we still have to handle the problem of different values at the same point at\n", + "the interfaces. This happens with the ideas of the numerical flux $f^*(u)=u^*$. The role of $f^*$\n", + "might seem minor in this simple example, but is important for more complicated problems.\n", + "There are two values at the same spatial coordinate. Let's say we are looking at the interface between\n", + "the elements $Q_l$ and $Q_{l+1}$, while both elements got $N+1$ nodes as defined before. We call\n", + "the first value of the right element $u_R=u_0^{Q_{l+1}}$ and the last one of the left element\n", + "$u_L=u_N^{Q_l}$. So, for the value of the numerical flux on that interface the following holds\n", + "$$\n", + "u^* = u^*(u_L, u_R).\n", + "$$\n", + "These values are interpreted as start values of a so-called Riemann problem. There are many\n", + "different (approximate) Riemann solvers available and useful for different problems. We will\n", + "use the local Lax-Friedrichs flux." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "surface_flux = flux_lax_friedrichs" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The only missing ingredient is the flux calculation at the boundaries $-1$ and $+1$.\n", + "$$\n", + "u^{{Q_{first}}^*}\\big|_{-1} = u^{{Q_{first}}^*}\\big|_{-1}(u^{bound}(-1), u_R)\n", + "\\quad\\text{and}\\quad\n", + "u^{{Q_{last}}^*}\\big|^1 = u^{{Q_{last}}^*}\\big|^1(u_L, u^{bound}(1))\n", + "$$\n", + "The boundaries are periodic, which means that the last value of the last element $u^{Q_{last}}_N$\n", + "is used as $u_L$ at the first interface and accordingly for the other boundary." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now, we implement a function, that calculates $\\underline{\\dot{u}}^{Q_l}$ for the given matrices,\n", + "$\\underline{u}$ and $\\underline{u}^*$." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function rhs!(du, u, x, t)\n", + " # Reset du and flux matrix\n", + " du .= zero(eltype(du))\n", + " flux_numerical = copy(du)\n", + "\n", + " # Calculate interface and boundary fluxes, $u^* = (u^*|_{-1}, 0, ..., 0, u^*|^1)^T$\n", + " # Since we use the flux Lax-Friedrichs from Trixi.jl, we have to pass some extra arguments.\n", + " # Trixi.jl needs the equation we are dealing with and an additional `1`, that indicates the\n", + " # first coordinate direction.\n", + " equations = LinearScalarAdvectionEquation1D(1.0)\n", + " for element in 2:n_elements-1\n", + " # left interface\n", + " flux_numerical[1, element] = surface_flux(u[end, element-1], u[1, element], 1, equations)\n", + " flux_numerical[end, element-1] = flux_numerical[1, element]\n", + " # right interface\n", + " flux_numerical[end, element] = surface_flux(u[end, element], u[1, element+1], 1, equations)\n", + " flux_numerical[1, element+1] = flux_numerical[end, element]\n", + " end\n", + " # boundary flux\n", + " flux_numerical[1, 1] = surface_flux(u[end, end], u[1, 1], 1, equations)\n", + " flux_numerical[end, end] = flux_numerical[1, 1]\n", + "\n", + " # Calculate surface integrals, $- M^{-1} * B * u^*$\n", + " for element in 1:n_elements\n", + " du[:, element] -= (M \\ B) * flux_numerical[:, element]\n", + " end\n", + "\n", + " # Calculate volume integral, $+ M^{-1} * D^T * M * u$\n", + " for element in 1:n_elements\n", + " flux = u[:, element]\n", + " du[:, element] += (M \\ transpose(D)) * M * flux\n", + " end\n", + "\n", + " # Apply Jacobian from mapping to reference element\n", + " for element in 1:n_elements\n", + " du[:, element] *= 2 / dx\n", + " end\n", + "\n", + " return nothing\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Combining all definitions and the function that calculates the right-hand side, we define the ODE and\n", + "solve it until `t=2` with OrdinaryDiffEq's `solve` function and the Runge-Kutta method `RDPK3SpFSAL49()`,\n", + "which is optimized for discontinuous Galerkin methods and hyperbolic PDEs. We set some common\n", + "error tolerances `abstol=1.0e-6, reltol=1.0e-6` and pass `save_everystep=false` to avoid saving intermediate\n", + "solution vectors in memory." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "tspan = (0.0, 2.0)\n", + "ode = ODEProblem(rhs!, u0, tspan, x)\n", + "\n", + "sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...)\n", + "\n", + "plot(vec(x), vec(sol.u[end]), label=\"solution at t=$(tspan[2])\", legend=:topleft, lw=3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Alternative Implementation based on Trixi.jl\n", + "Now, we implement the same example. But this time, we directly use the functionality that Trixi.jl\n", + "provides." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq, Plots" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "First, define the equation with a advection_velocity of `1`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "advection_velocity = 1.0\n", + "equations = LinearScalarAdvectionEquation1D(advection_velocity)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then, create a DG solver with polynomial degree = 3 and (local) Lax-Friedrichs/Rusanov flux as surface flux.\n", + "The implementation of the basis and the numerical flux is now already done." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We will now create a mesh with 16 elements for the physical domain `[-1, 1]` with periodic boundaries.\n", + "We use Trixi.jl's standard mesh `TreeMesh`. Since it's limited to hypercube domains, we\n", + "choose `2^4=16` elements. The mesh type supports AMR, that' why `n_cells_max` has to be set, even\n", + "if we don't need AMR here." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = -1.0 # minimum coordinate\n", + "coordinates_max = 1.0 # maximum coordinate\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=4, # number of elements = 2^4\n", + " n_cells_max=30_000) # set maximum capacity of tree data structure (only needed for AMR)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "A semidiscretization collects data structures and functions for the spatial discretization.\n", + "In Trixi.jl, an initial condition has the following parameter structure and is of the type `SVector`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "initial_condition_sine_wave(x, t, equations) = SVector(1.0 + 0.5 * sin(pi * sum(x - equations.advection_velocity * t)))\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sine_wave, solver)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Again, combining all definitions and the function that calculates the right-hand side, we define the ODE and\n", + "solve it until `t=2` with OrdinaryDiffEq's `solve` function and the Runge-Kutta method `RDPK3SpFSAL49()`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tspan = (0.0, 2.0)\n", + "ode_trixi = semidiscretize(semi, tspan)\n", + "\n", + "sol_trixi = solve(ode_trixi, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We add a plot of the new approximated solution to the one calculated before." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "plot!(sol_trixi, label=\"solution at t=$(tspan[2]) with Trixi.jl\", legend=:topleft, linestyle=:dash, lw=2)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Summary of the code\n", + "To sum up, here is the complete code that we used." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Raw implementation" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# basis: Legendre-Gauss-Lobatto\n", + "using Trixi, LinearAlgebra, OrdinaryDiffEq, Plots\n", + "polydeg = 3 #= polynomial degree =#\n", + "basis = LobattoLegendreBasis(polydeg)\n", + "nodes = basis.nodes # Gauss-Lobatto nodes in [-1, 1]\n", + "D = basis.derivative_matrix\n", + "M = diagm(basis.weights) # mass matrix\n", + "B = diagm([-1; zeros(polydeg - 1); 1])\n", + "\n", + "# mesh\n", + "coordinates_min = -1.0 # minimum coordinate\n", + "coordinates_max = 1.0 # maximum coordinate\n", + "n_elements = 16 # number of elements\n", + "\n", + "dx = (coordinates_max - coordinates_min) / n_elements # length of one element\n", + "\n", + "x = Matrix{Float64}(undef, length(nodes), n_elements)\n", + "for element in 1:n_elements\n", + " x_l = -1 + (element - 1) * dx + dx/2\n", + " for i in eachindex(nodes) # basis points in [-1, 1]\n", + " ξ = nodes[i]\n", + " x[i, element] = x_l + dx/2 * ξ\n", + " end\n", + "end\n", + "\n", + "# initial condition\n", + "initial_condition_sine_wave(x) = 1.0 + 0.5 * sin(pi * x)\n", + "u0 = initial_condition_sine_wave.(x)\n", + "\n", + "plot(vec(x), vec(u0), label=\"initial condition\", legend=:topleft)\n", + "\n", + "# flux Lax-Friedrichs\n", + "surface_flux = flux_lax_friedrichs\n", + "\n", + "# rhs! method\n", + "function rhs!(du, u, x, t)\n", + " # reset du\n", + " du .= zero(eltype(du))\n", + " flux_numerical = copy(du)\n", + "\n", + " # calculate interface and boundary fluxes\n", + " equations = LinearScalarAdvectionEquation1D(1.0)\n", + " for element in 2:n_elements-1\n", + " # left interface\n", + " flux_numerical[1, element] = surface_flux(u[end, element-1], u[1, element], 1, equations)\n", + " flux_numerical[end, element-1] = flux_numerical[1, element]\n", + " # right interface\n", + " flux_numerical[end, element] = surface_flux(u[end, element], u[1, element+1], 1, equations)\n", + " flux_numerical[1, element+1] = flux_numerical[end, element]\n", + " end\n", + " # boundary flux\n", + " flux_numerical[1, 1] = surface_flux(u[end, end], u[1, 1], 1, equations)\n", + " flux_numerical[end, end] = flux_numerical[1, 1]\n", + "\n", + " # calculate surface integrals\n", + " for element in 1:n_elements\n", + " du[:, element] -= (M \\ B) * flux_numerical[:, element]\n", + " end\n", + "\n", + " # calculate volume integral\n", + " for element in 1:n_elements\n", + " flux = u[:, element]\n", + " du[:, element] += (M \\ transpose(D)) * M * flux\n", + " end\n", + "\n", + " # apply Jacobian from mapping to reference element\n", + " for element in 1:n_elements\n", + " du[:, element] *= 2 / dx\n", + " end\n", + "\n", + " return nothing\n", + "end\n", + "\n", + "# create ODE problem\n", + "tspan = (0.0, 2.0)\n", + "ode = ODEProblem(rhs!, u0, tspan, x)\n", + "\n", + "# solve\n", + "sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...)\n", + "\n", + "plot(vec(x), vec(sol.u[end]), label=\"solution at t=$(tspan[2])\", legend=:topleft, lw=3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Alternative Implementation based on Trixi.jl" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi, OrdinaryDiffEq, Plots\n", + "\n", + "# equation with a advection_velocity of `1`.\n", + "advection_velocity = 1.0\n", + "equations = LinearScalarAdvectionEquation1D(advection_velocity)\n", + "\n", + "# create DG solver with flux lax friedrichs and LGL basis\n", + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)\n", + "\n", + "# distretize domain with `TreeMesh`\n", + "coordinates_min = -1.0 # minimum coordinate\n", + "coordinates_max = 1.0 # maximum coordinate\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=4, # number of elements = 2^4\n", + " n_cells_max=30_000)\n", + "\n", + "# create initial condition and semidiscretization\n", + "initial_condition_sine_wave(x, t, equations) = SVector(1.0 + 0.5 * sin(pi * sum(x - equations.advection_velocity * t)))\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sine_wave, solver)\n", + "\n", + "# solve\n", + "tspan = (0.0, 2.0)\n", + "ode_trixi = semidiscretize(semi, tspan)\n", + "sol_trixi = solve(ode_trixi, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...);\n", + "\n", + "plot!(sol_trixi, label=\"solution at t=$(tspan[2]) with Trixi.jl\", legend=:topleft, linestyle=:dash, lw=2)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/shock_capturing.ipynb b/v0.8.7/tutorials/notebooks/shock_capturing.ipynb new file mode 100644 index 0000000000..82dc0cca69 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/shock_capturing.ipynb @@ -0,0 +1,503 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 5: Shock capturing with flux differencing and stage limiter" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial contains a short summary of the idea of shock capturing for DGSEM with flux differencing\n", + "and its implementation in [Trixi.jl](https://github.com/trixi-framework/Trixi.jl).\n", + "In the second part, an implementation of a positivity preserving limiter is added to the simulation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Shock capturing with flux differencing" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The following rough explanation is on a very basic level. More information about an entropy stable\n", + "shock-capturing strategy for DGSEM discretizations of advection dominated problems, such as the\n", + "compressible Euler equations or the compressible Navier-Stokes equations, can be found in\n", + "[Hennemann et al. (2021)](https://doi.org/10.1016/j.jcp.2020.109935). In\n", + "[Rueda-Ramírez et al. (2021)](https://doi.org/10.1016/j.jcp.2021.110580) you find the extension to\n", + "the systems with non-conservative terms, such as the compressible magnetohydrodynamics (MHD) equations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The strategy for a shock-capturing method presented by Hennemann et al. is based on a hybrid blending\n", + "of a high-order DG method with a low-order variant. The low-order subcell finite volume (FV) method is created\n", + "directly with the Legendre-Gauss-Lobatto (LGL) nodes already used for the high-order DGSEM.\n", + "Then, the final method is a convex combination with regulating indicator $\\alpha$ of these two methods." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Since the surface integral is equal for both the DG and the subcell FV method, only the volume integral divides\n", + "between the two methods." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This strategy for the volume integral is implemented in Trixi.jl under the name of\n", + "`VolumeIntegralShockCapturingHG` with the three parameters of the indicator and the volume fluxes for\n", + "the DG and the subcell FV method." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Note, that the DG method is based on the flux differencing formulation. Hence, you have to use a\n", + "two-point flux, such as `flux_ranocha`, `flux_shima_etal`, `flux_chandrashekar` or `flux_kennedy_gruber`,\n", + "for the DG volume flux. We would recommend to use the entropy conserving flux `flux_ranocha` by\n", + "[Ranocha (2018)](https://cuvillier.de/en/shop/publications/7743) for the compressible Euler equations.\n", + "````julia\n", + "volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;\n", + " volume_flux_dg=volume_flux_dg,\n", + " volume_flux_fv=volume_flux_fv)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We now focus on a choice of the shock capturing indicator `indicator_sc`.\n", + "A possible indicator is $\\alpha_{HG}$ presented by Hennemann et al. (p.10), which depends on the\n", + "current approximation with modal coefficients $\\{m_j\\}_{j=0}^N$ of a given `variable`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The indicator is calculated for every DG element by itself. First, we calculate a smooth $\\alpha$ by\n", + "$$\n", + "\\alpha = \\frac{1}{1+\\exp(-\\frac{-s}{\\mathbb{T}}(\\mathbb{E}-\\mathbb{T}))}\n", + "$$\n", + "with the total energy $\\mathbb{E}=\\max\\big(\\frac{m_N^2}{\\sum_{j=0}^N m_j^2}, \\frac{m_{N-1}^2}{\\sum_{j=0}^{N-1} m_j^2}\\big)$,\n", + "threshold $\\mathbb{T}= 0.5 * 10^{-1.8*(N+1)^{1/4}}$ and parameter $s=ln\\big(\\frac{1-0.0001}{0.0001}\\big)\\approx 9.21024$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For computational efficiency, $\\alpha_{min}$ is introduced and used for\n", + "$$\n", + "\\tilde{\\alpha} = \\begin{cases}\n", + "0, & \\text{if } \\alpha<\\alpha_{min}\\\\\n", + "\\alpha, & \\text{if } \\alpha_{min}\\leq \\alpha \\leq 1- \\alpha_{min}\\\\\n", + "1, & \\text{if } 1-\\alpha_{min}<\\alpha.\n", + "\\end{cases}\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Moreover, the parameter $\\alpha_{max}$ sets a maximal value for $\\alpha$ by\n", + "$$\n", + "\\alpha = \\min\\{\\tilde{\\alpha}, \\alpha_{max}\\}.\n", + "$$\n", + "This allows to control the maximal dissipation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To remove numerical artifact the final indicator is smoothed with all the neighboring elements'\n", + "indicators. This is activated with `alpha_smooth=true`.\n", + "$$\n", + "\\alpha_{HG} = \\max_E \\{ \\alpha, 0.5 * \\alpha_E\\},\n", + "$$\n", + "where $E$ are all elements sharing a face with the current element." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Furthermore, you can specify the variable used for the calculation. For instance you can choose\n", + "`density`, `pressure` or both with `density_pressure` for the compressible Euler equations.\n", + "For every equation there is also the option to use the first conservation variable with `first`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This indicator is implemented in Trixi.jl and called `IndicatorHennemannGassner` with the parameters\n", + "`equations`, `basis`, `alpha_max`, `alpha_min`, `alpha_smooth` and `variable`.\n", + "````julia\n", + "indicator_sc = IndicatorHennemannGassner(equations, basis,\n", + " alpha_max=0.5,\n", + " alpha_min=0.001,\n", + " alpha_smooth=true,\n", + " variable=variable)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Positivity preserving limiter" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Some numerical solutions are physically meaningless, for instance negative values of pressure\n", + "or density for the compressible Euler equations. This often results in crashed simulations since\n", + "the calculation of numerical fluxes or stable time steps uses mathematical operations like roots or\n", + "logarithms. One option to avoid these cases are a-posteriori positivity preserving limiters.\n", + "Trixi.jl provides the fully-discrete positivity-preserving limiter of\n", + "[Zhang, Shu (2011)](https://doi.org/10.1098/rspa.2011.0153)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "It works the following way. For every passed (scalar) variable and for every DG element we calculate\n", + "the minimal value $value_{min}$. If this value falls below the given threshold $\\varepsilon$,\n", + "the approximation is slightly adapted such that the minimal value of the relevant variable lies\n", + "now above the threshold.\n", + "$$\n", + "\\underline{u}^{new} = \\theta * \\underline{u} + (1-\\theta) * u_{mean}\n", + "$$\n", + "where $\\underline{u}$ are the collected pointwise evaluation coefficients in element $e$ and\n", + "$u_{mean}$ the integral mean of the quantity in $e$. The new coefficients are a convex combination\n", + "of these two values with factor\n", + "$$\n", + "\\theta = \\frac{value_{mean} - \\varepsilon}{value_{mean} - value_{min}},\n", + "$$\n", + "where $value_{mean}$ is the relevant variable evaluated for the mean value $u_{mean}$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The adapted approximation keeps the exact same mean value, but the relevant variable is now greater\n", + "or equal the threshold $\\varepsilon$ at every node in every element." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We specify the variables the way we did before for the shock capturing variables. For the\n", + "compressible Euler equations `density`, `pressure` or the combined variable `density_pressure`\n", + "are a reasonable choice." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "You can implement the limiter in Trixi.jl using `PositivityPreservingLimiterZhangShu` with parameters\n", + "`threshold` and `variables`.\n", + "````julia\n", + "stage_limiter! = PositivityPreservingLimiterZhangShu(thresholds=thresholds,\n", + " variables=variables)\n", + "````\n", + "Then, the limiter is added to the time integration method in the `solve` function. For instance, like\n", + "````julia\n", + "CarpenterKennedy2N54(stage_limiter!, williamson_condition=false)\n", + "````\n", + "or\n", + "````julia\n", + "SSPRK43(stage_limiter!).\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Simulation with shock capturing and positivity preserving" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can run a simulation using the described methods of shock capturing and positivity\n", + "preserving limiters. We want to give an example for the 2D compressible Euler equations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq, Trixi\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As our initial condition we use the Sedov blast wave setup." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function initial_condition_sedov_blast_wave(x, t, equations::CompressibleEulerEquations2D)\n", + " # Set up polar coordinates\n", + " inicenter = SVector(0.0, 0.0)\n", + " x_norm = x[1] - inicenter[1]\n", + " y_norm = x[2] - inicenter[2]\n", + " r = sqrt(x_norm^2 + y_norm^2)\n", + "\n", + " r0 = 0.21875 # = 3.5 * smallest dx (for domain length=4 and max-ref=6)\n", + " # r0 = 0.5 # = more reasonable setup\n", + " E = 1.0\n", + " p0_inner = 3 * (equations.gamma - 1) * E / (3 * pi * r0^2)\n", + " p0_outer = 1.0e-5 # = true Sedov setup\n", + " # p0_outer = 1.0e-3 # = more reasonable setup\n", + "\n", + " # Calculate primitive variables\n", + " rho = 1.0\n", + " v1 = 0.0\n", + " v2 = 0.0\n", + " p = r > r0 ? p0_outer : p0_inner\n", + "\n", + " return prim2cons(SVector(rho, v1, v2, p), equations)\n", + "end\n", + "initial_condition = initial_condition_sedov_blast_wave" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "basis = LobattoLegendreBasis(3)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We set the numerical fluxes and divide between the surface flux and the two volume fluxes for the DG\n", + "and FV method. Here, we are using `flux_lax_friedrichs` and `flux_ranocha`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "surface_flux = flux_lax_friedrichs\n", + "volume_flux = flux_ranocha" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we specify the shock capturing indicator $\\alpha$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We implement the described indicator of Hennemann, Gassner as explained above with parameters\n", + "`equations`, `basis`, `alpha_max`, `alpha_min`, `alpha_smooth` and `variable`.\n", + "Since density and pressure are the critical variables in this example, we use\n", + "`density_pressure = density * pressure = rho * p` as indicator variable." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "indicator_sc = IndicatorHennemannGassner(equations, basis,\n", + " alpha_max=0.5,\n", + " alpha_min=0.001,\n", + " alpha_smooth=true,\n", + " variable=density_pressure)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can use the defined fluxes and the indicator to implement the volume integral using shock\n", + "capturing." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;\n", + " volume_flux_dg=volume_flux,\n", + " volume_flux_fv=surface_flux)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We finalize the discretization by implementing Trixi.jl's `solver`, `mesh`, `semi` and `ode`,\n", + "while `solver` now has the extra parameter `volume_integral`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(basis, surface_flux, volume_integral)\n", + "\n", + "coordinates_min = (-2.0, -2.0)\n", + "coordinates_max = ( 2.0, 2.0)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level=6,\n", + " n_cells_max=10_000)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n", + "\n", + "tspan = (0.0, 1.0)\n", + "ode = semidiscretize(semi, tspan);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We add some callbacks to get an solution analysis and use a CFL-based time step size calculation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "analysis_callback = AnalysisCallback(semi, interval=100)\n", + "\n", + "stepsize_callback = StepsizeCallback(cfl=0.8)\n", + "\n", + "callbacks = CallbackSet(analysis_callback, stepsize_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We now run the simulation using the positivity preserving limiter of Zhang and Shu for the variables\n", + "density and pressure." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "stage_limiter! = PositivityPreservingLimiterZhangShu(thresholds=(5.0e-6, 5.0e-6),\n", + " variables=(Trixi.density, pressure))\n", + "\n", + "sol = solve(ode, CarpenterKennedy2N54(stage_limiter!, williamson_condition=false),\n", + " dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " save_everystep=false, callback=callbacks);\n", + "\n", + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/structured_mesh_mapping.ipynb b/v0.8.7/tutorials/notebooks/structured_mesh_mapping.ipynb new file mode 100644 index 0000000000..816b376c11 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/structured_mesh_mapping.ipynb @@ -0,0 +1,451 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 16: Structured mesh with curvilinear mapping" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Here, we want to introduce another mesh type of [Trixi.jl](https://github.com/trixi-framework/Trixi.jl).\n", + "More precisely, this tutorial is about the curved mesh type `StructuredMesh` supporting\n", + "curved meshes." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Creating a curved mesh\n", + "There are two basic options to define a curved `StructuredMesh` in Trixi.jl. You can\n", + "implement curves for the domain boundaries, or alternatively, set up directly the complete\n", + "transformation mapping. We now present one short example each." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Mesh defined by domain boundary curves\n", + "Both examples are based on a semdiscretization of the 2D compressible Euler equations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "using Trixi\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We start with a pressure perturbation at `(xs, 0.0)` as initial condition." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function initial_condition_pressure_perturbation(x, t, equations::CompressibleEulerEquations2D)\n", + " xs = 1.5 # location of the initial disturbance on the x axis\n", + " w = 1/8 # half width\n", + " p = exp(-log(2) * ((x[1]-xs)^2 + x[2]^2)/w^2) + 1.0\n", + " v1 = 0.0\n", + " v2 = 0.0\n", + " rho = 1.0\n", + "\n", + " return prim2cons(SVector(rho, v1, v2, p), equations)\n", + "end\n", + "initial_condition = initial_condition_pressure_perturbation" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Initialize every boundary as a `boundary_condition_slip_wall`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "boundary_conditions = boundary_condition_slip_wall" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The approximation setup is an entropy-stable split-form DG method with `polydeg=4`. We are using\n", + "the two fluxes `flux_ranocha` and `flux_lax_friedrichs`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(polydeg=4, surface_flux=flux_lax_friedrichs,\n", + " volume_integral=VolumeIntegralFluxDifferencing(flux_ranocha))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We want to define a circular cylinder as physical domain. It contains an inner semicircle with\n", + "radius `r0` and an outer semicircle of radius `r1`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![](https://user-images.githubusercontent.com/74359358/159492083-1709510f-8ba4-4416-9fb1-e2ed2a11c62c.png)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The domain boundary curves with curve parameter in $[-1,1]$ are sorted as shown in the sketch.\n", + "They always are orientated from negative to positive coordinate, such that the corners have to\n", + "fit like this $f_1(+1) = f_4(-1)$, $f_3(+1) = f_2(-1)$, etc." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In our case we can define the domain boundary curves as follows:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "r0 = 0.5 # inner radius\n", + "r1 = 5.0 # outer radius\n", + "f1(xi) = SVector( r0 + 0.5 * (r1 - r0) * (xi + 1), 0.0) # right line\n", + "f2(xi) = SVector(-r0 - 0.5 * (r1 - r0) * (xi + 1), 0.0) # left line\n", + "f3(eta) = SVector(r0 * cos(0.5 * pi * (eta + 1)), r0 * sin(0.5 * pi * (eta + 1))) # inner circle\n", + "f4(eta) = SVector(r1 * cos(0.5 * pi * (eta + 1)), r1 * sin(0.5 * pi * (eta + 1))) # outer circle" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We create a curved mesh with 16 x 16 elements. The defined domain boundary curves are passed as a tuple." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "cells_per_dimension = (16, 16)\n", + "mesh = StructuredMesh(cells_per_dimension, (f1, f2, f3, f4), periodicity=false)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then, we define the simulation with endtime `T=3` with `semi`, `ode` and `callbacks`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,\n", + " boundary_conditions=boundary_conditions)\n", + "\n", + "tspan = (0.0, 3.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "analysis_interval = 100\n", + "analysis_callback = AnalysisCallback(semi, interval=analysis_interval)\n", + "\n", + "alive_callback = AliveCallback(analysis_interval=analysis_interval)\n", + "\n", + "stepsize_callback = StepsizeCallback(cfl=0.9)\n", + "\n", + "callbacks = CallbackSet(analysis_callback,\n", + " alive_callback,\n", + " stepsize_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Running the simulation" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n", + " dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " save_everystep=false, callback=callbacks);\n", + "\n", + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "pd = PlotData2D(sol)\n", + "plot(pd[\"p\"])\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Mesh directly defined by the transformation mapping\n", + "As mentioned before, you can also define the domain for a `StructuredMesh` by directly setting up\n", + "a transformation mapping. Here, we want to present a nice mapping, which is often used to test\n", + "free-stream preservation. Exact free-stream preservation is a crucial property of any numerical\n", + "method on curvilinear grids. The mapping is a reduced 2D version of the mapping described in\n", + "[Rueda-Ramírez et al. (2021), p.18](https://arxiv.org/abs/2012.12040)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "using Trixi\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As mentioned, this mapping is used for testing free-stream preservation. So, we use a constant\n", + "initial condition." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "initial_condition = initial_condition_constant\n", + "\n", + "solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We define the transformation mapping with variables in $[-1, 1]$ as described in\n", + "Rueda-Ramírez et al. (2021), p.18 (reduced to 2D):" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function mapping(xi_, eta_)\n", + " # Transform input variables between -1 and 1 onto [0,3]\n", + " xi = 1.5 * xi_ + 1.5\n", + " eta = 1.5 * eta_ + 1.5\n", + "\n", + " y = eta + 3/8 * (cos(1.5 * pi * (2 * xi - 3)/3) *\n", + " cos(0.5 * pi * (2 * eta - 3)/3))\n", + "\n", + " x = xi + 3/8 * (cos(0.5 * pi * (2 * xi - 3)/3) *\n", + " cos(2 * pi * (2 * y - 3)/3))\n", + "\n", + " return SVector(x, y)\n", + "end" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Instead of a tuple of boundary functions, the `mesh` now has the mapping as its parameter." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "cells_per_dimension = (16, 16)\n", + "mesh = StructuredMesh(cells_per_dimension, mapping)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n", + "\n", + "tspan = (0.0, 1.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "analysis_callback = AnalysisCallback(semi, interval=250)\n", + "\n", + "stepsize_callback = StepsizeCallback(cfl=0.8)\n", + "\n", + "callbacks = CallbackSet(analysis_callback,\n", + " stepsize_callback)\n", + "\n", + "sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),\n", + " dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " save_everystep=false, callback=callbacks);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Now, we want to verify the free-stream preservation property and plot the mesh. For the verification,\n", + "we calculate the absolute difference of the first conservation variable density `u[1]` and `1.0`.\n", + "To plot this error and the mesh, we are using the visualization feature `ScalarPlotData2D`,\n", + "explained in visualization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "error_density = let u = Trixi.wrap_array(sol.u[end], semi)\n", + " abs.(u[1, :, :, :] .- 1.0) # density, x, y, elements\n", + "end\n", + "pd = ScalarPlotData2D(error_density, semi)\n", + "\n", + "using Plots\n", + "plot(pd, title=\"Error in density\")\n", + "plot!(getmesh(pd))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "We observe that the errors in the variable `density` are at the level of machine accuracy.\n", + "Moreover, the plot shows the mesh structure resulting from our transformation mapping." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Of course, you can also use other mappings as for instance shifts by $(x, y)$\n", + "```julia\n", + "mapping(xi, eta) = SVector(xi + x, eta + y)\n", + "```\n", + "or rotations with a rotation matrix $T$\n", + "```julia\n", + "mapping(xi, eta) = T * SVector(xi, eta).\n", + "```" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For more curved mesh mappings, please have a look at some\n", + "[elixirs for `StructuredMesh`](https://github.com/trixi-framework/Trixi.jl/tree/main/examples).\n", + "For another curved mesh type, there is a tutorial about Trixi.jl's\n", + "unstructured mesh type [`UnstructuredMesh2D`] and its use of the\n", + "[High-Order Hex-Quad Mesh (HOHQMesh) generator](https://github.com/trixi-framework/HOHQMesh),\n", + "created and developed by David Kopriva." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\", \"Plots\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/subcell_shock_capturing.ipynb b/v0.8.7/tutorials/notebooks/subcell_shock_capturing.ipynb new file mode 100644 index 0000000000..0ba37918e9 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/subcell_shock_capturing.ipynb @@ -0,0 +1,633 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 6: Subcell limiting with the IDP Limiter" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In the previous tutorial, the element-wise limiting with `IndicatorHennemannGassner`\n", + "and `VolumeIntegralShockCapturingHG` was explained. This tutorial contains a short\n", + "introduction to the idea and implementation of subcell shock capturing approaches in Trixi.jl,\n", + "which is also based on the DGSEM scheme in flux differencing formulation.\n", + "Trixi.jl contains the a-posteriori invariant domain-preserving (IDP) limiter which was\n", + "introduced by [Pazner (2020)](https://doi.org/10.1016/j.cma.2021.113876) and\n", + "[Rueda-Ramírez, Pazner, Gassner (2022)](https://doi.org/10.1016/j.compfluid.2022.105627).\n", + "It is a flux-corrected transport-type (FCT) limiter and is implemented using `SubcellLimiterIDP`\n", + "and `VolumeIntegralSubcellLimiting`.\n", + "Since it is an a-posteriori limiter you have to apply a correction stage after each Runge-Kutta\n", + "stage. This is done by passing the stage callback `SubcellLimiterIDPCorrection` to the\n", + "time integration method." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Time integration method\n", + "As mentioned before, the IDP limiting is an a-posteriori limiter. Its limiting process\n", + "guarantees the target bounds for an explicit (forward) Euler time step. To still achieve a\n", + "high-order approximation, the implementation uses strong-stability preserving (SSP) Runge-Kutta\n", + "methods, which can be written as convex combinations of forward Euler steps.\n", + "As such, they preserve the convexity of convex functions and functionals, such as the TVD\n", + "semi-norm and the maximum principle in 1D, for instance." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Since IDP/FCT limiting procedure operates on independent forward Euler steps, its\n", + "a-posteriori correction stage is implemented as a stage callback that is triggered after each\n", + "forward Euler step in an SSP Runge-Kutta method. Unfortunately, the `solve(...)` routines in\n", + "[OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl), typically employed for time\n", + "integration in Trixi.jl, do not support this type of stage callback." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Therefore, subcell limiting with the IDP limiter requires the use of a Trixi-intern\n", + "time integration SSPRK method called with\n", + "````julia\n", + "Trixi.solve(ode, method(stage_callbacks = stage_callbacks); ...)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Right now, only the canonical three-stage, third-order SSPRK method (Shu-Osher)\n", + "`Trixi.SimpleSSPRK33` is implemented." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# IDP Limiting\n", + "The implementation of the invariant domain preserving (IDP) limiting approach (`SubcellLimiterIDP`)\n", + "is based on [Pazner (2020)](https://doi.org/10.1016/j.cma.2021.113876) and\n", + "[Rueda-Ramírez, Pazner, Gassner (2022)](https://doi.org/10.101/j.compfluid.2022.105627).\n", + "It supports several types of limiting which are enabled by passing parameters individually." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Global bounds\n", + "If enabled, the global bounds enforce physical admissibility conditions, such as non-negativity\n", + "of variables. This can be done for conservative variables, where the limiter is of a one-sided\n", + "Zalesak-type ([Zalesak, 1979](https://doi.org/10.1016/0021-9991(79)90051-2)), and general\n", + "non-linear variables, where a Newton-bisection algorithm is used to enforce the bounds." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The Newton-bisection algorithm is an iterative method and requires some parameters.\n", + "It uses a fixed maximum number of iteration steps (`max_iterations_newton = 10`) and\n", + "relative/absolute tolerances (`newton_tolerances = (1.0e-12, 1.0e-14)`). The given values are\n", + "sufficient in most cases and therefore used as default. Additionally, there is the parameter\n", + "`gamma_constant_newton`, which can be used to scale the antidiffusive flux for the computation\n", + "of the blending coefficients of nonlinear variables. The default value is `2 * ndims(equations)`,\n", + "as it was shown by [Pazner (2020)](https://doi.org/10.1016/j.cma.2021.113876) [Section 4.2.2.]\n", + "that this value guarantees the fulfillment of bounds for a forward-Euler increment." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Very small non-negative values can be an issue as well. That's why we use an additional\n", + "correction factor in the calculation of the global bounds,\n", + "$$\n", + "u^{new} \\geq \\beta * u^{FV}.\n", + "$$\n", + "By default, $\\beta$ (named `positivity_correction_factor`) is set to `0.1` which works properly\n", + "in most of the tested setups." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "#### Conservative variables\n", + "The procedure to enforce global bounds for a conservative variables is as follows:\n", + "If you want to guarantee non-negativity for the density of the compressible Euler equations,\n", + "you pass the specific quantity name of the conservative variable." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "equations = CompressibleEulerEquations2D(1.4)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The quantity name of the density is `rho` which is how we enable its limiting." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "positivity_variables_cons = [\"rho\"]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The quantity names are passed as a vector to allow several quantities.\n", + "This is used, for instance, if you want to limit the density of two different components using\n", + "the multicomponent compressible Euler equations." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "equations = CompressibleEulerMulticomponentEquations2D(gammas = (1.4, 1.648),\n", + " gas_constants = (0.287, 1.578))" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then, we just pass both quantity names." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "positivity_variables_cons = [\"rho1\", \"rho2\"]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Alternatively, it is possible to all limit all density variables with a general command using" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "positivity_variables_cons = [\"rho\" * string(i) for i in eachcomponent(equations)]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "#### Non-linear variables\n", + "To allow limitation for all possible non-linear variables, including variables defined\n", + "on-the-fly, you can directly pass the function that computes the quantity for which you want\n", + "to enforce positivity. For instance, if you want to enforce non-negativity for the pressure,\n", + "do as follows." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "positivity_variables_nonlinear = [pressure]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "### Local bounds\n", + "Second, Trixi.jl supports the limiting with local bounds for conservative variables using a\n", + "two-sided Zalesak-type limiter ([Zalesak, 1979](https://doi.org/10.1016/0021-9991(79)90051-2))\n", + "and for general non-linear variables using a one-sided Newton-bisection algorithm.\n", + "They allow to avoid spurious oscillations within the global bounds and to improve the\n", + "shock-capturing capabilities of the method. The corresponding numerical admissibility conditions\n", + "are frequently formulated as local maximum or minimum principles. The local bounds are computed\n", + "using the maximum and minimum values of all local neighboring nodes. Within this calculation we\n", + "use the low-order FV solution values for each node." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As for the limiting with global bounds you are passing the quantity names of the conservative\n", + "variables you want to limit. So, to limit the density with lower and upper local bounds pass\n", + "the following." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "local_twosided_variables_cons = [\"rho\"]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To limit non-linear variables locally, pass the variable function combined with the requested\n", + "bound (`min` or `max`) as a tuple. For instance, to impose a lower local bound on the modified\n", + "specific entropy `Trixi.entropy_guermond_etal`, use" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "local_onesided_variables_nonlinear = [(Trixi.entropy_guermond_etal, min)]" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Exemplary simulation\n", + "How to set up a simulation using the IDP limiting becomes clearer when looking at an exemplary\n", + "setup. This will be a simplified version of `tree_2d_dgsem/elixir_euler_blast_wave_sc_subcell.jl`.\n", + "Since the setup is mostly very similar to a pure DGSEM setup as in\n", + "`tree_2d_dgsem/elixir_euler_blast_wave.jl`, the equivalent parts are used without any explanation\n", + "here." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using OrdinaryDiffEq\n", + "using Trixi\n", + "\n", + "equations = CompressibleEulerEquations2D(1.4)\n", + "\n", + "function initial_condition_blast_wave(x, t, equations::CompressibleEulerEquations2D)\n", + " # Modified From Hennemann & Gassner JCP paper 2020 (Sec. 6.3) -> \"medium blast wave\"\n", + " # Set up polar coordinates\n", + " inicenter = SVector(0.0, 0.0)\n", + " x_norm = x[1] - inicenter[1]\n", + " y_norm = x[2] - inicenter[2]\n", + " r = sqrt(x_norm^2 + y_norm^2)\n", + " phi = atan(y_norm, x_norm)\n", + " sin_phi, cos_phi = sincos(phi)\n", + "\n", + " # Calculate primitive variables\n", + " rho = r > 0.5 ? 1.0 : 1.1691\n", + " v1 = r > 0.5 ? 0.0 : 0.1882 * cos_phi\n", + " v2 = r > 0.5 ? 0.0 : 0.1882 * sin_phi\n", + " p = r > 0.5 ? 1.0E-3 : 1.245\n", + "\n", + " return prim2cons(SVector(rho, v1, v2, p), equations)\n", + "end\n", + "initial_condition = initial_condition_blast_wave;" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Since the surface integral is equal for both the DG and the subcell FV method, the limiting is\n", + "applied only in the volume integral." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Note, that the DG method is based on the flux differencing formulation. Hence, you have to use a\n", + "two-point flux, such as `flux_ranocha`, `flux_shima_etal`, `flux_chandrashekar`\n", + "or `flux_kennedy_gruber`, for the DG volume flux." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "surface_flux = flux_lax_friedrichs\n", + "volume_flux = flux_ranocha" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The limiter is implemented within `SubcellLimiterIDP`. It always requires the\n", + "parameters `equations` and `basis`. With additional parameters (described above\n", + "or listed in the docstring) you can specify and enable additional limiting options.\n", + "Here, the simulation should contain local limiting for the density using lower and upper bounds." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "basis = LobattoLegendreBasis(3)\n", + "limiter_idp = SubcellLimiterIDP(equations, basis;\n", + " local_twosided_variables_cons = [\"rho\"])" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "The initialized limiter is passed to `VolumeIntegralSubcellLimiting` in addition to the volume\n", + "fluxes of the low-order and high-order scheme." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "volume_integral = VolumeIntegralSubcellLimiting(limiter_idp;\n", + " volume_flux_dg = volume_flux,\n", + " volume_flux_fv = surface_flux)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Then, the volume integral is passed to `solver` as it is done for the standard flux-differencing\n", + "DG scheme or the element-wise limiting." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "solver = DGSEM(basis, surface_flux, volume_integral)" + ], + "metadata": {}, + "execution_count": null + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "coordinates_min = (-2.0, -2.0)\n", + "coordinates_max = (2.0, 2.0)\n", + "mesh = TreeMesh(coordinates_min, coordinates_max,\n", + " initial_refinement_level = 5,\n", + " n_cells_max = 10_000)\n", + "\n", + "semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)\n", + "\n", + "tspan = (0.0, 2.0)\n", + "ode = semidiscretize(semi, tspan)\n", + "\n", + "summary_callback = SummaryCallback()\n", + "\n", + "analysis_interval = 1000\n", + "analysis_callback = AnalysisCallback(semi, interval = analysis_interval)\n", + "\n", + "alive_callback = AliveCallback(analysis_interval = analysis_interval)\n", + "\n", + "save_solution = SaveSolutionCallback(interval = 1000,\n", + " save_initial_solution = true,\n", + " save_final_solution = true,\n", + " solution_variables = cons2prim)\n", + "\n", + "stepsize_callback = StepsizeCallback(cfl = 0.3)\n", + "\n", + "callbacks = CallbackSet(summary_callback,\n", + " analysis_callback, alive_callback,\n", + " save_solution,\n", + " stepsize_callback);" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "As explained above, the IDP limiter works a-posteriori and requires the additional use of a\n", + "correction stage implemented with the stage callback `SubcellLimiterIDPCorrection`.\n", + "This callback is passed within a tuple to the time integration method." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "stage_callbacks = (SubcellLimiterIDPCorrection(),)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Moreover, as mentioned before as well, simulations with subcell limiting require a Trixi-intern\n", + "SSPRK time integration methods with passed stage callbacks and a Trixi-intern `Trixi.solve(...)`\n", + "routine." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "sol = Trixi.solve(ode, Trixi.SimpleSSPRK33(stage_callbacks = stage_callbacks);\n", + " dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " callback = callbacks);\n", + "summary_callback() # print the timer summary" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "## Visualization\n", + "As for a standard simulation in Trixi.jl, it is possible to visualize the solution using the\n", + "`plot` routine from Plots.jl." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(sol)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "To get an additional look at the amount of limiting that is used, you can use the visualization\n", + "approach using the `SaveSolutionCallback`, [`Trixi2Vtk`](https://github.com/trixi-framework/Trixi2Vtk.jl)\n", + "and [ParaView](https://www.paraview.org/download/). More details about this procedure\n", + "can be found in the visualization documentation.\n", + "Unfortunately, the support for subcell limiting data is not yet merged into the main branch\n", + "of Trixi2Vtk but lies in the branch [`bennibolm/node-variables`](https://github.com/bennibolm/Trixi2Vtk.jl/tree/node-variables)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "With that implementation and the standard procedure used for Trixi2Vtk you get the following\n", + "dropdown menu in ParaView." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "![ParaView_Dropdownmenu](https://github.com/trixi-framework/Trixi.jl/assets/74359358/70d15f6a-059b-4349-8291-68d9ab3af43e)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The resulting visualization of the density and the limiting parameter then looks like this.\n", + "![blast_wave_paraview](https://github.com/trixi-framework/Trixi.jl/assets/74359358/e5808bed-c8ab-43bf-af7a-050fe43dd630)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "You can see that the limiting coefficient does not lie in the interval [0,1] because Trixi2Vtk\n", + "interpolates all quantities to regular nodes by default.\n", + "You can disable this functionality with `reinterpolate=false` within the call of `trixi2vtk(...)`\n", + "and get the following visualization.\n", + "![blast_wave_paraview_reinterpolate=false](https://github.com/trixi-framework/Trixi.jl/assets/74359358/39274f18-0064-469c-b4da-bac4b843e116)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Bounds checking\n", + "Subcell limiting is based on the fulfillment of target bounds - either global or local.\n", + "Although the implementation works and has been thoroughly tested, there are some cases where\n", + "these bounds are not met.\n", + "For instance, the deviations could be in machine precision, which is not problematic.\n", + "Larger deviations can be cause by too large time-step sizes (which can be easily fixed by\n", + "reducing the CFL number), specific boundary conditions or source terms. Insufficient parameters\n", + "for the Newton-bisection algorithm can also be a reason when limiting non-linear variables.\n", + "There are described above." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In many cases, it is reasonable to monitor the bounds deviations.\n", + "Because of that, Trixi.jl supports a bounds checking routine implemented using the stage\n", + "callback `BoundsCheckCallback`. It checks all target bounds for fulfillment\n", + "in every RK stage. If added to the tuple of stage callbacks like\n", + "````julia\n", + "stage_callbacks = (SubcellLimiterIDPCorrection(), BoundsCheckCallback())\n", + "````\n", + "and passed to the time integration method, a summary is added to the final console output.\n", + "For the given example, this summary shows that all bounds are met at all times.\n", + "````\n", + "────────────────────────────────────────────────────────────────────────────────────────────────────\n", + "Maximum deviation from bounds:\n", + "────────────────────────────────────────────────────────────────────────────────────────────────────\n", + "rho:\n", + "- lower bound: 0.0\n", + "- upper bound: 0.0\n", + "────────────────────────────────────────────────────────────────────────────────────────────────────\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Moreover, it is also possible to monitor the bounds deviations incurred during the simulations.\n", + "To do that use the parameter `save_errors = true`, such that the instant deviations are written\n", + "to `deviations.txt` in `output_directory` every `interval` time steps.\n", + "````julia\n", + "BoundsCheckCallback(save_errors = true, output_directory = \"out\", interval = 100)\n", + "````\n", + "Then, for the given example the deviations file contains all daviations for the current\n", + "timestep and simulation time.\n", + "````\n", + "iter, simu_time, rho_min, rho_max\n", + "100, 0.29103427131404924, 0.0, 0.0\n", + "200, 0.5980281923063808, 0.0, 0.0\n", + "300, 0.9520853560765293, 0.0, 0.0\n", + "400, 1.3630295622683186, 0.0, 0.0\n", + "500, 1.8344999624013498, 0.0, 0.0\n", + "532, 1.9974179806990118, 0.0, 0.0\n", + "````" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/time_stepping.ipynb b/v0.8.7/tutorials/notebooks/time_stepping.ipynb new file mode 100644 index 0000000000..28a8e25d1d --- /dev/null +++ b/v0.8.7/tutorials/notebooks/time_stepping.ipynb @@ -0,0 +1,195 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 19: Explicit time stepping" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For the time integration, [Trixi.jl](https://github.com/trixi-framework/Trixi.jl) uses the package\n", + "[OrdinaryDiffEq.jl](https://github.com/SciML/OrdinaryDiffEq.jl) from the SciML ecosystem.\n", + "The interface to this package is the `solve(...)` function. It always requires an ODE problem and\n", + "a time integration algorithm as input parameters.\n", + "````julia\n", + "solve(ode, alg; kwargs...)\n", + "````\n", + "In Trixi.jl, the ODE problem is created by `semidiscretize(semi, tspan)` for a semidiscretization\n", + "`semi` and the time span `tspan`. In particular, `semidiscretize` returns an `ODEProblem`\n", + "used by OrdinaryDiffEq.jl." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "OrdinaryDiffEq.jl provides many integration algorithms, which are summarized in\n", + "the [documentation](https://diffeq.sciml.ai/stable/solvers/ode_solve/#Full-List-of-Methods).\n", + "Particularly interesting for Trixi.jl are their\n", + "[strong stability preserving (SSP) methods](https://diffeq.sciml.ai/stable/solvers/ode_solve/#Explicit-Strong-Stability-Preserving-Runge-Kutta-Methods-for-Hyperbolic-PDEs-(Conservation-Laws))\n", + "and [low-storage methods](https://diffeq.sciml.ai/stable/solvers/ode_solve/#Low-Storage-Methods).\n", + "There are some differences regarding the choice of the used time step." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# Error-based adaptive step sizes\n", + "First, we treat time integration algorithms with adaptive step sizes, such as `SSPRK43`. It is used in\n", + "some elixirs, like [`elixir_euler_colliding_flow.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_colliding_flow.jl)\n", + "or [`elixir_euler_astro_jet_amr.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_astro_jet_amr.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Other error-based adaptive integration algorithms are for instance `RDPK3SpFSAL35`, `RDPK3Sp35`,\n", + "`RDPK3SpFSAL49`, `RDPK3Sp49`, `RDPK3SpFSAL510`, `RDPK3Sp510`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "They already contain an error-based adaptive step size control and heuristics to guess\n", + "a starting step size. If this heuristic fails in your case, you can specify an appropriately\n", + "small initial step size as keyword argument `dt=...` of `solve`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "If you run Trixi in parallel with MPI you need to pass `internalnorm=ode_norm` and you should pass `unstable_check=ode_unstable_check`\n", + "to enable MPI aware error-based adaptive step size control. These keyword arguments are also included in `ode_default_options`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "# CFL-based step size control\n", + "The SciML ecosystem also provides time integration algorithms without adaptive time stepping on\n", + "their own, such as `CarpenterKennedy2N54`. Moreover, you also can deactivate the automatic adaptivity\n", + "of adaptive integration algorithms by passing `adaptive=false` in the `solve` function." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These algorithms require another way of setting the step size. You have to pass `dt=...`\n", + "in the `solve` function. Without other settings, the simulation uses this fixed time step." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For hyperbolic PDEs, it is natural to use an adaptive CFL-based step size control. Here, the time\n", + "step is proportional to a ratio of the local measure of mesh spacing $\\Delta x_i$ for an element `i`\n", + "and the maximum (local) wave speed $\\lambda_{\\max}$ related to the largest-magnitude eigenvalue of\n", + "the flux Jacobian of the hyperbolic system.\n", + "$$\n", + "\\Delta t_n = \\text{CFL} * \\min_i \\frac{\\Delta x_i}{\\lambda_{\\max}(u_i^n)}\n", + "$$\n", + "We compute $\\Delta x_i$ by scaling the element size by a factor of $1/(N+1)$, cf.\n", + "[Gassner and Kopriva (2011)](https://doi.org/10.1137/100807211), Section 5." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl provides such a CFL-based step size control. It is implemented as the callback\n", + "`StepsizeCallback`.\n", + "````julia\n", + "stepsize_callback = StepsizeCallback(; cfl=1.0)\n", + "````\n", + "A suitable CFL number depends on many parameters such as the chosen grid, the integration\n", + "algorithm and the polynomial degree of the spatial DG discretization. So, the optimal number\n", + "for an example is mostly determined experimentally." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "You can add this CFL-based step size control to your simulation like any other callback.\n", + "````julia\n", + "callbacks = CallbackSet(stepsize_callback)\n", + "alg = CarpenterKennedy2N54(williamson_condition=false)\n", + "solve(ode, alg;\n", + " dt=1.0 # solve needs some value here but it will be overwritten by the stepsize_callback\n", + " callback=callbacks)\n", + "````" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "You can find simple examples with a CFL-based step size control for instance in the elixirs\n", + "[`elixir_advection_basic.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_advection_basic.jl)\n", + "or [`elixir_euler_source_terms.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_dgsem/elixir_euler_source_terms.jl)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"OrdinaryDiffEq\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/notebooks/upwind_fdsbp.ipynb b/v0.8.7/tutorials/notebooks/upwind_fdsbp.ipynb new file mode 100644 index 0000000000..e25a33ed26 --- /dev/null +++ b/v0.8.7/tutorials/notebooks/upwind_fdsbp.ipynb @@ -0,0 +1,219 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# 10: Upwind FD SBP schemes" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "**Note:** To improve responsiveness via caching, the notebooks are updated only once a week. They are only\n", + "available for the latest stable release of Trixi.jl at the time of caching." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "General tensor product SBP methods are supported via the `DGMulti` solver\n", + "in a reasonably complete way, see the previous tutorial.\n", + "Nevertheless, there is also experimental support for SBP methods with\n", + "other solver and mesh types." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The first step is to set up an SBP operator. A classical (central) SBP\n", + "operator can be created as follows." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Trixi\n", + "D_SBP = derivative_operator(SummationByPartsOperators.MattssonNordström2004(),\n", + " derivative_order=1, accuracy_order=2,\n", + " xmin=0.0, xmax=1.0, N=11)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Instead of prefixing the source of coefficients `MattssonNordström2004()`,\n", + "you can also load the package SummationByPartsOperators.jl. Either way,\n", + "this yields an object representing the operator efficiently. If you want to\n", + "compare it to coefficients presented in the literature, you can convert it\n", + "to a matrix." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Matrix(D_SBP)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Upwind SBP operators are a concept introduced in 2017 by Ken Mattsson. You can\n", + "create them as follows." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "D_upw = upwind_operators(SummationByPartsOperators.Mattsson2017,\n", + " derivative_order=1, accuracy_order=2,\n", + " xmin=0.0, xmax=1.0, N=11)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Upwind operators are derivative operators biased towards one direction.\n", + "The \"minus\" variants has a bias towards the left side, i.e., it uses values\n", + "from more nodes to the left than from the right to compute the discrete\n", + "derivative approximation at a given node (in the interior of the domain).\n", + "In matrix form, this means more non-zero entries are left from the diagonal." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Matrix(D_upw.minus)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "Analogously, the \"plus\" variant has a bias towards the right side." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Matrix(D_upw.plus)" + ], + "metadata": {}, + "execution_count": null + }, + { + "cell_type": "markdown", + "source": [ + "For more information on upwind SBP operators, please refer to the documentation\n", + "of [SummationByPartsOperators.jl](https://github.com/ranocha/SummationByPartsOperators.jl)\n", + "and references cited there." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The basic idea of upwind SBP schemes is to apply a flux vector splitting and\n", + "use appropriate upwind operators for both parts of the flux. In 1D, this means\n", + "to split the flux\n", + "$$\n", + "f(u) = f^-(u) + f^+(u)\n", + "$$\n", + "such that $f^-(u)$ is associated with left-going waves and $f^+(u)$ with\n", + "right-going waves. Then, we apply upwind SBP operators $D^-, D^+$ with an\n", + "appropriate upwind bias, resulting in\n", + "$$\n", + "\\partial_x f(u) \\approx D^+ f^-(u) + D^- f^+(u)\n", + "$$\n", + "Note that the established notations of upwind operators $D^\\pm$ and flux\n", + "splittings $f^\\pm$ clash. The right-going waves from $f^+$ need an operator\n", + "biased towards their upwind side, i.e., the left side. This upwind bias is\n", + "provided by the operator $D^-$." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Many classical flux vector splittings have been developed for finite volume\n", + "methods and are described in the book \"Riemann Solvers and Numerical Methods\n", + "for Fluid Dynamics: A Practical Introduction\" of Eleuterio F. Toro (2009),\n", + "[DOI: 10.1007/b79761](https://doi.org/10.1007/b79761). One such a well-known\n", + "splitting provided by Trixi.jl is `splitting_steger_warming`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Trixi.jl comes with several example setups using upwind SBP methods with\n", + "flux vector splitting, e.g.,\n", + "- [`elixir_euler_vortex.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_2d_fdsbp/elixir_euler_vortex.jl)\n", + "- [`elixir_euler_taylor_green_vortex.jl`](https://github.com/trixi-framework/Trixi.jl/blob/main/examples/tree_3d_fdsbp/elixir_euler_taylor_green_vortex.jl)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Package versions" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "These results were obtained using the following versions." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using InteractiveUtils\n", + "versioninfo()\n", + "\n", + "using Pkg\n", + "Pkg.status([\"Trixi\", \"SummationByPartsOperators\"],\n", + " mode=PKGMODE_MANIFEST)" + ], + "metadata": {}, + "execution_count": null + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.4" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.8.7/tutorials/out/ice_cream_curved_sides.control b/v0.8.7/tutorials/out/ice_cream_curved_sides.control new file mode 100644 index 0000000000..2ba8e1dc5b --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_curved_sides.control @@ -0,0 +1,65 @@ +\begin{CONTROL_INPUT} + \begin{RUN_PARAMETERS} + mesh file name = ice_cream_curved_sides.mesh + plot file name = ice_cream_curved_sides.tec + stats file name = none + mesh file format = ISM-v2 + polynomial order = 4 + plot file format = skeleton + \end{RUN_PARAMETERS} + + \begin{BACKGROUND_GRID} + background grid size = [1.0, 1.0, 0.0] + \end{BACKGROUND_GRID} + + \begin{SPRING_SMOOTHER} + smoothing = ON + smoothing type = LinearAndCrossBarSpring + number of iterations = 25 + \end{SPRING_SMOOTHER} + +\end{CONTROL_INPUT} + +\begin{MODEL} + + \begin{OUTER_BOUNDARY} + \begin{PARAMETRIC_EQUATION_CURVE} + name = OuterCircle + xEqn = x(t) = 8.0*sin(2.0*pi*t) + yEqn = y(t) = 8.0*cos(2.0*pi*t) + zEqn = z(t) = 0.0 + \end{PARAMETRIC_EQUATION_CURVE} + + \end{OUTER_BOUNDARY} + + \begin{INNER_BOUNDARIES} + + \begin{CHAIN} + name = IceCreamCone + \begin{END_POINTS_LINE} + name = LeftSlant + xStart = [-2.0, 1.0, 0.0] + xEnd = [ 0.0, -3.0, 0.0] + \end{END_POINTS_LINE} + + \begin{END_POINTS_LINE} + name = RightSlant + xStart = [ 0.0, -3.0, 0.0] + xEnd = [ 2.0, 1.0, 0.0] + \end{END_POINTS_LINE} + + \begin{CIRCULAR_ARC} + name = IceCream + units = degrees + center = [ 0.0, 1.0, 0.0] + radius = 2.0 + start angle = 0.0 + end angle = 180.0 + \end{CIRCULAR_ARC} + \end{CHAIN} + + \end{INNER_BOUNDARIES} + +\end{MODEL} +\end{FILE} + diff --git a/v0.8.7/tutorials/out/ice_cream_curved_sides.mesh b/v0.8.7/tutorials/out/ice_cream_curved_sides.mesh new file mode 100644 index 0000000000..5cdee3e489 --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_curved_sides.mesh @@ -0,0 +1,1778 @@ + ISM-V2 + 256 472 216 4 + -2.6873977405837541 -6.8533127622695584 0.0000000000000000 + -2.0107216208337615 -6.8653592763871760 0.0000000000000000 + -1.0410418717253931 -6.9216393501901949 0.0000000000000000 + 2.9912702576840707E-007 -6.9498898853362308 0.0000000000000000 + 1.0410424460724244 -6.9216392767031785 0.0000000000000000 + 2.0107220324553001 -6.8653591831123713 0.0000000000000000 + 2.6873981284579389 -6.8533125932786199 0.0000000000000000 + -4.7376904454980995 -5.7175213451225044 0.0000000000000000 + -4.1206720130528520 -5.8675490522077896 0.0000000000000000 + -3.1043042956445648 -6.1731350923322887 0.0000000000000000 + -2.0036785626447200 -5.9851228109660299 0.0000000000000000 + -1.0098066418509064 -5.9615428122665204 0.0000000000000000 + 1.4706799468291222E-007 -5.9621383436589896 0.0000000000000000 + 1.0098069252998503 -5.9615427750810719 0.0000000000000000 + 2.0036788470530045 -5.9851227251882229 0.0000000000000000 + 3.1043047227986076 -6.1731348858195423 0.0000000000000000 + 4.1206723395676512 -5.8675488550488604 0.0000000000000000 + 4.7376907442183054 -5.7175210852012199 0.0000000000000000 + -5.7175290854607779 -4.7380091301910010 0.0000000000000000 + -5.0338745166877699 -5.0343954062500895 0.0000000000000000 + -4.0192675410949015 -4.9833531598216387 0.0000000000000000 + -3.0341474170277136 -5.0182548701078833 0.0000000000000000 + -2.0156881211264164 -5.0103777714865521 0.0000000000000000 + -1.0040300753799325 -4.9870767872107384 0.0000000000000000 + 6.0815912483782476E-008 -4.9814748373723354 0.0000000000000000 + 1.0040302008008126 -4.9870767661818354 0.0000000000000000 + 2.0156882686372239 -5.0103777190234284 0.0000000000000000 + 3.0341475955502211 -5.0182547800320005 0.0000000000000000 + 4.0192677419725520 -4.9833530285321146 0.0000000000000000 + 5.0338748213315210 -5.0343951447304720 0.0000000000000000 + 5.7175292975176388 -4.7380089561448235 0.0000000000000000 + -5.8675188863064056 -4.1212636296863909 0.0000000000000000 + -4.9817761240538099 -4.0207066396640707 0.0000000000000000 + -4.0043466716132494 -4.0091310423573763 0.0000000000000000 + -2.9990315694177996 -4.0029589564990600 0.0000000000000000 + -1.9980410613753681 -4.0034989440708078 0.0000000000000000 + -1.0025886914582574 -4.0005457543668728 0.0000000000000000 + 2.0716010322157786E-008 -3.9975159229364250 0.0000000000000000 + 1.0025887371619329 -4.0005457439384919 0.0000000000000000 + 1.9980411183580911 -4.0034989210294167 0.0000000000000000 + 2.9990316405720265 -4.0029589207724925 0.0000000000000000 + 4.0043467561697534 -4.0091310005645440 0.0000000000000000 + 4.9817761918620427 -4.0207066409172585 0.0000000000000000 + 5.8675188518455164 -4.1212637904706897 0.0000000000000000 + -6.8541002111688183 -2.6879947245913107 0.0000000000000000 + -6.1729085409881828 -3.1048888913844155 0.0000000000000000 + -5.0136659075640297 -3.0350713738960646 0.0000000000000000 + -3.9875424262402634 -3.0037083370185043 0.0000000000000000 + -2.9583450770060664 -2.9862077152150777 0.0000000000000000 + -1.9564448711240272 -3.0074316257274023 0.0000000000000000 + -1.0288837123639378 -3.0335503938670736 0.0000000000000000 + 1.0288837261293409 -3.0335503875679914 0.0000000000000000 + 1.9564448907221292 -3.0074316143886093 0.0000000000000000 + 2.9583450995996925 -2.9862077071259527 0.0000000000000000 + 3.9875424417605054 -3.0037083567292124 0.0000000000000000 + 5.0136658835814423 -3.0350714872829925 0.0000000000000000 + 6.1729083819393678 -3.1048892701218342 0.0000000000000000 + 6.8541000555287406 -2.6879951006708396 0.0000000000000000 + -6.8662753709801922 -2.0111701987867616 0.0000000000000000 + -5.9840270273315026 -2.0036316982582778 0.0000000000000000 + -4.9988021360598456 -2.0128444316642962 0.0000000000000000 + -3.9673460790320734 -1.9910456416213265 0.0000000000000000 + -2.9250676751279636 -1.9602609213766236 0.0000000000000000 + -1.7488220331260820 -1.8941799125227698 0.0000000000000000 + -1.0549997787868850 -2.3236466700725056 0.0000000000000000 + 1.0549997837346989 -2.3236466644045155 0.0000000000000000 + 1.7488220456724668 -1.8941798935970877 0.0000000000000000 + 2.9250676820651060 -1.9602609194579510 0.0000000000000000 + 3.9673460732862944 -1.9910456785028996 0.0000000000000000 + 4.9988021003931316 -2.0128445626745215 0.0000000000000000 + 5.9840269527385770 -2.0036319863591987 0.0000000000000000 + 6.8662752831181848 -2.0111706214718250 0.0000000000000000 + -6.9224179711968894 -1.0409114847469898 0.0000000000000000 + -5.9580972668346384 -1.0079369394830269 0.0000000000000000 + -4.9644031999205085 -0.99567599301028353 0.0000000000000000 + -3.9291101003161621 -0.97695020835669544 0.0000000000000000 + -2.9054997225222792 -0.96230280748999231 0.0000000000000000 + -1.9926400784257630 -0.87289673502189002 0.0000000000000000 + 1.9926400966711493 -0.87289669885085341 0.0000000000000000 + 2.9054997267781739 -0.96230280151691017 0.0000000000000000 + 3.9291100927795046 -0.97695023859068741 0.0000000000000000 + 4.9644031747190178 -0.99567610299695042 0.0000000000000000 + 5.9580972159582188 -1.0079372294112183 0.0000000000000000 + 6.9224178848348696 -1.0409122106557087 0.0000000000000000 + -6.9501005397333646 9.2742624259376633E-004 0.0000000000000000 + -5.9557814357875589 3.5672791828285848E-003 0.0000000000000000 + -4.9483036165862142 1.0995072712916637E-002 0.0000000000000000 + -3.8953761385874000 2.9859225313277699E-002 0.0000000000000000 + -2.7044268180022062 9.0239571225917664E-002 0.0000000000000000 + -2.0577134077941768 -0.24596023237843018 0.0000000000000000 + 2.0577134210781893 -0.24596020432330881 0.0000000000000000 + 2.7044268189529750 9.0239580439220993E-002 0.0000000000000000 + 3.8953761307951136 2.9859213141896310E-002 0.0000000000000000 + 4.9483035951629128 1.0995006083563994E-002 0.0000000000000000 + 5.9557813901342689 3.5670820551844027E-003 0.0000000000000000 + 6.9501004563400075 9.2689433946285945E-004 0.0000000000000000 + -6.9211366160086696 1.0424222176432969 0.0000000000000000 + -5.9532838484776942 1.0137526163989738 0.0000000000000000 + -4.9500311685113738 1.0133010960715971 0.0000000000000000 + -3.8931011037157370 1.0206864672017701 0.0000000000000000 + -2.8597405927114097 1.0355541279811451 0.0000000000000000 + 2.8597405855121849 1.0355541561971500 0.0000000000000000 + 3.8931010938629025 1.0206864792386088 0.0000000000000000 + 4.9500311437661138 1.0133010952219772 0.0000000000000000 + 5.9532837990717420 1.0137526003884889 0.0000000000000000 + 6.9211365315572104 1.0424222862574206 0.0000000000000000 + -6.8644255432723220 2.0119396442671040 0.0000000000000000 + -5.9770878564770857 2.0066264662415398 0.0000000000000000 + -4.9783437062948490 2.0217143918982812 0.0000000000000000 + -3.9140404518912146 2.0099176101976779 0.0000000000000000 + -2.7410761635755314 1.9789206013273941 0.0000000000000000 + -2.1286743374522938 2.2972195370402191 0.0000000000000000 + 2.1286743610257428 2.2972195426678863 0.0000000000000000 + 2.7410761638388315 1.9789206359776161 0.0000000000000000 + 3.9140404460755791 2.0099176374807124 0.0000000000000000 + 4.9783436737400066 2.0217144567818068 0.0000000000000000 + 5.9770877867144092 2.0066266051878681 0.0000000000000000 + 6.8644254594391168 2.0119399050256175 0.0000000000000000 + -6.8525413060636966 2.6881963732921865 0.0000000000000000 + -6.1678363756747823 3.1055140586749621 0.0000000000000000 + -4.9973810792864457 3.0371864629703023 0.0000000000000000 + -3.9532479064607431 3.0086876509391756 0.0000000000000000 + -2.9421500723748752 3.0044506681060703 0.0000000000000000 + -1.9325861810773708 2.9330503835958242 0.0000000000000000 + -1.2961124323034472 3.1292858466381226 0.0000000000000000 + 1.2961125095535806 3.1292858073071472 0.0000000000000000 + 1.9325862367186470 2.9330503517007265 0.0000000000000000 + 2.9421501048823253 3.0044506615488382 0.0000000000000000 + 3.9532479276365025 3.0086876615716163 0.0000000000000000 + 4.9973810641359471 3.0371865415826074 0.0000000000000000 + 6.1678362306961185 3.1055143771001839 0.0000000000000000 + 6.8525411601091664 2.6881966863964721 0.0000000000000000 + -5.8641463558607985 4.1208556574546105 0.0000000000000000 + -4.9733093718925314 4.0196757173264421 0.0000000000000000 + -3.9922265881412802 4.0059453056237606 0.0000000000000000 + -2.9890091422252363 3.9843170145084694 0.0000000000000000 + -2.0054941764375291 3.9431793687522627 0.0000000000000000 + -0.97208389168591847 3.7420513075922179 0.0000000000000000 + 4.9676272106708220E-008 3.8718978722738666 0.0000000000000000 + 0.97208398546357100 3.7420512824509329 0.0000000000000000 + 2.0054942543469472 3.9431793364082628 0.0000000000000000 + 2.9890092219353601 3.9843169730044226 0.0000000000000000 + 3.9922266832879605 4.0059452501162065 0.0000000000000000 + 4.9733094595143239 4.0196756893634520 0.0000000000000000 + 5.8641463429630729 4.1208557832656991 0.0000000000000000 + -5.7158908831846356 4.7374654742093689 0.0000000000000000 + -5.0310753814344409 5.0329859200420142 0.0000000000000000 + -4.0146693983288904 4.9778067867170375 0.0000000000000000 + -3.0301613062086163 5.0005146435834220 0.0000000000000000 + -2.0111150485345335 4.9601592448796588 0.0000000000000000 + -0.99816482806907292 4.9040223934159526 0.0000000000000000 + 6.5559167275215029E-008 4.8889229740908711 0.0000000000000000 + 0.99816495902914193 4.9040223703928012 0.0000000000000000 + 2.0111151922869741 4.9601591923650652 0.0000000000000000 + 3.0301614770132304 5.0005145532717288 0.0000000000000000 + 4.0146696060123634 4.9778066411423163 0.0000000000000000 + 5.0310757370402959 5.0329856029402960 0.0000000000000000 + 5.7158911418430645 4.7374652500277525 0.0000000000000000 + -4.7366408724331448 5.7163969255377962 0.0000000000000000 + -4.1192062592906806 5.8644052326761127 0.0000000000000000 + -3.1027380900121511 6.1648179887777212 0.0000000000000000 + -2.0015559213129070 5.9647195940348077 0.0000000000000000 + -1.0080842121091849 5.9307120578964962 0.0000000000000000 + 1.2809144579091231E-007 5.9271981412979953 0.0000000000000000 + 1.0080844592290032 5.9307120244791536 0.0000000000000000 + 2.0015561708518548 5.9647195166171958 0.0000000000000000 + 3.1027384683617534 6.1648178022211253 0.0000000000000000 + 4.1192065691366757 5.8644050357600435 0.0000000000000000 + 4.7366412086031051 5.7163966234799082 0.0000000000000000 + -2.6868851371343672 6.8498717712581927 0.0000000000000000 + -2.0100960238839289 6.8591082624958490 0.0000000000000000 + -1.0405857107919183 6.9126053965829257 0.0000000000000000 + 2.5020681072890381E-007 6.9397443383701223 0.0000000000000000 + 1.0405861922485977 6.9126053343110048 0.0000000000000000 + 2.0100963728176224 6.8591081816647161 0.0000000000000000 + 2.6868854733549496 6.8498716232438612 0.0000000000000000 + -3.6705104009983383 -7.1082595194719094 0.0000000000000000 + -3.0442865551243687 -7.3981294507658495 0.0000000000000000 + -2.1863978152204240 -7.6954314104928097 0.0000000000000000 + -1.1313695802431920 -7.9195961306685545 0.0000000000000000 + 3.6410209097182056E-009 -8.0000000000000000 0.0000000000000000 + 1.1313715929171260 -7.9195958431437754 0.0000000000000000 + 2.1863978152204160 -7.6954314104928123 0.0000000000000000 + 3.0442865551243607 -7.3981294507658522 0.0000000000000000 + 3.6705121720218252 -7.1082586049636394 0.0000000000000000 + 4.4376011313588206 -6.6564026469980702 0.0000000000000000 + 5.1002019105058052 -6.1634357684714240 0.0000000000000000 + 5.6568541807137214 -5.6568543182710380 0.0000000000000000 + 6.1634357684714249 -5.1002019105058043 0.0000000000000000 + 6.6564026469980728 -4.4376011313588162 0.0000000000000000 + 7.1082586387364719 -3.6705121066178656 0.0000000000000000 + 7.3981294507658539 -3.0442865551243559 0.0000000000000000 + 7.6954314104928132 -2.1863978152204129 0.0000000000000000 + 7.9195958648410292 -1.1313714410364422 0.0000000000000000 + 7.9999999999999973 -1.9089446951922548E-007 0.0000000000000000 + 7.9195958696254367 1.1313714075456063 0.0000000000000000 + 7.6954314104928123 2.1863978152204151 0.0000000000000000 + 7.3981294507658530 3.0442865551243603 0.0000000000000000 + 7.1082586908781771 3.6705120056410205 0.0000000000000000 + 6.6564026469980719 4.4376011313588171 0.0000000000000000 + 6.1634357684714232 5.1002019105058070 0.0000000000000000 + 5.6568544506792646 5.6568540483054894 0.0000000000000000 + 5.1002019105058061 6.1634357684714240 0.0000000000000000 + 4.4376011313588162 6.6564026469980728 0.0000000000000000 + 3.6705119402370614 7.1082587246510069 0.0000000000000000 + 3.0442865551243585 7.3981294507658530 0.0000000000000000 + 2.1863978152204191 7.6954314104928114 0.0000000000000000 + 1.1313712556649234 7.9195958913226860 0.0000000000000000 + 0.0000000000000000 8.0000000000000000 0.0000000000000000 + -1.1313695802431916 7.9195961306685545 0.0000000000000000 + -2.1863978152204133 7.6954314104928132 0.0000000000000000 + -3.0442865551243616 7.3981294507658522 0.0000000000000000 + -3.6705104009983285 7.1082595194719147 0.0000000000000000 + -4.4376011313588100 6.6564026469980773 0.0000000000000000 + -5.1002019105058114 6.1634357684714187 0.0000000000000000 + -5.6568527973323857 5.6568557016520025 0.0000000000000000 + -6.1634357684714214 5.1002019105058087 0.0000000000000000 + -6.6564026469980755 4.4376011313588126 0.0000000000000000 + -7.1082595194719094 3.6705104009983378 0.0000000000000000 + -7.3981294507658477 3.0442865551243714 0.0000000000000000 + -7.6954314104928097 2.1863978152204235 0.0000000000000000 + -7.9195961306685545 1.1313695802431951 0.0000000000000000 + -7.9999999999997362 2.0536640888705361E-006 0.0000000000000000 + -7.9195961306685545 -1.1313695802431909 0.0000000000000000 + -7.6954314104928114 -2.1863978152204195 0.0000000000000000 + -7.3981294507658522 -3.0442865551243612 0.0000000000000000 + -7.1082595194719147 -3.6705104009983280 0.0000000000000000 + -6.6564026469980782 -4.4376011313588091 0.0000000000000000 + -6.1634357684714196 -5.1002019105058105 0.0000000000000000 + -5.6568527973323830 -5.6568557016520042 0.0000000000000000 + -5.1002019105058114 -6.1634357684714187 0.0000000000000000 + -4.4376011313588135 -6.6564026469980755 0.0000000000000000 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + 0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 0.84062499397195267 -1.3187500120560947 0.0000000000000000 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + 1.5593750060280469 0.11875001205609381 0.0000000000000000 + 1.8406249939719526 0.68124998794390512 0.0000000000000000 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + 1.9234528539428934 1.5480229180052039 0.0000000000000000 + 1.7577069153495042 1.9541836299856183 0.0000000000000000 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + 0.95418362998561834 2.7577069153495040 0.0000000000000000 + 0.54802294711610822 2.9234528456487245 0.0000000000000000 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + -0.54802270862631064 2.9234529135983243 0.0000000000000000 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + -1.7577069153495022 1.9541836299856215 0.0000000000000000 + -1.9234529135983240 1.5480227086263110 0.0000000000000000 + -2.0000000000000000 1.0000000000000000 0.0000000000000000 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + -1.5593750060280471 0.11875001205609437 0.0000000000000000 + -1.2000000031251037 -0.59999999374979263 0.0000000000000000 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 1 2 1 136 1 4 + 2 11 1 2 2 4 + 10 11 1 9 3 1 + 1 10 1 135 4 -4 + 2 3 2 137 1 4 + 3 12 2 3 2 4 + 11 12 2 10 3 1 + 3 4 3 138 1 4 + 4 13 3 4 2 4 + 12 13 3 11 3 1 + 4 5 4 139 1 4 + 5 14 4 5 2 4 + 13 14 4 12 3 1 + 5 6 5 140 1 4 + 6 15 5 6 2 4 + 14 15 5 13 3 1 + 6 7 6 141 1 4 + 7 16 6 142 2 4 + 15 16 6 14 3 1 + 8 9 7 189 1 4 + 9 21 7 8 2 4 + 20 21 7 18 3 1 + 8 20 7 188 4 -4 + 9 10 8 190 1 4 + 10 22 8 9 2 4 + 21 22 8 19 3 1 + 11 23 9 10 2 4 + 22 23 9 20 3 1 + 12 24 10 11 2 4 + 23 24 10 21 3 1 + 13 25 11 12 2 4 + 24 25 11 22 3 1 + 14 26 12 13 2 4 + 25 26 12 23 3 1 + 15 27 13 14 2 4 + 26 27 13 24 3 1 + 16 28 14 15 2 4 + 27 28 14 25 3 1 + 16 17 15 143 1 4 + 17 29 15 16 2 4 + 28 29 15 26 3 1 + 17 18 16 144 1 4 + 18 30 16 145 2 4 + 29 30 16 27 3 1 + 19 20 17 187 1 4 + 20 33 17 18 2 4 + 32 33 17 29 3 1 + 19 32 17 186 4 -4 + 21 34 18 19 2 4 + 33 34 18 30 3 1 + 22 35 19 20 2 4 + 34 35 19 31 3 1 + 23 36 20 21 2 4 + 35 36 20 32 3 1 + 24 37 21 22 2 4 + 36 37 21 33 3 1 + 25 38 22 23 2 4 + 37 38 22 191 3 2 + 26 39 23 24 2 4 + 38 39 23 192 3 2 + 27 40 24 25 2 4 + 39 40 24 34 3 1 + 28 41 25 26 2 4 + 40 41 25 35 3 1 + 29 42 26 27 2 4 + 41 42 26 36 3 1 + 30 43 27 28 2 4 + 42 43 27 37 3 1 + 30 31 28 146 1 4 + 31 44 28 147 2 4 + 43 44 28 38 3 1 + 33 47 29 30 2 4 + 46 47 29 40 3 1 + 32 46 29 185 4 -4 + 34 48 30 31 2 4 + 47 48 30 41 3 1 + 35 49 31 32 2 4 + 48 49 31 42 3 1 + 36 50 32 33 2 4 + 49 50 32 43 3 1 + 37 51 33 191 2 -1 + 50 51 33 44 3 1 + 40 53 34 35 2 4 + 52 53 34 45 3 1 + 39 52 34 192 4 -3 + 41 54 35 36 2 4 + 53 54 35 46 3 1 + 42 55 36 37 2 4 + 54 55 36 47 3 1 + 43 56 37 38 2 4 + 55 56 37 48 3 1 + 44 57 38 148 2 4 + 56 57 38 49 3 1 + 45 46 39 184 1 4 + 46 60 39 40 2 4 + 59 60 39 51 3 1 + 45 59 39 183 4 -4 + 47 61 40 41 2 4 + 60 61 40 52 3 1 + 48 62 41 42 2 4 + 61 62 41 53 3 1 + 49 63 42 43 2 4 + 62 63 42 54 3 1 + 50 64 43 44 2 4 + 63 64 43 55 3 1 + 51 65 44 216 2 -1 + 64 65 44 215 3 1 + 53 67 45 46 2 4 + 66 67 45 194 3 1 + 52 66 45 193 4 1 + 54 68 46 47 2 4 + 67 68 46 56 3 1 + 55 69 47 48 2 4 + 68 69 47 57 3 1 + 56 70 48 49 2 4 + 69 70 48 58 3 1 + 57 71 49 50 2 4 + 70 71 49 59 3 1 + 57 58 50 149 1 4 + 58 72 50 150 2 4 + 71 72 50 60 3 1 + 60 74 51 52 2 4 + 73 74 51 61 3 1 + 59 73 51 182 4 -4 + 61 75 52 53 2 4 + 74 75 52 62 3 1 + 62 76 53 54 2 4 + 75 76 53 63 3 1 + 63 77 54 55 2 4 + 76 77 54 64 3 1 + 64 78 55 214 2 -1 + 77 78 55 65 3 1 + 68 80 56 57 2 4 + 79 80 56 66 3 1 + 67 79 56 195 4 1 + 69 81 57 58 2 4 + 80 81 57 67 3 1 + 70 82 58 59 2 4 + 81 82 58 68 3 1 + 71 83 59 60 2 4 + 82 83 59 69 3 1 + 72 84 60 151 2 4 + 83 84 60 70 3 1 + 74 86 61 62 2 4 + 85 86 61 71 3 1 + 73 85 61 181 4 -4 + 75 87 62 63 2 4 + 86 87 62 72 3 1 + 76 88 63 64 2 4 + 87 88 63 73 3 1 + 77 89 64 65 2 4 + 88 89 64 74 3 1 + 78 90 65 213 2 -1 + 89 90 65 212 3 1 + 80 92 66 67 2 4 + 91 92 66 197 3 1 + 79 91 66 196 4 1 + 81 93 67 68 2 4 + 92 93 67 75 3 1 + 82 94 68 69 2 4 + 93 94 68 76 3 1 + 83 95 69 70 2 4 + 94 95 69 77 3 1 + 84 96 70 152 2 4 + 95 96 70 78 3 1 + 86 98 71 72 2 4 + 97 98 71 79 3 1 + 85 97 71 180 4 -4 + 87 99 72 73 2 4 + 98 99 72 80 3 1 + 88 100 73 74 2 4 + 99 100 73 81 3 1 + 89 101 74 211 2 -1 + 100 101 74 82 3 1 + 93 103 75 76 2 4 + 102 103 75 83 3 1 + 92 102 75 198 4 1 + 94 104 76 77 2 4 + 103 104 76 84 3 1 + 95 105 77 78 2 4 + 104 105 77 85 3 1 + 96 106 78 153 2 4 + 105 106 78 86 3 1 + 98 108 79 80 2 4 + 107 108 79 87 3 1 + 97 107 79 179 4 -4 + 99 109 80 81 2 4 + 108 109 80 88 3 1 + 100 110 81 82 2 4 + 109 110 81 89 3 1 + 101 111 82 210 2 -1 + 110 111 82 90 3 1 + 103 115 83 84 2 4 + 114 115 83 93 3 1 + 102 114 83 199 4 1 + 104 116 84 85 2 4 + 115 116 84 94 3 1 + 105 117 85 86 2 4 + 116 117 85 95 3 1 + 106 118 86 154 2 4 + 117 118 86 96 3 1 + 108 120 87 88 2 4 + 119 120 87 177 3 -4 + 107 119 87 178 4 -4 + 109 121 88 89 2 4 + 120 121 88 97 3 1 + 110 122 89 90 2 4 + 121 122 89 98 3 1 + 111 123 90 91 2 4 + 122 123 90 99 3 1 + 111 112 91 209 1 -1 + 112 124 91 208 2 -1 + 123 124 91 100 3 1 + 113 114 92 200 1 -1 + 114 128 92 93 2 4 + 127 128 92 103 3 1 + 113 127 92 201 4 1 + 115 129 93 94 2 4 + 128 129 93 104 3 1 + 116 130 94 95 2 4 + 129 130 94 105 3 1 + 117 131 95 96 2 4 + 130 131 95 106 3 1 + 118 132 96 155 2 4 + 131 132 96 156 3 -4 + 121 134 97 98 2 4 + 133 134 97 107 3 1 + 120 133 97 176 4 -4 + 122 135 98 99 2 4 + 134 135 98 108 3 1 + 123 136 99 100 2 4 + 135 136 99 109 3 1 + 124 137 100 101 2 4 + 136 137 100 110 3 1 + 124 125 101 207 1 -1 + 125 138 101 206 2 -1 + 137 138 101 111 3 1 + 126 127 102 202 1 -1 + 127 141 102 103 2 4 + 140 141 102 114 3 1 + 126 140 102 203 4 1 + 128 142 103 104 2 4 + 141 142 103 115 3 1 + 129 143 104 105 2 4 + 142 143 104 116 3 1 + 130 144 105 106 2 4 + 143 144 105 117 3 1 + 131 145 106 157 2 4 + 144 145 106 118 3 1 + 134 147 107 108 2 4 + 146 147 107 174 3 -4 + 133 146 107 175 4 -4 + 135 148 108 109 2 4 + 147 148 108 119 3 1 + 136 149 109 110 2 4 + 148 149 109 120 3 1 + 137 150 110 111 2 4 + 149 150 110 121 3 1 + 138 151 111 112 2 4 + 150 151 111 122 3 1 + 138 139 112 205 1 -1 + 139 152 112 113 2 4 + 151 152 112 123 3 1 + 139 140 113 204 1 -1 + 140 153 113 114 2 4 + 152 153 113 124 3 1 + 141 154 114 115 2 4 + 153 154 114 125 3 1 + 142 155 115 116 2 4 + 154 155 115 126 3 1 + 143 156 116 117 2 4 + 155 156 116 127 3 1 + 144 157 117 118 2 4 + 156 157 117 128 3 1 + 145 158 118 158 2 4 + 157 158 118 159 3 -4 + 148 160 119 120 2 4 + 159 160 119 172 3 -4 + 147 159 119 173 4 -4 + 149 161 120 121 2 4 + 160 161 120 171 3 -4 + 150 162 121 122 2 4 + 161 162 121 129 3 1 + 151 163 122 123 2 4 + 162 163 122 130 3 1 + 152 164 123 124 2 4 + 163 164 123 131 3 1 + 153 165 124 125 2 4 + 164 165 124 132 3 1 + 154 166 125 126 2 4 + 165 166 125 133 3 1 + 155 167 126 127 2 4 + 166 167 126 134 3 1 + 156 168 127 128 2 4 + 167 168 127 162 3 -4 + 157 169 128 160 2 4 + 168 169 128 161 3 -4 + 162 171 129 130 2 4 + 170 171 129 169 3 -4 + 161 170 129 170 4 -4 + 163 172 130 131 2 4 + 171 172 130 168 3 -4 + 164 173 131 132 2 4 + 172 173 131 167 3 -4 + 165 174 132 133 2 4 + 173 174 132 166 3 -4 + 166 175 133 134 2 4 + 174 175 133 165 3 -4 + 167 176 134 163 2 4 + 175 176 134 164 3 -4 + 10 177 135 190 1 3 + 177 178 135 0 2 0 + 1 178 135 136 3 1 + 178 179 136 0 2 0 + 2 179 136 137 3 1 + 179 180 137 0 2 0 + 3 180 137 138 3 1 + 180 181 138 0 2 0 + 4 181 138 139 3 1 + 181 182 139 0 2 0 + 5 182 139 140 3 1 + 182 183 140 0 2 0 + 6 183 140 141 3 1 + 183 184 141 0 2 0 + 7 184 141 142 3 1 + 184 185 142 0 2 0 + 16 185 142 143 3 1 + 185 186 143 0 2 0 + 17 186 143 144 3 1 + 186 187 144 0 2 0 + 18 187 144 145 3 1 + 187 188 145 0 2 0 + 30 188 145 146 3 1 + 188 189 146 0 2 0 + 31 189 146 147 3 1 + 189 190 147 0 2 0 + 44 190 147 148 3 1 + 190 191 148 0 2 0 + 57 191 148 149 3 1 + 191 192 149 0 2 0 + 58 192 149 150 3 1 + 192 193 150 0 2 0 + 72 193 150 151 3 1 + 193 194 151 0 2 0 + 84 194 151 152 3 1 + 194 195 152 0 2 0 + 96 195 152 153 3 1 + 195 196 153 0 2 0 + 106 196 153 154 3 1 + 196 197 154 0 2 0 + 118 197 154 155 3 1 + 197 198 155 0 2 0 + 132 198 155 156 3 1 + 198 199 156 0 2 0 + 131 199 156 157 3 1 + 199 200 157 0 2 0 + 145 200 157 158 3 1 + 200 201 158 0 2 0 + 158 201 158 159 3 1 + 201 202 159 0 2 0 + 157 202 159 160 3 1 + 202 203 160 0 2 0 + 169 203 160 161 3 1 + 203 204 161 0 2 0 + 168 204 161 162 3 1 + 204 205 162 0 2 0 + 167 205 162 163 3 1 + 205 206 163 0 2 0 + 176 206 163 164 3 1 + 206 207 164 0 2 0 + 175 207 164 165 3 1 + 207 208 165 0 2 0 + 174 208 165 166 3 1 + 208 209 166 0 2 0 + 173 209 166 167 3 1 + 209 210 167 0 2 0 + 172 210 167 168 3 1 + 210 211 168 0 2 0 + 171 211 168 169 3 1 + 211 212 169 0 2 0 + 170 212 169 170 3 1 + 212 213 170 0 2 0 + 161 213 170 171 3 1 + 213 214 171 0 2 0 + 160 214 171 172 3 1 + 214 215 172 0 2 0 + 159 215 172 173 3 1 + 215 216 173 0 2 0 + 147 216 173 174 3 1 + 216 217 174 0 2 0 + 146 217 174 175 3 1 + 217 218 175 0 2 0 + 133 218 175 176 3 1 + 218 219 176 0 2 0 + 120 219 176 177 3 1 + 219 220 177 0 2 0 + 119 220 177 178 3 1 + 220 221 178 0 2 0 + 107 221 178 179 3 1 + 221 222 179 0 2 0 + 97 222 179 180 3 1 + 222 223 180 0 2 0 + 85 223 180 181 3 1 + 223 224 181 0 2 0 + 73 224 181 182 3 1 + 224 225 182 0 2 0 + 59 225 182 183 3 1 + 225 226 183 0 2 0 + 45 226 183 184 3 1 + 226 227 184 0 2 0 + 46 227 184 185 3 1 + 227 228 185 0 2 0 + 32 228 185 186 3 1 + 228 229 186 0 2 0 + 19 229 186 187 3 1 + 229 230 187 0 2 0 + 20 230 187 188 3 1 + 230 231 188 0 2 0 + 8 231 188 189 3 1 + 231 232 189 0 2 0 + 9 232 189 190 3 1 + 232 177 190 0 2 0 + 233 38 191 192 3 1 + 51 233 191 216 4 2 + 233 52 192 193 4 -4 + 66 234 193 194 2 4 + 233 234 193 0 3 0 + 67 235 194 195 2 4 + 234 235 194 0 3 0 + 79 236 195 196 2 4 + 235 236 195 0 3 0 + 91 237 196 197 2 4 + 236 237 196 0 3 0 + 92 238 197 198 2 4 + 237 238 197 0 3 0 + 102 239 198 199 2 4 + 238 239 198 0 3 0 + 114 240 199 200 2 4 + 239 240 199 0 3 0 + 113 241 200 201 2 4 + 240 241 200 0 3 0 + 127 242 201 202 2 4 + 241 242 201 0 3 0 + 126 243 202 203 2 4 + 242 243 202 0 3 0 + 140 244 203 204 2 4 + 243 244 203 0 3 0 + 139 245 204 205 2 4 + 244 245 204 0 3 0 + 138 246 205 206 2 4 + 245 246 205 0 3 0 + 125 247 206 207 2 4 + 246 247 206 0 3 0 + 124 248 207 208 2 4 + 247 248 207 0 3 0 + 112 249 208 209 2 4 + 248 249 208 0 3 0 + 111 250 209 210 2 4 + 249 250 209 0 3 0 + 101 251 210 211 2 4 + 250 251 210 0 3 0 + 89 252 211 212 2 4 + 251 252 211 0 3 0 + 90 253 212 213 2 4 + 252 253 212 0 3 0 + 78 254 213 214 2 4 + 253 254 213 0 3 0 + 64 255 214 215 2 4 + 254 255 214 0 3 0 + 65 256 215 216 2 4 + 255 256 215 0 3 0 + 256 233 216 0 3 0 + 1 2 11 10 + 0 0 0 0 + --- --- --- --- + 2 3 12 11 + 0 0 0 0 + --- --- --- --- + 3 4 13 12 + 0 0 0 0 + --- --- --- --- + 4 5 14 13 + 0 0 0 0 + --- --- --- --- + 5 6 15 14 + 0 0 0 0 + --- --- --- --- + 6 7 16 15 + 0 0 0 0 + --- --- --- --- + 8 9 21 20 + 0 0 0 0 + --- --- --- --- + 9 10 22 21 + 0 0 0 0 + --- --- --- --- + 10 11 23 22 + 0 0 0 0 + --- --- --- --- + 11 12 24 23 + 0 0 0 0 + --- --- --- --- + 12 13 25 24 + 0 0 0 0 + --- --- --- --- + 13 14 26 25 + 0 0 0 0 + --- --- --- --- + 14 15 27 26 + 0 0 0 0 + --- --- --- --- + 15 16 28 27 + 0 0 0 0 + --- --- --- --- + 16 17 29 28 + 0 0 0 0 + --- --- --- --- + 17 18 30 29 + 0 0 0 0 + --- --- --- --- + 19 20 33 32 + 0 0 0 0 + --- --- --- --- + 20 21 34 33 + 0 0 0 0 + --- --- --- --- + 21 22 35 34 + 0 0 0 0 + --- --- --- --- + 22 23 36 35 + 0 0 0 0 + --- --- --- --- + 23 24 37 36 + 0 0 0 0 + --- --- --- --- + 24 25 38 37 + 0 0 0 0 + --- --- --- --- + 25 26 39 38 + 0 0 0 0 + --- --- --- --- + 26 27 40 39 + 0 0 0 0 + --- --- --- --- + 27 28 41 40 + 0 0 0 0 + --- --- --- --- + 28 29 42 41 + 0 0 0 0 + --- --- --- --- + 29 30 43 42 + 0 0 0 0 + --- --- --- --- + 30 31 44 43 + 0 0 0 0 + --- --- --- --- + 32 33 47 46 + 0 0 0 0 + --- --- --- --- + 33 34 48 47 + 0 0 0 0 + --- --- --- --- + 34 35 49 48 + 0 0 0 0 + --- --- --- --- + 35 36 50 49 + 0 0 0 0 + --- --- --- --- + 36 37 51 50 + 0 0 0 0 + --- --- --- --- + 39 40 53 52 + 0 0 0 0 + --- --- --- --- + 40 41 54 53 + 0 0 0 0 + --- --- --- --- + 41 42 55 54 + 0 0 0 0 + --- --- --- --- + 42 43 56 55 + 0 0 0 0 + --- --- --- --- + 43 44 57 56 + 0 0 0 0 + --- --- --- --- + 45 46 60 59 + 0 0 0 0 + --- --- --- --- + 46 47 61 60 + 0 0 0 0 + --- --- --- --- + 47 48 62 61 + 0 0 0 0 + --- --- --- --- + 48 49 63 62 + 0 0 0 0 + --- --- --- --- + 49 50 64 63 + 0 0 0 0 + --- --- --- --- + 50 51 65 64 + 0 0 0 0 + --- --- --- --- + 52 53 67 66 + 0 0 0 0 + --- --- --- --- + 53 54 68 67 + 0 0 0 0 + --- --- --- --- + 54 55 69 68 + 0 0 0 0 + --- --- --- --- + 55 56 70 69 + 0 0 0 0 + --- --- --- --- + 56 57 71 70 + 0 0 0 0 + --- --- --- --- + 57 58 72 71 + 0 0 0 0 + --- --- --- --- + 59 60 74 73 + 0 0 0 0 + --- --- --- --- + 60 61 75 74 + 0 0 0 0 + --- --- --- --- + 61 62 76 75 + 0 0 0 0 + --- --- --- --- + 62 63 77 76 + 0 0 0 0 + --- --- --- --- + 63 64 78 77 + 0 0 0 0 + --- --- --- --- + 67 68 80 79 + 0 0 0 0 + --- --- --- --- + 68 69 81 80 + 0 0 0 0 + --- --- --- --- + 69 70 82 81 + 0 0 0 0 + --- --- --- --- + 70 71 83 82 + 0 0 0 0 + --- --- --- --- + 71 72 84 83 + 0 0 0 0 + --- --- --- --- + 73 74 86 85 + 0 0 0 0 + --- --- --- --- + 74 75 87 86 + 0 0 0 0 + --- --- --- --- + 75 76 88 87 + 0 0 0 0 + --- --- --- --- + 76 77 89 88 + 0 0 0 0 + --- --- --- --- + 77 78 90 89 + 0 0 0 0 + --- --- --- --- + 79 80 92 91 + 0 0 0 0 + --- --- --- --- + 80 81 93 92 + 0 0 0 0 + --- --- --- --- + 81 82 94 93 + 0 0 0 0 + --- --- --- --- + 82 83 95 94 + 0 0 0 0 + --- --- --- --- + 83 84 96 95 + 0 0 0 0 + --- --- --- --- + 85 86 98 97 + 0 0 0 0 + --- --- --- --- + 86 87 99 98 + 0 0 0 0 + --- --- --- --- + 87 88 100 99 + 0 0 0 0 + --- --- --- --- + 88 89 101 100 + 0 0 0 0 + --- --- --- --- + 92 93 103 102 + 0 0 0 0 + --- --- --- --- + 93 94 104 103 + 0 0 0 0 + --- --- --- --- + 94 95 105 104 + 0 0 0 0 + --- --- --- --- + 95 96 106 105 + 0 0 0 0 + --- --- --- --- + 97 98 108 107 + 0 0 0 0 + --- --- --- --- + 98 99 109 108 + 0 0 0 0 + --- --- --- --- + 99 100 110 109 + 0 0 0 0 + --- --- --- --- + 100 101 111 110 + 0 0 0 0 + --- --- --- --- + 102 103 115 114 + 0 0 0 0 + --- --- --- --- + 103 104 116 115 + 0 0 0 0 + --- --- --- --- + 104 105 117 116 + 0 0 0 0 + --- --- --- --- + 105 106 118 117 + 0 0 0 0 + --- --- --- --- + 107 108 120 119 + 0 0 0 0 + --- --- --- --- + 108 109 121 120 + 0 0 0 0 + --- --- --- --- + 109 110 122 121 + 0 0 0 0 + --- --- --- --- + 110 111 123 122 + 0 0 0 0 + --- --- --- --- + 111 112 124 123 + 0 0 0 0 + --- --- --- --- + 113 114 128 127 + 0 0 0 0 + --- --- --- --- + 114 115 129 128 + 0 0 0 0 + --- --- --- --- + 115 116 130 129 + 0 0 0 0 + --- --- --- --- + 116 117 131 130 + 0 0 0 0 + --- --- --- --- + 117 118 132 131 + 0 0 0 0 + --- --- --- --- + 120 121 134 133 + 0 0 0 0 + --- --- --- --- + 121 122 135 134 + 0 0 0 0 + --- --- --- --- + 122 123 136 135 + 0 0 0 0 + --- --- --- --- + 123 124 137 136 + 0 0 0 0 + --- --- --- --- + 124 125 138 137 + 0 0 0 0 + --- --- --- --- + 126 127 141 140 + 0 0 0 0 + --- --- --- --- + 127 128 142 141 + 0 0 0 0 + --- --- --- --- + 128 129 143 142 + 0 0 0 0 + --- --- --- --- + 129 130 144 143 + 0 0 0 0 + --- --- --- --- + 130 131 145 144 + 0 0 0 0 + --- --- --- --- + 133 134 147 146 + 0 0 0 0 + --- --- --- --- + 134 135 148 147 + 0 0 0 0 + --- --- --- --- + 135 136 149 148 + 0 0 0 0 + --- --- --- --- + 136 137 150 149 + 0 0 0 0 + --- --- --- --- + 137 138 151 150 + 0 0 0 0 + --- --- --- --- + 138 139 152 151 + 0 0 0 0 + --- --- --- --- + 139 140 153 152 + 0 0 0 0 + --- --- --- --- + 140 141 154 153 + 0 0 0 0 + --- --- --- --- + 141 142 155 154 + 0 0 0 0 + --- --- --- --- + 142 143 156 155 + 0 0 0 0 + --- --- --- --- + 143 144 157 156 + 0 0 0 0 + --- --- --- --- + 144 145 158 157 + 0 0 0 0 + --- --- --- --- + 147 148 160 159 + 0 0 0 0 + --- --- --- --- + 148 149 161 160 + 0 0 0 0 + --- --- --- --- + 149 150 162 161 + 0 0 0 0 + --- --- --- --- + 150 151 163 162 + 0 0 0 0 + --- --- --- --- + 151 152 164 163 + 0 0 0 0 + --- --- --- --- + 152 153 165 164 + 0 0 0 0 + --- --- --- --- + 153 154 166 165 + 0 0 0 0 + --- --- --- --- + 154 155 167 166 + 0 0 0 0 + --- --- --- --- + 155 156 168 167 + 0 0 0 0 + --- --- --- --- + 156 157 169 168 + 0 0 0 0 + --- --- --- --- + 161 162 171 170 + 0 0 0 0 + --- --- --- --- + 162 163 172 171 + 0 0 0 0 + --- --- --- --- + 163 164 173 172 + 0 0 0 0 + --- --- --- --- + 164 165 174 173 + 0 0 0 0 + --- --- --- --- + 165 166 175 174 + 0 0 0 0 + --- --- --- --- + 166 167 176 175 + 0 0 0 0 + --- --- --- --- + 10 177 178 1 + 0 1 0 0 + -3.6705104009983383 -7.1082595194719094 0.0000000000000000 + -3.5803997071952218 -7.1540714237919358 0.0000000000000000 + -3.3605253584455799 -7.2599496771840100 0.0000000000000000 + -3.1375238868024042 -7.3590722146031649 0.0000000000000000 + -3.0442865551243754 -7.3981294507658468 0.0000000000000000 + --- OuterCircle --- --- + 1 178 179 2 + 0 1 0 0 + -3.0442865551243754 -7.3981294507658468 0.0000000000000000 + -2.9208434333314410 -7.4477294283536244 0.0000000000000000 + -2.6195632955431121 -7.5589607844361328 0.0000000000000000 + -2.3140614803533142 -7.6580101504989546 0.0000000000000000 + -2.1863978152204173 -7.6954314104928114 0.0000000000000000 + --- OuterCircle --- --- + 2 179 180 3 + 0 1 0 0 + -2.1863978152204173 -7.6954314104928114 0.0000000000000000 + -2.0339247302763477 -7.7371280325176395 0.0000000000000000 + -1.6626658046773015 -7.8253142059572776 0.0000000000000000 + -1.2876240548142968 -7.8956965679706554 0.0000000000000000 + -1.1313695802431920 -7.9195961306685545 0.0000000000000000 + --- OuterCircle --- --- + 3 180 181 4 + 0 1 0 0 + -1.1313695802431920 -7.9195961306685545 0.0000000000000000 + -0.96656542320610084 -7.9413947945346735 0.0000000000000000 + -0.56711151925005809 -7.9798737160893651 0.0000000000000000 + -0.16623058505690086 -7.9982727755804657 0.0000000000000000 + 3.6410244624318844E-009 -8.0000000000000000 0.0000000000000000 + --- OuterCircle --- --- + 4 181 182 5 + 0 1 0 0 + 3.6410244624318844E-009 -8.0000000000000000 0.0000000000000000 + 0.16623088894862023 -7.9982727692645836 0.0000000000000000 + 0.56711253687833307 -7.9798736437687676 0.0000000000000000 + 0.96656714691797452 -7.9413945847375480 0.0000000000000000 + 1.1313715929171329 -7.9195958431437745 0.0000000000000000 + --- OuterCircle --- --- + 5 182 183 6 + 0 1 0 0 + 1.1313715929171329 -7.9195958431437745 0.0000000000000000 + 1.2876257675546530 -7.8956962886581001 0.0000000000000000 + 1.6626667990339425 -7.8253139946835502 0.0000000000000000 + 2.0339250182345823 -7.7371279568196014 0.0000000000000000 + 2.1863978152204191 -7.6954314104928114 0.0000000000000000 + --- OuterCircle --- --- + 6 183 184 7 + 0 1 0 0 + 2.1863978152204191 -7.6954314104928114 0.0000000000000000 + 2.3140614803533164 -7.6580101504989546 0.0000000000000000 + 2.6195632955431036 -7.5589607844361355 0.0000000000000000 + 2.9208434333314228 -7.4477294283536315 0.0000000000000000 + 3.0442865551243541 -7.3981294507658548 0.0000000000000000 + --- OuterCircle --- --- + 7 184 185 16 + 0 1 0 0 + 3.0442865551243541 -7.3981294507658548 0.0000000000000000 + 3.1375241553142388 -7.3590721001237425 0.0000000000000000 + 3.3605262628541577 -7.2599492585463343 0.0000000000000000 + 3.5804012286008309 -7.1540706623735320 0.0000000000000000 + 3.6705121720218283 -7.1082586049636376 0.0000000000000000 + --- OuterCircle --- --- + 16 185 186 17 + 0 1 0 0 + 3.6705121720218283 -7.1082586049636376 0.0000000000000000 + 3.7859245146957798 -7.0474658969749919 0.0000000000000000 + 4.0603471263922497 -6.8930095903892514 0.0000000000000000 + 4.3284784509689231 -6.7278729402016557 0.0000000000000000 + 4.4376011313588206 -6.6564026469980702 0.0000000000000000 + --- OuterCircle --- --- + 17 186 187 18 + 0 1 0 0 + 4.4376011313588206 -6.6564026469980702 0.0000000000000000 + 4.5377671295720710 -6.5885255921014112 0.0000000000000000 + 4.7752670922349045 -6.4184752237442186 0.0000000000000000 + 5.0064007762506497 -6.2398678886300862 0.0000000000000000 + 5.1002019105058052 -6.1634357684714240 0.0000000000000000 + --- OuterCircle --- --- + 18 187 188 30 + 0 1 0 0 + 5.1002019105058052 -6.1634357684714240 0.0000000000000000 + 5.1846655472125462 -6.0925563734402353 0.0000000000000000 + 5.3844888456410187 -5.9166950125190203 0.0000000000000000 + 5.5783507939965791 -5.7342830780419041 0.0000000000000000 + 5.6568541807137214 -5.6568543182710380 0.0000000000000000 + --- OuterCircle --- --- + 30 188 189 31 + 0 1 0 0 + 5.6568541807137214 -5.6568543182710380 0.0000000000000000 + 5.7342829622587921 -5.5783509130161875 0.0000000000000000 + 5.9166949470519077 -5.3844889175789401 0.0000000000000000 + 6.0925563549769590 -5.1846655689089411 0.0000000000000000 + 6.1634357684714249 -5.1002019105058043 0.0000000000000000 + --- OuterCircle --- --- + 31 189 190 44 + 0 1 0 0 + 6.1634357684714249 -5.1002019105058043 0.0000000000000000 + 6.2398678886300871 -5.0064007762506488 0.0000000000000000 + 6.4184752237442195 -4.7752670922349036 0.0000000000000000 + 6.5885255921014121 -4.5377671295720701 0.0000000000000000 + 6.6564026469980710 -4.4376011313588197 0.0000000000000000 + --- OuterCircle --- --- + 44 190 191 57 + 0 1 0 0 + 6.6564026469980710 -4.4376011313588197 0.0000000000000000 + 6.7278729460341653 -4.3284784419032931 0.0000000000000000 + 6.8930096090691286 -4.0603470946805356 0.0000000000000000 + 7.0474659267083171 -3.7859244593474495 0.0000000000000000 + 7.1082586387364701 -3.6705121066178688 0.0000000000000000 + --- OuterCircle --- --- + 57 191 192 58 + 0 1 0 0 + 7.1082586387364701 -3.6705121066178688 0.0000000000000000 + 7.1540706904927474 -3.5804011724152676 0.0000000000000000 + 7.2599492740066429 -3.3605262294543121 0.0000000000000000 + 7.3590721043514726 -3.1375241453980860 0.0000000000000000 + 7.3981294507658548 -3.0442865551243545 0.0000000000000000 + --- OuterCircle --- --- + 58 192 193 72 + 0 1 0 0 + 7.3981294507658548 -3.0442865551243545 0.0000000000000000 + 7.4477294283536315 -2.9208434333314215 0.0000000000000000 + 7.5589607844361355 -2.6195632955431023 0.0000000000000000 + 7.6580101504989546 -2.3140614803533150 0.0000000000000000 + 7.6954314104928114 -2.1863978152204178 0.0000000000000000 + --- OuterCircle --- --- + 72 193 194 84 + 0 1 0 0 + 7.6954314104928114 -2.1863978152204178 0.0000000000000000 + 7.7371279625319387 -2.0339249965046329 0.0000000000000000 + 7.8253140106267232 -1.6626667239976600 0.0000000000000000 + 7.8956963097356363 -1.2876256383075975 0.0000000000000000 + 7.9195958648410283 -1.1313714410364439 0.0000000000000000 + --- OuterCircle --- --- + 84 194 195 96 + 0 1 0 0 + 7.9195958648410283 -1.1313714410364439 0.0000000000000000 + 7.9413945972463518 -0.96656704414461170 0.0000000000000000 + 7.9798736425696513 -0.56711255375116587 0.0000000000000000 + 7.9982727664103441 -0.16623102628154870 0.0000000000000000 + 7.9999999999999973 -1.9089446951922548E-007 0.0000000000000000 + --- OuterCircle --- --- + 96 195 196 106 + 0 1 0 0 + 7.9999999999999973 -1.9089446951922548E-007 0.0000000000000000 + 7.9982727732846479 0.16623069552132208 0.0000000000000000 + 7.9798736573010984 0.56711234646407993 0.0000000000000000 + 7.9413946074905288 0.96656695997760744 0.0000000000000000 + 7.9195958696254358 1.1313714075456114 0.0000000000000000 + --- OuterCircle --- --- + 106 196 197 118 + 0 1 0 0 + 7.9195958696254358 1.1313714075456114 0.0000000000000000 + 7.8956963143833914 1.2876256098076511 0.0000000000000000 + 7.8253140141423119 1.6626667074515964 0.0000000000000000 + 7.7371279637915515 2.0339249917130173 0.0000000000000000 + 7.6954314104928114 2.1863978152204187 0.0000000000000000 + --- OuterCircle --- --- + 118 197 198 132 + 0 1 0 0 + 7.6954314104928114 2.1863978152204187 0.0000000000000000 + 7.6580101504989546 2.3140614803533159 0.0000000000000000 + 7.5589607844361355 2.6195632955431032 0.0000000000000000 + 7.4477294283536315 2.9208434333314224 0.0000000000000000 + 7.3981294507658548 3.0442865551243554 0.0000000000000000 + --- OuterCircle --- --- + 132 198 199 131 + 0 1 0 0 + 7.3981294507658548 3.0442865551243554 0.0000000000000000 + 7.3590721108786434 3.1375241300885865 0.0000000000000000 + 7.2599492978757336 3.3605261778884632 0.0000000000000000 + 7.1540707339058658 3.5804010856706525 0.0000000000000000 + 7.1082586908781789 3.6705120056410174 0.0000000000000000 + --- OuterCircle --- --- + 131 199 200 145 + 0 1 0 0 + 7.1082586908781789 3.6705120056410174 0.0000000000000000 + 7.0474659726134474 3.7859243738954413 0.0000000000000000 + 6.8930096379088956 4.0603470457209783 0.0000000000000000 + 6.7278729550389462 4.3284784279069148 0.0000000000000000 + 6.6564026469980710 4.4376011313588197 0.0000000000000000 + --- OuterCircle --- --- + 145 200 201 158 + 0 1 0 0 + 6.6564026469980710 4.4376011313588197 0.0000000000000000 + 6.5885255921014068 4.5377671295720763 0.0000000000000000 + 6.4184752237442195 4.7752670922349036 0.0000000000000000 + 6.2398678886300898 5.0064007762506453 0.0000000000000000 + 6.1634357684714249 5.1002019105058043 0.0000000000000000 + --- OuterCircle --- --- + 158 201 202 157 + 0 1 0 0 + 6.1634357684714249 5.1002019105058043 0.0000000000000000 + 6.0925563912123897 5.1846655263282955 0.0000000000000000 + 5.9166950755355483 5.3844887763958980 0.0000000000000000 + 5.7342831894909869 5.5783506794321447 0.0000000000000000 + 5.6568544506792646 5.6568540483054885 0.0000000000000000 + --- OuterCircle --- --- + 157 202 203 169 + 0 1 0 0 + 5.6568544506792646 5.6568540483054885 0.0000000000000000 + 5.5783510275806201 5.7342828508097012 0.0000000000000000 + 5.3844889868240617 5.9166948840353761 0.0000000000000000 + 5.1846655897931875 6.0925563372048082 0.0000000000000000 + 5.1002019105058034 6.1634357684714258 0.0000000000000000 + --- OuterCircle --- --- + 169 203 204 168 + 0 1 0 0 + 5.1002019105058034 6.1634357684714258 0.0000000000000000 + 5.0064007762506453 6.2398678886300907 0.0000000000000000 + 4.7752670922349036 6.4184752237442195 0.0000000000000000 + 4.5377671295720763 6.5885255921014076 0.0000000000000000 + 4.4376011313588188 6.6564026469980710 0.0000000000000000 + --- OuterCircle --- --- + 168 204 205 167 + 0 1 0 0 + 4.4376011313588188 6.6564026469980710 0.0000000000000000 + 4.3284784188412866 6.7278729608714549 0.0000000000000000 + 4.0603470140092695 6.8930096565887684 0.0000000000000000 + 3.7859243185471225 7.0474660023467655 0.0000000000000000 + 3.6705119402370658 7.1082587246510052 0.0000000000000000 + --- OuterCircle --- --- + 167 205 206 176 + 0 1 0 0 + 3.6705119402370658 7.1082587246510052 0.0000000000000000 + 3.5804010294850976 7.1540707620250759 0.0000000000000000 + 3.3605261444886256 7.2599493133360387 0.0000000000000000 + 3.1375241201724351 7.3590721151063727 0.0000000000000000 + 3.0442865551243541 7.3981294507658548 0.0000000000000000 + --- OuterCircle --- --- + 176 206 207 175 + 0 1 0 0 + 3.0442865551243541 7.3981294507658548 0.0000000000000000 + 2.9208434333314224 7.4477294283536315 0.0000000000000000 + 2.6195632955431032 7.5589607844361355 0.0000000000000000 + 2.3140614803533159 7.6580101504989546 0.0000000000000000 + 2.1863978152204182 7.6954314104928114 0.0000000000000000 + --- OuterCircle --- --- + 175 207 208 174 + 0 1 0 0 + 2.1863978152204182 7.6954314104928114 0.0000000000000000 + 2.0339249699830715 7.7371279695038888 0.0000000000000000 + 1.6626666324153139 7.8253140300854840 0.0000000000000000 + 1.2876254805605953 7.8956963354609258 0.0000000000000000 + 1.1313712556649251 7.9195958913226860 0.0000000000000000 + --- OuterCircle --- --- + 174 208 209 173 + 0 1 0 0 + 1.1313712556649251 7.9195958913226860 0.0000000000000000 + 0.96656685773355411 7.9413946199349068 0.0000000000000000 + 0.56711236515284669 7.9798736559729280 0.0000000000000000 + 0.16623083596138777 7.9982727703658352 0.0000000000000000 + 0.0000000000000000 8.0000000000000000 0.0000000000000000 + --- OuterCircle --- --- + 173 209 210 172 + 0 1 0 0 + 0.0000000000000000 8.0000000000000000 0.0000000000000000 + -0.16623058816404371 7.9982727755158889 0.0000000000000000 + -0.56711152106598395 7.9798737159603110 0.0000000000000000 + -0.96656542373539966 7.9413947944702512 0.0000000000000000 + -1.1313695802431845 7.9195961306685554 0.0000000000000000 + --- OuterCircle --- --- + 172 210 211 171 + 0 1 0 0 + -1.1313695802431845 7.9195961306685554 0.0000000000000000 + -1.2876240548142890 7.8956965679706572 0.0000000000000000 + -1.6626658046772940 7.8253142059572793 0.0000000000000000 + -2.0339247302763508 7.7371280325176395 0.0000000000000000 + -2.1863978152204200 7.6954314104928105 0.0000000000000000 + --- OuterCircle --- --- + 171 211 212 170 + 0 1 0 0 + -2.1863978152204200 7.6954314104928105 0.0000000000000000 + -2.3140614803533204 7.6580101504989528 0.0000000000000000 + -2.6195632955431045 7.5589607844361346 0.0000000000000000 + -2.9208434333314273 7.4477294283536297 0.0000000000000000 + -3.0442865551243550 7.3981294507658548 0.0000000000000000 + --- OuterCircle --- --- + 170 212 213 161 + 0 1 0 0 + -3.0442865551243550 7.3981294507658548 0.0000000000000000 + -3.1375238868023905 7.3590722146031711 0.0000000000000000 + -3.3605253584455697 7.2599496771840144 0.0000000000000000 + -3.5803997071952116 7.1540714237919403 0.0000000000000000 + -3.6705104009983285 7.1082595194719147 0.0000000000000000 + --- OuterCircle --- --- + 161 213 214 160 + 0 1 0 0 + -3.6705104009983285 7.1082595194719147 0.0000000000000000 + -3.7859230159610333 7.0474667021005866 0.0000000000000000 + -4.0603462676951780 6.8930100962071599 0.0000000000000000 + -4.3284782054877473 6.7278730981356629 0.0000000000000000 + -4.4376011313588100 6.6564026469980773 0.0000000000000000 + --- OuterCircle --- --- + 160 214 215 159 + 0 1 0 0 + -4.4376011313588100 6.6564026469980773 0.0000000000000000 + -4.5377671295720692 6.5885255921014121 0.0000000000000000 + -4.7752670922349054 6.4184752237442178 0.0000000000000000 + -5.0064007762506559 6.2398678886300809 0.0000000000000000 + -5.1002019105058114 6.1634357684714187 0.0000000000000000 + --- OuterCircle --- --- + 159 215 216 147 + 0 1 0 0 + -5.1002019105058114 6.1634357684714187 0.0000000000000000 + -5.1846653290170721 6.0925565591209976 0.0000000000000000 + -5.3844881221784417 5.9166956709061242 0.0000000000000000 + -5.5783495970446006 5.7342842424449403 0.0000000000000000 + -5.6568527973323901 5.6568557016519971 0.0000000000000000 + --- OuterCircle --- --- + 147 216 217 146 + 0 1 0 0 + -5.6568527973323901 5.6568557016519971 0.0000000000000000 + -5.7342817978554761 5.5783521099679048 0.0000000000000000 + -5.9166942886646945 5.3844896410414416 0.0000000000000000 + -6.0925561692961825 5.1846657871044126 0.0000000000000000 + -6.1634357684714214 5.1002019105058087 0.0000000000000000 + --- OuterCircle --- --- + 146 217 218 133 + 0 1 0 0 + -6.1634357684714214 5.1002019105058087 0.0000000000000000 + -6.2398678886300836 5.0064007762506533 0.0000000000000000 + -6.4184752237442160 4.7752670922349090 0.0000000000000000 + -6.5885255921014103 4.5377671295720718 0.0000000000000000 + -6.6564026469980710 4.4376011313588188 0.0000000000000000 + --- OuterCircle --- --- + 133 218 219 120 + 0 1 0 0 + -6.6564026469980710 4.4376011313588188 0.0000000000000000 + -6.7278730981356611 4.3284782054877509 0.0000000000000000 + -6.8930100962071545 4.0603462676951878 0.0000000000000000 + -7.0474667021005848 3.7859230159610364 0.0000000000000000 + -7.1082595194719094 3.6705104009983378 0.0000000000000000 + --- OuterCircle --- --- + 120 219 220 119 + 0 1 0 0 + -7.1082595194719094 3.6705104009983378 0.0000000000000000 + -7.1540714237919358 3.5803997071952214 0.0000000000000000 + -7.2599496771840100 3.3605253584455794 0.0000000000000000 + -7.3590722146031666 3.1375238868024007 0.0000000000000000 + -7.3981294507658477 3.0442865551243714 0.0000000000000000 + --- OuterCircle --- --- + 119 220 221 107 + 0 1 0 0 + -7.3981294507658477 3.0442865551243714 0.0000000000000000 + -7.4477294283536226 2.9208434333314437 0.0000000000000000 + -7.5589607844361311 2.6195632955431147 0.0000000000000000 + -7.6580101504989537 2.3140614803533173 0.0000000000000000 + -7.6954314104928114 2.1863978152204169 0.0000000000000000 + --- OuterCircle --- --- + 107 221 222 97 + 0 1 0 0 + -7.6954314104928114 2.1863978152204169 0.0000000000000000 + -7.7371280325176404 2.0339247302763472 0.0000000000000000 + -7.8253142059572784 1.6626658046772975 0.0000000000000000 + -7.8956965679706554 1.2876240548142996 0.0000000000000000 + -7.9195961306685545 1.1313695802431951 0.0000000000000000 + --- OuterCircle --- --- + 97 222 223 85 + 0 1 0 0 + -7.9195961306685545 1.1313695802431951 0.0000000000000000 + -7.9413947581331668 0.96656572228434601 0.0000000000000000 + -7.9798736431692099 0.56711254531473887 0.0000000000000000 + -7.9982727390922488 0.16623234069752618 0.0000000000000000 + -7.9999999999997362 2.0536640888705361E-006 0.0000000000000000 + --- OuterCircle --- --- + 85 223 224 73 + 0 1 0 0 + -7.9999999999997362 2.0536640888705361E-006 0.0000000000000000 + -7.9982728119391444 -0.16622883563054935 0.0000000000000000 + -7.9798737887512807 -0.56711049681722270 0.0000000000000000 + -7.9413948308073232 -0.96656512518646220 0.0000000000000000 + -7.9195961306685563 -1.1313695802431840 0.0000000000000000 + --- OuterCircle --- --- + 73 224 225 59 + 0 1 0 0 + -7.9195961306685563 -1.1313695802431840 0.0000000000000000 + -7.8956965679706572 -1.2876240548142885 0.0000000000000000 + -7.8253142059572793 -1.6626658046772935 0.0000000000000000 + -7.7371280325176395 -2.0339247302763503 0.0000000000000000 + -7.6954314104928114 -2.1863978152204195 0.0000000000000000 + --- OuterCircle --- --- + 59 225 226 45 + 0 1 0 0 + -7.6954314104928114 -2.1863978152204195 0.0000000000000000 + -7.6580101504989528 -2.3140614803533199 0.0000000000000000 + -7.5589607844361355 -2.6195632955431041 0.0000000000000000 + -7.4477294283536297 -2.9208434333314268 0.0000000000000000 + -7.3981294507658548 -3.0442865551243545 0.0000000000000000 + --- OuterCircle --- --- + 45 226 227 46 + 0 1 0 0 + -7.3981294507658548 -3.0442865551243545 0.0000000000000000 + -7.3590722146031711 -3.1375238868023900 0.0000000000000000 + -7.2599496771840144 -3.3605253584455692 0.0000000000000000 + -7.1540714237919403 -3.5803997071952112 0.0000000000000000 + -7.1082595194719147 -3.6705104009983280 0.0000000000000000 + --- OuterCircle --- --- + 46 227 228 32 + 0 1 0 0 + -7.1082595194719147 -3.6705104009983280 0.0000000000000000 + -7.0474667021005866 -3.7859230159610329 0.0000000000000000 + -6.8930100962071599 -4.0603462676951780 0.0000000000000000 + -6.7278730981356638 -4.3284782054877473 0.0000000000000000 + -6.6564026469980782 -4.4376011313588091 0.0000000000000000 + --- OuterCircle --- --- + 32 228 229 19 + 0 1 0 0 + -6.6564026469980782 -4.4376011313588091 0.0000000000000000 + -6.5885255921014130 -4.5377671295720683 0.0000000000000000 + -6.4184752237442186 -4.7752670922349054 0.0000000000000000 + -6.2398678886300818 -5.0064007762506559 0.0000000000000000 + -6.1634357684714196 -5.1002019105058105 0.0000000000000000 + --- OuterCircle --- --- + 19 229 230 20 + 0 1 0 0 + -6.1634357684714196 -5.1002019105058105 0.0000000000000000 + -6.0925561692961807 -5.1846657871044153 0.0000000000000000 + -5.9166942886646918 -5.3844896410414433 0.0000000000000000 + -5.7342817978554717 -5.5783521099679092 0.0000000000000000 + -5.6568527973323857 -5.6568557016520016 0.0000000000000000 + --- OuterCircle --- --- + 20 230 231 8 + 0 1 0 0 + -5.6568527973323857 -5.6568557016520016 0.0000000000000000 + -5.5783495970445989 -5.7342842424449421 0.0000000000000000 + -5.3844881221784373 -5.9166956709061287 0.0000000000000000 + -5.1846653290170703 -6.0925565591209994 0.0000000000000000 + -5.1002019105058114 -6.1634357684714187 0.0000000000000000 + --- OuterCircle --- --- + 8 231 232 9 + 0 1 0 0 + -5.1002019105058114 -6.1634357684714187 0.0000000000000000 + -5.0064007762506542 -6.2398678886300827 0.0000000000000000 + -4.7752670922349063 -6.4184752237442178 0.0000000000000000 + -4.5377671295720754 -6.5885255921014076 0.0000000000000000 + -4.4376011313588188 -6.6564026469980710 0.0000000000000000 + --- OuterCircle --- --- + 9 232 177 10 + 0 1 0 0 + -4.4376011313588188 -6.6564026469980710 0.0000000000000000 + -4.3284782054877544 -6.7278730981356594 0.0000000000000000 + -4.0603462676951878 -6.8930100962071537 0.0000000000000000 + -3.7859230159610400 -7.0474667021005830 0.0000000000000000 + -3.6705104009983383 -7.1082595194719094 0.0000000000000000 + --- OuterCircle --- --- + 51 37 38 233 + 0 0 0 0 + --- --- --- --- + 233 38 39 52 + 0 0 0 0 + --- --- --- --- + 52 66 234 233 + 0 0 1 0 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + 8.1918573019674312E-002 -2.8361628539606514 0.0000000000000000 + 0.27968750301402334 -2.4406249939719533 0.0000000000000000 + 0.47745643300837237 -2.0450871339832553 0.0000000000000000 + 0.55937500602804668 -1.8812499879439066 0.0000000000000000 + --- --- RightSlant --- + 66 67 235 234 + 0 0 1 0 + 0.55937500602804668 -1.8812499879439066 0.0000000000000000 + 0.60056311315811417 -1.7988737736837717 0.0000000000000000 + 0.69999999999999973 -1.6000000000000005 0.0000000000000000 + 0.79943688684188530 -1.4011262263162294 0.0000000000000000 + 0.84062499397195278 -1.3187500120560944 0.0000000000000000 + --- --- RightSlant --- + 67 79 236 235 + 0 0 1 0 + 0.84062499397195278 -1.3187500120560944 0.0000000000000000 + 0.89325425707682937 -1.2134914858463413 0.0000000000000000 + 1.0203125378423255 -0.95937492431534910 0.0000000000000000 + 1.1473708186078211 -0.70525836278435783 0.0000000000000000 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + --- --- RightSlant --- + 79 91 237 236 + 0 0 1 0 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + 1.2526293208844796 -0.49474135823104071 0.0000000000000000 + 1.3796875438703724 -0.24062491225925520 0.0000000000000000 + 1.5067457668562652 1.3491533712530313E-002 0.0000000000000000 + 1.5593750060280467 0.11875001205609337 0.0000000000000000 + --- --- RightSlant --- + 91 92 238 237 + 0 0 1 0 + 1.5593750060280467 0.11875001205609337 0.0000000000000000 + 1.6005631131581151 0.20112622631623012 0.0000000000000000 + 1.6999999999999993 0.39999999999999858 0.0000000000000000 + 1.7994368868418849 0.59887377368376971 0.0000000000000000 + 1.8406249939719528 0.68124998794390557 0.0000000000000000 + --- --- RightSlant --- + 92 102 239 238 + 0 0 1 0 + 1.8406249939719528 0.68124998794390557 0.0000000000000000 + 1.8639649232289370 0.72792984645787406 0.0000000000000000 + 1.9203124969859759 0.84062499397195189 0.0000000000000000 + 1.9766600707430158 0.95332014148603150 0.0000000000000000 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + --- --- RightSlant --- + 102 114 240 239 + 0 0 1 0 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + 1.9983479703871072 1.0812735458173770 0.0000000000000000 + 1.9807707726899886 1.2766715490561058 0.0000000000000000 + 1.9441339362737691 1.4694073261344140 0.0000000000000000 + 1.9234528539428932 1.5480229180052043 0.0000000000000000 + --- --- IceCream --- + 114 113 241 240 + 0 0 1 0 + 1.9234528539428932 1.5480229180052043 0.0000000000000000 + 1.9048209196670516 1.6096369936271651 0.0000000000000000 + 1.8517494276368289 1.7556613376683212 0.0000000000000000 + 1.7875027702478623 1.8971253236623173 0.0000000000000000 + 1.7577069153495042 1.9541836299856179 0.0000000000000000 + --- --- IceCream --- + 113 127 242 241 + 0 0 1 0 + 1.7577069153495042 1.9541836299856179 0.0000000000000000 + 1.7159031169606289 2.0274611881744238 0.0000000000000000 + 1.6025531944504807 2.1965881743342441 0.0000000000000000 + 1.4725959561431350 2.3533148746507173 0.0000000000000000 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + --- --- IceCream --- + 127 126 243 242 + 0 0 1 0 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + 1.3533148446578711 2.4725959837065434 0.0000000000000000 + 1.1965881552143354 2.6025532087268597 0.0000000000000000 + 1.0274611821782322 2.7159031205510731 0.0000000000000000 + 0.95418362998561790 2.7577069153495044 0.0000000000000000 + --- --- IceCream --- + 126 140 244 243 + 0 0 1 0 + 0.95418362998561790 2.7577069153495044 0.0000000000000000 + 0.89712532762418773 2.7875027682594489 0.0000000000000000 + 0.75566135168116888 2.8517494219184703 0.0000000000000000 + 0.60963701823418193 2.9048209117915880 0.0000000000000000 + 0.54802294711610733 2.9234528456487245 0.0000000000000000 + --- --- IceCream --- + 140 139 245 244 + 0 0 1 0 + 0.54802294711610733 2.9234528456487245 0.0000000000000000 + 0.46940735118449745 2.9441339302254752 0.0000000000000000 + 0.27667156381993480 2.9807707706277959 0.0000000000000000 + 8.1273549858423472E-002 2.9983479702227562 0.0000000000000000 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + --- --- IceCream --- + 139 138 246 245 + 0 0 1 0 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + -8.1273514348751255E-002 2.9983479716669477 0.0000000000000000 + -0.27667144147234074 2.9807707877171499 0.0000000000000000 + -0.46940714556157248 2.9441339798727189 0.0000000000000000 + -0.54802270862630975 2.9234529135983243 0.0000000000000000 + --- --- IceCream --- + 138 125 247 246 + 0 0 1 0 + -0.54802270862630975 2.9234529135983243 0.0000000000000000 + -0.60963681664226710 2.9048209763109716 0.0000000000000000 + -0.75566123688154063 2.8517494687658642 0.0000000000000000 + -0.89712529516674266 2.7875027845494351 0.0000000000000000 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + --- --- IceCream --- + 125 124 248 247 + 0 0 1 0 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + -1.0274611529224809 2.7159031380690477 0.0000000000000000 + -1.1965880619272244 2.6025532783821101 0.0000000000000000 + -1.3533146983210931 2.4725961181899434 0.0000000000000000 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + --- --- IceCream --- + 124 112 249 248 + 0 0 1 0 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + -1.4725958216597181 2.3533150209874787 0.0000000000000000 + -1.6025531247952236 2.1965882676213502 0.0000000000000000 + -1.7159030994426530 2.0274612174301749 0.0000000000000000 + -1.7577069153495026 1.9541836299856208 0.0000000000000000 + --- --- IceCream --- + 112 111 250 249 + 0 0 1 0 + -1.7577069153495026 1.9541836299856208 0.0000000000000000 + -1.7875027845494327 1.8971252951667479 0.0000000000000000 + -1.8517494687658640 1.7556612368815410 0.0000000000000000 + -1.9048209763109714 1.6096368166422679 0.0000000000000000 + -1.9234529135983243 1.5480227086263101 0.0000000000000000 + --- --- IceCream --- + 111 101 251 250 + 0 0 1 0 + -1.9234529135983243 1.5480227086263101 0.0000000000000000 + -1.9441339798883621 1.4694071454967825 0.0000000000000000 + -1.9807707877486287 1.2766714412469717 0.0000000000000000 + -1.9983479716827337 1.0812735139606025 0.0000000000000000 + -2.0000000000000000 1.0000000000000002 0.0000000000000000 + --- --- IceCream --- + 101 89 252 251 + 0 0 1 0 + -2.0000000000000000 1.0000000000000000 0.0000000000000000 + -1.9766600707430160 0.95332014148603195 0.0000000000000000 + -1.9203124969859764 0.84062499397195278 0.0000000000000000 + -1.8639649232289368 0.72792984645787362 0.0000000000000000 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + --- --- LeftSlant --- + 89 90 253 252 + 0 0 1 0 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + -1.7994368868418851 0.59887377368377015 0.0000000000000000 + -1.7000000000000000 0.39999999999999991 0.0000000000000000 + -1.6005631131581148 0.20112622631622967 0.0000000000000000 + -1.5593750060280471 0.11875001205609426 0.0000000000000000 + --- --- LeftSlant --- + 90 78 254 253 + 0 0 1 0 + -1.5593750060280471 0.11875001205609426 0.0000000000000000 + -1.5067457553473789 1.3491510694757736E-002 0.0000000000000000 + -1.3796875045765755 -0.24062499084684896 0.0000000000000000 + -1.2526292538057724 -0.49474149238845522 0.0000000000000000 + -1.2000000031251039 -0.59999999374979218 0.0000000000000000 + --- --- LeftSlant --- + 78 64 255 254 + 0 0 1 0 + -1.2000000031251039 -0.59999999374979218 0.0000000000000000 + -1.1473707515291136 -0.70525849694177278 0.0000000000000000 + -1.0203124985485283 -0.95937500290294331 0.0000000000000000 + -0.89325424556794286 -1.2134915088641143 0.0000000000000000 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + --- --- LeftSlant --- + 64 65 256 255 + 0 0 1 0 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + -0.79943688684188507 -1.4011262263162299 0.0000000000000000 + -0.69999999999999996 -1.6000000000000001 0.0000000000000000 + -0.60056311315811484 -1.7988737736837703 0.0000000000000000 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + --- --- LeftSlant --- + 65 51 233 256 + 0 0 1 0 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + -0.47745643300837282 -2.0450871339832544 0.0000000000000000 + -0.27968750301402356 -2.4406249939719529 0.0000000000000000 + -8.1918573019674756E-002 -2.8361628539606505 0.0000000000000000 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + --- --- LeftSlant --- diff --git a/v0.8.7/tutorials/out/ice_cream_curved_sides.tec b/v0.8.7/tutorials/out/ice_cream_curved_sides.tec new file mode 100644 index 0000000000..535e295d57 --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_curved_sides.tec @@ -0,0 +1,474 @@ + VARIABLES = "X", "Y", "Z" + ZONE F=FEPOINT, ET=QUADRILATERAL, N= 256 E= 216 + -2.6873977405837541 -6.8533127622695584 0.0000000000000000 + -2.0107216208337615 -6.8653592763871760 0.0000000000000000 + -1.0410418717253931 -6.9216393501901949 0.0000000000000000 + 2.9912702576840707E-007 -6.9498898853362308 0.0000000000000000 + 1.0410424460724244 -6.9216392767031785 0.0000000000000000 + 2.0107220324553001 -6.8653591831123713 0.0000000000000000 + 2.6873981284579389 -6.8533125932786199 0.0000000000000000 + -4.7376904454980995 -5.7175213451225044 0.0000000000000000 + -4.1206720130528520 -5.8675490522077896 0.0000000000000000 + -3.1043042956445648 -6.1731350923322887 0.0000000000000000 + -2.0036785626447200 -5.9851228109660299 0.0000000000000000 + -1.0098066418509064 -5.9615428122665204 0.0000000000000000 + 1.4706799468291222E-007 -5.9621383436589896 0.0000000000000000 + 1.0098069252998503 -5.9615427750810719 0.0000000000000000 + 2.0036788470530045 -5.9851227251882229 0.0000000000000000 + 3.1043047227986076 -6.1731348858195423 0.0000000000000000 + 4.1206723395676512 -5.8675488550488604 0.0000000000000000 + 4.7376907442183054 -5.7175210852012199 0.0000000000000000 + -5.7175290854607779 -4.7380091301910010 0.0000000000000000 + -5.0338745166877699 -5.0343954062500895 0.0000000000000000 + -4.0192675410949015 -4.9833531598216387 0.0000000000000000 + -3.0341474170277136 -5.0182548701078833 0.0000000000000000 + -2.0156881211264164 -5.0103777714865521 0.0000000000000000 + -1.0040300753799325 -4.9870767872107384 0.0000000000000000 + 6.0815912483782476E-008 -4.9814748373723354 0.0000000000000000 + 1.0040302008008126 -4.9870767661818354 0.0000000000000000 + 2.0156882686372239 -5.0103777190234284 0.0000000000000000 + 3.0341475955502211 -5.0182547800320005 0.0000000000000000 + 4.0192677419725520 -4.9833530285321146 0.0000000000000000 + 5.0338748213315210 -5.0343951447304720 0.0000000000000000 + 5.7175292975176388 -4.7380089561448235 0.0000000000000000 + -5.8675188863064056 -4.1212636296863909 0.0000000000000000 + -4.9817761240538099 -4.0207066396640707 0.0000000000000000 + -4.0043466716132494 -4.0091310423573763 0.0000000000000000 + -2.9990315694177996 -4.0029589564990600 0.0000000000000000 + -1.9980410613753681 -4.0034989440708078 0.0000000000000000 + -1.0025886914582574 -4.0005457543668728 0.0000000000000000 + 2.0716010322157786E-008 -3.9975159229364250 0.0000000000000000 + 1.0025887371619329 -4.0005457439384919 0.0000000000000000 + 1.9980411183580911 -4.0034989210294167 0.0000000000000000 + 2.9990316405720265 -4.0029589207724925 0.0000000000000000 + 4.0043467561697534 -4.0091310005645440 0.0000000000000000 + 4.9817761918620427 -4.0207066409172585 0.0000000000000000 + 5.8675188518455164 -4.1212637904706897 0.0000000000000000 + -6.8541002111688183 -2.6879947245913107 0.0000000000000000 + -6.1729085409881828 -3.1048888913844155 0.0000000000000000 + -5.0136659075640297 -3.0350713738960646 0.0000000000000000 + -3.9875424262402634 -3.0037083370185043 0.0000000000000000 + -2.9583450770060664 -2.9862077152150777 0.0000000000000000 + -1.9564448711240272 -3.0074316257274023 0.0000000000000000 + -1.0288837123639378 -3.0335503938670736 0.0000000000000000 + 1.0288837261293409 -3.0335503875679914 0.0000000000000000 + 1.9564448907221292 -3.0074316143886093 0.0000000000000000 + 2.9583450995996925 -2.9862077071259527 0.0000000000000000 + 3.9875424417605054 -3.0037083567292124 0.0000000000000000 + 5.0136658835814423 -3.0350714872829925 0.0000000000000000 + 6.1729083819393678 -3.1048892701218342 0.0000000000000000 + 6.8541000555287406 -2.6879951006708396 0.0000000000000000 + -6.8662753709801922 -2.0111701987867616 0.0000000000000000 + -5.9840270273315026 -2.0036316982582778 0.0000000000000000 + -4.9988021360598456 -2.0128444316642962 0.0000000000000000 + -3.9673460790320734 -1.9910456416213265 0.0000000000000000 + -2.9250676751279636 -1.9602609213766236 0.0000000000000000 + -1.7488220331260820 -1.8941799125227698 0.0000000000000000 + -1.0549997787868850 -2.3236466700725056 0.0000000000000000 + 1.0549997837346989 -2.3236466644045155 0.0000000000000000 + 1.7488220456724668 -1.8941798935970877 0.0000000000000000 + 2.9250676820651060 -1.9602609194579510 0.0000000000000000 + 3.9673460732862944 -1.9910456785028996 0.0000000000000000 + 4.9988021003931316 -2.0128445626745215 0.0000000000000000 + 5.9840269527385770 -2.0036319863591987 0.0000000000000000 + 6.8662752831181848 -2.0111706214718250 0.0000000000000000 + -6.9224179711968894 -1.0409114847469898 0.0000000000000000 + -5.9580972668346384 -1.0079369394830269 0.0000000000000000 + -4.9644031999205085 -0.99567599301028353 0.0000000000000000 + -3.9291101003161621 -0.97695020835669544 0.0000000000000000 + -2.9054997225222792 -0.96230280748999231 0.0000000000000000 + -1.9926400784257630 -0.87289673502189002 0.0000000000000000 + 1.9926400966711493 -0.87289669885085341 0.0000000000000000 + 2.9054997267781739 -0.96230280151691017 0.0000000000000000 + 3.9291100927795046 -0.97695023859068741 0.0000000000000000 + 4.9644031747190178 -0.99567610299695042 0.0000000000000000 + 5.9580972159582188 -1.0079372294112183 0.0000000000000000 + 6.9224178848348696 -1.0409122106557087 0.0000000000000000 + -6.9501005397333646 9.2742624259376633E-004 0.0000000000000000 + -5.9557814357875589 3.5672791828285848E-003 0.0000000000000000 + -4.9483036165862142 1.0995072712916637E-002 0.0000000000000000 + -3.8953761385874000 2.9859225313277699E-002 0.0000000000000000 + -2.7044268180022062 9.0239571225917664E-002 0.0000000000000000 + -2.0577134077941768 -0.24596023237843018 0.0000000000000000 + 2.0577134210781893 -0.24596020432330881 0.0000000000000000 + 2.7044268189529750 9.0239580439220993E-002 0.0000000000000000 + 3.8953761307951136 2.9859213141896310E-002 0.0000000000000000 + 4.9483035951629128 1.0995006083563994E-002 0.0000000000000000 + 5.9557813901342689 3.5670820551844027E-003 0.0000000000000000 + 6.9501004563400075 9.2689433946285945E-004 0.0000000000000000 + -6.9211366160086696 1.0424222176432969 0.0000000000000000 + -5.9532838484776942 1.0137526163989738 0.0000000000000000 + -4.9500311685113738 1.0133010960715971 0.0000000000000000 + -3.8931011037157370 1.0206864672017701 0.0000000000000000 + -2.8597405927114097 1.0355541279811451 0.0000000000000000 + 2.8597405855121849 1.0355541561971500 0.0000000000000000 + 3.8931010938629025 1.0206864792386088 0.0000000000000000 + 4.9500311437661138 1.0133010952219772 0.0000000000000000 + 5.9532837990717420 1.0137526003884889 0.0000000000000000 + 6.9211365315572104 1.0424222862574206 0.0000000000000000 + -6.8644255432723220 2.0119396442671040 0.0000000000000000 + -5.9770878564770857 2.0066264662415398 0.0000000000000000 + -4.9783437062948490 2.0217143918982812 0.0000000000000000 + -3.9140404518912146 2.0099176101976779 0.0000000000000000 + -2.7410761635755314 1.9789206013273941 0.0000000000000000 + -2.1286743374522938 2.2972195370402191 0.0000000000000000 + 2.1286743610257428 2.2972195426678863 0.0000000000000000 + 2.7410761638388315 1.9789206359776161 0.0000000000000000 + 3.9140404460755791 2.0099176374807124 0.0000000000000000 + 4.9783436737400066 2.0217144567818068 0.0000000000000000 + 5.9770877867144092 2.0066266051878681 0.0000000000000000 + 6.8644254594391168 2.0119399050256175 0.0000000000000000 + -6.8525413060636966 2.6881963732921865 0.0000000000000000 + -6.1678363756747823 3.1055140586749621 0.0000000000000000 + -4.9973810792864457 3.0371864629703023 0.0000000000000000 + -3.9532479064607431 3.0086876509391756 0.0000000000000000 + -2.9421500723748752 3.0044506681060703 0.0000000000000000 + -1.9325861810773708 2.9330503835958242 0.0000000000000000 + -1.2961124323034472 3.1292858466381226 0.0000000000000000 + 1.2961125095535806 3.1292858073071472 0.0000000000000000 + 1.9325862367186470 2.9330503517007265 0.0000000000000000 + 2.9421501048823253 3.0044506615488382 0.0000000000000000 + 3.9532479276365025 3.0086876615716163 0.0000000000000000 + 4.9973810641359471 3.0371865415826074 0.0000000000000000 + 6.1678362306961185 3.1055143771001839 0.0000000000000000 + 6.8525411601091664 2.6881966863964721 0.0000000000000000 + -5.8641463558607985 4.1208556574546105 0.0000000000000000 + -4.9733093718925314 4.0196757173264421 0.0000000000000000 + -3.9922265881412802 4.0059453056237606 0.0000000000000000 + -2.9890091422252363 3.9843170145084694 0.0000000000000000 + -2.0054941764375291 3.9431793687522627 0.0000000000000000 + -0.97208389168591847 3.7420513075922179 0.0000000000000000 + 4.9676272106708220E-008 3.8718978722738666 0.0000000000000000 + 0.97208398546357100 3.7420512824509329 0.0000000000000000 + 2.0054942543469472 3.9431793364082628 0.0000000000000000 + 2.9890092219353601 3.9843169730044226 0.0000000000000000 + 3.9922266832879605 4.0059452501162065 0.0000000000000000 + 4.9733094595143239 4.0196756893634520 0.0000000000000000 + 5.8641463429630729 4.1208557832656991 0.0000000000000000 + -5.7158908831846356 4.7374654742093689 0.0000000000000000 + -5.0310753814344409 5.0329859200420142 0.0000000000000000 + -4.0146693983288904 4.9778067867170375 0.0000000000000000 + -3.0301613062086163 5.0005146435834220 0.0000000000000000 + -2.0111150485345335 4.9601592448796588 0.0000000000000000 + -0.99816482806907292 4.9040223934159526 0.0000000000000000 + 6.5559167275215029E-008 4.8889229740908711 0.0000000000000000 + 0.99816495902914193 4.9040223703928012 0.0000000000000000 + 2.0111151922869741 4.9601591923650652 0.0000000000000000 + 3.0301614770132304 5.0005145532717288 0.0000000000000000 + 4.0146696060123634 4.9778066411423163 0.0000000000000000 + 5.0310757370402959 5.0329856029402960 0.0000000000000000 + 5.7158911418430645 4.7374652500277525 0.0000000000000000 + -4.7366408724331448 5.7163969255377962 0.0000000000000000 + -4.1192062592906806 5.8644052326761127 0.0000000000000000 + -3.1027380900121511 6.1648179887777212 0.0000000000000000 + -2.0015559213129070 5.9647195940348077 0.0000000000000000 + -1.0080842121091849 5.9307120578964962 0.0000000000000000 + 1.2809144579091231E-007 5.9271981412979953 0.0000000000000000 + 1.0080844592290032 5.9307120244791536 0.0000000000000000 + 2.0015561708518548 5.9647195166171958 0.0000000000000000 + 3.1027384683617534 6.1648178022211253 0.0000000000000000 + 4.1192065691366757 5.8644050357600435 0.0000000000000000 + 4.7366412086031051 5.7163966234799082 0.0000000000000000 + -2.6868851371343672 6.8498717712581927 0.0000000000000000 + -2.0100960238839289 6.8591082624958490 0.0000000000000000 + -1.0405857107919183 6.9126053965829257 0.0000000000000000 + 2.5020681072890381E-007 6.9397443383701223 0.0000000000000000 + 1.0405861922485977 6.9126053343110048 0.0000000000000000 + 2.0100963728176224 6.8591081816647161 0.0000000000000000 + 2.6868854733549496 6.8498716232438612 0.0000000000000000 + -3.6705104009983383 -7.1082595194719094 0.0000000000000000 + -3.0442865551243687 -7.3981294507658495 0.0000000000000000 + -2.1863978152204240 -7.6954314104928097 0.0000000000000000 + -1.1313695802431920 -7.9195961306685545 0.0000000000000000 + 3.6410209097182056E-009 -8.0000000000000000 0.0000000000000000 + 1.1313715929171260 -7.9195958431437754 0.0000000000000000 + 2.1863978152204160 -7.6954314104928123 0.0000000000000000 + 3.0442865551243607 -7.3981294507658522 0.0000000000000000 + 3.6705121720218252 -7.1082586049636394 0.0000000000000000 + 4.4376011313588206 -6.6564026469980702 0.0000000000000000 + 5.1002019105058052 -6.1634357684714240 0.0000000000000000 + 5.6568541807137214 -5.6568543182710380 0.0000000000000000 + 6.1634357684714249 -5.1002019105058043 0.0000000000000000 + 6.6564026469980728 -4.4376011313588162 0.0000000000000000 + 7.1082586387364719 -3.6705121066178656 0.0000000000000000 + 7.3981294507658539 -3.0442865551243559 0.0000000000000000 + 7.6954314104928132 -2.1863978152204129 0.0000000000000000 + 7.9195958648410292 -1.1313714410364422 0.0000000000000000 + 7.9999999999999973 -1.9089446951922548E-007 0.0000000000000000 + 7.9195958696254367 1.1313714075456063 0.0000000000000000 + 7.6954314104928123 2.1863978152204151 0.0000000000000000 + 7.3981294507658530 3.0442865551243603 0.0000000000000000 + 7.1082586908781771 3.6705120056410205 0.0000000000000000 + 6.6564026469980719 4.4376011313588171 0.0000000000000000 + 6.1634357684714232 5.1002019105058070 0.0000000000000000 + 5.6568544506792646 5.6568540483054894 0.0000000000000000 + 5.1002019105058061 6.1634357684714240 0.0000000000000000 + 4.4376011313588162 6.6564026469980728 0.0000000000000000 + 3.6705119402370614 7.1082587246510069 0.0000000000000000 + 3.0442865551243585 7.3981294507658530 0.0000000000000000 + 2.1863978152204191 7.6954314104928114 0.0000000000000000 + 1.1313712556649234 7.9195958913226860 0.0000000000000000 + 0.0000000000000000 8.0000000000000000 0.0000000000000000 + -1.1313695802431916 7.9195961306685545 0.0000000000000000 + -2.1863978152204133 7.6954314104928132 0.0000000000000000 + -3.0442865551243616 7.3981294507658522 0.0000000000000000 + -3.6705104009983285 7.1082595194719147 0.0000000000000000 + -4.4376011313588100 6.6564026469980773 0.0000000000000000 + -5.1002019105058114 6.1634357684714187 0.0000000000000000 + -5.6568527973323857 5.6568557016520025 0.0000000000000000 + -6.1634357684714214 5.1002019105058087 0.0000000000000000 + -6.6564026469980755 4.4376011313588126 0.0000000000000000 + -7.1082595194719094 3.6705104009983378 0.0000000000000000 + -7.3981294507658477 3.0442865551243714 0.0000000000000000 + -7.6954314104928097 2.1863978152204235 0.0000000000000000 + -7.9195961306685545 1.1313695802431951 0.0000000000000000 + -7.9999999999997362 2.0536640888705361E-006 0.0000000000000000 + -7.9195961306685545 -1.1313695802431909 0.0000000000000000 + -7.6954314104928114 -2.1863978152204195 0.0000000000000000 + -7.3981294507658522 -3.0442865551243612 0.0000000000000000 + -7.1082595194719147 -3.6705104009983280 0.0000000000000000 + -6.6564026469980782 -4.4376011313588091 0.0000000000000000 + -6.1634357684714196 -5.1002019105058105 0.0000000000000000 + -5.6568527973323830 -5.6568557016520042 0.0000000000000000 + -5.1002019105058114 -6.1634357684714187 0.0000000000000000 + -4.4376011313588135 -6.6564026469980755 0.0000000000000000 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + 0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 0.84062499397195267 -1.3187500120560947 0.0000000000000000 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + 1.5593750060280469 0.11875001205609381 0.0000000000000000 + 1.8406249939719526 0.68124998794390512 0.0000000000000000 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + 1.9234528539428934 1.5480229180052039 0.0000000000000000 + 1.7577069153495042 1.9541836299856183 0.0000000000000000 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + 0.95418362998561834 2.7577069153495040 0.0000000000000000 + 0.54802294711610822 2.9234528456487245 0.0000000000000000 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + -0.54802270862631064 2.9234529135983243 0.0000000000000000 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + -1.7577069153495022 1.9541836299856215 0.0000000000000000 + -1.9234529135983240 1.5480227086263110 0.0000000000000000 + -2.0000000000000000 1.0000000000000000 0.0000000000000000 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + -1.5593750060280471 0.11875001205609437 0.0000000000000000 + -1.2000000031251037 -0.59999999374979263 0.0000000000000000 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 1 2 11 10 + 2 3 12 11 + 3 4 13 12 + 4 5 14 13 + 5 6 15 14 + 6 7 16 15 + 8 9 21 20 + 9 10 22 21 + 10 11 23 22 + 11 12 24 23 + 12 13 25 24 + 13 14 26 25 + 14 15 27 26 + 15 16 28 27 + 16 17 29 28 + 17 18 30 29 + 19 20 33 32 + 20 21 34 33 + 21 22 35 34 + 22 23 36 35 + 23 24 37 36 + 24 25 38 37 + 25 26 39 38 + 26 27 40 39 + 27 28 41 40 + 28 29 42 41 + 29 30 43 42 + 30 31 44 43 + 32 33 47 46 + 33 34 48 47 + 34 35 49 48 + 35 36 50 49 + 36 37 51 50 + 39 40 53 52 + 40 41 54 53 + 41 42 55 54 + 42 43 56 55 + 43 44 57 56 + 45 46 60 59 + 46 47 61 60 + 47 48 62 61 + 48 49 63 62 + 49 50 64 63 + 50 51 65 64 + 52 53 67 66 + 53 54 68 67 + 54 55 69 68 + 55 56 70 69 + 56 57 71 70 + 57 58 72 71 + 59 60 74 73 + 60 61 75 74 + 61 62 76 75 + 62 63 77 76 + 63 64 78 77 + 67 68 80 79 + 68 69 81 80 + 69 70 82 81 + 70 71 83 82 + 71 72 84 83 + 73 74 86 85 + 74 75 87 86 + 75 76 88 87 + 76 77 89 88 + 77 78 90 89 + 79 80 92 91 + 80 81 93 92 + 81 82 94 93 + 82 83 95 94 + 83 84 96 95 + 85 86 98 97 + 86 87 99 98 + 87 88 100 99 + 88 89 101 100 + 92 93 103 102 + 93 94 104 103 + 94 95 105 104 + 95 96 106 105 + 97 98 108 107 + 98 99 109 108 + 99 100 110 109 + 100 101 111 110 + 102 103 115 114 + 103 104 116 115 + 104 105 117 116 + 105 106 118 117 + 107 108 120 119 + 108 109 121 120 + 109 110 122 121 + 110 111 123 122 + 111 112 124 123 + 113 114 128 127 + 114 115 129 128 + 115 116 130 129 + 116 117 131 130 + 117 118 132 131 + 120 121 134 133 + 121 122 135 134 + 122 123 136 135 + 123 124 137 136 + 124 125 138 137 + 126 127 141 140 + 127 128 142 141 + 128 129 143 142 + 129 130 144 143 + 130 131 145 144 + 133 134 147 146 + 134 135 148 147 + 135 136 149 148 + 136 137 150 149 + 137 138 151 150 + 138 139 152 151 + 139 140 153 152 + 140 141 154 153 + 141 142 155 154 + 142 143 156 155 + 143 144 157 156 + 144 145 158 157 + 147 148 160 159 + 148 149 161 160 + 149 150 162 161 + 150 151 163 162 + 151 152 164 163 + 152 153 165 164 + 153 154 166 165 + 154 155 167 166 + 155 156 168 167 + 156 157 169 168 + 161 162 171 170 + 162 163 172 171 + 163 164 173 172 + 164 165 174 173 + 165 166 175 174 + 166 167 176 175 + 10 177 178 1 + 1 178 179 2 + 2 179 180 3 + 3 180 181 4 + 4 181 182 5 + 5 182 183 6 + 6 183 184 7 + 7 184 185 16 + 16 185 186 17 + 17 186 187 18 + 18 187 188 30 + 30 188 189 31 + 31 189 190 44 + 44 190 191 57 + 57 191 192 58 + 58 192 193 72 + 72 193 194 84 + 84 194 195 96 + 96 195 196 106 + 106 196 197 118 + 118 197 198 132 + 132 198 199 131 + 131 199 200 145 + 145 200 201 158 + 158 201 202 157 + 157 202 203 169 + 169 203 204 168 + 168 204 205 167 + 167 205 206 176 + 176 206 207 175 + 175 207 208 174 + 174 208 209 173 + 173 209 210 172 + 172 210 211 171 + 171 211 212 170 + 170 212 213 161 + 161 213 214 160 + 160 214 215 159 + 159 215 216 147 + 147 216 217 146 + 146 217 218 133 + 133 218 219 120 + 120 219 220 119 + 119 220 221 107 + 107 221 222 97 + 97 222 223 85 + 85 223 224 73 + 73 224 225 59 + 59 225 226 45 + 45 226 227 46 + 46 227 228 32 + 32 228 229 19 + 19 229 230 20 + 20 230 231 8 + 8 231 232 9 + 9 232 177 10 + 51 37 38 233 + 233 38 39 52 + 52 66 234 233 + 66 67 235 234 + 67 79 236 235 + 79 91 237 236 + 91 92 238 237 + 92 102 239 238 + 102 114 240 239 + 114 113 241 240 + 113 127 242 241 + 127 126 243 242 + 126 140 244 243 + 140 139 245 244 + 139 138 246 245 + 138 125 247 246 + 125 124 248 247 + 124 112 249 248 + 112 111 250 249 + 111 101 251 250 + 101 89 252 251 + 89 90 253 252 + 90 78 254 253 + 78 64 255 254 + 64 65 256 255 + 65 51 233 256 diff --git a/v0.8.7/tutorials/out/ice_cream_curved_sides.txt b/v0.8.7/tutorials/out/ice_cream_curved_sides.txt new file mode 100644 index 0000000000..a16c98dc3d --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_curved_sides.txt @@ -0,0 +1,222 @@ + + ------------------------ + 2D Mesh Quality Measures + ------------------------ + +Signed Area Aspect Ratio Condition Edge Ratio Jacobian Minimum Angle Maximum Angle Area Sign + 7.1136E-01 1.3622E+00 1.2021E+00 1.6498E+00 4.5524E-01 6.8188E+01 1.2253E+02 1.0000E+00 + 9.0371E-01 1.0468E+00 1.0079E+00 1.1294E+00 8.5394E-01 8.6778E+01 9.2863E+01 1.0000E+00 + 9.9891E-01 1.0425E+00 1.0033E+00 1.0841E+00 9.6953E-01 8.8446E+01 9.1830E+01 1.0000E+00 + 9.9891E-01 1.0425E+00 1.0033E+00 1.0841E+00 9.6953E-01 8.8446E+01 9.1830E+01 1.0000E+00 + 9.0371E-01 1.0468E+00 1.0079E+00 1.1294E+00 8.5394E-01 8.6778E+01 9.2863E+01 1.0000E+00 + 7.1136E-01 1.3622E+00 1.2021E+00 1.6498E+00 4.5524E-01 6.8188E+01 1.2253E+02 1.0000E+00 + 6.3450E-01 1.3151E+00 1.2698E+00 1.5998E+00 3.7707E-01 6.9440E+01 1.2711E+02 1.0000E+00 + 1.0349E+00 1.1443E+00 1.0318E+00 1.3000E+00 8.7458E-01 7.6742E+01 1.0019E+02 1.0000E+00 + 1.1254E+00 1.0967E+00 1.0277E+00 1.1869E+00 9.9283E-01 7.6830E+01 9.8988E+01 1.0000E+00 + 9.7737E-01 1.0238E+00 1.0011E+00 1.0384E+00 9.6836E-01 8.8341E+01 9.1699E+01 1.0000E+00 + 9.8432E-01 1.0179E+00 1.0006E+00 1.0362E+00 9.7836E-01 8.9680E+01 9.0659E+01 1.0000E+00 + 9.8432E-01 1.0179E+00 1.0006E+00 1.0362E+00 9.7836E-01 8.9680E+01 9.0659E+01 1.0000E+00 + 9.7737E-01 1.0238E+00 1.0011E+00 1.0384E+00 9.6836E-01 8.8341E+01 9.1699E+01 1.0000E+00 + 1.1254E+00 1.0967E+00 1.0277E+00 1.1869E+00 9.9283E-01 7.6830E+01 9.8988E+01 1.0000E+00 + 1.0349E+00 1.1443E+00 1.0318E+00 1.3000E+00 8.7458E-01 7.6742E+01 1.0019E+02 1.0000E+00 + 6.3450E-01 1.3151E+00 1.2698E+00 1.5998E+00 3.7707E-01 6.9440E+01 1.2711E+02 1.0000E+00 + 6.3491E-01 1.3135E+00 1.2701E+00 1.5992E+00 3.7719E-01 6.9504E+01 1.2711E+02 1.0000E+00 + 9.8895E-01 1.0228E+00 1.0052E+00 1.0426E+00 9.5206E-01 8.4178E+01 9.3757E+01 1.0000E+00 + 9.9036E-01 1.0210E+00 1.0009E+00 1.0427E+00 9.6025E-01 8.7667E+01 9.1229E+01 1.0000E+00 + 1.0208E+00 1.0083E+00 1.0009E+00 1.0175E+00 1.0079E+00 8.7576E+01 9.1950E+01 1.0000E+00 + 1.0001E+00 1.0120E+00 1.0008E+00 1.0257E+00 9.8204E-01 8.7676E+01 9.1403E+01 1.0000E+00 + 9.8850E-01 1.0099E+00 1.0002E+00 1.0204E+00 9.8651E-01 8.9597E+01 9.0320E+01 1.0000E+00 + 9.8850E-01 1.0099E+00 1.0002E+00 1.0204E+00 9.8651E-01 8.9597E+01 9.0320E+01 1.0000E+00 + 1.0001E+00 1.0120E+00 1.0008E+00 1.0257E+00 9.8204E-01 8.7676E+01 9.1403E+01 1.0000E+00 + 1.0208E+00 1.0083E+00 1.0009E+00 1.0175E+00 1.0079E+00 8.7576E+01 9.1950E+01 1.0000E+00 + 9.9036E-01 1.0210E+00 1.0009E+00 1.0427E+00 9.6025E-01 8.7667E+01 9.1229E+01 1.0000E+00 + 9.8895E-01 1.0228E+00 1.0052E+00 1.0426E+00 9.5206E-01 8.4178E+01 9.3757E+01 1.0000E+00 + 6.3491E-01 1.3135E+00 1.2701E+00 1.5992E+00 3.7719E-01 6.9504E+01 1.2711E+02 1.0000E+00 + 1.0379E+00 1.1470E+00 1.0317E+00 1.3028E+00 8.7623E-01 7.6723E+01 1.0025E+02 1.0000E+00 + 9.9746E-01 1.0281E+00 1.0013E+00 1.0502E+00 9.6376E-01 8.7292E+01 9.1636E+01 1.0000E+00 + 1.0282E+00 1.0156E+00 1.0017E+00 1.0239E+00 1.0107E+00 8.6734E+01 9.2643E+01 1.0000E+00 + 1.0083E+00 1.0136E+00 1.0009E+00 1.0207E+00 9.9708E-01 8.7739E+01 9.2360E+01 1.0000E+00 + 9.4384E-01 1.0266E+00 1.0027E+00 1.0744E+00 8.9626E-01 8.7439E+01 9.3171E+01 1.0000E+00 + 9.4384E-01 1.0266E+00 1.0027E+00 1.0744E+00 8.9626E-01 8.7439E+01 9.3171E+01 1.0000E+00 + 1.0083E+00 1.0136E+00 1.0009E+00 1.0207E+00 9.9708E-01 8.7739E+01 9.2360E+01 1.0000E+00 + 1.0282E+00 1.0156E+00 1.0017E+00 1.0239E+00 1.0107E+00 8.6734E+01 9.2643E+01 1.0000E+00 + 9.9746E-01 1.0281E+00 1.0013E+00 1.0502E+00 9.6376E-01 8.7292E+01 9.1636E+01 1.0000E+00 + 1.0379E+00 1.1470E+00 1.0317E+00 1.3028E+00 8.7623E-01 7.6723E+01 1.0025E+02 1.0000E+00 + 7.1306E-01 1.3614E+00 1.2019E+00 1.6506E+00 4.5597E-01 6.8265E+01 1.2250E+02 1.0000E+00 + 1.1353E+00 1.0961E+00 1.0278E+00 1.1787E+00 1.0073E+00 7.6821E+01 9.9197E+01 1.0000E+00 + 1.0463E+00 1.0091E+00 1.0014E+00 1.0186E+00 1.0385E+00 8.7416E+01 9.2893E+01 1.0000E+00 + 1.0551E+00 1.0158E+00 1.0020E+00 1.0295E+00 1.0419E+00 8.6450E+01 9.2834E+01 1.0000E+00 + 1.1622E+00 1.0997E+00 1.0304E+00 1.1756E+00 1.0286E+00 7.6220E+01 9.9351E+01 1.0000E+00 + 7.5968E-01 1.3367E+00 1.2159E+00 1.5941E+00 4.8133E-01 6.8807E+01 1.2386E+02 1.0000E+00 + 7.5968E-01 1.3367E+00 1.2159E+00 1.5941E+00 4.8133E-01 6.8807E+01 1.2386E+02 1.0000E+00 + 1.1622E+00 1.0997E+00 1.0304E+00 1.1756E+00 1.0286E+00 7.6220E+01 9.9351E+01 1.0000E+00 + 1.0551E+00 1.0158E+00 1.0020E+00 1.0295E+00 1.0419E+00 8.6450E+01 9.2834E+01 1.0000E+00 + 1.0463E+00 1.0091E+00 1.0014E+00 1.0186E+00 1.0385E+00 8.7416E+01 9.2893E+01 1.0000E+00 + 1.1353E+00 1.0961E+00 1.0278E+00 1.1787E+00 1.0073E+00 7.6821E+01 9.9197E+01 1.0000E+00 + 7.1306E-01 1.3614E+00 1.2019E+00 1.6506E+00 4.5597E-01 6.8265E+01 1.2250E+02 1.0000E+00 + 9.0787E-01 1.0464E+00 1.0080E+00 1.1289E+00 8.5643E-01 8.6550E+01 9.2822E+01 1.0000E+00 + 9.9578E-01 1.0202E+00 1.0014E+00 1.0330E+00 9.8122E-01 8.7356E+01 9.2199E+01 1.0000E+00 + 1.0488E+00 1.0119E+00 1.0019E+00 1.0203E+00 1.0452E+00 8.6804E+01 9.3370E+01 1.0000E+00 + 1.0385E+00 1.0240E+00 1.0026E+00 1.0447E+00 1.0212E+00 8.6149E+01 9.2979E+01 1.0000E+00 + 1.0633E+00 1.1477E+00 1.0228E+00 1.2844E+00 9.0925E-01 7.9788E+01 9.7834E+01 1.0000E+00 + 1.0633E+00 1.1477E+00 1.0228E+00 1.2844E+00 9.0925E-01 7.9788E+01 9.7834E+01 1.0000E+00 + 1.0385E+00 1.0240E+00 1.0026E+00 1.0447E+00 1.0212E+00 8.6149E+01 9.2979E+01 1.0000E+00 + 1.0488E+00 1.0119E+00 1.0019E+00 1.0203E+00 1.0452E+00 8.6804E+01 9.3370E+01 1.0000E+00 + 9.9578E-01 1.0202E+00 1.0014E+00 1.0330E+00 9.8122E-01 8.7356E+01 9.2199E+01 1.0000E+00 + 9.0787E-01 1.0464E+00 1.0080E+00 1.1289E+00 8.5643E-01 8.6550E+01 9.2822E+01 1.0000E+00 + 1.0057E+00 1.0397E+00 1.0030E+00 1.0801E+00 9.7534E-01 8.8630E+01 9.2090E+01 1.0000E+00 + 1.0096E+00 1.0068E+00 1.0005E+00 1.0178E+00 1.0001E+00 8.8661E+01 9.1623E+01 1.0000E+00 + 1.0507E+00 1.0280E+00 1.0023E+00 1.0460E+00 1.0417E+00 8.7055E+01 9.2955E+01 1.0000E+00 + 1.1357E+00 1.1274E+00 1.0352E+00 1.1837E+00 1.0301E+00 7.6282E+01 1.0164E+02 1.0000E+00 + 6.6321E-01 1.3524E+00 1.2104E+00 1.7001E+00 3.8357E-01 7.3347E+01 1.2339E+02 1.0000E+00 + 6.6321E-01 1.3524E+00 1.2104E+00 1.7001E+00 3.8357E-01 7.3347E+01 1.2339E+02 1.0000E+00 + 1.1357E+00 1.1274E+00 1.0352E+00 1.1837E+00 1.0301E+00 7.6282E+01 1.0164E+02 1.0000E+00 + 1.0507E+00 1.0280E+00 1.0023E+00 1.0460E+00 1.0417E+00 8.7055E+01 9.2955E+01 1.0000E+00 + 1.0096E+00 1.0068E+00 1.0005E+00 1.0178E+00 1.0001E+00 8.8661E+01 9.1623E+01 1.0000E+00 + 1.0057E+00 1.0397E+00 1.0030E+00 1.0801E+00 9.7534E-01 8.8630E+01 9.2090E+01 1.0000E+00 + 1.0066E+00 1.0388E+00 1.0027E+00 1.0760E+00 9.7778E-01 8.8255E+01 9.1555E+01 1.0000E+00 + 1.0116E+00 1.0044E+00 1.0001E+00 1.0079E+00 1.0056E+00 8.9436E+01 9.0324E+01 1.0000E+00 + 1.0513E+00 1.0313E+00 1.0021E+00 1.0667E+00 1.0432E+00 8.9072E+01 9.1158E+01 1.0000E+00 + 1.0795E+00 1.1529E+00 1.0305E+00 1.2448E+00 9.7916E-01 8.3572E+01 9.8506E+01 1.0000E+00 + 1.0795E+00 1.1529E+00 1.0305E+00 1.2448E+00 9.7916E-01 8.3572E+01 9.8506E+01 1.0000E+00 + 1.0513E+00 1.0313E+00 1.0021E+00 1.0667E+00 1.0432E+00 8.9072E+01 9.1158E+01 1.0000E+00 + 1.0116E+00 1.0044E+00 1.0001E+00 1.0079E+00 1.0056E+00 8.9436E+01 9.0324E+01 1.0000E+00 + 1.0066E+00 1.0388E+00 1.0027E+00 1.0760E+00 9.7778E-01 8.8255E+01 9.1555E+01 1.0000E+00 + 9.1043E-01 1.0418E+00 1.0068E+00 1.1192E+00 8.6059E-01 8.6930E+01 9.3005E+01 1.0000E+00 + 1.0018E+00 1.0080E+00 1.0004E+00 1.0158E+00 9.9199E-01 8.8366E+01 9.1399E+01 1.0000E+00 + 1.0593E+00 1.0348E+00 1.0032E+00 1.0757E+00 1.0457E+00 8.7757E+01 9.1848E+01 1.0000E+00 + 1.0664E+00 1.1408E+00 1.0272E+00 1.2341E+00 9.7307E-01 8.4344E+01 9.7994E+01 1.0000E+00 + 1.0664E+00 1.1408E+00 1.0272E+00 1.2341E+00 9.7307E-01 8.4344E+01 9.7994E+01 1.0000E+00 + 1.0593E+00 1.0348E+00 1.0032E+00 1.0757E+00 1.0457E+00 8.7757E+01 9.1848E+01 1.0000E+00 + 1.0018E+00 1.0080E+00 1.0004E+00 1.0158E+00 9.9199E-01 8.8366E+01 9.1399E+01 1.0000E+00 + 9.1043E-01 1.0418E+00 1.0068E+00 1.1192E+00 8.6059E-01 8.6930E+01 9.3005E+01 1.0000E+00 + 7.1607E-01 1.3554E+00 1.2012E+00 1.6490E+00 4.5808E-01 6.8486E+01 1.2237E+02 1.0000E+00 + 1.1438E+00 1.1025E+00 1.0284E+00 1.1738E+00 1.0145E+00 7.6812E+01 9.8982E+01 1.0000E+00 + 1.0611E+00 1.0342E+00 1.0032E+00 1.0649E+00 1.0417E+00 8.7117E+01 9.3811E+01 1.0000E+00 + 1.1032E+00 1.1245E+00 1.0316E+00 1.1739E+00 1.0097E+00 7.7393E+01 1.0133E+02 1.0000E+00 + 6.7398E-01 1.3229E+00 1.4055E+00 1.5706E+00 3.2697E-01 7.3630E+01 1.3460E+02 1.0000E+00 + 6.7398E-01 1.3229E+00 1.4055E+00 1.5706E+00 3.2697E-01 7.3630E+01 1.3460E+02 1.0000E+00 + 1.1032E+00 1.1245E+00 1.0316E+00 1.1739E+00 1.0097E+00 7.7393E+01 1.0133E+02 1.0000E+00 + 1.0611E+00 1.0342E+00 1.0032E+00 1.0649E+00 1.0417E+00 8.7117E+01 9.3811E+01 1.0000E+00 + 1.1438E+00 1.1025E+00 1.0284E+00 1.1738E+00 1.0145E+00 7.6812E+01 9.8982E+01 1.0000E+00 + 7.1607E-01 1.3554E+00 1.2012E+00 1.6490E+00 4.5808E-01 6.8486E+01 1.2237E+02 1.0000E+00 + 1.0434E+00 1.1550E+00 1.0329E+00 1.3077E+00 8.7767E-01 7.6689E+01 1.0017E+02 1.0000E+00 + 1.0022E+00 1.0439E+00 1.0032E+00 1.0646E+00 9.6423E-01 8.6198E+01 9.3040E+01 1.0000E+00 + 9.9508E-01 1.0145E+00 1.0027E+00 1.0307E+00 9.8201E-01 8.6527E+01 9.3973E+01 1.0000E+00 + 9.8818E-01 1.0224E+00 1.0103E+00 1.0324E+00 9.6179E-01 8.1826E+01 9.6783E+01 1.0000E+00 + 6.7782E-01 1.3299E+00 1.4155E+00 1.5807E+00 3.2642E-01 7.3144E+01 1.3501E+02 1.0000E+00 + 6.7782E-01 1.3299E+00 1.4155E+00 1.5807E+00 3.2642E-01 7.3144E+01 1.3501E+02 1.0000E+00 + 9.8818E-01 1.0224E+00 1.0103E+00 1.0324E+00 9.6179E-01 8.1826E+01 9.6783E+01 1.0000E+00 + 9.9508E-01 1.0145E+00 1.0027E+00 1.0307E+00 9.8201E-01 8.6527E+01 9.3973E+01 1.0000E+00 + 1.0022E+00 1.0439E+00 1.0032E+00 1.0646E+00 9.6423E-01 8.6198E+01 9.3040E+01 1.0000E+00 + 1.0434E+00 1.1550E+00 1.0329E+00 1.3077E+00 8.7767E-01 7.6689E+01 1.0017E+02 1.0000E+00 + 6.3765E-01 1.3098E+00 1.2663E+00 1.6004E+00 3.7845E-01 6.9921E+01 1.2686E+02 1.0000E+00 + 9.8996E-01 1.0247E+00 1.0062E+00 1.0471E+00 9.5317E-01 8.3630E+01 9.4430E+01 1.0000E+00 + 9.8795E-01 1.0236E+00 1.0020E+00 1.0462E+00 9.5732E-01 8.6446E+01 9.2558E+01 1.0000E+00 + 1.0169E+00 1.0124E+00 1.0039E+00 1.0360E+00 9.9775E-01 8.5413E+01 9.4714E+01 1.0000E+00 + 1.1127E+00 1.1089E+00 1.0285E+00 1.1456E+00 1.0298E+00 7.7701E+01 1.0133E+02 1.0000E+00 + 1.0740E+00 1.1250E+00 1.0207E+00 1.1851E+00 9.8863E-01 8.3678E+01 9.7608E+01 1.0000E+00 + 1.0740E+00 1.1250E+00 1.0207E+00 1.1851E+00 9.8863E-01 8.3678E+01 9.7608E+01 1.0000E+00 + 1.1127E+00 1.1089E+00 1.0285E+00 1.1456E+00 1.0298E+00 7.7701E+01 1.0133E+02 1.0000E+00 + 1.0169E+00 1.0124E+00 1.0039E+00 1.0360E+00 9.9775E-01 8.5413E+01 9.4714E+01 1.0000E+00 + 9.8795E-01 1.0236E+00 1.0020E+00 1.0462E+00 9.5732E-01 8.6446E+01 9.2558E+01 1.0000E+00 + 9.8996E-01 1.0247E+00 1.0062E+00 1.0471E+00 9.5317E-01 8.3630E+01 9.4430E+01 1.0000E+00 + 6.3765E-01 1.3098E+00 1.2663E+00 1.6004E+00 3.7845E-01 6.9921E+01 1.2686E+02 1.0000E+00 + 6.3688E-01 1.3145E+00 1.2644E+00 1.6032E+00 3.7838E-01 6.9800E+01 1.2679E+02 1.0000E+00 + 1.0403E+00 1.1506E+00 1.0306E+00 1.3067E+00 8.7524E-01 7.7102E+01 9.9740E+01 1.0000E+00 + 1.1458E+00 1.0971E+00 1.0309E+00 1.1612E+00 1.0241E+00 7.6134E+01 9.9754E+01 1.0000E+00 + 1.0189E+00 1.0178E+00 1.0022E+00 1.0329E+00 9.9833E-01 8.6274E+01 9.2627E+01 1.0000E+00 + 1.0357E+00 1.0204E+00 1.0009E+00 1.0401E+00 1.0247E+00 8.9133E+01 9.1420E+01 1.0000E+00 + 1.0357E+00 1.0204E+00 1.0009E+00 1.0401E+00 1.0247E+00 8.9133E+01 9.1420E+01 1.0000E+00 + 1.0189E+00 1.0178E+00 1.0022E+00 1.0329E+00 9.9833E-01 8.6274E+01 9.2627E+01 1.0000E+00 + 1.1458E+00 1.0971E+00 1.0309E+00 1.1612E+00 1.0241E+00 7.6134E+01 9.9754E+01 1.0000E+00 + 1.0403E+00 1.1506E+00 1.0306E+00 1.3067E+00 8.7524E-01 7.7102E+01 9.9740E+01 1.0000E+00 + 6.3688E-01 1.3145E+00 1.2644E+00 1.6032E+00 3.7838E-01 6.9800E+01 1.2679E+02 1.0000E+00 + 7.2149E-01 1.3542E+00 1.1966E+00 1.6536E+00 4.5980E-01 6.9040E+01 1.2204E+02 1.0000E+00 + 9.2098E-01 1.0367E+00 1.0065E+00 1.1114E+00 8.6758E-01 8.6144E+01 9.2611E+01 1.0000E+00 + 1.0217E+00 1.0301E+00 1.0017E+00 1.0596E+00 9.8972E-01 8.8506E+01 9.2096E+01 1.0000E+00 + 1.0217E+00 1.0301E+00 1.0017E+00 1.0596E+00 9.8972E-01 8.8506E+01 9.2096E+01 1.0000E+00 + 9.2098E-01 1.0367E+00 1.0065E+00 1.1114E+00 8.6758E-01 8.6144E+01 9.2611E+01 1.0000E+00 + 7.2149E-01 1.3542E+00 1.1966E+00 1.6536E+00 4.5980E-01 6.9040E+01 1.2204E+02 1.0000E+00 + 6.0980E-01 1.4486E+00 1.1816E+00 1.6785E+00 4.4463E-01 6.2700E+01 1.1527E+02 1.0000E+00 + 5.6865E-01 1.2312E+00 1.1827E+00 1.3940E+00 3.7296E-01 7.5887E+01 1.2221E+02 1.0000E+00 + 9.4396E-01 1.1142E+00 1.0289E+00 1.2712E+00 8.1479E-01 8.3176E+01 9.8628E+01 1.0000E+00 + 1.1148E+00 1.0754E+00 1.0079E+00 1.1319E+00 1.0415E+00 8.5935E+01 9.3617E+01 1.0000E+00 + 1.1148E+00 1.0754E+00 1.0079E+00 1.1319E+00 1.0415E+00 8.5935E+01 9.3618E+01 1.0000E+00 + 9.4396E-01 1.1142E+00 1.0289E+00 1.2712E+00 8.1479E-01 8.3177E+01 9.8628E+01 1.0000E+00 + 5.6865E-01 1.2312E+00 1.1827E+00 1.3940E+00 3.7296E-01 7.5887E+01 1.2221E+02 1.0000E+00 + 6.0981E-01 1.4486E+00 1.1816E+00 1.6785E+00 4.4463E-01 6.2700E+01 1.1527E+02 1.0000E+00 + 9.3589E-01 1.1374E+00 1.0332E+00 1.2859E+00 7.4833E-01 7.5540E+01 9.8612E+01 1.0000E+00 + 5.0423E-01 1.2163E+00 1.1129E+00 1.4793E+00 3.2952E-01 7.5239E+01 1.1544E+02 1.0000E+00 + 5.2090E-01 1.2479E+00 1.1649E+00 1.5324E+00 3.7971E-01 6.8464E+01 1.1745E+02 1.0000E+00 + 5.2094E-01 1.2480E+00 1.1655E+00 1.5330E+00 3.7978E-01 6.8414E+01 1.1748E+02 1.0000E+00 + 5.0400E-01 1.2163E+00 1.1127E+00 1.4795E+00 3.2934E-01 7.5202E+01 1.1542E+02 1.0000E+00 + 9.3574E-01 1.1373E+00 1.0331E+00 1.2861E+00 7.4808E-01 7.5562E+01 9.8650E+01 1.0000E+00 + 6.0960E-01 1.4489E+00 1.1820E+00 1.6808E+00 4.4396E-01 6.2629E+01 1.1531E+02 1.0000E+00 + 5.6798E-01 1.2319E+00 1.1826E+00 1.3962E+00 3.7255E-01 7.5893E+01 1.2219E+02 1.0000E+00 + 9.4333E-01 1.1146E+00 1.0292E+00 1.2727E+00 8.1433E-01 8.3188E+01 9.8621E+01 1.0000E+00 + 1.1147E+00 1.0755E+00 1.0080E+00 1.1328E+00 1.0414E+00 8.5986E+01 9.3661E+01 1.0000E+00 + 1.1151E+00 1.0752E+00 1.0078E+00 1.1315E+00 1.0425E+00 8.5884E+01 9.3498E+01 1.0000E+00 + 9.4445E-01 1.1138E+00 1.0287E+00 1.2702E+00 8.1557E-01 8.3095E+01 9.8509E+01 1.0000E+00 + 5.6898E-01 1.2307E+00 1.1816E+00 1.3936E+00 3.7319E-01 7.5982E+01 1.2212E+02 1.0000E+00 + 6.1210E-01 1.4520E+00 1.1848E+00 1.6839E+00 4.4488E-01 6.2359E+01 1.1551E+02 1.0000E+00 + 9.3864E-01 1.1397E+00 1.0328E+00 1.2858E+00 7.5085E-01 7.5655E+01 9.8709E+01 1.0000E+00 + 5.0542E-01 1.2194E+00 1.1131E+00 1.4811E+00 3.2974E-01 7.5143E+01 1.1551E+02 1.0000E+00 + 5.2252E-01 1.2507E+00 1.1666E+00 1.5339E+00 3.8067E-01 6.8254E+01 1.1763E+02 1.0000E+00 + 5.2219E-01 1.2508E+00 1.1652E+00 1.5335E+00 3.8009E-01 6.8395E+01 1.1757E+02 1.0000E+00 + 5.0578E-01 1.2196E+00 1.1144E+00 1.4814E+00 3.2983E-01 7.5252E+01 1.1564E+02 1.0000E+00 + 9.4047E-01 1.1430E+00 1.0340E+00 1.2900E+00 7.5140E-01 7.5425E+01 9.8599E+01 1.0000E+00 + 6.1411E-01 1.4555E+00 1.1869E+00 1.6825E+00 4.4693E-01 6.2299E+01 1.1564E+02 1.0000E+00 + 5.7212E-01 1.2275E+00 1.1840E+00 1.3873E+00 3.7436E-01 7.6014E+01 1.2232E+02 1.0000E+00 + 9.5150E-01 1.1096E+00 1.0272E+00 1.2619E+00 8.2026E-01 8.3156E+01 9.8746E+01 1.0000E+00 + 1.1249E+00 1.0704E+00 1.0068E+00 1.1218E+00 1.0503E+00 8.5935E+01 9.3658E+01 1.0000E+00 + 1.1249E+00 1.0704E+00 1.0068E+00 1.1218E+00 1.0503E+00 8.5935E+01 9.3658E+01 1.0000E+00 + 9.5150E-01 1.1096E+00 1.0272E+00 1.2619E+00 8.2026E-01 8.3156E+01 9.8746E+01 1.0000E+00 + 5.7212E-01 1.2275E+00 1.1840E+00 1.3873E+00 3.7436E-01 7.6014E+01 1.2232E+02 1.0000E+00 + 6.1411E-01 1.4555E+00 1.1869E+00 1.6825E+00 4.4693E-01 6.2299E+01 1.1564E+02 1.0000E+00 + 9.4047E-01 1.1430E+00 1.0340E+00 1.2900E+00 7.5140E-01 7.5425E+01 9.8599E+01 1.0000E+00 + 5.0578E-01 1.2196E+00 1.1145E+00 1.4814E+00 3.2983E-01 7.5252E+01 1.1564E+02 1.0000E+00 + 5.2218E-01 1.2508E+00 1.1652E+00 1.5335E+00 3.8009E-01 6.8395E+01 1.1757E+02 1.0000E+00 + 5.2252E-01 1.2507E+00 1.1666E+00 1.5339E+00 3.8067E-01 6.8254E+01 1.1763E+02 1.0000E+00 + 5.0542E-01 1.2194E+00 1.1131E+00 1.4811E+00 3.2974E-01 7.5143E+01 1.1551E+02 1.0000E+00 + 9.3865E-01 1.1397E+00 1.0328E+00 1.2858E+00 7.5086E-01 7.5655E+01 9.8709E+01 1.0000E+00 + 6.1210E-01 1.4520E+00 1.1848E+00 1.6839E+00 4.4488E-01 6.2359E+01 1.1551E+02 1.0000E+00 + 5.6898E-01 1.2307E+00 1.1816E+00 1.3936E+00 3.7319E-01 7.5982E+01 1.2212E+02 1.0000E+00 + 9.4446E-01 1.1138E+00 1.0287E+00 1.2702E+00 8.1557E-01 8.3095E+01 9.8509E+01 1.0000E+00 + 1.1151E+00 1.0752E+00 1.0078E+00 1.1315E+00 1.0425E+00 8.5884E+01 9.3498E+01 1.0000E+00 + 1.1147E+00 1.0755E+00 1.0080E+00 1.1328E+00 1.0414E+00 8.5985E+01 9.3661E+01 1.0000E+00 + 9.4333E-01 1.1146E+00 1.0292E+00 1.2727E+00 8.1433E-01 8.3188E+01 9.8621E+01 1.0000E+00 + 5.6798E-01 1.2319E+00 1.1826E+00 1.3962E+00 3.7255E-01 7.5892E+01 1.2219E+02 1.0000E+00 + 6.0960E-01 1.4489E+00 1.1820E+00 1.6808E+00 4.4396E-01 6.2629E+01 1.1531E+02 1.0000E+00 + 9.3574E-01 1.1373E+00 1.0331E+00 1.2861E+00 7.4808E-01 7.5562E+01 9.8650E+01 1.0000E+00 + 5.0400E-01 1.2163E+00 1.1127E+00 1.4795E+00 3.2934E-01 7.5202E+01 1.1542E+02 1.0000E+00 + 5.2094E-01 1.2480E+00 1.1655E+00 1.5330E+00 3.7978E-01 6.8414E+01 1.1748E+02 1.0000E+00 + 5.2090E-01 1.2479E+00 1.1649E+00 1.5324E+00 3.7971E-01 6.8464E+01 1.1745E+02 1.0000E+00 + 5.0423E-01 1.2163E+00 1.1129E+00 1.4793E+00 3.2952E-01 7.5239E+01 1.1544E+02 1.0000E+00 + 9.3589E-01 1.1374E+00 1.0332E+00 1.2859E+00 7.4833E-01 7.5540E+01 9.8612E+01 1.0000E+00 + 9.9795E-01 1.0307E+00 1.0019E+00 1.0642E+00 9.6958E-01 8.8132E+01 9.1384E+01 1.0000E+00 + 9.9795E-01 1.0307E+00 1.0019E+00 1.0642E+00 9.6958E-01 8.8132E+01 9.1384E+01 1.0000E+00 + 7.6662E-01 1.4908E+00 1.3016E+00 1.8827E+00 3.6340E-01 6.5303E+01 1.2965E+02 1.0000E+00 + 5.9625E-01 1.4355E+00 1.1541E+00 1.7096E+00 4.0321E-01 6.4115E+01 1.0649E+02 1.0000E+00 + 8.6780E-01 1.1668E+00 1.0575E+00 1.3379E+00 6.6778E-01 7.1069E+01 9.7567E+01 1.0000E+00 + 5.0197E-01 1.2065E+00 1.1581E+00 1.3575E+00 3.3616E-01 7.6928E+01 1.2027E+02 1.0000E+00 + 5.2776E-01 1.4983E+00 1.2092E+00 1.6948E+00 3.8289E-01 6.1848E+01 1.1633E+02 1.0000E+00 + 5.8837E-01 1.4327E+00 1.6541E+00 2.9369E+00 2.6838E-01 6.4950E+01 1.1893E+02 1.0000E+00 + 6.4816E-01 1.2061E+00 1.2061E+00 1.7183E+00 4.7388E-01 6.9380E+01 1.0984E+02 1.0000E+00 + 3.6583E-01 1.6158E+00 1.2969E+00 2.1068E+00 2.0753E-01 5.5253E+01 1.1056E+02 1.0000E+00 + 3.5991E-01 1.2625E+00 1.1513E+00 1.4516E+00 2.8849E-01 6.2114E+01 1.1562E+02 1.0000E+00 + 3.6017E-01 1.2618E+00 1.1505E+00 1.4524E+00 2.8839E-01 6.2161E+01 1.1549E+02 1.0000E+00 + 3.6635E-01 1.6098E+00 1.2940E+00 2.1016E+00 2.0759E-01 5.5255E+01 1.1042E+02 1.0000E+00 + 6.6431E-01 1.2282E+00 1.2016E+00 1.7724E+00 4.7782E-01 7.0223E+01 1.0943E+02 1.0000E+00 + 6.6431E-01 1.2282E+00 1.2016E+00 1.7724E+00 4.7782E-01 7.0223E+01 1.0943E+02 1.0000E+00 + 3.6635E-01 1.6098E+00 1.2940E+00 2.1016E+00 2.0759E-01 5.5255E+01 1.1042E+02 1.0000E+00 + 3.6017E-01 1.2618E+00 1.1505E+00 1.4524E+00 2.8839E-01 6.2161E+01 1.1549E+02 1.0000E+00 + 3.5991E-01 1.2625E+00 1.1513E+00 1.4516E+00 2.8849E-01 6.2114E+01 1.1562E+02 1.0000E+00 + 3.6583E-01 1.6158E+00 1.2969E+00 2.1068E+00 2.0753E-01 5.5253E+01 1.1056E+02 1.0000E+00 + 6.4816E-01 1.2061E+00 1.2061E+00 1.7183E+00 4.7388E-01 6.9380E+01 1.0984E+02 1.0000E+00 + 5.8837E-01 1.4327E+00 1.6541E+00 2.9369E+00 2.6838E-01 6.4950E+01 1.1893E+02 1.0000E+00 + 5.2776E-01 1.4983E+00 1.2092E+00 1.6948E+00 3.8289E-01 6.1848E+01 1.1633E+02 1.0000E+00 + 5.0197E-01 1.2065E+00 1.1581E+00 1.3575E+00 3.3616E-01 7.6928E+01 1.2027E+02 1.0000E+00 + 8.6780E-01 1.1668E+00 1.0575E+00 1.3379E+00 6.6778E-01 7.1069E+01 9.7567E+01 1.0000E+00 + 5.9625E-01 1.4355E+00 1.1541E+00 1.7096E+00 4.0321E-01 6.4115E+01 1.0649E+02 1.0000E+00 + 7.6662E-01 1.4908E+00 1.3016E+00 1.8827E+00 3.6340E-01 6.5303E+01 1.2965E+02 1.0000E+00 diff --git a/v0.8.7/tutorials/out/ice_cream_straight_sides.control b/v0.8.7/tutorials/out/ice_cream_straight_sides.control new file mode 100644 index 0000000000..ca73287256 --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_straight_sides.control @@ -0,0 +1,57 @@ +\begin{CONTROL_INPUT} + \begin{RUN_PARAMETERS} + mesh file name = ice_cream_straight_sides.mesh + plot file name = ice_cream_straight_sides.tec + stats file name = none + mesh file format = ISM-v2 + polynomial order = 4 + plot file format = skeleton + \end{RUN_PARAMETERS} + + \begin{BACKGROUND_GRID} + x0 = [-8.0, -8.0, 0.0] + dx = [1.0, 1.0, 0.0] + N = [16,16,1] + \end{BACKGROUND_GRID} + + \begin{SPRING_SMOOTHER} + smoothing = ON + smoothing type = LinearAndCrossBarSpring + number of iterations = 25 + \end{SPRING_SMOOTHER} + +\end{CONTROL_INPUT} + +\begin{MODEL} + + \begin{INNER_BOUNDARIES} + + \begin{CHAIN} + name = IceCreamCone + \begin{END_POINTS_LINE} + name = LeftSlant + xStart = [-2.0, 1.0, 0.0] + xEnd = [ 0.0, -3.0, 0.0] + \end{END_POINTS_LINE} + + \begin{END_POINTS_LINE} + name = RightSlant + xStart = [ 0.0, -3.0, 0.0] + xEnd = [ 2.0, 1.0, 0.0] + \end{END_POINTS_LINE} + + \begin{CIRCULAR_ARC} + name = IceCream + units = degrees + center = [ 0.0, 1.0, 0.0] + radius = 2.0 + start angle = 0.0 + end angle = 180.0 + \end{CIRCULAR_ARC} + \end{CHAIN} + + \end{INNER_BOUNDARIES} + +\end{MODEL} +\end{FILE} + diff --git a/v0.8.7/tutorials/out/ice_cream_straight_sides.mesh b/v0.8.7/tutorials/out/ice_cream_straight_sides.mesh new file mode 100644 index 0000000000..2650c3fae3 --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_straight_sides.mesh @@ -0,0 +1,1722 @@ + ISM-V2 + 296 548 252 4 + -8.0000000000000000 -8.0000000000000000 0.0000000000000000 + -7.0000000000000000 -8.0000000000000000 0.0000000000000000 + -6.0000000000000000 -8.0000000000000000 0.0000000000000000 + -5.0000000000000000 -8.0000000000000000 0.0000000000000000 + -4.0000000000000000 -8.0000000000000000 0.0000000000000000 + -3.0000000000000000 -8.0000000000000000 0.0000000000000000 + -2.0000000000000000 -8.0000000000000000 0.0000000000000000 + -1.0000000000000000 -8.0000000000000000 0.0000000000000000 + 0.0000000000000000 -8.0000000000000000 0.0000000000000000 + 1.0000000000000000 -8.0000000000000000 0.0000000000000000 + 2.0000000000000000 -8.0000000000000000 0.0000000000000000 + 3.0000000000000000 -8.0000000000000000 0.0000000000000000 + 4.0000000000000000 -8.0000000000000000 0.0000000000000000 + 5.0000000000000000 -8.0000000000000000 0.0000000000000000 + 6.0000000000000000 -8.0000000000000000 0.0000000000000000 + 7.0000000000000000 -8.0000000000000000 0.0000000000000000 + 8.0000000000000000 -8.0000000000000000 0.0000000000000000 + -8.0000000000000000 -7.0000000000000000 0.0000000000000000 + -6.9999650574820480 -6.9999679261182877 0.0000000000000000 + -5.9998665632941011 -6.9998724565097961 0.0000000000000000 + -4.9996213184978222 -6.9996097515900049 0.0000000000000000 + -3.9991854607018733 -6.9990475318617795 0.0000000000000000 + -2.9986952242321481 -6.9981269410719644 0.0000000000000000 + -1.9985140781988169 -6.9969986109118514 0.0000000000000000 + -0.99897849037601483 -6.9960383675970457 0.0000000000000000 + 4.7989409883115671E-012 -6.9956585147354131 0.0000000000000000 + 0.99897849038591502 -6.9960383675859896 0.0000000000000000 + 1.9985140782087694 -6.9969986108947824 0.0000000000000000 + 2.9986952242406435 -6.9981269410555944 0.0000000000000000 + 3.9991854607075754 -6.9990475318504446 0.0000000000000000 + 4.9996213185007372 -6.9996097515841544 0.0000000000000000 + 5.9998665632952193 -6.9998724565075419 0.0000000000000000 + 6.9999650574823553 -6.9999679261176624 0.0000000000000000 + 8.0000000000000000 -7.0000000000000000 0.0000000000000000 + -8.0000000000000000 -6.0000000000000000 0.0000000000000000 + -6.9998976699211699 -5.9999122764402735 0.0000000000000000 + -5.9996135291753685 -5.9996633062377125 0.0000000000000000 + -4.9989226436212064 -5.9990208119514659 0.0000000000000000 + -3.9977653337150905 -5.9977581248894900 0.0000000000000000 + -2.9966204896079378 -5.9958717654755365 0.0000000000000000 + -1.9964039837778744 -5.9937267870813304 0.0000000000000000 + -0.99766406647423933 -5.9919797466297764 0.0000000000000000 + 2.4090097191669961E-011 -5.9913000293311889 0.0000000000000000 + 0.99766406652596806 -5.9919797465642901 0.0000000000000000 + 1.9964039838329390 -5.9937267869811102 0.0000000000000000 + 2.9966204896556343 -5.9958717653815992 0.0000000000000000 + 3.9977653337461323 -5.9977581248272331 0.0000000000000000 + 4.9989226436360692 -5.9990208119214286 0.0000000000000000 + 5.9996135291805706 -5.9996633062271050 0.0000000000000000 + 6.9998976699224684 -5.9999122764375885 0.0000000000000000 + 8.0000000000000000 -6.0000000000000000 0.0000000000000000 + -8.0000000000000000 -5.0000000000000000 0.0000000000000000 + -6.9997501274902012 -4.9998034408089786 0.0000000000000000 + -5.9990675728612679 -4.9992697388441112 0.0000000000000000 + -4.9973858232938344 -4.9979740837677751 0.0000000000000000 + -3.9945964688979139 -4.9957899032377453 0.0000000000000000 + -2.9923152259971646 -4.9934053345787692 0.0000000000000000 + -1.9929564366212700 -4.9916256720553269 0.0000000000000000 + -0.99625966749685468 -4.9904887766265009 0.0000000000000000 + 8.7516607876472420E-011 -4.9900352567664603 0.0000000000000000 + 0.99625966770123564 -4.9904887763239962 0.0000000000000000 + 1.9929564368609574 -4.9916256715941776 0.0000000000000000 + 2.9923152262075878 -4.9934053341572957 0.0000000000000000 + 3.9945964690280817 -4.9957899029737884 0.0000000000000000 + 4.9973858233507853 -4.9979740836508393 0.0000000000000000 + 5.9990675728791238 -4.9992697388066452 0.0000000000000000 + 6.9997501274942060 -4.9998034408002647 0.0000000000000000 + 8.0000000000000000 -5.0000000000000000 0.0000000000000000 + -8.0000000000000000 -4.0000000000000000 0.0000000000000000 + -6.9994442810297537 -3.9996092645441159 0.0000000000000000 + -5.9979747892447062 -3.9985815423292643 0.0000000000000000 + -4.9942895414925133 -3.9961147104828689 0.0000000000000000 + -3.9872884982575028 -3.9920749153444808 0.0000000000000000 + -2.9807287305762533 -3.9900738967481790 0.0000000000000000 + -1.9852784719276839 -3.9938575615448597 0.0000000000000000 + -0.99708909504304877 -3.9973734973237129 0.0000000000000000 + 2.1033866962410606E-010 -3.9974440103039064 0.0000000000000000 + 0.99708909566634052 -3.9973734962049221 0.0000000000000000 + 1.9852784727951609 -3.9938575598154191 0.0000000000000000 + 2.9807287313302866 -3.9900738952156258 0.0000000000000000 + 3.9872884986834030 -3.9920749144641170 0.0000000000000000 + 4.9942895416564230 -3.9961147101336323 0.0000000000000000 + 5.9979747892902688 -3.9985815422265709 0.0000000000000000 + 6.9994442810389081 -3.9996092645214816 0.0000000000000000 + 8.0000000000000000 -4.0000000000000000 0.0000000000000000 + -8.0000000000000000 -3.0000000000000000 0.0000000000000000 + -6.9988707545318789 -2.9993214807930388 0.0000000000000000 + -5.9959723250282675 -2.9975703581842250 0.0000000000000000 + -4.9889296386581075 -2.9933466877064818 0.0000000000000000 + -3.9746774455653884 -2.9854293504387881 0.0000000000000000 + -2.9486314200342503 -2.9764998162463585 0.0000000000000000 + -1.9503942149316469 -3.0021256138813035 0.0000000000000000 + -1.0261614729009205 -3.0312104940798901 0.0000000000000000 + 1.0261614745493584 -3.0312104908158548 0.0000000000000000 + 1.9503942176787044 -3.0021256083069598 0.0000000000000000 + 2.9486314222736021 -2.9764998116137829 0.0000000000000000 + 3.9746774466049950 -2.9854293481972203 0.0000000000000000 + 4.9889296390019764 -2.9933466869030068 0.0000000000000000 + 5.9959723251123087 -2.9975703579581028 0.0000000000000000 + 6.9988707545467523 -2.9993214807434820 0.0000000000000000 + 8.0000000000000000 -3.0000000000000000 0.0000000000000000 + -8.0000000000000000 -2.0000000000000000 0.0000000000000000 + -6.9979591237819632 -1.9990110686940572 0.0000000000000000 + -5.9927227618739725 -1.9964483151530883 0.0000000000000000 + -4.9801080557894242 -1.9901770532049168 0.0000000000000000 + -3.9576959349815479 -1.9783015452963999 0.0000000000000000 + -2.9197320667969913 -1.9542226531228222 0.0000000000000000 + -1.7464656898511224 -1.8918471048105712 0.0000000000000000 + -1.0538136609635054 -2.3225159630485046 0.0000000000000000 + 1.0538136634211011 -2.3225159580901482 0.0000000000000000 + 1.7464656992760117 -1.8918470856151424 0.0000000000000000 + 2.9197320715976618 -1.9542226428284530 0.0000000000000000 + 3.9576959367463562 -1.9783015410469320 0.0000000000000000 + 4.9801080562838553 -1.9901770517309758 0.0000000000000000 + 5.9927227619766033 -1.9964483147281369 0.0000000000000000 + 6.9979591237966705 -1.9990110685977320 0.0000000000000000 + 8.0000000000000000 -2.0000000000000000 0.0000000000000000 + -8.0000000000000000 -1.0000000000000000 0.0000000000000000 + -6.9968317675017770 -0.99886259715705294 0.0000000000000000 + -5.9885538594769985 -0.99581599636441842 0.0000000000000000 + -4.9678071326527107 -0.98792038864408005 0.0000000000000000 + -3.9258196694477046 -0.97144892599683563 0.0000000000000000 + -2.9029530084938924 -0.95956909177122207 0.0000000000000000 + -1.9915356039925562 -0.87186063981735284 0.0000000000000000 + 1.9915356222472387 -0.87186060209166283 0.0000000000000000 + 2.9029530147562950 -0.95956907678113346 0.0000000000000000 + 3.9258196712523956 -0.97144891979974901 0.0000000000000000 + 4.9678071330492370 -0.98792038628267198 0.0000000000000000 + 5.9885538595330425 -0.99581599564497181 0.0000000000000000 + 6.9968317675030942 -0.99886259698874036 0.0000000000000000 + 8.0000000000000000 -1.0000000000000000 0.0000000000000000 + -8.0000000000000000 0.0000000000000000 0.0000000000000000 + -6.9958722740070352 9.2605842887460131E-004 0.0000000000000000 + -5.9849442010567895 3.5673767964436867E-003 0.0000000000000000 + -4.9568386769387480 1.1004836478173498E-002 0.0000000000000000 + -3.8951308919991683 2.9902496021364251E-002 0.0000000000000000 + -2.7032673839116930 9.0361097440859073E-002 0.0000000000000000 + -2.0571891363329842 -0.24562578581377828 0.0000000000000000 + 2.0571891499716477 -0.24562575669779302 0.0000000000000000 + 2.7032673869204902 9.0361111129516711E-002 0.0000000000000000 + 3.8951308924034209 2.9902504788020891E-002 0.0000000000000000 + 4.9568386769148196 1.1004839991627878E-002 0.0000000000000000 + 5.9849442010018254 3.5673778782903827E-003 0.0000000000000000 + 6.9958722739839931 9.2605868315656019E-004 0.0000000000000000 + 8.0000000000000000 0.0000000000000000 0.0000000000000000 + -8.0000000000000000 1.0000000000000000 0.0000000000000000 + -6.9955326960520150 1.0003662482577591 0.0000000000000000 + -5.9837177157599681 1.0016260315303323 0.0000000000000000 + -4.9534382883740049 1.0055660842008067 0.0000000000000000 + -3.8899281210667138 1.0153264300994280 0.0000000000000000 + -2.8576269259239067 1.0332611206083833 0.0000000000000000 + 2.8576269206180700 1.0332611487718453 0.0000000000000000 + 3.8899281199071547 1.0153264422760757 0.0000000000000000 + 4.9534382879928192 1.0055660886453257 0.0000000000000000 + 5.9837177156175274 1.0016260328696145 0.0000000000000000 + 6.9955326960100548 1.0003662485715008 0.0000000000000000 + 8.0000000000000000 1.0000000000000000 0.0000000000000000 + -8.0000000000000000 2.0000000000000000 0.0000000000000000 + -6.9960066511840280 1.9997507013087121 0.0000000000000000 + -5.9856229332322686 1.9994091100965983 0.0000000000000000 + -4.9595830937353638 1.9990558628265500 0.0000000000000000 + -3.9045581869999268 1.9973598907135701 0.0000000000000000 + -2.7368541689106971 1.9740722869324492 0.0000000000000000 + -2.1263404894339657 2.2948900365574501 0.0000000000000000 + 2.1263405099846904 2.2948900432082628 0.0000000000000000 + 2.7368541668551467 1.9740723203179147 0.0000000000000000 + 3.9045581868167778 1.9973599020749815 0.0000000000000000 + 4.9595830935518537 1.9990558669341754 0.0000000000000000 + 5.9856229331196342 1.9994091113584684 0.0000000000000000 + 6.9960066511449766 1.9997507016103995 0.0000000000000000 + 8.0000000000000000 2.0000000000000000 0.0000000000000000 + -8.0000000000000000 3.0000000000000000 0.0000000000000000 + -6.9970741145254109 2.9994054140824691 0.0000000000000000 + -5.9897519210034096 2.9981360157242580 0.0000000000000000 + -4.9724862257635190 2.9954390224920608 0.0000000000000000 + -3.9404681650821662 2.9905143469756337 0.0000000000000000 + -2.9327419944795010 2.9950483993160772 0.0000000000000000 + -1.9277593203701284 2.9288827058393201 0.0000000000000000 + -1.2934382299147573 3.1270574946750189 0.0000000000000000 + 1.2934382981899317 3.1270574584627195 0.0000000000000000 + 1.9277593629377268 2.9288826795836580 0.0000000000000000 + 2.9327420063368876 2.9950484011603677 0.0000000000000000 + 3.9404681675772051 2.9905143520853521 0.0000000000000000 + 4.9724862261650982 2.9954390249429101 0.0000000000000000 + 5.9897519210122363 2.9981360165754762 0.0000000000000000 + 6.9970741145083171 2.9994054143006470 0.0000000000000000 + 8.0000000000000000 3.0000000000000000 0.0000000000000000 + -8.0000000000000000 4.0000000000000000 0.0000000000000000 + -6.9982592393987968 3.9994059470511574 0.0000000000000000 + -5.9941718412117382 3.9980597406816538 0.0000000000000000 + -4.9856339697631320 3.9950007774720344 0.0000000000000000 + -3.9751323492146069 3.9888639093805867 0.0000000000000000 + -2.9708305521947196 3.9715346676422256 0.0000000000000000 + -1.9930387640582898 3.9338224795098449 0.0000000000000000 + -0.96763685658155807 3.7397274668414906 0.0000000000000000 + 3.3429034151622827E-008 3.8724227990342959 0.0000000000000000 + 0.96763691762346205 3.7397274489896106 0.0000000000000000 + 1.9930387926022926 3.9338224677871469 0.0000000000000000 + 2.9708305639402397 3.9715346636992050 0.0000000000000000 + 3.9751323526676017 3.9888639097163923 0.0000000000000000 + 4.9856339705045638 3.9950007782744765 0.0000000000000000 + 5.9941718413174092 3.9980597410666165 0.0000000000000000 + 6.9982592394038319 3.9994059471655752 0.0000000000000000 + 8.0000000000000000 4.0000000000000000 0.0000000000000000 + -8.0000000000000000 5.0000000000000000 0.0000000000000000 + -6.9991633741456480 4.9995936517804571 0.0000000000000000 + -5.9973416427807713 4.9986235063327511 0.0000000000000000 + -4.9939474927689487 4.9961691895174090 0.0000000000000000 + -3.9898774621657993 4.9900396721612950 0.0000000000000000 + -2.9882983865581152 4.9754672684598420 0.0000000000000000 + -1.9884726792358567 4.9414046357118258 0.0000000000000000 + -0.99054764142862672 4.9076265219014017 0.0000000000000000 + 1.5044633229432108E-008 4.8977197323029209 0.0000000000000000 + 0.99054766715027320 4.9076265171995406 0.0000000000000000 + 1.9884726950216143 4.9414046308491191 0.0000000000000000 + 2.9882983935721197 4.9754672660048422 0.0000000000000000 + 3.9898774645940622 4.9900396715407211 0.0000000000000000 + 4.9939474933945487 4.9961691895653884 0.0000000000000000 + 5.9973416428964281 4.9986235064339004 0.0000000000000000 + 6.9991633741594397 4.9995936518214812 0.0000000000000000 + 8.0000000000000000 5.0000000000000000 0.0000000000000000 + -8.0000000000000000 6.0000000000000000 0.0000000000000000 + -6.9996739984196390 5.9997893596429419 0.0000000000000000 + -5.9989986118848257 5.9992529007592390 0.0000000000000000 + -4.9977434317195026 5.9977709675596005 0.0000000000000000 + -3.9960992156787842 5.9940404411235333 0.0000000000000000 + -2.9946713951079547 5.9858782583382260 0.0000000000000000 + -1.9942453640855442 5.9731438824671530 0.0000000000000000 + -0.99595680588594671 5.9611672784475598 0.0000000000000000 + 5.4895336706131739E-009 5.9564095944048683 0.0000000000000000 + 0.99595681544617021 5.9611672771802988 0.0000000000000000 + 1.9942453703764043 5.9731438809327670 0.0000000000000000 + 2.9946713982270148 5.9858782573487614 0.0000000000000000 + 3.9960992168542182 5.9940404407363950 0.0000000000000000 + 4.9977434320589262 5.9977709674807409 0.0000000000000000 + 5.9989986119578065 5.9992529007644064 0.0000000000000000 + 6.9996739984307244 5.9997893596515759 0.0000000000000000 + 8.0000000000000000 6.0000000000000000 0.0000000000000000 + -8.0000000000000000 7.0000000000000000 0.0000000000000000 + -6.9999004989624796 6.9999196928494865 0.0000000000000000 + -5.9996945336645995 6.9997036786799463 0.0000000000000000 + -4.9992926804199769 6.9990875647356665 0.0000000000000000 + -3.9986895202660464 6.9975750738144677 0.0000000000000000 + -2.9980654465831940 6.9946658241746293 0.0000000000000000 + -1.9978514474788915 6.9906409012147579 0.0000000000000000 + -0.99851861799346908 6.9869919193812402 0.0000000000000000 + 1.5699479313662187E-009 6.9855176655399553 0.0000000000000000 + 0.99851862076110953 6.9869919190879317 0.0000000000000000 + 1.9978514493699755 6.9906409008314814 0.0000000000000000 + 2.9980654475797910 6.9946658238941168 0.0000000000000000 + 3.9986895206695174 6.9975750736809648 0.0000000000000000 + 4.9992926805452846 6.9990875646946797 0.0000000000000000 + 5.9996945336942300 6.9997036786734528 0.0000000000000000 + 6.9999004989676070 6.9999196928498879 0.0000000000000000 + 8.0000000000000000 7.0000000000000000 0.0000000000000000 + -8.0000000000000000 8.0000000000000000 0.0000000000000000 + -7.0000000000000000 8.0000000000000000 0.0000000000000000 + -6.0000000000000000 8.0000000000000000 0.0000000000000000 + -5.0000000000000000 8.0000000000000000 0.0000000000000000 + -4.0000000000000000 8.0000000000000000 0.0000000000000000 + -3.0000000000000000 8.0000000000000000 0.0000000000000000 + -2.0000000000000000 8.0000000000000000 0.0000000000000000 + -1.0000000000000000 8.0000000000000000 0.0000000000000000 + 0.0000000000000000 8.0000000000000000 0.0000000000000000 + 1.0000000000000000 8.0000000000000000 0.0000000000000000 + 2.0000000000000000 8.0000000000000000 0.0000000000000000 + 3.0000000000000000 8.0000000000000000 0.0000000000000000 + 4.0000000000000000 8.0000000000000000 0.0000000000000000 + 5.0000000000000000 8.0000000000000000 0.0000000000000000 + 6.0000000000000000 8.0000000000000000 0.0000000000000000 + 7.0000000000000000 8.0000000000000000 0.0000000000000000 + 8.0000000000000000 8.0000000000000000 0.0000000000000000 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + 0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 0.84062499397195267 -1.3187500120560947 0.0000000000000000 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + 1.5593750060280469 0.11875001205609381 0.0000000000000000 + 1.8406249939719526 0.68124998794390512 0.0000000000000000 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + 1.9234528539428934 1.5480229180052039 0.0000000000000000 + 1.7577069153495042 1.9541836299856183 0.0000000000000000 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + 0.95418362998561834 2.7577069153495040 0.0000000000000000 + 0.54802294711610822 2.9234528456487245 0.0000000000000000 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + -0.54802270862631064 2.9234529135983243 0.0000000000000000 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + -1.7577069153495022 1.9541836299856215 0.0000000000000000 + -1.9234529135983240 1.5480227086263110 0.0000000000000000 + -2.0000000000000000 1.0000000000000000 0.0000000000000000 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + -1.5593750060280471 0.11875001205609437 0.0000000000000000 + -1.2000000031251037 -0.59999999374979263 0.0000000000000000 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 1 2 1 0 1 0 + 2 19 1 2 2 4 + 18 19 1 17 3 1 + 1 18 1 0 4 0 + 2 3 2 0 1 0 + 3 20 2 3 2 4 + 19 20 2 18 3 1 + 3 4 3 0 1 0 + 4 21 3 4 2 4 + 20 21 3 19 3 1 + 4 5 4 0 1 0 + 5 22 4 5 2 4 + 21 22 4 20 3 1 + 5 6 5 0 1 0 + 6 23 5 6 2 4 + 22 23 5 21 3 1 + 6 7 6 0 1 0 + 7 24 6 7 2 4 + 23 24 6 22 3 1 + 7 8 7 0 1 0 + 8 25 7 8 2 4 + 24 25 7 23 3 1 + 8 9 8 0 1 0 + 9 26 8 9 2 4 + 25 26 8 24 3 1 + 9 10 9 0 1 0 + 10 27 9 10 2 4 + 26 27 9 25 3 1 + 10 11 10 0 1 0 + 11 28 10 11 2 4 + 27 28 10 26 3 1 + 11 12 11 0 1 0 + 12 29 11 12 2 4 + 28 29 11 27 3 1 + 12 13 12 0 1 0 + 13 30 12 13 2 4 + 29 30 12 28 3 1 + 13 14 13 0 1 0 + 14 31 13 14 2 4 + 30 31 13 29 3 1 + 14 15 14 0 1 0 + 15 32 14 15 2 4 + 31 32 14 30 3 1 + 15 16 15 0 1 0 + 16 33 15 16 2 4 + 32 33 15 31 3 1 + 16 17 16 0 1 0 + 17 34 16 0 2 0 + 33 34 16 32 3 1 + 19 36 17 18 2 4 + 35 36 17 33 3 1 + 18 35 17 0 4 0 + 20 37 18 19 2 4 + 36 37 18 34 3 1 + 21 38 19 20 2 4 + 37 38 19 35 3 1 + 22 39 20 21 2 4 + 38 39 20 36 3 1 + 23 40 21 22 2 4 + 39 40 21 37 3 1 + 24 41 22 23 2 4 + 40 41 22 38 3 1 + 25 42 23 24 2 4 + 41 42 23 39 3 1 + 26 43 24 25 2 4 + 42 43 24 40 3 1 + 27 44 25 26 2 4 + 43 44 25 41 3 1 + 28 45 26 27 2 4 + 44 45 26 42 3 1 + 29 46 27 28 2 4 + 45 46 27 43 3 1 + 30 47 28 29 2 4 + 46 47 28 44 3 1 + 31 48 29 30 2 4 + 47 48 29 45 3 1 + 32 49 30 31 2 4 + 48 49 30 46 3 1 + 33 50 31 32 2 4 + 49 50 31 47 3 1 + 34 51 32 0 2 0 + 50 51 32 48 3 1 + 36 53 33 34 2 4 + 52 53 33 49 3 1 + 35 52 33 0 4 0 + 37 54 34 35 2 4 + 53 54 34 50 3 1 + 38 55 35 36 2 4 + 54 55 35 51 3 1 + 39 56 36 37 2 4 + 55 56 36 52 3 1 + 40 57 37 38 2 4 + 56 57 37 53 3 1 + 41 58 38 39 2 4 + 57 58 38 54 3 1 + 42 59 39 40 2 4 + 58 59 39 55 3 1 + 43 60 40 41 2 4 + 59 60 40 56 3 1 + 44 61 41 42 2 4 + 60 61 41 57 3 1 + 45 62 42 43 2 4 + 61 62 42 58 3 1 + 46 63 43 44 2 4 + 62 63 43 59 3 1 + 47 64 44 45 2 4 + 63 64 44 60 3 1 + 48 65 45 46 2 4 + 64 65 45 61 3 1 + 49 66 46 47 2 4 + 65 66 46 62 3 1 + 50 67 47 48 2 4 + 66 67 47 63 3 1 + 51 68 48 0 2 0 + 67 68 48 64 3 1 + 53 70 49 50 2 4 + 69 70 49 65 3 1 + 52 69 49 0 4 0 + 54 71 50 51 2 4 + 70 71 50 66 3 1 + 55 72 51 52 2 4 + 71 72 51 67 3 1 + 56 73 52 53 2 4 + 72 73 52 68 3 1 + 57 74 53 54 2 4 + 73 74 53 69 3 1 + 58 75 54 55 2 4 + 74 75 54 70 3 1 + 59 76 55 56 2 4 + 75 76 55 71 3 1 + 60 77 56 57 2 4 + 76 77 56 227 3 2 + 61 78 57 58 2 4 + 77 78 57 228 3 2 + 62 79 58 59 2 4 + 78 79 58 72 3 1 + 63 80 59 60 2 4 + 79 80 59 73 3 1 + 64 81 60 61 2 4 + 80 81 60 74 3 1 + 65 82 61 62 2 4 + 81 82 61 75 3 1 + 66 83 62 63 2 4 + 82 83 62 76 3 1 + 67 84 63 64 2 4 + 83 84 63 77 3 1 + 68 85 64 0 2 0 + 84 85 64 78 3 1 + 70 87 65 66 2 4 + 86 87 65 79 3 1 + 69 86 65 0 4 0 + 71 88 66 67 2 4 + 87 88 66 80 3 1 + 72 89 67 68 2 4 + 88 89 67 81 3 1 + 73 90 68 69 2 4 + 89 90 68 82 3 1 + 74 91 69 70 2 4 + 90 91 69 83 3 1 + 75 92 70 71 2 4 + 91 92 70 84 3 1 + 76 93 71 227 2 -1 + 92 93 71 85 3 1 + 79 95 72 73 2 4 + 94 95 72 86 3 1 + 78 94 72 228 4 -3 + 80 96 73 74 2 4 + 95 96 73 87 3 1 + 81 97 74 75 2 4 + 96 97 74 88 3 1 + 82 98 75 76 2 4 + 97 98 75 89 3 1 + 83 99 76 77 2 4 + 98 99 76 90 3 1 + 84 100 77 78 2 4 + 99 100 77 91 3 1 + 85 101 78 0 2 0 + 100 101 78 92 3 1 + 87 103 79 80 2 4 + 102 103 79 93 3 1 + 86 102 79 0 4 0 + 88 104 80 81 2 4 + 103 104 80 94 3 1 + 89 105 81 82 2 4 + 104 105 81 95 3 1 + 90 106 82 83 2 4 + 105 106 82 96 3 1 + 91 107 83 84 2 4 + 106 107 83 97 3 1 + 92 108 84 85 2 4 + 107 108 84 98 3 1 + 93 109 85 252 2 -1 + 108 109 85 251 3 1 + 95 111 86 87 2 4 + 110 111 86 230 3 1 + 94 110 86 229 4 1 + 96 112 87 88 2 4 + 111 112 87 99 3 1 + 97 113 88 89 2 4 + 112 113 88 100 3 1 + 98 114 89 90 2 4 + 113 114 89 101 3 1 + 99 115 90 91 2 4 + 114 115 90 102 3 1 + 100 116 91 92 2 4 + 115 116 91 103 3 1 + 101 117 92 0 2 0 + 116 117 92 104 3 1 + 103 119 93 94 2 4 + 118 119 93 105 3 1 + 102 118 93 0 4 0 + 104 120 94 95 2 4 + 119 120 94 106 3 1 + 105 121 95 96 2 4 + 120 121 95 107 3 1 + 106 122 96 97 2 4 + 121 122 96 108 3 1 + 107 123 97 98 2 4 + 122 123 97 109 3 1 + 108 124 98 250 2 -1 + 123 124 98 110 3 1 + 112 126 99 100 2 4 + 125 126 99 111 3 1 + 111 125 99 231 4 1 + 113 127 100 101 2 4 + 126 127 100 112 3 1 + 114 128 101 102 2 4 + 127 128 101 113 3 1 + 115 129 102 103 2 4 + 128 129 102 114 3 1 + 116 130 103 104 2 4 + 129 130 103 115 3 1 + 117 131 104 0 2 0 + 130 131 104 116 3 1 + 119 133 105 106 2 4 + 132 133 105 117 3 1 + 118 132 105 0 4 0 + 120 134 106 107 2 4 + 133 134 106 118 3 1 + 121 135 107 108 2 4 + 134 135 107 119 3 1 + 122 136 108 109 2 4 + 135 136 108 120 3 1 + 123 137 109 110 2 4 + 136 137 109 121 3 1 + 124 138 110 249 2 -1 + 137 138 110 248 3 1 + 126 140 111 112 2 4 + 139 140 111 233 3 1 + 125 139 111 232 4 1 + 127 141 112 113 2 4 + 140 141 112 122 3 1 + 128 142 113 114 2 4 + 141 142 113 123 3 1 + 129 143 114 115 2 4 + 142 143 114 124 3 1 + 130 144 115 116 2 4 + 143 144 115 125 3 1 + 131 145 116 0 2 0 + 144 145 116 126 3 1 + 133 147 117 118 2 4 + 146 147 117 127 3 1 + 132 146 117 0 4 0 + 134 148 118 119 2 4 + 147 148 118 128 3 1 + 135 149 119 120 2 4 + 148 149 119 129 3 1 + 136 150 120 121 2 4 + 149 150 120 130 3 1 + 137 151 121 247 2 -1 + 150 151 121 131 3 1 + 141 153 122 123 2 4 + 152 153 122 132 3 1 + 140 152 122 234 4 1 + 142 154 123 124 2 4 + 153 154 123 133 3 1 + 143 155 124 125 2 4 + 154 155 124 134 3 1 + 144 156 125 126 2 4 + 155 156 125 135 3 1 + 145 157 126 0 2 0 + 156 157 126 136 3 1 + 147 159 127 128 2 4 + 158 159 127 137 3 1 + 146 158 127 0 4 0 + 148 160 128 129 2 4 + 159 160 128 138 3 1 + 149 161 129 130 2 4 + 160 161 129 139 3 1 + 150 162 130 131 2 4 + 161 162 130 140 3 1 + 151 163 131 246 2 -1 + 162 163 131 141 3 1 + 153 167 132 133 2 4 + 166 167 132 144 3 1 + 152 166 132 235 4 1 + 154 168 133 134 2 4 + 167 168 133 145 3 1 + 155 169 134 135 2 4 + 168 169 134 146 3 1 + 156 170 135 136 2 4 + 169 170 135 147 3 1 + 157 171 136 0 2 0 + 170 171 136 148 3 1 + 159 173 137 138 2 4 + 172 173 137 149 3 1 + 158 172 137 0 4 0 + 160 174 138 139 2 4 + 173 174 138 150 3 1 + 161 175 139 140 2 4 + 174 175 139 151 3 1 + 162 176 140 141 2 4 + 175 176 140 152 3 1 + 163 177 141 142 2 4 + 176 177 141 153 3 1 + 163 164 142 245 1 -1 + 164 178 142 244 2 -1 + 177 178 142 154 3 1 + 165 166 143 236 1 -1 + 166 182 143 144 2 4 + 181 182 143 157 3 1 + 165 181 143 237 4 1 + 167 183 144 145 2 4 + 182 183 144 158 3 1 + 168 184 145 146 2 4 + 183 184 145 159 3 1 + 169 185 146 147 2 4 + 184 185 146 160 3 1 + 170 186 147 148 2 4 + 185 186 147 161 3 1 + 171 187 148 0 2 0 + 186 187 148 162 3 1 + 173 189 149 150 2 4 + 188 189 149 163 3 1 + 172 188 149 0 4 0 + 174 190 150 151 2 4 + 189 190 150 164 3 1 + 175 191 151 152 2 4 + 190 191 151 165 3 1 + 176 192 152 153 2 4 + 191 192 152 166 3 1 + 177 193 153 154 2 4 + 192 193 153 167 3 1 + 178 194 154 155 2 4 + 193 194 154 168 3 1 + 178 179 155 243 1 -1 + 179 195 155 242 2 -1 + 194 195 155 169 3 1 + 180 181 156 238 1 -1 + 181 198 156 157 2 4 + 197 198 156 172 3 1 + 180 197 156 239 4 1 + 182 199 157 158 2 4 + 198 199 157 173 3 1 + 183 200 158 159 2 4 + 199 200 158 174 3 1 + 184 201 159 160 2 4 + 200 201 159 175 3 1 + 185 202 160 161 2 4 + 201 202 160 176 3 1 + 186 203 161 162 2 4 + 202 203 161 177 3 1 + 187 204 162 0 2 0 + 203 204 162 178 3 1 + 189 206 163 164 2 4 + 205 206 163 179 3 1 + 188 205 163 0 4 0 + 190 207 164 165 2 4 + 206 207 164 180 3 1 + 191 208 165 166 2 4 + 207 208 165 181 3 1 + 192 209 166 167 2 4 + 208 209 166 182 3 1 + 193 210 167 168 2 4 + 209 210 167 183 3 1 + 194 211 168 169 2 4 + 210 211 168 184 3 1 + 195 212 169 170 2 4 + 211 212 169 185 3 1 + 195 196 170 241 1 -1 + 196 213 170 171 2 4 + 212 213 170 186 3 1 + 196 197 171 240 1 -1 + 197 214 171 172 2 4 + 213 214 171 187 3 1 + 198 215 172 173 2 4 + 214 215 172 188 3 1 + 199 216 173 174 2 4 + 215 216 173 189 3 1 + 200 217 174 175 2 4 + 216 217 174 190 3 1 + 201 218 175 176 2 4 + 217 218 175 191 3 1 + 202 219 176 177 2 4 + 218 219 176 192 3 1 + 203 220 177 178 2 4 + 219 220 177 193 3 1 + 204 221 178 0 2 0 + 220 221 178 194 3 1 + 206 223 179 180 2 4 + 222 223 179 195 3 1 + 205 222 179 0 4 0 + 207 224 180 181 2 4 + 223 224 180 196 3 1 + 208 225 181 182 2 4 + 224 225 181 197 3 1 + 209 226 182 183 2 4 + 225 226 182 198 3 1 + 210 227 183 184 2 4 + 226 227 183 199 3 1 + 211 228 184 185 2 4 + 227 228 184 200 3 1 + 212 229 185 186 2 4 + 228 229 185 201 3 1 + 213 230 186 187 2 4 + 229 230 186 202 3 1 + 214 231 187 188 2 4 + 230 231 187 203 3 1 + 215 232 188 189 2 4 + 231 232 188 204 3 1 + 216 233 189 190 2 4 + 232 233 189 205 3 1 + 217 234 190 191 2 4 + 233 234 190 206 3 1 + 218 235 191 192 2 4 + 234 235 191 207 3 1 + 219 236 192 193 2 4 + 235 236 192 208 3 1 + 220 237 193 194 2 4 + 236 237 193 209 3 1 + 221 238 194 0 2 0 + 237 238 194 210 3 1 + 223 240 195 196 2 4 + 239 240 195 211 3 1 + 222 239 195 0 4 0 + 224 241 196 197 2 4 + 240 241 196 212 3 1 + 225 242 197 198 2 4 + 241 242 197 213 3 1 + 226 243 198 199 2 4 + 242 243 198 214 3 1 + 227 244 199 200 2 4 + 243 244 199 215 3 1 + 228 245 200 201 2 4 + 244 245 200 216 3 1 + 229 246 201 202 2 4 + 245 246 201 217 3 1 + 230 247 202 203 2 4 + 246 247 202 218 3 1 + 231 248 203 204 2 4 + 247 248 203 219 3 1 + 232 249 204 205 2 4 + 248 249 204 220 3 1 + 233 250 205 206 2 4 + 249 250 205 221 3 1 + 234 251 206 207 2 4 + 250 251 206 222 3 1 + 235 252 207 208 2 4 + 251 252 207 223 3 1 + 236 253 208 209 2 4 + 252 253 208 224 3 1 + 237 254 209 210 2 4 + 253 254 209 225 3 1 + 238 255 210 0 2 0 + 254 255 210 226 3 1 + 240 257 211 212 2 4 + 256 257 211 0 3 0 + 239 256 211 0 4 0 + 241 258 212 213 2 4 + 257 258 212 0 3 0 + 242 259 213 214 2 4 + 258 259 213 0 3 0 + 243 260 214 215 2 4 + 259 260 214 0 3 0 + 244 261 215 216 2 4 + 260 261 215 0 3 0 + 245 262 216 217 2 4 + 261 262 216 0 3 0 + 246 263 217 218 2 4 + 262 263 217 0 3 0 + 247 264 218 219 2 4 + 263 264 218 0 3 0 + 248 265 219 220 2 4 + 264 265 219 0 3 0 + 249 266 220 221 2 4 + 265 266 220 0 3 0 + 250 267 221 222 2 4 + 266 267 221 0 3 0 + 251 268 222 223 2 4 + 267 268 222 0 3 0 + 252 269 223 224 2 4 + 268 269 223 0 3 0 + 253 270 224 225 2 4 + 269 270 224 0 3 0 + 254 271 225 226 2 4 + 270 271 225 0 3 0 + 255 272 226 0 2 0 + 271 272 226 0 3 0 + 273 77 227 228 3 1 + 93 273 227 252 4 2 + 273 94 228 229 4 -4 + 110 274 229 230 2 4 + 273 274 229 0 3 0 + 111 275 230 231 2 4 + 274 275 230 0 3 0 + 125 276 231 232 2 4 + 275 276 231 0 3 0 + 139 277 232 233 2 4 + 276 277 232 0 3 0 + 140 278 233 234 2 4 + 277 278 233 0 3 0 + 152 279 234 235 2 4 + 278 279 234 0 3 0 + 166 280 235 236 2 4 + 279 280 235 0 3 0 + 165 281 236 237 2 4 + 280 281 236 0 3 0 + 181 282 237 238 2 4 + 281 282 237 0 3 0 + 180 283 238 239 2 4 + 282 283 238 0 3 0 + 197 284 239 240 2 4 + 283 284 239 0 3 0 + 196 285 240 241 2 4 + 284 285 240 0 3 0 + 195 286 241 242 2 4 + 285 286 241 0 3 0 + 179 287 242 243 2 4 + 286 287 242 0 3 0 + 178 288 243 244 2 4 + 287 288 243 0 3 0 + 164 289 244 245 2 4 + 288 289 244 0 3 0 + 163 290 245 246 2 4 + 289 290 245 0 3 0 + 151 291 246 247 2 4 + 290 291 246 0 3 0 + 137 292 247 248 2 4 + 291 292 247 0 3 0 + 138 293 248 249 2 4 + 292 293 248 0 3 0 + 124 294 249 250 2 4 + 293 294 249 0 3 0 + 108 295 250 251 2 4 + 294 295 250 0 3 0 + 109 296 251 252 2 4 + 295 296 251 0 3 0 + 296 273 252 0 3 0 + 1 2 19 18 + 0 0 0 0 + Bottom --- --- Left + 2 3 20 19 + 0 0 0 0 + Bottom --- --- --- + 3 4 21 20 + 0 0 0 0 + Bottom --- --- --- + 4 5 22 21 + 0 0 0 0 + Bottom --- --- --- + 5 6 23 22 + 0 0 0 0 + Bottom --- --- --- + 6 7 24 23 + 0 0 0 0 + Bottom --- --- --- + 7 8 25 24 + 0 0 0 0 + Bottom --- --- --- + 8 9 26 25 + 0 0 0 0 + Bottom --- --- --- + 9 10 27 26 + 0 0 0 0 + Bottom --- --- --- + 10 11 28 27 + 0 0 0 0 + Bottom --- --- --- + 11 12 29 28 + 0 0 0 0 + Bottom --- --- --- + 12 13 30 29 + 0 0 0 0 + Bottom --- --- --- + 13 14 31 30 + 0 0 0 0 + Bottom --- --- --- + 14 15 32 31 + 0 0 0 0 + Bottom --- --- --- + 15 16 33 32 + 0 0 0 0 + Bottom --- --- --- + 16 17 34 33 + 0 0 0 0 + Bottom Right --- --- + 18 19 36 35 + 0 0 0 0 + --- --- --- Left + 19 20 37 36 + 0 0 0 0 + --- --- --- --- + 20 21 38 37 + 0 0 0 0 + --- --- --- --- + 21 22 39 38 + 0 0 0 0 + --- --- --- --- + 22 23 40 39 + 0 0 0 0 + --- --- --- --- + 23 24 41 40 + 0 0 0 0 + --- --- --- --- + 24 25 42 41 + 0 0 0 0 + --- --- --- --- + 25 26 43 42 + 0 0 0 0 + --- --- --- --- + 26 27 44 43 + 0 0 0 0 + --- --- --- --- + 27 28 45 44 + 0 0 0 0 + --- --- --- --- + 28 29 46 45 + 0 0 0 0 + --- --- --- --- + 29 30 47 46 + 0 0 0 0 + --- --- --- --- + 30 31 48 47 + 0 0 0 0 + --- --- --- --- + 31 32 49 48 + 0 0 0 0 + --- --- --- --- + 32 33 50 49 + 0 0 0 0 + --- --- --- --- + 33 34 51 50 + 0 0 0 0 + --- Right --- --- + 35 36 53 52 + 0 0 0 0 + --- --- --- Left + 36 37 54 53 + 0 0 0 0 + --- --- --- --- + 37 38 55 54 + 0 0 0 0 + --- --- --- --- + 38 39 56 55 + 0 0 0 0 + --- --- --- --- + 39 40 57 56 + 0 0 0 0 + --- --- --- --- + 40 41 58 57 + 0 0 0 0 + --- --- --- --- + 41 42 59 58 + 0 0 0 0 + --- --- --- --- + 42 43 60 59 + 0 0 0 0 + --- --- --- --- + 43 44 61 60 + 0 0 0 0 + --- --- --- --- + 44 45 62 61 + 0 0 0 0 + --- --- --- --- + 45 46 63 62 + 0 0 0 0 + --- --- --- --- + 46 47 64 63 + 0 0 0 0 + --- --- --- --- + 47 48 65 64 + 0 0 0 0 + --- --- --- --- + 48 49 66 65 + 0 0 0 0 + --- --- --- --- + 49 50 67 66 + 0 0 0 0 + --- --- --- --- + 50 51 68 67 + 0 0 0 0 + --- Right --- --- + 52 53 70 69 + 0 0 0 0 + --- --- --- Left + 53 54 71 70 + 0 0 0 0 + --- --- --- --- + 54 55 72 71 + 0 0 0 0 + --- --- --- --- + 55 56 73 72 + 0 0 0 0 + --- --- --- --- + 56 57 74 73 + 0 0 0 0 + --- --- --- --- + 57 58 75 74 + 0 0 0 0 + --- --- --- --- + 58 59 76 75 + 0 0 0 0 + --- --- --- --- + 59 60 77 76 + 0 0 0 0 + --- --- --- --- + 60 61 78 77 + 0 0 0 0 + --- --- --- --- + 61 62 79 78 + 0 0 0 0 + --- --- --- --- + 62 63 80 79 + 0 0 0 0 + --- --- --- --- + 63 64 81 80 + 0 0 0 0 + --- --- --- --- + 64 65 82 81 + 0 0 0 0 + --- --- --- --- + 65 66 83 82 + 0 0 0 0 + --- --- --- --- + 66 67 84 83 + 0 0 0 0 + --- --- --- --- + 67 68 85 84 + 0 0 0 0 + --- Right --- --- + 69 70 87 86 + 0 0 0 0 + --- --- --- Left + 70 71 88 87 + 0 0 0 0 + --- --- --- --- + 71 72 89 88 + 0 0 0 0 + --- --- --- --- + 72 73 90 89 + 0 0 0 0 + --- --- --- --- + 73 74 91 90 + 0 0 0 0 + --- --- --- --- + 74 75 92 91 + 0 0 0 0 + --- --- --- --- + 75 76 93 92 + 0 0 0 0 + --- --- --- --- + 78 79 95 94 + 0 0 0 0 + --- --- --- --- + 79 80 96 95 + 0 0 0 0 + --- --- --- --- + 80 81 97 96 + 0 0 0 0 + --- --- --- --- + 81 82 98 97 + 0 0 0 0 + --- --- --- --- + 82 83 99 98 + 0 0 0 0 + --- --- --- --- + 83 84 100 99 + 0 0 0 0 + --- --- --- --- + 84 85 101 100 + 0 0 0 0 + --- Right --- --- + 86 87 103 102 + 0 0 0 0 + --- --- --- Left + 87 88 104 103 + 0 0 0 0 + --- --- --- --- + 88 89 105 104 + 0 0 0 0 + --- --- --- --- + 89 90 106 105 + 0 0 0 0 + --- --- --- --- + 90 91 107 106 + 0 0 0 0 + --- --- --- --- + 91 92 108 107 + 0 0 0 0 + --- --- --- --- + 92 93 109 108 + 0 0 0 0 + --- --- --- --- + 94 95 111 110 + 0 0 0 0 + --- --- --- --- + 95 96 112 111 + 0 0 0 0 + --- --- --- --- + 96 97 113 112 + 0 0 0 0 + --- --- --- --- + 97 98 114 113 + 0 0 0 0 + --- --- --- --- + 98 99 115 114 + 0 0 0 0 + --- --- --- --- + 99 100 116 115 + 0 0 0 0 + --- --- --- --- + 100 101 117 116 + 0 0 0 0 + --- Right --- --- + 102 103 119 118 + 0 0 0 0 + --- --- --- Left + 103 104 120 119 + 0 0 0 0 + --- --- --- --- + 104 105 121 120 + 0 0 0 0 + --- --- --- --- + 105 106 122 121 + 0 0 0 0 + --- --- --- --- + 106 107 123 122 + 0 0 0 0 + --- --- --- --- + 107 108 124 123 + 0 0 0 0 + --- --- --- --- + 111 112 126 125 + 0 0 0 0 + --- --- --- --- + 112 113 127 126 + 0 0 0 0 + --- --- --- --- + 113 114 128 127 + 0 0 0 0 + --- --- --- --- + 114 115 129 128 + 0 0 0 0 + --- --- --- --- + 115 116 130 129 + 0 0 0 0 + --- --- --- --- + 116 117 131 130 + 0 0 0 0 + --- Right --- --- + 118 119 133 132 + 0 0 0 0 + --- --- --- Left + 119 120 134 133 + 0 0 0 0 + --- --- --- --- + 120 121 135 134 + 0 0 0 0 + --- --- --- --- + 121 122 136 135 + 0 0 0 0 + --- --- --- --- + 122 123 137 136 + 0 0 0 0 + --- --- --- --- + 123 124 138 137 + 0 0 0 0 + --- --- --- --- + 125 126 140 139 + 0 0 0 0 + --- --- --- --- + 126 127 141 140 + 0 0 0 0 + --- --- --- --- + 127 128 142 141 + 0 0 0 0 + --- --- --- --- + 128 129 143 142 + 0 0 0 0 + --- --- --- --- + 129 130 144 143 + 0 0 0 0 + --- --- --- --- + 130 131 145 144 + 0 0 0 0 + --- Right --- --- + 132 133 147 146 + 0 0 0 0 + --- --- --- Left + 133 134 148 147 + 0 0 0 0 + --- --- --- --- + 134 135 149 148 + 0 0 0 0 + --- --- --- --- + 135 136 150 149 + 0 0 0 0 + --- --- --- --- + 136 137 151 150 + 0 0 0 0 + --- --- --- --- + 140 141 153 152 + 0 0 0 0 + --- --- --- --- + 141 142 154 153 + 0 0 0 0 + --- --- --- --- + 142 143 155 154 + 0 0 0 0 + --- --- --- --- + 143 144 156 155 + 0 0 0 0 + --- --- --- --- + 144 145 157 156 + 0 0 0 0 + --- Right --- --- + 146 147 159 158 + 0 0 0 0 + --- --- --- Left + 147 148 160 159 + 0 0 0 0 + --- --- --- --- + 148 149 161 160 + 0 0 0 0 + --- --- --- --- + 149 150 162 161 + 0 0 0 0 + --- --- --- --- + 150 151 163 162 + 0 0 0 0 + --- --- --- --- + 152 153 167 166 + 0 0 0 0 + --- --- --- --- + 153 154 168 167 + 0 0 0 0 + --- --- --- --- + 154 155 169 168 + 0 0 0 0 + --- --- --- --- + 155 156 170 169 + 0 0 0 0 + --- --- --- --- + 156 157 171 170 + 0 0 0 0 + --- Right --- --- + 158 159 173 172 + 0 0 0 0 + --- --- --- Left + 159 160 174 173 + 0 0 0 0 + --- --- --- --- + 160 161 175 174 + 0 0 0 0 + --- --- --- --- + 161 162 176 175 + 0 0 0 0 + --- --- --- --- + 162 163 177 176 + 0 0 0 0 + --- --- --- --- + 163 164 178 177 + 0 0 0 0 + --- --- --- --- + 165 166 182 181 + 0 0 0 0 + --- --- --- --- + 166 167 183 182 + 0 0 0 0 + --- --- --- --- + 167 168 184 183 + 0 0 0 0 + --- --- --- --- + 168 169 185 184 + 0 0 0 0 + --- --- --- --- + 169 170 186 185 + 0 0 0 0 + --- --- --- --- + 170 171 187 186 + 0 0 0 0 + --- Right --- --- + 172 173 189 188 + 0 0 0 0 + --- --- --- Left + 173 174 190 189 + 0 0 0 0 + --- --- --- --- + 174 175 191 190 + 0 0 0 0 + --- --- --- --- + 175 176 192 191 + 0 0 0 0 + --- --- --- --- + 176 177 193 192 + 0 0 0 0 + --- --- --- --- + 177 178 194 193 + 0 0 0 0 + --- --- --- --- + 178 179 195 194 + 0 0 0 0 + --- --- --- --- + 180 181 198 197 + 0 0 0 0 + --- --- --- --- + 181 182 199 198 + 0 0 0 0 + --- --- --- --- + 182 183 200 199 + 0 0 0 0 + --- --- --- --- + 183 184 201 200 + 0 0 0 0 + --- --- --- --- + 184 185 202 201 + 0 0 0 0 + --- --- --- --- + 185 186 203 202 + 0 0 0 0 + --- --- --- --- + 186 187 204 203 + 0 0 0 0 + --- Right --- --- + 188 189 206 205 + 0 0 0 0 + --- --- --- Left + 189 190 207 206 + 0 0 0 0 + --- --- --- --- + 190 191 208 207 + 0 0 0 0 + --- --- --- --- + 191 192 209 208 + 0 0 0 0 + --- --- --- --- + 192 193 210 209 + 0 0 0 0 + --- --- --- --- + 193 194 211 210 + 0 0 0 0 + --- --- --- --- + 194 195 212 211 + 0 0 0 0 + --- --- --- --- + 195 196 213 212 + 0 0 0 0 + --- --- --- --- + 196 197 214 213 + 0 0 0 0 + --- --- --- --- + 197 198 215 214 + 0 0 0 0 + --- --- --- --- + 198 199 216 215 + 0 0 0 0 + --- --- --- --- + 199 200 217 216 + 0 0 0 0 + --- --- --- --- + 200 201 218 217 + 0 0 0 0 + --- --- --- --- + 201 202 219 218 + 0 0 0 0 + --- --- --- --- + 202 203 220 219 + 0 0 0 0 + --- --- --- --- + 203 204 221 220 + 0 0 0 0 + --- Right --- --- + 205 206 223 222 + 0 0 0 0 + --- --- --- Left + 206 207 224 223 + 0 0 0 0 + --- --- --- --- + 207 208 225 224 + 0 0 0 0 + --- --- --- --- + 208 209 226 225 + 0 0 0 0 + --- --- --- --- + 209 210 227 226 + 0 0 0 0 + --- --- --- --- + 210 211 228 227 + 0 0 0 0 + --- --- --- --- + 211 212 229 228 + 0 0 0 0 + --- --- --- --- + 212 213 230 229 + 0 0 0 0 + --- --- --- --- + 213 214 231 230 + 0 0 0 0 + --- --- --- --- + 214 215 232 231 + 0 0 0 0 + --- --- --- --- + 215 216 233 232 + 0 0 0 0 + --- --- --- --- + 216 217 234 233 + 0 0 0 0 + --- --- --- --- + 217 218 235 234 + 0 0 0 0 + --- --- --- --- + 218 219 236 235 + 0 0 0 0 + --- --- --- --- + 219 220 237 236 + 0 0 0 0 + --- --- --- --- + 220 221 238 237 + 0 0 0 0 + --- Right --- --- + 222 223 240 239 + 0 0 0 0 + --- --- --- Left + 223 224 241 240 + 0 0 0 0 + --- --- --- --- + 224 225 242 241 + 0 0 0 0 + --- --- --- --- + 225 226 243 242 + 0 0 0 0 + --- --- --- --- + 226 227 244 243 + 0 0 0 0 + --- --- --- --- + 227 228 245 244 + 0 0 0 0 + --- --- --- --- + 228 229 246 245 + 0 0 0 0 + --- --- --- --- + 229 230 247 246 + 0 0 0 0 + --- --- --- --- + 230 231 248 247 + 0 0 0 0 + --- --- --- --- + 231 232 249 248 + 0 0 0 0 + --- --- --- --- + 232 233 250 249 + 0 0 0 0 + --- --- --- --- + 233 234 251 250 + 0 0 0 0 + --- --- --- --- + 234 235 252 251 + 0 0 0 0 + --- --- --- --- + 235 236 253 252 + 0 0 0 0 + --- --- --- --- + 236 237 254 253 + 0 0 0 0 + --- --- --- --- + 237 238 255 254 + 0 0 0 0 + --- Right --- --- + 239 240 257 256 + 0 0 0 0 + --- --- Top Left + 240 241 258 257 + 0 0 0 0 + --- --- Top --- + 241 242 259 258 + 0 0 0 0 + --- --- Top --- + 242 243 260 259 + 0 0 0 0 + --- --- Top --- + 243 244 261 260 + 0 0 0 0 + --- --- Top --- + 244 245 262 261 + 0 0 0 0 + --- --- Top --- + 245 246 263 262 + 0 0 0 0 + --- --- Top --- + 246 247 264 263 + 0 0 0 0 + --- --- Top --- + 247 248 265 264 + 0 0 0 0 + --- --- Top --- + 248 249 266 265 + 0 0 0 0 + --- --- Top --- + 249 250 267 266 + 0 0 0 0 + --- --- Top --- + 250 251 268 267 + 0 0 0 0 + --- --- Top --- + 251 252 269 268 + 0 0 0 0 + --- --- Top --- + 252 253 270 269 + 0 0 0 0 + --- --- Top --- + 253 254 271 270 + 0 0 0 0 + --- --- Top --- + 254 255 272 271 + 0 0 0 0 + --- Right Top --- + 93 76 77 273 + 0 0 0 0 + --- --- --- --- + 273 77 78 94 + 0 0 0 0 + --- --- --- --- + 94 110 274 273 + 0 0 1 0 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + 8.1918573019674312E-002 -2.8361628539606514 0.0000000000000000 + 0.27968750301402334 -2.4406249939719533 0.0000000000000000 + 0.47745643300837237 -2.0450871339832553 0.0000000000000000 + 0.55937500602804668 -1.8812499879439066 0.0000000000000000 + --- --- RightSlant --- + 110 111 275 274 + 0 0 1 0 + 0.55937500602804668 -1.8812499879439066 0.0000000000000000 + 0.60056311315811417 -1.7988737736837717 0.0000000000000000 + 0.69999999999999973 -1.6000000000000005 0.0000000000000000 + 0.79943688684188530 -1.4011262263162294 0.0000000000000000 + 0.84062499397195278 -1.3187500120560944 0.0000000000000000 + --- --- RightSlant --- + 111 125 276 275 + 0 0 1 0 + 0.84062499397195278 -1.3187500120560944 0.0000000000000000 + 0.89325425707682937 -1.2134914858463413 0.0000000000000000 + 1.0203125378423255 -0.95937492431534910 0.0000000000000000 + 1.1473708186078211 -0.70525836278435783 0.0000000000000000 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + --- --- RightSlant --- + 125 139 277 276 + 0 0 1 0 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + 1.2526293208844796 -0.49474135823104071 0.0000000000000000 + 1.3796875438703724 -0.24062491225925520 0.0000000000000000 + 1.5067457668562652 1.3491533712530313E-002 0.0000000000000000 + 1.5593750060280467 0.11875001205609337 0.0000000000000000 + --- --- RightSlant --- + 139 140 278 277 + 0 0 1 0 + 1.5593750060280467 0.11875001205609337 0.0000000000000000 + 1.6005631131581151 0.20112622631623012 0.0000000000000000 + 1.6999999999999993 0.39999999999999858 0.0000000000000000 + 1.7994368868418849 0.59887377368376971 0.0000000000000000 + 1.8406249939719528 0.68124998794390557 0.0000000000000000 + --- --- RightSlant --- + 140 152 279 278 + 0 0 1 0 + 1.8406249939719528 0.68124998794390557 0.0000000000000000 + 1.8639649232289370 0.72792984645787406 0.0000000000000000 + 1.9203124969859759 0.84062499397195189 0.0000000000000000 + 1.9766600707430158 0.95332014148603150 0.0000000000000000 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + --- --- RightSlant --- + 152 166 280 279 + 0 0 1 0 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + 1.9983479703871072 1.0812735458173770 0.0000000000000000 + 1.9807707726899886 1.2766715490561058 0.0000000000000000 + 1.9441339362737691 1.4694073261344140 0.0000000000000000 + 1.9234528539428932 1.5480229180052043 0.0000000000000000 + --- --- IceCream --- + 166 165 281 280 + 0 0 1 0 + 1.9234528539428932 1.5480229180052043 0.0000000000000000 + 1.9048209196670516 1.6096369936271651 0.0000000000000000 + 1.8517494276368289 1.7556613376683212 0.0000000000000000 + 1.7875027702478623 1.8971253236623173 0.0000000000000000 + 1.7577069153495042 1.9541836299856179 0.0000000000000000 + --- --- IceCream --- + 165 181 282 281 + 0 0 1 0 + 1.7577069153495042 1.9541836299856179 0.0000000000000000 + 1.7159031169606289 2.0274611881744238 0.0000000000000000 + 1.6025531944504807 2.1965881743342441 0.0000000000000000 + 1.4725959561431350 2.3533148746507173 0.0000000000000000 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + --- --- IceCream --- + 181 180 283 282 + 0 0 1 0 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + 1.3533148446578711 2.4725959837065434 0.0000000000000000 + 1.1965881552143354 2.6025532087268597 0.0000000000000000 + 1.0274611821782322 2.7159031205510731 0.0000000000000000 + 0.95418362998561790 2.7577069153495044 0.0000000000000000 + --- --- IceCream --- + 180 197 284 283 + 0 0 1 0 + 0.95418362998561790 2.7577069153495044 0.0000000000000000 + 0.89712532762418773 2.7875027682594489 0.0000000000000000 + 0.75566135168116888 2.8517494219184703 0.0000000000000000 + 0.60963701823418193 2.9048209117915880 0.0000000000000000 + 0.54802294711610733 2.9234528456487245 0.0000000000000000 + --- --- IceCream --- + 197 196 285 284 + 0 0 1 0 + 0.54802294711610733 2.9234528456487245 0.0000000000000000 + 0.46940735118449745 2.9441339302254752 0.0000000000000000 + 0.27667156381993480 2.9807707706277959 0.0000000000000000 + 8.1273549858423472E-002 2.9983479702227562 0.0000000000000000 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + --- --- IceCream --- + 196 195 286 285 + 0 0 1 0 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + -8.1273514348751255E-002 2.9983479716669477 0.0000000000000000 + -0.27667144147234074 2.9807707877171499 0.0000000000000000 + -0.46940714556157248 2.9441339798727189 0.0000000000000000 + -0.54802270862630975 2.9234529135983243 0.0000000000000000 + --- --- IceCream --- + 195 179 287 286 + 0 0 1 0 + -0.54802270862630975 2.9234529135983243 0.0000000000000000 + -0.60963681664226710 2.9048209763109716 0.0000000000000000 + -0.75566123688154063 2.8517494687658642 0.0000000000000000 + -0.89712529516674266 2.7875027845494351 0.0000000000000000 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + --- --- IceCream --- + 179 178 288 287 + 0 0 1 0 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + -1.0274611529224809 2.7159031380690477 0.0000000000000000 + -1.1965880619272244 2.6025532783821101 0.0000000000000000 + -1.3533146983210931 2.4725961181899434 0.0000000000000000 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + --- --- IceCream --- + 178 164 289 288 + 0 0 1 0 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + -1.4725958216597181 2.3533150209874787 0.0000000000000000 + -1.6025531247952236 2.1965882676213502 0.0000000000000000 + -1.7159030994426530 2.0274612174301749 0.0000000000000000 + -1.7577069153495026 1.9541836299856208 0.0000000000000000 + --- --- IceCream --- + 164 163 290 289 + 0 0 1 0 + -1.7577069153495026 1.9541836299856208 0.0000000000000000 + -1.7875027845494327 1.8971252951667479 0.0000000000000000 + -1.8517494687658640 1.7556612368815410 0.0000000000000000 + -1.9048209763109714 1.6096368166422679 0.0000000000000000 + -1.9234529135983243 1.5480227086263101 0.0000000000000000 + --- --- IceCream --- + 163 151 291 290 + 0 0 1 0 + -1.9234529135983243 1.5480227086263101 0.0000000000000000 + -1.9441339798883621 1.4694071454967825 0.0000000000000000 + -1.9807707877486287 1.2766714412469717 0.0000000000000000 + -1.9983479716827337 1.0812735139606025 0.0000000000000000 + -2.0000000000000000 1.0000000000000002 0.0000000000000000 + --- --- IceCream --- + 151 137 292 291 + 0 0 1 0 + -2.0000000000000000 1.0000000000000000 0.0000000000000000 + -1.9766600707430160 0.95332014148603195 0.0000000000000000 + -1.9203124969859764 0.84062499397195278 0.0000000000000000 + -1.8639649232289368 0.72792984645787362 0.0000000000000000 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + --- --- LeftSlant --- + 137 138 293 292 + 0 0 1 0 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + -1.7994368868418851 0.59887377368377015 0.0000000000000000 + -1.7000000000000000 0.39999999999999991 0.0000000000000000 + -1.6005631131581148 0.20112622631622967 0.0000000000000000 + -1.5593750060280471 0.11875001205609426 0.0000000000000000 + --- --- LeftSlant --- + 138 124 294 293 + 0 0 1 0 + -1.5593750060280471 0.11875001205609426 0.0000000000000000 + -1.5067457553473789 1.3491510694757736E-002 0.0000000000000000 + -1.3796875045765755 -0.24062499084684896 0.0000000000000000 + -1.2526292538057724 -0.49474149238845522 0.0000000000000000 + -1.2000000031251039 -0.59999999374979218 0.0000000000000000 + --- --- LeftSlant --- + 124 108 295 294 + 0 0 1 0 + -1.2000000031251039 -0.59999999374979218 0.0000000000000000 + -1.1473707515291136 -0.70525849694177278 0.0000000000000000 + -1.0203124985485283 -0.95937500290294331 0.0000000000000000 + -0.89325424556794286 -1.2134915088641143 0.0000000000000000 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + --- --- LeftSlant --- + 108 109 296 295 + 0 0 1 0 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + -0.79943688684188507 -1.4011262263162299 0.0000000000000000 + -0.69999999999999996 -1.6000000000000001 0.0000000000000000 + -0.60056311315811484 -1.7988737736837703 0.0000000000000000 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + --- --- LeftSlant --- + 109 93 273 296 + 0 0 1 0 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + -0.47745643300837282 -2.0450871339832544 0.0000000000000000 + -0.27968750301402356 -2.4406249939719529 0.0000000000000000 + -8.1918573019674756E-002 -2.8361628539606505 0.0000000000000000 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + --- --- LeftSlant --- diff --git a/v0.8.7/tutorials/out/ice_cream_straight_sides.tec b/v0.8.7/tutorials/out/ice_cream_straight_sides.tec new file mode 100644 index 0000000000..d897fe7303 --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_straight_sides.tec @@ -0,0 +1,550 @@ + VARIABLES = "X", "Y", "Z" + ZONE F=FEPOINT, ET=QUADRILATERAL, N= 296 E= 252 + -8.0000000000000000 -8.0000000000000000 0.0000000000000000 + -7.0000000000000000 -8.0000000000000000 0.0000000000000000 + -6.0000000000000000 -8.0000000000000000 0.0000000000000000 + -5.0000000000000000 -8.0000000000000000 0.0000000000000000 + -4.0000000000000000 -8.0000000000000000 0.0000000000000000 + -3.0000000000000000 -8.0000000000000000 0.0000000000000000 + -2.0000000000000000 -8.0000000000000000 0.0000000000000000 + -1.0000000000000000 -8.0000000000000000 0.0000000000000000 + 0.0000000000000000 -8.0000000000000000 0.0000000000000000 + 1.0000000000000000 -8.0000000000000000 0.0000000000000000 + 2.0000000000000000 -8.0000000000000000 0.0000000000000000 + 3.0000000000000000 -8.0000000000000000 0.0000000000000000 + 4.0000000000000000 -8.0000000000000000 0.0000000000000000 + 5.0000000000000000 -8.0000000000000000 0.0000000000000000 + 6.0000000000000000 -8.0000000000000000 0.0000000000000000 + 7.0000000000000000 -8.0000000000000000 0.0000000000000000 + 8.0000000000000000 -8.0000000000000000 0.0000000000000000 + -8.0000000000000000 -7.0000000000000000 0.0000000000000000 + -6.9999650574820480 -6.9999679261182877 0.0000000000000000 + -5.9998665632941011 -6.9998724565097961 0.0000000000000000 + -4.9996213184978222 -6.9996097515900049 0.0000000000000000 + -3.9991854607018733 -6.9990475318617795 0.0000000000000000 + -2.9986952242321481 -6.9981269410719644 0.0000000000000000 + -1.9985140781988169 -6.9969986109118514 0.0000000000000000 + -0.99897849037601483 -6.9960383675970457 0.0000000000000000 + 4.7989409883115671E-012 -6.9956585147354131 0.0000000000000000 + 0.99897849038591502 -6.9960383675859896 0.0000000000000000 + 1.9985140782087694 -6.9969986108947824 0.0000000000000000 + 2.9986952242406435 -6.9981269410555944 0.0000000000000000 + 3.9991854607075754 -6.9990475318504446 0.0000000000000000 + 4.9996213185007372 -6.9996097515841544 0.0000000000000000 + 5.9998665632952193 -6.9998724565075419 0.0000000000000000 + 6.9999650574823553 -6.9999679261176624 0.0000000000000000 + 8.0000000000000000 -7.0000000000000000 0.0000000000000000 + -8.0000000000000000 -6.0000000000000000 0.0000000000000000 + -6.9998976699211699 -5.9999122764402735 0.0000000000000000 + -5.9996135291753685 -5.9996633062377125 0.0000000000000000 + -4.9989226436212064 -5.9990208119514659 0.0000000000000000 + -3.9977653337150905 -5.9977581248894900 0.0000000000000000 + -2.9966204896079378 -5.9958717654755365 0.0000000000000000 + -1.9964039837778744 -5.9937267870813304 0.0000000000000000 + -0.99766406647423933 -5.9919797466297764 0.0000000000000000 + 2.4090097191669961E-011 -5.9913000293311889 0.0000000000000000 + 0.99766406652596806 -5.9919797465642901 0.0000000000000000 + 1.9964039838329390 -5.9937267869811102 0.0000000000000000 + 2.9966204896556343 -5.9958717653815992 0.0000000000000000 + 3.9977653337461323 -5.9977581248272331 0.0000000000000000 + 4.9989226436360692 -5.9990208119214286 0.0000000000000000 + 5.9996135291805706 -5.9996633062271050 0.0000000000000000 + 6.9998976699224684 -5.9999122764375885 0.0000000000000000 + 8.0000000000000000 -6.0000000000000000 0.0000000000000000 + -8.0000000000000000 -5.0000000000000000 0.0000000000000000 + -6.9997501274902012 -4.9998034408089786 0.0000000000000000 + -5.9990675728612679 -4.9992697388441112 0.0000000000000000 + -4.9973858232938344 -4.9979740837677751 0.0000000000000000 + -3.9945964688979139 -4.9957899032377453 0.0000000000000000 + -2.9923152259971646 -4.9934053345787692 0.0000000000000000 + -1.9929564366212700 -4.9916256720553269 0.0000000000000000 + -0.99625966749685468 -4.9904887766265009 0.0000000000000000 + 8.7516607876472420E-011 -4.9900352567664603 0.0000000000000000 + 0.99625966770123564 -4.9904887763239962 0.0000000000000000 + 1.9929564368609574 -4.9916256715941776 0.0000000000000000 + 2.9923152262075878 -4.9934053341572957 0.0000000000000000 + 3.9945964690280817 -4.9957899029737884 0.0000000000000000 + 4.9973858233507853 -4.9979740836508393 0.0000000000000000 + 5.9990675728791238 -4.9992697388066452 0.0000000000000000 + 6.9997501274942060 -4.9998034408002647 0.0000000000000000 + 8.0000000000000000 -5.0000000000000000 0.0000000000000000 + -8.0000000000000000 -4.0000000000000000 0.0000000000000000 + -6.9994442810297537 -3.9996092645441159 0.0000000000000000 + -5.9979747892447062 -3.9985815423292643 0.0000000000000000 + -4.9942895414925133 -3.9961147104828689 0.0000000000000000 + -3.9872884982575028 -3.9920749153444808 0.0000000000000000 + -2.9807287305762533 -3.9900738967481790 0.0000000000000000 + -1.9852784719276839 -3.9938575615448597 0.0000000000000000 + -0.99708909504304877 -3.9973734973237129 0.0000000000000000 + 2.1033866962410606E-010 -3.9974440103039064 0.0000000000000000 + 0.99708909566634052 -3.9973734962049221 0.0000000000000000 + 1.9852784727951609 -3.9938575598154191 0.0000000000000000 + 2.9807287313302866 -3.9900738952156258 0.0000000000000000 + 3.9872884986834030 -3.9920749144641170 0.0000000000000000 + 4.9942895416564230 -3.9961147101336323 0.0000000000000000 + 5.9979747892902688 -3.9985815422265709 0.0000000000000000 + 6.9994442810389081 -3.9996092645214816 0.0000000000000000 + 8.0000000000000000 -4.0000000000000000 0.0000000000000000 + -8.0000000000000000 -3.0000000000000000 0.0000000000000000 + -6.9988707545318789 -2.9993214807930388 0.0000000000000000 + -5.9959723250282675 -2.9975703581842250 0.0000000000000000 + -4.9889296386581075 -2.9933466877064818 0.0000000000000000 + -3.9746774455653884 -2.9854293504387881 0.0000000000000000 + -2.9486314200342503 -2.9764998162463585 0.0000000000000000 + -1.9503942149316469 -3.0021256138813035 0.0000000000000000 + -1.0261614729009205 -3.0312104940798901 0.0000000000000000 + 1.0261614745493584 -3.0312104908158548 0.0000000000000000 + 1.9503942176787044 -3.0021256083069598 0.0000000000000000 + 2.9486314222736021 -2.9764998116137829 0.0000000000000000 + 3.9746774466049950 -2.9854293481972203 0.0000000000000000 + 4.9889296390019764 -2.9933466869030068 0.0000000000000000 + 5.9959723251123087 -2.9975703579581028 0.0000000000000000 + 6.9988707545467523 -2.9993214807434820 0.0000000000000000 + 8.0000000000000000 -3.0000000000000000 0.0000000000000000 + -8.0000000000000000 -2.0000000000000000 0.0000000000000000 + -6.9979591237819632 -1.9990110686940572 0.0000000000000000 + -5.9927227618739725 -1.9964483151530883 0.0000000000000000 + -4.9801080557894242 -1.9901770532049168 0.0000000000000000 + -3.9576959349815479 -1.9783015452963999 0.0000000000000000 + -2.9197320667969913 -1.9542226531228222 0.0000000000000000 + -1.7464656898511224 -1.8918471048105712 0.0000000000000000 + -1.0538136609635054 -2.3225159630485046 0.0000000000000000 + 1.0538136634211011 -2.3225159580901482 0.0000000000000000 + 1.7464656992760117 -1.8918470856151424 0.0000000000000000 + 2.9197320715976618 -1.9542226428284530 0.0000000000000000 + 3.9576959367463562 -1.9783015410469320 0.0000000000000000 + 4.9801080562838553 -1.9901770517309758 0.0000000000000000 + 5.9927227619766033 -1.9964483147281369 0.0000000000000000 + 6.9979591237966705 -1.9990110685977320 0.0000000000000000 + 8.0000000000000000 -2.0000000000000000 0.0000000000000000 + -8.0000000000000000 -1.0000000000000000 0.0000000000000000 + -6.9968317675017770 -0.99886259715705294 0.0000000000000000 + -5.9885538594769985 -0.99581599636441842 0.0000000000000000 + -4.9678071326527107 -0.98792038864408005 0.0000000000000000 + -3.9258196694477046 -0.97144892599683563 0.0000000000000000 + -2.9029530084938924 -0.95956909177122207 0.0000000000000000 + -1.9915356039925562 -0.87186063981735284 0.0000000000000000 + 1.9915356222472387 -0.87186060209166283 0.0000000000000000 + 2.9029530147562950 -0.95956907678113346 0.0000000000000000 + 3.9258196712523956 -0.97144891979974901 0.0000000000000000 + 4.9678071330492370 -0.98792038628267198 0.0000000000000000 + 5.9885538595330425 -0.99581599564497181 0.0000000000000000 + 6.9968317675030942 -0.99886259698874036 0.0000000000000000 + 8.0000000000000000 -1.0000000000000000 0.0000000000000000 + -8.0000000000000000 0.0000000000000000 0.0000000000000000 + -6.9958722740070352 9.2605842887460131E-004 0.0000000000000000 + -5.9849442010567895 3.5673767964436867E-003 0.0000000000000000 + -4.9568386769387480 1.1004836478173498E-002 0.0000000000000000 + -3.8951308919991683 2.9902496021364251E-002 0.0000000000000000 + -2.7032673839116930 9.0361097440859073E-002 0.0000000000000000 + -2.0571891363329842 -0.24562578581377828 0.0000000000000000 + 2.0571891499716477 -0.24562575669779302 0.0000000000000000 + 2.7032673869204902 9.0361111129516711E-002 0.0000000000000000 + 3.8951308924034209 2.9902504788020891E-002 0.0000000000000000 + 4.9568386769148196 1.1004839991627878E-002 0.0000000000000000 + 5.9849442010018254 3.5673778782903827E-003 0.0000000000000000 + 6.9958722739839931 9.2605868315656019E-004 0.0000000000000000 + 8.0000000000000000 0.0000000000000000 0.0000000000000000 + -8.0000000000000000 1.0000000000000000 0.0000000000000000 + -6.9955326960520150 1.0003662482577591 0.0000000000000000 + -5.9837177157599681 1.0016260315303323 0.0000000000000000 + -4.9534382883740049 1.0055660842008067 0.0000000000000000 + -3.8899281210667138 1.0153264300994280 0.0000000000000000 + -2.8576269259239067 1.0332611206083833 0.0000000000000000 + 2.8576269206180700 1.0332611487718453 0.0000000000000000 + 3.8899281199071547 1.0153264422760757 0.0000000000000000 + 4.9534382879928192 1.0055660886453257 0.0000000000000000 + 5.9837177156175274 1.0016260328696145 0.0000000000000000 + 6.9955326960100548 1.0003662485715008 0.0000000000000000 + 8.0000000000000000 1.0000000000000000 0.0000000000000000 + -8.0000000000000000 2.0000000000000000 0.0000000000000000 + -6.9960066511840280 1.9997507013087121 0.0000000000000000 + -5.9856229332322686 1.9994091100965983 0.0000000000000000 + -4.9595830937353638 1.9990558628265500 0.0000000000000000 + -3.9045581869999268 1.9973598907135701 0.0000000000000000 + -2.7368541689106971 1.9740722869324492 0.0000000000000000 + -2.1263404894339657 2.2948900365574501 0.0000000000000000 + 2.1263405099846904 2.2948900432082628 0.0000000000000000 + 2.7368541668551467 1.9740723203179147 0.0000000000000000 + 3.9045581868167778 1.9973599020749815 0.0000000000000000 + 4.9595830935518537 1.9990558669341754 0.0000000000000000 + 5.9856229331196342 1.9994091113584684 0.0000000000000000 + 6.9960066511449766 1.9997507016103995 0.0000000000000000 + 8.0000000000000000 2.0000000000000000 0.0000000000000000 + -8.0000000000000000 3.0000000000000000 0.0000000000000000 + -6.9970741145254109 2.9994054140824691 0.0000000000000000 + -5.9897519210034096 2.9981360157242580 0.0000000000000000 + -4.9724862257635190 2.9954390224920608 0.0000000000000000 + -3.9404681650821662 2.9905143469756337 0.0000000000000000 + -2.9327419944795010 2.9950483993160772 0.0000000000000000 + -1.9277593203701284 2.9288827058393201 0.0000000000000000 + -1.2934382299147573 3.1270574946750189 0.0000000000000000 + 1.2934382981899317 3.1270574584627195 0.0000000000000000 + 1.9277593629377268 2.9288826795836580 0.0000000000000000 + 2.9327420063368876 2.9950484011603677 0.0000000000000000 + 3.9404681675772051 2.9905143520853521 0.0000000000000000 + 4.9724862261650982 2.9954390249429101 0.0000000000000000 + 5.9897519210122363 2.9981360165754762 0.0000000000000000 + 6.9970741145083171 2.9994054143006470 0.0000000000000000 + 8.0000000000000000 3.0000000000000000 0.0000000000000000 + -8.0000000000000000 4.0000000000000000 0.0000000000000000 + -6.9982592393987968 3.9994059470511574 0.0000000000000000 + -5.9941718412117382 3.9980597406816538 0.0000000000000000 + -4.9856339697631320 3.9950007774720344 0.0000000000000000 + -3.9751323492146069 3.9888639093805867 0.0000000000000000 + -2.9708305521947196 3.9715346676422256 0.0000000000000000 + -1.9930387640582898 3.9338224795098449 0.0000000000000000 + -0.96763685658155807 3.7397274668414906 0.0000000000000000 + 3.3429034151622827E-008 3.8724227990342959 0.0000000000000000 + 0.96763691762346205 3.7397274489896106 0.0000000000000000 + 1.9930387926022926 3.9338224677871469 0.0000000000000000 + 2.9708305639402397 3.9715346636992050 0.0000000000000000 + 3.9751323526676017 3.9888639097163923 0.0000000000000000 + 4.9856339705045638 3.9950007782744765 0.0000000000000000 + 5.9941718413174092 3.9980597410666165 0.0000000000000000 + 6.9982592394038319 3.9994059471655752 0.0000000000000000 + 8.0000000000000000 4.0000000000000000 0.0000000000000000 + -8.0000000000000000 5.0000000000000000 0.0000000000000000 + -6.9991633741456480 4.9995936517804571 0.0000000000000000 + -5.9973416427807713 4.9986235063327511 0.0000000000000000 + -4.9939474927689487 4.9961691895174090 0.0000000000000000 + -3.9898774621657993 4.9900396721612950 0.0000000000000000 + -2.9882983865581152 4.9754672684598420 0.0000000000000000 + -1.9884726792358567 4.9414046357118258 0.0000000000000000 + -0.99054764142862672 4.9076265219014017 0.0000000000000000 + 1.5044633229432108E-008 4.8977197323029209 0.0000000000000000 + 0.99054766715027320 4.9076265171995406 0.0000000000000000 + 1.9884726950216143 4.9414046308491191 0.0000000000000000 + 2.9882983935721197 4.9754672660048422 0.0000000000000000 + 3.9898774645940622 4.9900396715407211 0.0000000000000000 + 4.9939474933945487 4.9961691895653884 0.0000000000000000 + 5.9973416428964281 4.9986235064339004 0.0000000000000000 + 6.9991633741594397 4.9995936518214812 0.0000000000000000 + 8.0000000000000000 5.0000000000000000 0.0000000000000000 + -8.0000000000000000 6.0000000000000000 0.0000000000000000 + -6.9996739984196390 5.9997893596429419 0.0000000000000000 + -5.9989986118848257 5.9992529007592390 0.0000000000000000 + -4.9977434317195026 5.9977709675596005 0.0000000000000000 + -3.9960992156787842 5.9940404411235333 0.0000000000000000 + -2.9946713951079547 5.9858782583382260 0.0000000000000000 + -1.9942453640855442 5.9731438824671530 0.0000000000000000 + -0.99595680588594671 5.9611672784475598 0.0000000000000000 + 5.4895336706131739E-009 5.9564095944048683 0.0000000000000000 + 0.99595681544617021 5.9611672771802988 0.0000000000000000 + 1.9942453703764043 5.9731438809327670 0.0000000000000000 + 2.9946713982270148 5.9858782573487614 0.0000000000000000 + 3.9960992168542182 5.9940404407363950 0.0000000000000000 + 4.9977434320589262 5.9977709674807409 0.0000000000000000 + 5.9989986119578065 5.9992529007644064 0.0000000000000000 + 6.9996739984307244 5.9997893596515759 0.0000000000000000 + 8.0000000000000000 6.0000000000000000 0.0000000000000000 + -8.0000000000000000 7.0000000000000000 0.0000000000000000 + -6.9999004989624796 6.9999196928494865 0.0000000000000000 + -5.9996945336645995 6.9997036786799463 0.0000000000000000 + -4.9992926804199769 6.9990875647356665 0.0000000000000000 + -3.9986895202660464 6.9975750738144677 0.0000000000000000 + -2.9980654465831940 6.9946658241746293 0.0000000000000000 + -1.9978514474788915 6.9906409012147579 0.0000000000000000 + -0.99851861799346908 6.9869919193812402 0.0000000000000000 + 1.5699479313662187E-009 6.9855176655399553 0.0000000000000000 + 0.99851862076110953 6.9869919190879317 0.0000000000000000 + 1.9978514493699755 6.9906409008314814 0.0000000000000000 + 2.9980654475797910 6.9946658238941168 0.0000000000000000 + 3.9986895206695174 6.9975750736809648 0.0000000000000000 + 4.9992926805452846 6.9990875646946797 0.0000000000000000 + 5.9996945336942300 6.9997036786734528 0.0000000000000000 + 6.9999004989676070 6.9999196928498879 0.0000000000000000 + 8.0000000000000000 7.0000000000000000 0.0000000000000000 + -8.0000000000000000 8.0000000000000000 0.0000000000000000 + -7.0000000000000000 8.0000000000000000 0.0000000000000000 + -6.0000000000000000 8.0000000000000000 0.0000000000000000 + -5.0000000000000000 8.0000000000000000 0.0000000000000000 + -4.0000000000000000 8.0000000000000000 0.0000000000000000 + -3.0000000000000000 8.0000000000000000 0.0000000000000000 + -2.0000000000000000 8.0000000000000000 0.0000000000000000 + -1.0000000000000000 8.0000000000000000 0.0000000000000000 + 0.0000000000000000 8.0000000000000000 0.0000000000000000 + 1.0000000000000000 8.0000000000000000 0.0000000000000000 + 2.0000000000000000 8.0000000000000000 0.0000000000000000 + 3.0000000000000000 8.0000000000000000 0.0000000000000000 + 4.0000000000000000 8.0000000000000000 0.0000000000000000 + 5.0000000000000000 8.0000000000000000 0.0000000000000000 + 6.0000000000000000 8.0000000000000000 0.0000000000000000 + 7.0000000000000000 8.0000000000000000 0.0000000000000000 + 8.0000000000000000 8.0000000000000000 0.0000000000000000 + 0.0000000000000000 -3.0000000000000000 0.0000000000000000 + 0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 0.84062499397195267 -1.3187500120560947 0.0000000000000000 + 1.2000000817126981 -0.59999983657460376 0.0000000000000000 + 1.5593750060280469 0.11875001205609381 0.0000000000000000 + 1.8406249939719526 0.68124998794390512 0.0000000000000000 + 2.0000000000000000 1.0000000000000000 0.0000000000000000 + 1.9234528539428934 1.5480229180052039 0.0000000000000000 + 1.7577069153495042 1.9541836299856183 0.0000000000000000 + 1.4142135455002482 2.4142135792459416 0.0000000000000000 + 0.95418362998561834 2.7577069153495040 0.0000000000000000 + 0.54802294711610822 2.9234528456487245 0.0000000000000000 + -4.5511671064437944E-010 3.0000000000000000 0.0000000000000000 + -0.54802270862631064 2.9234529135983243 0.0000000000000000 + -0.95418362998561812 2.7577069153495044 0.0000000000000000 + -1.4142133808531077 2.4142137438930593 0.0000000000000000 + -1.7577069153495022 1.9541836299856215 0.0000000000000000 + -1.9234529135983240 1.5480227086263110 0.0000000000000000 + -2.0000000000000000 1.0000000000000000 0.0000000000000000 + -1.8406249939719528 0.68124998794390557 0.0000000000000000 + -1.5593750060280471 0.11875001205609437 0.0000000000000000 + -1.2000000031251037 -0.59999999374979263 0.0000000000000000 + -0.84062499397195278 -1.3187500120560944 0.0000000000000000 + -0.55937500602804713 -1.8812499879439057 0.0000000000000000 + 1 2 19 18 + 2 3 20 19 + 3 4 21 20 + 4 5 22 21 + 5 6 23 22 + 6 7 24 23 + 7 8 25 24 + 8 9 26 25 + 9 10 27 26 + 10 11 28 27 + 11 12 29 28 + 12 13 30 29 + 13 14 31 30 + 14 15 32 31 + 15 16 33 32 + 16 17 34 33 + 18 19 36 35 + 19 20 37 36 + 20 21 38 37 + 21 22 39 38 + 22 23 40 39 + 23 24 41 40 + 24 25 42 41 + 25 26 43 42 + 26 27 44 43 + 27 28 45 44 + 28 29 46 45 + 29 30 47 46 + 30 31 48 47 + 31 32 49 48 + 32 33 50 49 + 33 34 51 50 + 35 36 53 52 + 36 37 54 53 + 37 38 55 54 + 38 39 56 55 + 39 40 57 56 + 40 41 58 57 + 41 42 59 58 + 42 43 60 59 + 43 44 61 60 + 44 45 62 61 + 45 46 63 62 + 46 47 64 63 + 47 48 65 64 + 48 49 66 65 + 49 50 67 66 + 50 51 68 67 + 52 53 70 69 + 53 54 71 70 + 54 55 72 71 + 55 56 73 72 + 56 57 74 73 + 57 58 75 74 + 58 59 76 75 + 59 60 77 76 + 60 61 78 77 + 61 62 79 78 + 62 63 80 79 + 63 64 81 80 + 64 65 82 81 + 65 66 83 82 + 66 67 84 83 + 67 68 85 84 + 69 70 87 86 + 70 71 88 87 + 71 72 89 88 + 72 73 90 89 + 73 74 91 90 + 74 75 92 91 + 75 76 93 92 + 78 79 95 94 + 79 80 96 95 + 80 81 97 96 + 81 82 98 97 + 82 83 99 98 + 83 84 100 99 + 84 85 101 100 + 86 87 103 102 + 87 88 104 103 + 88 89 105 104 + 89 90 106 105 + 90 91 107 106 + 91 92 108 107 + 92 93 109 108 + 94 95 111 110 + 95 96 112 111 + 96 97 113 112 + 97 98 114 113 + 98 99 115 114 + 99 100 116 115 + 100 101 117 116 + 102 103 119 118 + 103 104 120 119 + 104 105 121 120 + 105 106 122 121 + 106 107 123 122 + 107 108 124 123 + 111 112 126 125 + 112 113 127 126 + 113 114 128 127 + 114 115 129 128 + 115 116 130 129 + 116 117 131 130 + 118 119 133 132 + 119 120 134 133 + 120 121 135 134 + 121 122 136 135 + 122 123 137 136 + 123 124 138 137 + 125 126 140 139 + 126 127 141 140 + 127 128 142 141 + 128 129 143 142 + 129 130 144 143 + 130 131 145 144 + 132 133 147 146 + 133 134 148 147 + 134 135 149 148 + 135 136 150 149 + 136 137 151 150 + 140 141 153 152 + 141 142 154 153 + 142 143 155 154 + 143 144 156 155 + 144 145 157 156 + 146 147 159 158 + 147 148 160 159 + 148 149 161 160 + 149 150 162 161 + 150 151 163 162 + 152 153 167 166 + 153 154 168 167 + 154 155 169 168 + 155 156 170 169 + 156 157 171 170 + 158 159 173 172 + 159 160 174 173 + 160 161 175 174 + 161 162 176 175 + 162 163 177 176 + 163 164 178 177 + 165 166 182 181 + 166 167 183 182 + 167 168 184 183 + 168 169 185 184 + 169 170 186 185 + 170 171 187 186 + 172 173 189 188 + 173 174 190 189 + 174 175 191 190 + 175 176 192 191 + 176 177 193 192 + 177 178 194 193 + 178 179 195 194 + 180 181 198 197 + 181 182 199 198 + 182 183 200 199 + 183 184 201 200 + 184 185 202 201 + 185 186 203 202 + 186 187 204 203 + 188 189 206 205 + 189 190 207 206 + 190 191 208 207 + 191 192 209 208 + 192 193 210 209 + 193 194 211 210 + 194 195 212 211 + 195 196 213 212 + 196 197 214 213 + 197 198 215 214 + 198 199 216 215 + 199 200 217 216 + 200 201 218 217 + 201 202 219 218 + 202 203 220 219 + 203 204 221 220 + 205 206 223 222 + 206 207 224 223 + 207 208 225 224 + 208 209 226 225 + 209 210 227 226 + 210 211 228 227 + 211 212 229 228 + 212 213 230 229 + 213 214 231 230 + 214 215 232 231 + 215 216 233 232 + 216 217 234 233 + 217 218 235 234 + 218 219 236 235 + 219 220 237 236 + 220 221 238 237 + 222 223 240 239 + 223 224 241 240 + 224 225 242 241 + 225 226 243 242 + 226 227 244 243 + 227 228 245 244 + 228 229 246 245 + 229 230 247 246 + 230 231 248 247 + 231 232 249 248 + 232 233 250 249 + 233 234 251 250 + 234 235 252 251 + 235 236 253 252 + 236 237 254 253 + 237 238 255 254 + 239 240 257 256 + 240 241 258 257 + 241 242 259 258 + 242 243 260 259 + 243 244 261 260 + 244 245 262 261 + 245 246 263 262 + 246 247 264 263 + 247 248 265 264 + 248 249 266 265 + 249 250 267 266 + 250 251 268 267 + 251 252 269 268 + 252 253 270 269 + 253 254 271 270 + 254 255 272 271 + 93 76 77 273 + 273 77 78 94 + 94 110 274 273 + 110 111 275 274 + 111 125 276 275 + 125 139 277 276 + 139 140 278 277 + 140 152 279 278 + 152 166 280 279 + 166 165 281 280 + 165 181 282 281 + 181 180 283 282 + 180 197 284 283 + 197 196 285 284 + 196 195 286 285 + 195 179 287 286 + 179 178 288 287 + 178 164 289 288 + 164 163 290 289 + 163 151 291 290 + 151 137 292 291 + 137 138 293 292 + 138 124 294 293 + 124 108 295 294 + 108 109 296 295 + 109 93 273 296 diff --git a/v0.8.7/tutorials/out/ice_cream_straight_sides.txt b/v0.8.7/tutorials/out/ice_cream_straight_sides.txt new file mode 100644 index 0000000000..e41813ce3c --- /dev/null +++ b/v0.8.7/tutorials/out/ice_cream_straight_sides.txt @@ -0,0 +1,258 @@ + + ------------------------ + 2D Mesh Quality Measures + ------------------------ + +Signed Area Aspect Ratio Condition Edge Ratio Jacobian Minimum Angle Maximum Angle Area Sign + 1.0000E+00 1.0000E+00 1.0000E+00 1.0000E+00 1.0000E+00 8.9996E+01 9.0002E+01 1.0000E+00 + 1.0001E+00 1.0001E+00 1.0000E+00 1.0001E+00 1.0000E+00 8.9987E+01 9.0008E+01 1.0000E+00 + 1.0004E+00 1.0002E+00 1.0000E+00 1.0004E+00 1.0001E+00 8.9963E+01 9.0023E+01 1.0000E+00 + 1.0009E+00 1.0005E+00 1.0000E+00 1.0010E+00 1.0004E+00 8.9921E+01 9.0054E+01 1.0000E+00 + 1.0017E+00 1.0010E+00 1.0000E+00 1.0019E+00 1.0010E+00 8.9873E+01 9.0099E+01 1.0000E+00 + 1.0025E+00 1.0017E+00 1.0000E+00 1.0030E+00 1.0019E+00 8.9850E+01 9.0139E+01 1.0000E+00 + 1.0032E+00 1.0023E+00 1.0000E+00 1.0044E+00 1.0025E+00 8.9887E+01 9.0140E+01 1.0000E+00 + 1.0036E+00 1.0025E+00 1.0000E+00 1.0054E+00 1.0029E+00 8.9942E+01 9.0080E+01 1.0000E+00 + 1.0036E+00 1.0025E+00 1.0000E+00 1.0054E+00 1.0029E+00 8.9942E+01 9.0080E+01 1.0000E+00 + 1.0032E+00 1.0023E+00 1.0000E+00 1.0044E+00 1.0025E+00 8.9887E+01 9.0140E+01 1.0000E+00 + 1.0025E+00 1.0017E+00 1.0000E+00 1.0030E+00 1.0019E+00 8.9850E+01 9.0139E+01 1.0000E+00 + 1.0017E+00 1.0010E+00 1.0000E+00 1.0019E+00 1.0010E+00 8.9873E+01 9.0099E+01 1.0000E+00 + 1.0009E+00 1.0005E+00 1.0000E+00 1.0010E+00 1.0004E+00 8.9921E+01 9.0054E+01 1.0000E+00 + 1.0004E+00 1.0002E+00 1.0000E+00 1.0004E+00 1.0001E+00 8.9963E+01 9.0023E+01 1.0000E+00 + 1.0001E+00 1.0001E+00 1.0000E+00 1.0001E+00 1.0000E+00 8.9987E+01 9.0008E+01 1.0000E+00 + 1.0000E+00 1.0000E+00 1.0000E+00 1.0000E+00 1.0000E+00 8.9996E+01 9.0002E+01 1.0000E+00 + 1.0001E+00 1.0001E+00 1.0000E+00 1.0001E+00 1.0000E+00 8.9991E+01 9.0006E+01 1.0000E+00 + 1.0003E+00 1.0001E+00 1.0000E+00 1.0002E+00 1.0002E+00 8.9971E+01 9.0020E+01 1.0000E+00 + 1.0009E+00 1.0003E+00 1.0000E+00 1.0005E+00 1.0005E+00 8.9923E+01 9.0055E+01 1.0000E+00 + 1.0017E+00 1.0004E+00 1.0000E+00 1.0009E+00 1.0010E+00 8.9846E+01 9.0113E+01 1.0000E+00 + 1.0026E+00 1.0010E+00 1.0000E+00 1.0018E+00 1.0018E+00 8.9773E+01 9.0189E+01 1.0000E+00 + 1.0030E+00 1.0018E+00 1.0000E+00 1.0031E+00 1.0024E+00 8.9757E+01 9.0241E+01 1.0000E+00 + 1.0028E+00 1.0027E+00 1.0000E+00 1.0053E+00 1.0020E+00 8.9824E+01 9.0221E+01 1.0000E+00 + 1.0025E+00 1.0031E+00 1.0000E+00 1.0067E+00 1.0017E+00 8.9903E+01 9.0114E+01 1.0000E+00 + 1.0025E+00 1.0031E+00 1.0000E+00 1.0067E+00 1.0017E+00 8.9903E+01 9.0114E+01 1.0000E+00 + 1.0028E+00 1.0027E+00 1.0000E+00 1.0053E+00 1.0020E+00 8.9824E+01 9.0221E+01 1.0000E+00 + 1.0030E+00 1.0018E+00 1.0000E+00 1.0031E+00 1.0024E+00 8.9757E+01 9.0241E+01 1.0000E+00 + 1.0026E+00 1.0010E+00 1.0000E+00 1.0018E+00 1.0018E+00 8.9773E+01 9.0189E+01 1.0000E+00 + 1.0017E+00 1.0004E+00 1.0000E+00 1.0009E+00 1.0010E+00 8.9846E+01 9.0113E+01 1.0000E+00 + 1.0009E+00 1.0003E+00 1.0000E+00 1.0005E+00 1.0005E+00 8.9923E+01 9.0055E+01 1.0000E+00 + 1.0003E+00 1.0001E+00 1.0000E+00 1.0002E+00 1.0002E+00 8.9971E+01 9.0020E+01 1.0000E+00 + 1.0001E+00 1.0001E+00 1.0000E+00 1.0001E+00 1.0000E+00 8.9991E+01 9.0006E+01 1.0000E+00 + 1.0002E+00 1.0001E+00 1.0000E+00 1.0002E+00 1.0001E+00 8.9980E+01 9.0013E+01 1.0000E+00 + 1.0007E+00 1.0003E+00 1.0000E+00 1.0006E+00 1.0004E+00 8.9938E+01 9.0046E+01 1.0000E+00 + 1.0019E+00 1.0007E+00 1.0000E+00 1.0013E+00 1.0011E+00 8.9838E+01 9.0125E+01 1.0000E+00 + 1.0035E+00 1.0011E+00 1.0000E+00 1.0017E+00 1.0022E+00 8.9694E+01 9.0253E+01 1.0000E+00 + 1.0039E+00 1.0005E+00 1.0000E+00 1.0013E+00 1.0031E+00 8.9618E+01 9.0354E+01 1.0000E+00 + 1.0021E+00 1.0015E+00 1.0000E+00 1.0031E+00 1.0015E+00 8.9631E+01 9.0348E+01 1.0000E+00 + 9.9951E-01 1.0024E+00 1.0000E+00 1.0054E+00 9.9818E-01 8.9703E+01 9.0262E+01 1.0000E+00 + 9.9834E-01 1.0023E+00 1.0000E+00 1.0053E+00 9.9752E-01 8.9881E+01 9.0106E+01 1.0000E+00 + 9.9834E-01 1.0023E+00 1.0000E+00 1.0053E+00 9.9752E-01 8.9881E+01 9.0106E+01 1.0000E+00 + 9.9951E-01 1.0024E+00 1.0000E+00 1.0054E+00 9.9818E-01 8.9703E+01 9.0262E+01 1.0000E+00 + 1.0021E+00 1.0015E+00 1.0000E+00 1.0031E+00 1.0015E+00 8.9631E+01 9.0348E+01 1.0000E+00 + 1.0039E+00 1.0005E+00 1.0000E+00 1.0013E+00 1.0031E+00 8.9618E+01 9.0354E+01 1.0000E+00 + 1.0035E+00 1.0011E+00 1.0000E+00 1.0017E+00 1.0022E+00 8.9694E+01 9.0253E+01 1.0000E+00 + 1.0019E+00 1.0007E+00 1.0000E+00 1.0013E+00 1.0011E+00 8.9838E+01 9.0125E+01 1.0000E+00 + 1.0007E+00 1.0003E+00 1.0000E+00 1.0006E+00 1.0004E+00 8.9938E+01 9.0046E+01 1.0000E+00 + 1.0002E+00 1.0001E+00 1.0000E+00 1.0002E+00 1.0001E+00 8.9980E+01 9.0013E+01 1.0000E+00 + 1.0005E+00 1.0003E+00 1.0000E+00 1.0006E+00 1.0002E+00 8.9960E+01 9.0029E+01 1.0000E+00 + 1.0015E+00 1.0007E+00 1.0000E+00 1.0013E+00 1.0009E+00 8.9879E+01 9.0093E+01 1.0000E+00 + 1.0040E+00 1.0017E+00 1.0000E+00 1.0030E+00 1.0024E+00 8.9682E+01 9.0251E+01 1.0000E+00 + 1.0077E+00 1.0032E+00 1.0001E+00 1.0051E+00 1.0046E+00 8.9353E+01 9.0542E+01 1.0000E+00 + 1.0079E+00 1.0026E+00 1.0001E+00 1.0043E+00 1.0056E+00 8.9224E+01 9.0798E+01 1.0000E+00 + 9.9796E-01 1.0044E+00 1.0001E+00 1.0080E+00 9.9326E-01 8.9236E+01 9.0543E+01 1.0000E+00 + 9.8792E-01 1.0039E+00 1.0001E+00 1.0097E+00 9.8138E-01 8.9494E+01 9.0252E+01 1.0000E+00 + 9.8955E-01 1.0023E+00 1.0000E+00 1.0045E+00 9.8888E-01 8.9948E+01 9.0026E+01 1.0000E+00 + 9.8955E-01 1.0023E+00 1.0000E+00 1.0045E+00 9.8888E-01 8.9948E+01 9.0026E+01 1.0000E+00 + 9.8792E-01 1.0039E+00 1.0001E+00 1.0097E+00 9.8138E-01 8.9494E+01 9.0252E+01 1.0000E+00 + 9.9796E-01 1.0044E+00 1.0001E+00 1.0080E+00 9.9326E-01 8.9236E+01 9.0543E+01 1.0000E+00 + 1.0079E+00 1.0026E+00 1.0001E+00 1.0043E+00 1.0056E+00 8.9224E+01 9.0798E+01 1.0000E+00 + 1.0077E+00 1.0032E+00 1.0001E+00 1.0051E+00 1.0046E+00 8.9353E+01 9.0542E+01 1.0000E+00 + 1.0040E+00 1.0017E+00 1.0000E+00 1.0030E+00 1.0024E+00 8.9682E+01 9.0251E+01 1.0000E+00 + 1.0015E+00 1.0007E+00 1.0000E+00 1.0013E+00 1.0009E+00 8.9879E+01 9.0093E+01 1.0000E+00 + 1.0005E+00 1.0003E+00 1.0000E+00 1.0006E+00 1.0002E+00 8.9960E+01 9.0029E+01 1.0000E+00 + 1.0010E+00 1.0006E+00 1.0000E+00 1.0011E+00 1.0006E+00 8.9928E+01 9.0055E+01 1.0000E+00 + 1.0028E+00 1.0015E+00 1.0000E+00 1.0026E+00 1.0018E+00 8.9785E+01 9.0173E+01 1.0000E+00 + 1.0073E+00 1.0034E+00 1.0001E+00 1.0060E+00 1.0047E+00 8.9453E+01 9.0447E+01 1.0000E+00 + 1.0153E+00 1.0067E+00 1.0002E+00 1.0115E+00 1.0098E+00 8.8835E+01 9.0948E+01 1.0000E+00 + 1.0265E+00 1.0130E+00 1.0009E+00 1.0194E+00 1.0132E+00 8.7688E+01 9.1928E+01 1.0000E+00 + 9.9998E-01 1.0142E+00 1.0006E+00 1.0219E+00 9.8735E-01 8.8404E+01 9.1797E+01 1.0000E+00 + 9.3613E-01 1.0261E+00 1.0029E+00 1.0732E+00 8.9211E-01 8.8073E+01 9.3526E+01 1.0000E+00 + 9.3613E-01 1.0261E+00 1.0029E+00 1.0732E+00 8.9211E-01 8.8073E+01 9.3526E+01 1.0000E+00 + 9.9998E-01 1.0142E+00 1.0006E+00 1.0219E+00 9.8735E-01 8.8404E+01 9.1797E+01 1.0000E+00 + 1.0265E+00 1.0130E+00 1.0009E+00 1.0194E+00 1.0132E+00 8.7688E+01 9.1928E+01 1.0000E+00 + 1.0153E+00 1.0067E+00 1.0002E+00 1.0115E+00 1.0098E+00 8.8835E+01 9.0948E+01 1.0000E+00 + 1.0073E+00 1.0034E+00 1.0001E+00 1.0060E+00 1.0047E+00 8.9453E+01 9.0447E+01 1.0000E+00 + 1.0028E+00 1.0015E+00 1.0000E+00 1.0026E+00 1.0018E+00 8.9785E+01 9.0173E+01 1.0000E+00 + 1.0010E+00 1.0006E+00 1.0000E+00 1.0011E+00 1.0006E+00 8.9928E+01 9.0055E+01 1.0000E+00 + 1.0017E+00 1.0012E+00 1.0000E+00 1.0020E+00 1.0011E+00 8.9891E+01 9.0091E+01 1.0000E+00 + 1.0048E+00 1.0029E+00 1.0000E+00 1.0049E+00 1.0032E+00 8.9668E+01 9.0286E+01 1.0000E+00 + 1.0120E+00 1.0067E+00 1.0002E+00 1.0115E+00 1.0082E+00 8.9141E+01 9.0744E+01 1.0000E+00 + 1.0234E+00 1.0109E+00 1.0005E+00 1.0192E+00 1.0174E+00 8.8369E+01 9.1413E+01 1.0000E+00 + 1.0468E+00 1.0152E+00 1.0014E+00 1.0307E+00 1.0332E+00 8.7052E+01 9.2295E+01 1.0000E+00 + 1.1556E+00 1.0994E+00 1.0290E+00 1.1766E+00 1.0212E+00 7.6549E+01 9.8937E+01 1.0000E+00 + 7.5553E-01 1.3366E+00 1.2195E+00 1.5916E+00 4.7897E-01 6.8536E+01 1.2411E+02 1.0000E+00 + 7.5553E-01 1.3366E+00 1.2195E+00 1.5916E+00 4.7897E-01 6.8536E+01 1.2411E+02 1.0000E+00 + 1.1556E+00 1.0994E+00 1.0290E+00 1.1766E+00 1.0212E+00 7.6549E+01 9.8937E+01 1.0000E+00 + 1.0468E+00 1.0152E+00 1.0014E+00 1.0307E+00 1.0332E+00 8.7052E+01 9.2295E+01 1.0000E+00 + 1.0234E+00 1.0109E+00 1.0005E+00 1.0192E+00 1.0174E+00 8.8369E+01 9.1413E+01 1.0000E+00 + 1.0120E+00 1.0067E+00 1.0002E+00 1.0115E+00 1.0082E+00 8.9141E+01 9.0744E+01 1.0000E+00 + 1.0048E+00 1.0029E+00 1.0000E+00 1.0049E+00 1.0032E+00 8.9668E+01 9.0286E+01 1.0000E+00 + 1.0017E+00 1.0012E+00 1.0000E+00 1.0020E+00 1.0011E+00 8.9891E+01 9.0091E+01 1.0000E+00 + 1.0027E+00 1.0018E+00 1.0000E+00 1.0032E+00 1.0020E+00 8.9870E+01 9.0121E+01 1.0000E+00 + 1.0071E+00 1.0047E+00 1.0001E+00 1.0081E+00 1.0054E+00 8.9588E+01 9.0385E+01 1.0000E+00 + 1.0181E+00 1.0118E+00 1.0004E+00 1.0201E+00 1.0132E+00 8.8854E+01 9.1058E+01 1.0000E+00 + 1.0366E+00 1.0240E+00 1.0017E+00 1.0397E+00 1.0246E+00 8.7281E+01 9.2479E+01 1.0000E+00 + 1.0308E+00 1.0232E+00 1.0020E+00 1.0437E+00 1.0172E+00 8.6858E+01 9.2479E+01 1.0000E+00 + 1.0585E+00 1.1472E+00 1.0235E+00 1.2832E+00 9.0507E-01 7.9533E+01 9.8013E+01 1.0000E+00 + 1.0585E+00 1.1472E+00 1.0235E+00 1.2832E+00 9.0507E-01 7.9533E+01 9.8013E+01 1.0000E+00 + 1.0308E+00 1.0232E+00 1.0020E+00 1.0437E+00 1.0172E+00 8.6858E+01 9.2479E+01 1.0000E+00 + 1.0366E+00 1.0240E+00 1.0017E+00 1.0397E+00 1.0246E+00 8.7281E+01 9.2479E+01 1.0000E+00 + 1.0181E+00 1.0118E+00 1.0004E+00 1.0201E+00 1.0132E+00 8.8854E+01 9.1058E+01 1.0000E+00 + 1.0071E+00 1.0047E+00 1.0001E+00 1.0081E+00 1.0054E+00 8.9588E+01 9.0385E+01 1.0000E+00 + 1.0027E+00 1.0018E+00 1.0000E+00 1.0032E+00 1.0020E+00 8.9870E+01 9.0121E+01 1.0000E+00 + 1.0035E+00 1.0024E+00 1.0000E+00 1.0043E+00 1.0030E+00 8.9892E+01 9.0120E+01 1.0000E+00 + 1.0092E+00 1.0063E+00 1.0001E+00 1.0115E+00 1.0076E+00 8.9643E+01 9.0380E+01 1.0000E+00 + 1.0235E+00 1.0164E+00 1.0006E+00 1.0292E+00 1.0196E+00 8.8956E+01 9.1072E+01 1.0000E+00 + 1.0516E+00 1.0362E+00 1.0029E+00 1.0630E+00 1.0407E+00 8.7225E+01 9.2661E+01 1.0000E+00 + 1.1316E+00 1.1303E+00 1.0354E+00 1.1912E+00 1.0239E+00 7.6328E+01 1.0143E+02 1.0000E+00 + 6.6097E-01 1.3511E+00 1.2114E+00 1.6973E+00 3.8254E-01 7.3292E+01 1.2346E+02 1.0000E+00 + 6.6097E-01 1.3511E+00 1.2114E+00 1.6973E+00 3.8254E-01 7.3292E+01 1.2346E+02 1.0000E+00 + 1.1316E+00 1.1303E+00 1.0354E+00 1.1912E+00 1.0239E+00 7.6328E+01 1.0143E+02 1.0000E+00 + 1.0516E+00 1.0362E+00 1.0029E+00 1.0630E+00 1.0407E+00 8.7225E+01 9.2661E+01 1.0000E+00 + 1.0235E+00 1.0164E+00 1.0006E+00 1.0292E+00 1.0196E+00 8.8956E+01 9.1072E+01 1.0000E+00 + 1.0092E+00 1.0063E+00 1.0001E+00 1.0115E+00 1.0076E+00 8.9643E+01 9.0380E+01 1.0000E+00 + 1.0035E+00 1.0024E+00 1.0000E+00 1.0043E+00 1.0030E+00 8.9892E+01 9.0120E+01 1.0000E+00 + 1.0040E+00 1.0025E+00 1.0000E+00 1.0050E+00 1.0036E+00 8.9947E+01 9.0072E+01 1.0000E+00 + 1.0101E+00 1.0068E+00 1.0001E+00 1.0138E+00 1.0090E+00 8.9831E+01 9.0220E+01 1.0000E+00 + 1.0254E+00 1.0176E+00 1.0006E+00 1.0359E+00 1.0225E+00 8.9515E+01 9.0610E+01 1.0000E+00 + 1.0519E+00 1.0377E+00 1.0031E+00 1.0793E+00 1.0461E+00 8.8784E+01 9.1322E+01 1.0000E+00 + 1.0752E+00 1.1563E+00 1.0312E+00 1.2490E+00 9.7613E-01 8.3607E+01 9.8302E+01 1.0000E+00 + 1.0752E+00 1.1563E+00 1.0312E+00 1.2490E+00 9.7613E-01 8.3607E+01 9.8302E+01 1.0000E+00 + 1.0519E+00 1.0377E+00 1.0031E+00 1.0793E+00 1.0461E+00 8.8784E+01 9.1322E+01 1.0000E+00 + 1.0254E+00 1.0176E+00 1.0006E+00 1.0359E+00 1.0225E+00 8.9515E+01 9.0610E+01 1.0000E+00 + 1.0101E+00 1.0068E+00 1.0001E+00 1.0138E+00 1.0090E+00 8.9831E+01 9.0220E+01 1.0000E+00 + 1.0040E+00 1.0025E+00 1.0000E+00 1.0050E+00 1.0036E+00 8.9947E+01 9.0072E+01 1.0000E+00 + 1.0039E+00 1.0025E+00 1.0000E+00 1.0051E+00 1.0034E+00 8.9979E+01 9.0041E+01 1.0000E+00 + 1.0097E+00 1.0070E+00 1.0001E+00 1.0141E+00 1.0081E+00 8.9953E+01 9.0129E+01 1.0000E+00 + 1.0237E+00 1.0184E+00 1.0007E+00 1.0370E+00 1.0194E+00 8.9865E+01 9.0374E+01 1.0000E+00 + 1.0463E+00 1.0404E+00 1.0032E+00 1.0829E+00 1.0360E+00 8.9554E+01 9.0946E+01 1.0000E+00 + 1.0577E+00 1.1404E+00 1.0277E+00 1.2313E+00 9.6903E-01 8.3827E+01 9.8310E+01 1.0000E+00 + 1.0577E+00 1.1404E+00 1.0277E+00 1.2313E+00 9.6903E-01 8.3827E+01 9.8310E+01 1.0000E+00 + 1.0463E+00 1.0404E+00 1.0032E+00 1.0829E+00 1.0360E+00 8.9554E+01 9.0946E+01 1.0000E+00 + 1.0237E+00 1.0184E+00 1.0007E+00 1.0370E+00 1.0194E+00 8.9865E+01 9.0374E+01 1.0000E+00 + 1.0097E+00 1.0070E+00 1.0001E+00 1.0141E+00 1.0081E+00 8.9953E+01 9.0129E+01 1.0000E+00 + 1.0039E+00 1.0025E+00 1.0000E+00 1.0051E+00 1.0034E+00 8.9979E+01 9.0041E+01 1.0000E+00 + 1.0033E+00 1.0023E+00 1.0000E+00 1.0043E+00 1.0026E+00 8.9925E+01 9.0095E+01 1.0000E+00 + 1.0080E+00 1.0064E+00 1.0001E+00 1.0117E+00 1.0060E+00 8.9744E+01 9.0309E+01 1.0000E+00 + 1.0191E+00 1.0165E+00 1.0005E+00 1.0297E+00 1.0136E+00 8.9238E+01 9.0894E+01 1.0000E+00 + 1.0380E+00 1.0361E+00 1.0025E+00 1.0616E+00 1.0248E+00 8.7837E+01 9.2344E+01 1.0000E+00 + 1.0943E+00 1.1231E+00 1.0293E+00 1.1752E+00 1.0010E+00 7.7997E+01 1.0060E+02 1.0000E+00 + 6.6823E-01 1.3227E+00 1.4180E+00 1.5648E+00 3.2335E-01 7.3140E+01 1.3511E+02 1.0000E+00 + 6.6823E-01 1.3227E+00 1.4180E+00 1.5648E+00 3.2335E-01 7.3140E+01 1.3511E+02 1.0000E+00 + 1.0943E+00 1.1231E+00 1.0293E+00 1.1752E+00 1.0010E+00 7.7997E+01 1.0060E+02 1.0000E+00 + 1.0380E+00 1.0361E+00 1.0025E+00 1.0616E+00 1.0248E+00 8.7837E+01 9.2344E+01 1.0000E+00 + 1.0191E+00 1.0165E+00 1.0005E+00 1.0297E+00 1.0136E+00 8.9238E+01 9.0894E+01 1.0000E+00 + 1.0080E+00 1.0064E+00 1.0001E+00 1.0117E+00 1.0060E+00 8.9744E+01 9.0309E+01 1.0000E+00 + 1.0033E+00 1.0023E+00 1.0000E+00 1.0043E+00 1.0026E+00 8.9925E+01 9.0095E+01 1.0000E+00 + 1.0023E+00 1.0018E+00 1.0000E+00 1.0029E+00 1.0017E+00 8.9898E+01 9.0102E+01 1.0000E+00 + 1.0057E+00 1.0045E+00 1.0000E+00 1.0074E+00 1.0040E+00 8.9675E+01 9.0330E+01 1.0000E+00 + 1.0126E+00 1.0110E+00 1.0003E+00 1.0176E+00 1.0081E+00 8.9094E+01 9.0927E+01 1.0000E+00 + 1.0201E+00 1.0221E+00 1.0013E+00 1.0331E+00 1.0086E+00 8.7738E+01 9.2337E+01 1.0000E+00 + 9.9312E-01 1.0118E+00 1.0020E+00 1.0312E+00 9.8003E-01 8.7023E+01 9.3222E+01 1.0000E+00 + 9.7950E-01 1.0205E+00 1.0086E+00 1.0306E+00 9.5336E-01 8.2517E+01 9.6001E+01 1.0000E+00 + 6.7093E-01 1.3257E+00 1.4243E+00 1.5704E+00 3.2406E-01 7.2716E+01 1.3535E+02 1.0000E+00 + 6.7093E-01 1.3257E+00 1.4243E+00 1.5704E+00 3.2406E-01 7.2716E+01 1.3535E+02 1.0000E+00 + 9.7950E-01 1.0205E+00 1.0086E+00 1.0306E+00 9.5336E-01 8.2517E+01 9.6001E+01 1.0000E+00 + 9.9312E-01 1.0118E+00 1.0020E+00 1.0312E+00 9.8003E-01 8.7023E+01 9.3222E+01 1.0000E+00 + 1.0201E+00 1.0221E+00 1.0013E+00 1.0331E+00 1.0086E+00 8.7738E+01 9.2337E+01 1.0000E+00 + 1.0126E+00 1.0110E+00 1.0003E+00 1.0176E+00 1.0081E+00 8.9094E+01 9.0927E+01 1.0000E+00 + 1.0057E+00 1.0045E+00 1.0000E+00 1.0074E+00 1.0040E+00 8.9675E+01 9.0330E+01 1.0000E+00 + 1.0023E+00 1.0018E+00 1.0000E+00 1.0029E+00 1.0017E+00 8.9898E+01 9.0102E+01 1.0000E+00 + 1.0014E+00 1.0010E+00 1.0000E+00 1.0017E+00 1.0008E+00 8.9914E+01 9.0075E+01 1.0000E+00 + 1.0033E+00 1.0024E+00 1.0000E+00 1.0039E+00 1.0020E+00 8.9742E+01 9.0237E+01 1.0000E+00 + 1.0068E+00 1.0051E+00 1.0001E+00 1.0080E+00 1.0040E+00 8.9350E+01 9.0616E+01 1.0000E+00 + 1.0084E+00 1.0064E+00 1.0003E+00 1.0093E+00 1.0052E+00 8.8808E+01 9.1194E+01 1.0000E+00 + 1.0052E+00 1.0021E+00 1.0006E+00 1.0032E+00 1.0025E+00 8.8015E+01 9.1832E+01 1.0000E+00 + 9.9427E-01 1.0110E+00 1.0019E+00 1.0297E+00 9.8098E-01 8.7052E+01 9.3206E+01 1.0000E+00 + 1.0994E+00 1.1204E+00 1.0282E+00 1.1699E+00 1.0056E+00 7.8158E+01 1.0046E+02 1.0000E+00 + 1.0744E+00 1.1309E+00 1.0230E+00 1.1960E+00 9.9212E-01 8.3315E+01 9.7808E+01 1.0000E+00 + 1.0744E+00 1.1309E+00 1.0230E+00 1.1960E+00 9.9212E-01 8.3315E+01 9.7808E+01 1.0000E+00 + 1.0994E+00 1.1204E+00 1.0282E+00 1.1699E+00 1.0056E+00 7.8158E+01 1.0046E+02 1.0000E+00 + 9.9427E-01 1.0110E+00 1.0019E+00 1.0297E+00 9.8098E-01 8.7052E+01 9.3206E+01 1.0000E+00 + 1.0052E+00 1.0021E+00 1.0006E+00 1.0032E+00 1.0025E+00 8.8015E+01 9.1832E+01 1.0000E+00 + 1.0084E+00 1.0064E+00 1.0003E+00 1.0093E+00 1.0052E+00 8.8808E+01 9.1194E+01 1.0000E+00 + 1.0068E+00 1.0051E+00 1.0001E+00 1.0080E+00 1.0040E+00 8.9350E+01 9.0616E+01 1.0000E+00 + 1.0033E+00 1.0024E+00 1.0000E+00 1.0039E+00 1.0020E+00 8.9742E+01 9.0237E+01 1.0000E+00 + 1.0014E+00 1.0010E+00 1.0000E+00 1.0017E+00 1.0008E+00 8.9914E+01 9.0075E+01 1.0000E+00 + 1.0007E+00 1.0005E+00 1.0000E+00 1.0008E+00 1.0003E+00 8.9947E+01 9.0041E+01 1.0000E+00 + 1.0017E+00 1.0010E+00 1.0000E+00 1.0016E+00 1.0009E+00 8.9850E+01 9.0126E+01 1.0000E+00 + 1.0034E+00 1.0017E+00 1.0000E+00 1.0028E+00 1.0019E+00 8.9643E+01 9.0302E+01 1.0000E+00 + 1.0056E+00 1.0013E+00 1.0001E+00 1.0025E+00 1.0032E+00 8.9295E+01 9.0568E+01 1.0000E+00 + 1.0086E+00 1.0062E+00 1.0003E+00 1.0090E+00 1.0054E+00 8.8805E+01 9.1189E+01 1.0000E+00 + 1.0211E+00 1.0214E+00 1.0013E+00 1.0313E+00 1.0100E+00 8.7728E+01 9.2313E+01 1.0000E+00 + 1.0405E+00 1.0333E+00 1.0022E+00 1.0553E+00 1.0294E+00 8.7767E+01 9.2259E+01 1.0000E+00 + 1.0490E+00 1.0342E+00 1.0023E+00 1.0687E+00 1.0435E+00 8.9427E+01 9.0867E+01 1.0000E+00 + 1.0490E+00 1.0342E+00 1.0023E+00 1.0687E+00 1.0435E+00 8.9427E+01 9.0867E+01 1.0000E+00 + 1.0405E+00 1.0333E+00 1.0022E+00 1.0553E+00 1.0294E+00 8.7767E+01 9.2259E+01 1.0000E+00 + 1.0211E+00 1.0214E+00 1.0013E+00 1.0313E+00 1.0100E+00 8.7728E+01 9.2313E+01 1.0000E+00 + 1.0086E+00 1.0062E+00 1.0003E+00 1.0090E+00 1.0054E+00 8.8805E+01 9.1189E+01 1.0000E+00 + 1.0056E+00 1.0013E+00 1.0001E+00 1.0025E+00 1.0032E+00 8.9295E+01 9.0568E+01 1.0000E+00 + 1.0034E+00 1.0017E+00 1.0000E+00 1.0028E+00 1.0019E+00 8.9643E+01 9.0302E+01 1.0000E+00 + 1.0017E+00 1.0010E+00 1.0000E+00 1.0016E+00 1.0009E+00 8.9850E+01 9.0126E+01 1.0000E+00 + 1.0007E+00 1.0005E+00 1.0000E+00 1.0008E+00 1.0003E+00 8.9947E+01 9.0041E+01 1.0000E+00 + 1.0003E+00 1.0002E+00 1.0000E+00 1.0003E+00 1.0001E+00 8.9975E+01 9.0018E+01 1.0000E+00 + 1.0007E+00 1.0003E+00 1.0000E+00 1.0005E+00 1.0003E+00 8.9929E+01 9.0052E+01 1.0000E+00 + 1.0017E+00 1.0005E+00 1.0000E+00 1.0009E+00 1.0009E+00 8.9827E+01 9.0125E+01 1.0000E+00 + 1.0035E+00 1.0018E+00 1.0000E+00 1.0029E+00 1.0019E+00 8.9639E+01 9.0302E+01 1.0000E+00 + 1.0072E+00 1.0052E+00 1.0001E+00 1.0082E+00 1.0042E+00 8.9340E+01 9.0615E+01 1.0000E+00 + 1.0134E+00 1.0108E+00 1.0003E+00 1.0173E+00 1.0090E+00 8.9068E+01 9.0922E+01 1.0000E+00 + 1.0204E+00 1.0156E+00 1.0005E+00 1.0275E+00 1.0157E+00 8.9170E+01 9.0890E+01 1.0000E+00 + 1.0246E+00 1.0168E+00 1.0005E+00 1.0333E+00 1.0217E+00 8.9726E+01 9.0417E+01 1.0000E+00 + 1.0246E+00 1.0168E+00 1.0005E+00 1.0333E+00 1.0217E+00 8.9726E+01 9.0417E+01 1.0000E+00 + 1.0204E+00 1.0156E+00 1.0005E+00 1.0275E+00 1.0157E+00 8.9170E+01 9.0890E+01 1.0000E+00 + 1.0134E+00 1.0108E+00 1.0003E+00 1.0173E+00 1.0090E+00 8.9068E+01 9.0922E+01 1.0000E+00 + 1.0072E+00 1.0052E+00 1.0001E+00 1.0082E+00 1.0042E+00 8.9340E+01 9.0615E+01 1.0000E+00 + 1.0035E+00 1.0018E+00 1.0000E+00 1.0029E+00 1.0019E+00 8.9639E+01 9.0302E+01 1.0000E+00 + 1.0017E+00 1.0005E+00 1.0000E+00 1.0009E+00 1.0009E+00 8.9827E+01 9.0125E+01 1.0000E+00 + 1.0007E+00 1.0003E+00 1.0000E+00 1.0005E+00 1.0003E+00 8.9929E+01 9.0052E+01 1.0000E+00 + 1.0003E+00 1.0002E+00 1.0000E+00 1.0003E+00 1.0001E+00 8.9975E+01 9.0018E+01 1.0000E+00 + 1.0001E+00 1.0001E+00 1.0000E+00 1.0001E+00 1.0000E+00 8.9990E+01 9.0006E+01 1.0000E+00 + 1.0003E+00 1.0002E+00 1.0000E+00 1.0003E+00 1.0001E+00 8.9970E+01 9.0018E+01 1.0000E+00 + 1.0008E+00 1.0005E+00 1.0000E+00 1.0009E+00 1.0003E+00 8.9924E+01 9.0053E+01 1.0000E+00 + 1.0020E+00 1.0014E+00 1.0000E+00 1.0024E+00 1.0009E+00 8.9838E+01 9.0127E+01 1.0000E+00 + 1.0042E+00 1.0032E+00 1.0000E+00 1.0053E+00 1.0024E+00 8.9723E+01 9.0241E+01 1.0000E+00 + 1.0075E+00 1.0056E+00 1.0001E+00 1.0094E+00 1.0053E+00 8.9647E+01 9.0341E+01 1.0000E+00 + 1.0108E+00 1.0076E+00 1.0001E+00 1.0137E+00 1.0087E+00 8.9707E+01 9.0331E+01 1.0000E+00 + 1.0130E+00 1.0080E+00 1.0001E+00 1.0160E+00 1.0115E+00 8.9915E+01 9.0168E+01 1.0000E+00 + 1.0130E+00 1.0080E+00 1.0001E+00 1.0160E+00 1.0115E+00 8.9915E+01 9.0168E+01 1.0000E+00 + 1.0108E+00 1.0076E+00 1.0001E+00 1.0137E+00 1.0087E+00 8.9707E+01 9.0331E+01 1.0000E+00 + 1.0075E+00 1.0056E+00 1.0001E+00 1.0094E+00 1.0053E+00 8.9647E+01 9.0341E+01 1.0000E+00 + 1.0042E+00 1.0032E+00 1.0000E+00 1.0053E+00 1.0024E+00 8.9723E+01 9.0241E+01 1.0000E+00 + 1.0020E+00 1.0014E+00 1.0000E+00 1.0024E+00 1.0009E+00 8.9838E+01 9.0127E+01 1.0000E+00 + 1.0008E+00 1.0005E+00 1.0000E+00 1.0009E+00 1.0003E+00 8.9924E+01 9.0053E+01 1.0000E+00 + 1.0003E+00 1.0002E+00 1.0000E+00 1.0003E+00 1.0001E+00 8.9970E+01 9.0018E+01 1.0000E+00 + 1.0001E+00 1.0001E+00 1.0000E+00 1.0001E+00 1.0000E+00 8.9990E+01 9.0006E+01 1.0000E+00 + 9.9344E-01 1.0303E+00 1.0018E+00 1.0621E+00 9.6335E-01 8.8258E+01 9.1728E+01 1.0000E+00 + 9.9344E-01 1.0303E+00 1.0018E+00 1.0621E+00 9.6335E-01 8.8258E+01 9.1728E+01 1.0000E+00 + 7.6404E-01 1.4936E+00 1.2992E+00 1.8874E+00 3.6261E-01 6.5177E+01 1.2951E+02 1.0000E+00 + 5.9465E-01 1.4327E+00 1.1525E+00 1.7044E+00 4.0223E-01 6.4192E+01 1.0638E+02 1.0000E+00 + 8.6551E-01 1.1646E+00 1.0567E+00 1.3339E+00 6.6662E-01 7.1190E+01 9.7610E+01 1.0000E+00 + 5.0114E-01 1.2054E+00 1.1575E+00 1.3566E+00 3.3567E-01 7.7029E+01 1.2022E+02 1.0000E+00 + 5.2705E-01 1.4977E+00 1.2088E+00 1.6949E+00 3.8250E-01 6.1886E+01 1.1632E+02 1.0000E+00 + 5.8633E-01 1.4337E+00 1.6529E+00 2.9340E+00 2.6807E-01 6.4887E+01 1.1879E+02 1.0000E+00 + 6.4463E-01 1.2060E+00 1.2013E+00 1.7142E+00 4.7255E-01 6.9670E+01 1.0969E+02 1.0000E+00 + 3.6363E-01 1.6089E+00 1.2913E+00 2.0932E+00 2.0620E-01 5.5366E+01 1.1055E+02 1.0000E+00 + 3.5720E-01 1.2556E+00 1.1503E+00 1.4484E+00 2.8661E-01 6.2329E+01 1.1535E+02 1.0000E+00 + 3.5734E-01 1.2550E+00 1.1494E+00 1.4497E+00 2.8644E-01 6.2412E+01 1.1522E+02 1.0000E+00 + 3.6464E-01 1.6058E+00 1.2900E+00 2.0922E+00 2.0625E-01 5.5209E+01 1.1037E+02 1.0000E+00 + 6.6182E-01 1.2250E+00 1.1978E+00 1.7651E+00 4.7811E-01 7.0603E+01 1.0925E+02 1.0000E+00 + 6.6182E-01 1.2250E+00 1.1978E+00 1.7651E+00 4.7811E-01 7.0603E+01 1.0925E+02 1.0000E+00 + 3.6464E-01 1.6058E+00 1.2900E+00 2.0922E+00 2.0625E-01 5.5209E+01 1.1037E+02 1.0000E+00 + 3.5734E-01 1.2550E+00 1.1494E+00 1.4497E+00 2.8644E-01 6.2412E+01 1.1522E+02 1.0000E+00 + 3.5720E-01 1.2556E+00 1.1503E+00 1.4484E+00 2.8661E-01 6.2329E+01 1.1535E+02 1.0000E+00 + 3.6363E-01 1.6089E+00 1.2913E+00 2.0932E+00 2.0620E-01 5.5366E+01 1.1055E+02 1.0000E+00 + 6.4463E-01 1.2060E+00 1.2013E+00 1.7142E+00 4.7255E-01 6.9670E+01 1.0969E+02 1.0000E+00 + 5.8633E-01 1.4337E+00 1.6529E+00 2.9340E+00 2.6807E-01 6.4887E+01 1.1879E+02 1.0000E+00 + 5.2705E-01 1.4977E+00 1.2088E+00 1.6949E+00 3.8250E-01 6.1886E+01 1.1632E+02 1.0000E+00 + 5.0114E-01 1.2054E+00 1.1575E+00 1.3566E+00 3.3567E-01 7.7029E+01 1.2022E+02 1.0000E+00 + 8.6551E-01 1.1646E+00 1.0567E+00 1.3339E+00 6.6662E-01 7.1190E+01 9.7610E+01 1.0000E+00 + 5.9465E-01 1.4327E+00 1.1525E+00 1.7044E+00 4.0223E-01 6.4192E+01 1.0638E+02 1.0000E+00 + 7.6404E-01 1.4936E+00 1.2992E+00 1.8874E+00 3.6261E-01 6.5177E+01 1.2951E+02 1.0000E+00 diff --git a/v0.8.7/tutorials/out/mesh.h5 b/v0.8.7/tutorials/out/mesh.h5 new file mode 100644 index 0000000000000000000000000000000000000000..8b12c8df05790c6470202106044c4a25961535e9 GIT binary patch literal 135136 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/restart_000000100.h5 b/v0.8.7/tutorials/out/restart_000000100.h5 new file mode 100644 index 0000000000000000000000000000000000000000..dd272993f109eb208eaaebc2e682ea6b77179b2e GIT binary patch literal 11976 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 Gp8g9zB}(@I literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/restart_000000150.h5 b/v0.8.7/tutorials/out/restart_000000150.h5 new file mode 100644 index 0000000000000000000000000000000000000000..cbfbb946c0d2a7fc8810d13f6d6cd645493f6db8 GIT binary patch literal 11976 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 Jn!Kms{{r>J@t6Pr literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/restart_000000180.h5 b/v0.8.7/tutorials/out/restart_000000180.h5 new file mode 100644 index 0000000000000000000000000000000000000000..64fc468d46c7d80bbf383ffd8ef2b7e29b10bb07 GIT binary patch literal 11976 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 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/out/solution_000000000.h5 b/v0.8.7/tutorials/out/solution_000000000.h5 new file mode 100644 index 0000000000000000000000000000000000000000..8625b455522785abea0751c5a87b770f9550ec40 GIT binary patch literal 659456 zcmeI5dvsRSnTNk52qf69sNAJWJM9wiQg1~?%f<_{=o+oovCFy~MJ@@T1{KiOsZ}h9 zP7w%dts~g!bRq=@DN<38%dR9O1Z`o}DeYKWP^S*9Gt}BTwhF`K%YJ`5Gw0*XAtZ#` z!yoLN^X_xreV%WhCm;Ut^Y2Dn@|Pbe>syw~|LNK_*C|)t{Gytx zYU2jmKX%x>*YZC%Pu9scjM}f&ox@FZ-=lMzXT?ICetSDZZ;!gawlP8S6xnlV3 zH&;v=uBm5U($rJ^yN3R^-g5JuV=Kn(aRv6S;%_|LmwOrRt z*HzqHQB^T<%AT)n5=rx)mh0?!t12dsA35dDTPvEMH_uAXd)1_hip!d+|Ic-m6K)RI zb@^Y{Bn|~i9Q$1hV(-Y-q z9+iLQrm?uVxcLTM?S3Ui1|VO{PqaVB+Ufk{_m8QqJUTa^xsvDCygw(7YT}pQn)yxC ze9NYB()e4NXXXDI5r1lrAN0OmQ5se`EOFEPF48LUCC$%u-Shko~p#cn|OZ9>4>501w~+Jb(xA03N^t zcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^t zcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^t zcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xAfIQ$o zI{&QiKKm~J-@j%c>)^`$-PT&wF3%$?J5i`|J2%8?)Be*80KrysT%>@4=DE zMf;mEPvG$VzQ^aw=ga=){l)`$01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCr954=7iL{m=eC68As*o_){0=ldTXzyo;T;PXJ%_fysP*O=vn zWZ&fcWS!&Im{&vEPC zCwR4uS9|SW-6!qy$f~DZ*HP!Q*4Ng$o4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb z19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb z19;#_^#Hjk_z(Z#za!Ou9rfJuY}%-G?5}#-eLL!Wdp%#;eRN)9M?DvP+Ll9lr0~Zew z_C8Mb)3N&Km@!X)@7wGH_5tq!9>4>501x1S1LXm}pW+|4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r z-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJfsXQka#k2ym-`5> z1ItVAN80Dm)_U4~JL>$tu3y(_Os-ewH74sE@1K1w-pR4Oc_;6mb==4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCumZ9>4>501q5a9w^V1H*e|hlodCR!F;t~n@huTXLrk;y}KmLJF4kyzFu5h z+Ol{@Sx&F75uWG(! z(|E_3x!e`a^V<8bVq0%6w>$ACbm}ZVx`*K+1mG9KfAg#mFKz5R~9vGsOCSmskFB==2FhLW&ei#9(JNF zKUcVa!}<#MZ}+B4#QWw6RTHL6m^g0am|H3;D<_PZP%&|e?ik)b9VN#-^Ez{z_Cn`e z|K>}I%8SY;-ZHjgWXmQ!W1Bf5c~6cZ009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1R!v@5tvpvfBKAvZoJ@ddoG>_0uX=z1Rwx`bONhZ z%4~y2n?(P*88{ zQ$Mh%cEOAdwSLCWhU{8-dTqh|&%Lg3?&>*p{*V2?RDV{tx`KMz`ud!A^dFXVebJZ9 zSu^g1U$6C7ZSHr|r>C!uedd1dy`issb)DC|-Y;DC;j))~?9=P7dyigzW3AtE@}Nb( z=-o1}wa@$J_HW$(%Fyro-nUktuxr=C$ob{5r@e9Y#OHkPsvW1C@wI1spWC)}+TDL~ zOZ?E*7Uh-AjW-gB$($=Rw_m!?4v2)Er|5)D_uPV9y;kbVF z>GkBFFKImeXl zdO!2GleY|cvt|EI{dT|cD;n$lLp|TP{Bx7){Y#%5J8$uz`uO>F9(aG*TNgL@viY;N zURl=Q8?WDX&sScp&)lEt({=FiKRy21I)CX!{qB17>{>tj6Q|xb&8>@l>IPQUd~)-8 z|K<0Ve!aY8z29AZR>NJNuZw-2uUmTMF;CR{bFS(Cu|XfLH~#B0*C#HQ%-XhN>5~n< zvT@Fje{x^bbDUE$pyZ~8c>SWw-P%r_H#F_9A6(t9XoKIi`CBLK*xBIa*|bp{($=Rw z9}Ma=_>>V1{-ouT-#Y2NdjItB(^h@td-W}Ss-8Nr>iq`)7u#zFeejzG|IIHRvwPcX z+5P2HDW{sq>reIPI_Q{;wAQWbIG&+4wI%zv-F<%lyTk|NWxr)4m<|ulmgUj2~XV?s-3M zd)>Mx#@58T*8SB1m%KY==xYCP?|*&i@qb!JU8pSC`6o;-5%`6myq_qRW=?B8Dg zW1XM9_1%dlPOpueiwBH4?o*8ozS}Qu*fDfwgMa0R-KQRV?%wlHTc7&qIcnZ`q<;75 z&&2hsPxYfu&i-&}edI4crtLdB@3g-eApijgKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHaf9Bu@Z!*aMi7taF$2tWV=5P$##AaH0B$ohV&`ht+V>S{s`tLqW+ zU!Cd;L++{@6LMIc<+8?l=a9SVhK3wgH#+3MX66s7&(@GTTQFaJdWGCs_oI+Q>(+++ z-`M9@A$QhYA985jypaE!xjsGL!y$LoO$#}!?$MC{8n2%ja#!7PA&1p%5BaaLetpPY zb%R0zh=&i{%`CvEac8Q%lUMDL!NK} z&(`i@ajp-!%LVrn=X*o$azVYd{n~qe*80S`IOHxDa1&?otPVNM&hnq*e9K*Smc#5U z|GCXP)W>qC3+|^r=Y`zqg1Yv1+Wu61Xvkf48$u4Ns|)$Baer5Y+*LO}5 z&keb&?#__I8oB5_NZX(4W4W{OI?JVveZ+rb$f0$X{~PC9?yTz)a%i39zGkjZ&;L&$ zcQxM6a#`c`>Tfx$&T?6ua#qtuU6-~#^|9PpXF0TPamfFTeJpp@Sq`nU{NKIqpSC~6 z*>aa%X~uLK==iA$-+z$c}fB*yn0X)l2fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*yzH3F8K;t#cTvt9^500M^!0eLoU)N?Efxq{wu2EFADMn79F zp|_kuZ@GoBZn=xTEaWhH%RTgIeRW=aELYK6&Z4(`%h<y*o?K6;*-kkjf_*ZHr8+*$u{$f1pO?Sr)SiF0Gfm5u#>9rA4>XZ5k1 zTE9Nz#*0panCikb#YqXqUZ@I$-`&;w&cGP>2wm;QpZpc-Ryn2Ux>)2oXOF~YwzbfQo z$GX;YPspM6^F#i3L0$6>)R?utx{$N&e;D%3+q`~pOWU8~Y`Nn8oscu`e-rY}BjT_Ypop1X6_1xCHP){WxvOqa z$YFIyz2vL5&0L zJIiH`oGo|RSq`(a{O8Eoa+jUuFgweCPThA}kNQ~dw0kP#P&>UF>SMXn&T^<@U42SJ z?zFQU>R8u4NL!ycTkf*69A;;^%ubvwciEMO9A;`1MUdaE=T%VqQVaQ!|V?qwAvs~7A{eqCY>S{s`tLqW+Ut?XLM{*R0wDqY^uaG`})gg!3SuS(rTpV(j<9=5kalSX?E*GpX zYk#VbqG8xyZ7JMb+^}b@@#wEkNZFX0uX=z1R!wm6VUhDgMX#0 z5CRZ@00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*yzMgpr=%$5ouKMMSudVX;_MTt-L`oDPYvu|J6ccq`V zW#e^^uY94Pp0>We=NC#>$G>pdhs$2}ab9bmcj~wMjbG7N?>i5?zwE7x8zSfNvo^2V z_=WX;ZqGL^|JT6}zVd2)!Sic9 z`hKcDm(1F>W9gF(e$nM_ZKuu~yz1&x**NFNKe?~LciZ)YtNRtT)YYf#oRR@0H#PWO zo4<9!j-3thdhLU>^@(%o;NyRK{Izwyc3@@ACpWM6&(|%z@|Y*;y*OWXQNOz$J-gO_ z`MsrIFE3f|&$*`m#|C}0K60M(iBoTz=GOWDu0E^buFu!`PA~bYZ8O(L4r%LCpFa=k zH29PeP3x|D>cpz|Th^~WCoP}+)=BTx`@h&;Gw6fgwA9sS@$l1DedK%f{+nMsX7{$& zTI%AhF>8PRXzXckTs`qQKXOvf(ra=n;^+6;_HW$(%Fyro9#uO|Ipb^3_^ns0u3Y=t zvRLnRYxN1cb}jVXZ`;~wcmKtH%-vI;`p#FDWbRM(Iq$QNcYmyQrJu9?{GVRkV~rm$ z{F*ago$O~C*-*8k_P?t1N%>gTMY zXI1;sUC+HfaLHUR&!&yykhVVcxvzBXh@EQ|`W{dI`I5%dpY{VbZ!5oG?9$lh8+~8A zs^s>E{nvYbe8{~+zU9Xp`>8uNje0z@zkHFlKgC(|Hr{yIraxU<>$|*q>HDW{sf(O{ z{;@B9`lQ9H<9`3~9jE=(-T$>Na$dLUmpx{my28KS@brX7o?8>=W$jP(nLKjy`6myq z_r(K79rvlmmi?o$vOG8+Htx*;3cKXKj6V;)&C1{VPB0KK0mhTk6^e zY3mc`#((+wP1h_~=AZbCA6~!id4K1COWvI_bamuB`18MCG=18)edYGLbx(|~@elX@ z*Owmu=S6$XKW%;Lqvx3O=##TQoLV3Kr9L%pJW{{=^k*Vh`7v$ZXIjqWMRb9EO%3&?D{8!bLyQ-X1<+5hcQXl2cCg-bdIYJ4y$r6v(~3Rb(T9@W;wLI zEdN)1lskK=<E+?-S=NXo}oU9+{0~`?f2ywB)hU+4s$5pp zmAk4O)=ifGs=9JlXIl=dxMb~5^=Y)+SzV`GTJ_O+<q9OluM|D3fy)knG0 z$@QyGFXc{K4z=c~Pan&jRt~l5S?d$$UY5H&&2pH}xBO>uo@u$u-?SX&V#|M4pR_S+ zed;sTa;Ix7hg$bjpM{n?y})v)RcC|%1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P-nm5SUgufBKAv{`P{snadmqKmY;|XgvXWHf_`$zaMf1 z-Qtil=t@Jrp;LW9$R%_)gq%X>LOx=wTkfLk9&#Ann2`VI()#MW`g|kgD!Q+SoJBV# z#*jm5=XD`>)x92aSTp;Jr~1@{ zT-A7;<*vp)dY(BUr`4&h^Rq(kth1cgSl2#CTc0>vu59f8Hk7 z6LOcG^{J2L>N?BWjq6vR$sw25Sx#@PtB>VQJIkStb#d01+@CtHu_5FP zyL&^val!u9yuBUu9;EHh*eB#FM_xY*`PQ+&_*+i1>lyN~V_oaHKjct5%Y81WYuO0HXkLy<-%jI{ALQa3IC;RDGe$+7|1Rwwb2tWV=5P$## z4kQ7-pB_m1^o9TgAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##4h90s zVd-OevHxf}tkstPs(Q8Mu4TJtl)x4}{RG%@HJNsG7p}p4ff7NHc<<4%j z9NIya|EoT4TJCI}<QTXzj9ZV!@9}xUsYG`>J-aiRW7UQ%3W2?rE*!b z)~7z2ryN@4(yC9R<<4rJ@_*GwxwEq^hgS2l_>1#Q%U%AaX`m4`E%bi|eIn=sNea2eubdBXutFAtMEO%Nt)T(E#Pn>^e zxy#EfhgrGI;;h`|b1aAXI?I0+XXP#{=l1U{|2b=Y>eEZP)0RW6^{bC^r*&SV`mD9w zX`R=YwLeu??y7QFmCLHSa#ugF99HGBs;=Bs<*+LEG;4pVk8)=(wH(?lmjA0hb(T9@ zW;wLIEdN)1lsh}qa%h$NnzcUFmAk4O)-ua~RsAW;T~!XNa#>Xu@8p=ZKJ`)V>^RGz z9b);v>Z9D*>fB*y_009UbC<0mEPY=|(=nDY|KmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Iy=m4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{< z2k-zMzyo-o&;$SRg%u~<_x2z7|Nim+Kji=a$p8Nm58weja0GeaaQ*$S=hB$`{;%^I zll8V9>%JP3_tSZedt2B1_8yb{vyMBee|z`ge&PFml0)+I-q(8aIvwl&IzHIOto60E zey}|+>)G>raHMk4{$}LAlkwll3jaG9?*;D#?*;D#9>4>501w~+Jb(xA03N^tcmNOJ z0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ z0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58#1A+XKp#;d4B+KSw@4K0kgR^ZOVN-~l{< z2M!kxWPLwXeSeKv9Fu*M^OJRsTbFN{U$U-aty9PQI_f_A zIwt!j@6+0Paz4kcd!OLdHeT(ue|4X<&m*gzc3nrE&stww>v|5|hmn8R@b4P_U4sYO z*8_OAeR;A!;mPkQeox^6Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y z58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y z58wejfCumZ9>4>5VE=o7+!Wq3-n0Gxp7Hza$bQe{*|bsnV}I4t?%Pr4+w1w#?xXV> zJL%7LSy5{Zen7m(WkJTsbI@L8M=jr^xGG?tWtKQn@NZya* z)_EhzJIOCuPaY@dxA$?fpN`c>$Bakz_dq^>K7anb&A+$t03N^tc;G;LfbXYx2oK?* z1MMOD;~_kRhwuO%zyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb z19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb z19)J6dq6oWjIGOkgx7)PrS~H3b7*Tl?Yog|UtMeL@b&mJXz83G~*xtO8 z_s=?R@BX@<`s!Gt&TG_pjXJMU=QZkldyTrU#^ilQ@Bkjb19$)r-~l{<2k-zMzyo*y z58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y z58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y z58wejfCumZ9>4>501w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb1BZ(Ta?OAKbPr>m036r{ z>;v8dJb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 z01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo*y58wejfCumZ9>4>5 w01w~+Jb(xA03N^tcmNOJ0X%>Q@Bkjb19$)r-~l{<2k-zMzyo;T$o9bh02Vj}JOBUy literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000000.vtu b/v0.8.7/tutorials/out/solution_000000000.vtu new file mode 100644 index 0000000000000000000000000000000000000000..8117a6194aa6b558faa0df6d37b588725809882a GIT binary patch literal 12694 zcmeHuWmsF=)^33U#hpU&07Z*S@KPwy;?N?+2~vs#2rfy1;*{WS#ob#RibJtdDDIZx z5RF&);teM@sovmd6ubm)nuI?Z=cUNmGWmh{Zz`t3r z^mem01G`#TyUGC6?A+WOte-ns*;zONnBQ7k{Fa*iW#)yGo0tfI83cB8cD05;z`xZ! z-0a_|*;y)DxLGLtQw)&BXJ(fEchomA}j>> zr%=J#!Qr<|_#bxuT=WmMKP~)2@CTs0tE+|gUoI*+fGz$(PQ$|Sx5s~){TGYBxq+Rm z{{bZoV739fI$F5N04$uHt(~l_e+L9?V*|1NEfE0l|BWKe|EHCI&i_H{@7Zrp{++{L z;rWvR2<+r!4RW*duygbNU-JAk#*~>2V1;9FycDV02=W`VOE7Qkc; zxMTs9z@w@zeP(`H9cU3fsdCQ~#T;@63MR5?iW?^)1D4+k$F1i{p-K$Q(Fw@gdp%?> zF6&rpVP1tRyS+7nHD5opttQzUNHRA?yk0*jzx2HKE@4is<%azDYmrM8KQ9DD#b@DG}jWu>fRybvLYJ zJnNmIP_4=iB#mz!bysCsLsjev%SlY#Th=BJe^HPG$f~Ox7@RI7&d=QWEGw}}w`Mln z+%iRTbB{-km&w~jS#)ioQN`xyt*k&5v8R>Hm4-K;dJnQ|>Cz5kR*ItoH%_;M@xUMh zejt8X-0$sp$orMVxy1GJ&{JcXgErSns4VA^T6j5vou%^X?Iw6|#|*TzS8Ix!V;hdIgx^*wA{$UXBBV%@nriKJ>M(t8e6B zGR3td&ZrwzKqR#G=%+}{8Q@;DJi{Xb9pnN~?lYrbjLL|`Vx&cCPASd+ zn?BoB=lz}ulbvg)2RmOwruMWa3JY0G&&5{zTBDhmD^Dt9`_aN{vQS43VTP-xpq|-+ ziR@LciE5+;jQ=gBeMp7O7ds!?^QPJ9YG)q;FF6P7?#HCQ^W6B%7~k`vCWe9|5P=Ep z@2gD;N9Xw4b5U=!VUW@WV=jRhz39fFL50?}>5h(#9ld+<#^K(e3637{$5@i@ugWlM z1s)^R6aZ@{O%dsji>EOMnMJcdhBFs!eivQ6k zK!z=$xX3{S#rw1;71=*!Ey1(7_h<3TIj=_0$#(lM8;0IT1Z=N16YkkQo5%0XXveP( zNiSiy3%iMOfAz7JpaOFoKah9|Q~KZ<-4^MQRf+v+mt6dCQbiseRrEY!Jp1hH)o4V$ zTHf295f29sl8Y<6Z(@8Ml-a)6CSz~M*H?n(x)QJsrq{^EntggZKp^4jU-az*i`NWm z&F^sF#2tNMjFghm9T6;ATp-N7!}zMHFZNf zp$|-CQnJc<9B;OW&L_+!d(}~R`8*m%63&)na?5)&^z%Kqod9q$nRxMap3PynO-?x% z*}Hm9dJ|j4ifbOOkb55t>$wfzw0C(s^td90&nwJ_f+^x;?;-AbGJX9_WgW4;5or=O zx_Zfe+%|OlT`vq?rfTpx+JLt3AEQX(oTsUpuiNF0&TC3AaP{k@XR|)uY~09-uYH?6 z%&9Dnsyh-qhxC;C%Ok^Z?kV$5aJ?8-M8B55Ir{;Y>y-WJ4wGyw1P~h(QIgMJ-pdMy zx=S&R1&sk=BN7LE^bb27Zo0nWhK(_O7t*^&BMGCK<$RR4n?T33$?9H5)uZThOs%L0 zxOIS}$m*6dBsf1boAl^gS`g;<88Mu|(5q-iE9^ep+n;~E{=V2TGsnK~!ctUpPdy{K zB@7+38?&Vw(Vw02Ghky+hH-);;nS|)0j%yTNExf~pjhBA%#vkPb+4p!>8G6hoLy1K zewiGr(=y=VdsPOB!)%)>T%*&wL~`lkhAh-Zt95vJrgP=V8i8YEc>)`@d85bdU}@pQ zFtb-F-?N;{s2;RCoxwmM{j4ba>iTRYDWI31MrZE0X;{%6#3)a;8p|2ch@BzxD59Us zcMK5{r(upCM4ayki}otJh?>BDZNhw>*%el+B&`7^Q8R034nGcVYr^NK_&7`SR2u#| z2l;L5w3q(d9UkHRHYeZAm!#Q}wY5BgX(UO?Wua^tTu&G5G~Iqx*p0lOU}&-*G}@~; z_|c9EuQIxqXE?vt`%s!O)9L=hrnxVeAL%-LG-jg^ompWSWCY3$LC>AzcU~K1^b`BH z^VV%caRP7}!@qxBT*F?(%X|m=TqIH}1ALd1jeW zI}2Y--F(}*3q?%Z7bv=+AGqWY#H&$hI)fRg$2TvjTSRjl|B+1|tICyYc~8~7^-4#E70aFh3s6NZ=`y9@p5M=EKJ$Tv^)m<2O3+>E zv~OKk3tjp3rb7CtB7L@AUO5K?&o+ioVcTaZW!dg^A7On3lo9_?VoLnzT=e>PU6HTX zVUqOI4QnAg?az!KSFpSC2-gK4%bp!%O{wK9QY^0M(^w8}Ub$*@L@hlIqkpVCYBSIP>~4-N#6z#9*FTjIp$AYW?jRx)0zbuw(Y5RF%x^nJZa)Z=uWa zb%X-S|JWy7^=RnVMelatD1R7VnDUWsSY$u^ekVyTG9sOAzjagL@>R`DDG5D|mQUSc z{T^KvsTt3ns0%g4$-3r{b@KYvuLN|d|Bc_{DE(7g+q;M+=c6pnj~1Qgh?GKJsf^Ge zp@+ua`#m9Fuh40=dUKDo+uOREXM?l#4SG5xipM@}Ur9DR$DR1ZT-WOmK8;eTu}(Rtf70Co13 z(O+6(LJBL9by3k{J#P1-?rjQeQhRP68o)pyrny|j-UxIaB_1BCyP*E2vC_%S zX~1X|-ITXD;jfd&mV*we22^}b5q=J1|0G*u_WVS!$B*SjD!-T! z736MLDHe*+_MXWuPjXvotJl^a&at?U`{e~5ib-|#>gEtJ;)#t-Xb{U9U#-J{yn-aQ zE~=({Z=KS}{YryGqp+~x*m52mX$Lazn}+fi^~RTHNuzZL51OKy;LCC>;*^Q1~3BTPpoLJ`%2VwJ4vR(}|h$HD?eqy4l}ts-7miOk+~D zWJ=yp4Qs9p(wW{*VJ2~?Y6w_a6hziBf}nQl$^I=bIRxA^VhP{%N^dEKA2x+KF*nBO z*6WwykF9GDf;Xv81JW^GYro-3X<-m>H|)s7AYz@@fRGDZNZolP+%Z_R`>@xrl;I+a z)8BXw?HU{@6|S8!XTIyvT|3~{P9F)lrh2#Nt7(yyEO>zI>^2?%8=k`TgtpE^O+Ajs zyai%fBtLX_o;^v;)+a~JvcZ{h8Qbeezqa~6<1vrwpq9C%+WJzKA*5tm9|YkO-)Qv} zFstP?(7dsF81t0DDy5u%bF4WmRPNj zH~(4ckcF7}VMg`zoQ+y`%c(>C%NaK1-;8+>a)f zfQxFPVHIL0WK%$ssZLnX&Y;E$_cugJ8DRp*-uJ6*f1c);n8lK)Rz6+F(o}5UtS0dsswoqa`7h;acm4{*zSim75k<42BVlRhf<2n`HIli z@9IcM+Fjz`nj-T8wnF_n1XCua%{HK)fd`LVOaUiUpJBW;9g6!*YI}5AC^NRHpjWb9 zCP7yYmN!2%uWmYbDHmWzKKCJG^1H;cBV%`~RV5kMSz*JVNq=aqoI5OiBPqe(Bu@82 z_=Uz|KOGu%rGVC;-j^&vQCZ!=%!+=4QDzt45jK^uF9k@aWs5IjQDDKh`rn9XABSDz zqqbSM2zGpB?n0ZoXycTTdH(*hH?!)$73o(UM6%fBr@&z(!-YB^wztp^&liKw2d!Xx z9DW}0)wwK4fpcN6#fWtD3Q+Mz-KHEW=)#iRsIk{?A~No}suq!L6$|8h0&NcWo(f!3 zHgMaQ$Q~%Ta?!ejw7Fv^Z*i1E%mIk;wW8C-g>6?|ZxOkOTz7UjwOnB??qFUoygvun z`B4a}4STr4>DS}%23>AP%V`X(za&fKh?EeK%T)A##$ZOvstHHY41c=9qYB^pj;5#3 zQ{9s08zH%(FM&dz&~gqmipaI~Aak#2TQvjc%jHpGGn!$kRl?3zo`49BQG!;J2+s7mDYA|_vDTH^#q+PPblti$MdZq!j}=62DSPD57atT}aj{HQypmgUTT=GT z_I)a1b}_L8T4G*H+6g^n7)PJS&iROmWE%9FM;EZU!1YNlxrqTV{&cPy&*hXT9vAa&bdwn_dT6r<|7JBj^`<2{}o_6}5B(%Tpy5jK_aznQ`f@uza^J=b#pSQ!K6iTx@ zk(8guJ9r>~_M+c4up9EfyyxX$xJX7 zFk~H=MFEVB2d3%*6DNR~@@n4*hkGr{dwd)QE9nP-QA1vYHhz!IpM?mJQ3%t<3uEgF zQRxa3O$ae4q{gPEq#C9qS`7E?5!w=O*)VQd%Wm0XP+PH3+mKP);w4#eCE3s>SxY3@ zV(ZyZ=~;{F*%D1zJ(;p$n6kwZvtkvqp%AmapI#$jR3kcH{basIMyi@ssz$h_M#{IE z!?#8pRn3p8k;8Qn2zBNRbpa|nvnjiX*t+6P0D&wS1+wW7U@{VzP0$z<*_cAt7^-|p zaknNayGDmI!^1)$C>Srm6)z~EE5NQRD4LvB7whYtAcq8-B0%ldInbevp{78driikp z5c{U+-KOyLreLF{kMm7IQcaO9O>oo|cE^T3It|w=Ce$ls`N#;`f9M_6?;Xf-g$3K- zM<;e1duFZKWvv?CcFJ9m+-*u^A+Sw1*iE;nOgD*^Hl8ePF)VG$EFrLDHz;H`g=G;0 z?He$3cGYFt;bj)nVuVlbB~G-1N8R_tiLq=9tr-r0s?_x-NPulH}SXX z`+sYr9lSqvy)r)Q*#nbiADL3UFbj$C2o+>kER~lKt)-TDJt`FYJ@y%KJpDB{VB0)S z;aSLsXFA03`9XuJg@o%z>IIF(g=s2}J}rrk?X@i}x_`dgy8*#qQ)lhVZ^r7fP)&y@ zZ?bCy{5$MMz;X;Nxmt%9)4!$ffTMUvRnvhJw%%btx_5Y#V=S)wyH&%1Kgdc_TC~ei zB7o&XWU-dUvwT&Sjmx7Kis-t}iKq@`#lr(G#1V*;AJHB|uherx7sP4{Ae~)9XamV3 zRGc9fxslK?ueWkLl%g!P4#zI2&XzFxlyyn}?Xj?)!|)jsoUw2*VV|PT(j9lGgS{|d zE#wD`x*NJHI?H(Rh|G>#r0m50Y0t|%UI!lrfT4R8L<$y&Y&Wnm)IxD45wwu@6JD+=A-C*pr(wuoa2&<(Uryi$TbER%uVq zrKfC_cUHsg+=^~xsAm-RWZP!vBu#G``*+GHuxG`zs>)rS#ykY*E@i)|_>3EC(kbaP z6dYE+`HmrGHZ*Kf@vykaBE}5us;(^nxL`{Bc8PkLVS^8#k4eh#wegi$U|3%JGyco|i}`ScZgbmtKM(HINsYdZr*$COfH zcI%Be5gl_#fyX83YZp}Up+wL;11;7ks8!PCs86EELoYmM^Y^c;rYqr4&o3$oW9abiN7uKhi3kaY zW3OTNZ9!sw9|kEJnjQSq1k}2ipV+-deQmKFN6F9d=vw1j!kRiFlQN?t&#S?? z>+6OBrDiDs%xG7kW=|tN(62yKvT{Uigi+(uzD*tGSJG6@=`#zv4tsNOYs>zX zBdAA;n<{7bnm<@~H=tvkBg3>DgTZ~vwlpcow0Y)RM->RAR}I&^2DSbuqVrN8Xw4J)D3vW51n&t3>#vzQMWd(HR2KIlX3e{bjMS*0Lfu zsPgN2ix^M~s!6%zdoyvM=3LnT>Cz1K+46fi>B?qlYA^9jpMIHys0xGHQk zJW)5=K>&2(?49HzxxSG2fiL9gu1#34gh(&PE?$Vd@fE>ATjiejkf-}8`rv;UktKzF zYFB;Au@Y~s+~2{AZFZENThD_}mL3;~`I_QLE?4ids7g&*$z>;tcmy5wyU$7&&IaFG zG`i_72ay(PukvOa@nXk`Dj!2_$p-ZoWBqacoaY;!=sjd^U&-HdM*$RVhGQX%7*Oi* zq)Gey=&-7iI1de$-d=Z$;7==96ZTKe+kpKR^IfHJUf+}P*G&*s@xAeS-A%HeQ#?{Q zgl>)VxmU6i^*kzZ)>NszKEI=WpMA)`4DD8c=oKa^(V1N*k{% zs-t9wS;VskO73qZoXa+YvWBqbr&eiMNZ|%byBC#-jC9Uft7ph7G zr(K@!U41%bW?F?4n2~n>$g?dneRngO6+pH?Z;f-w@9O5fTQ1+j*Hz^5XwrQH+Hs8Y zS`kwdm-h^r*Epo7F`ET0u>LiBvW<1=B4g!tWK434;M~?Rv0e~B_hVE;YwTW! zz}=@oBCiso*)os&Zqz4UeX&xq-?J5hHPZVyZ@UiczE?$1a&W%jl##=4XRkQQCpen= z*+^!;IJ^odbb#Iw zbu9#tOPI9e^peLO7+gJE&)Myfs(rNobu5fNm}mK^S^k%DxfrZ=mUjDd8QT@Z2JM^e z6kbIqp0mfr`?qdp?UiYGaPG2Z-~t=PCZ(19@pt#}z46BpcMESVL5;r-4=KS4GGN85 z&fs-TPFF`bYRYX#H_rg0!HS$ZKx0Tb9 z@r6dn+A_bs$ysV0t@J;F4uHVfI+%?dAPWL(B7*SuBg z5(lt^>i-;zGsC)0v1lz=XBg&(17|}&W6}3jh!GeoaEWm=^a){fuuC#6<4v=Ye>-Wc z^SMtb-Y)khisVZ-nD{*EYis??CnUyNM3?tNlUl4U)15V#Ab0L!{ zxRw6_5-9YF*azgDRO9oG#)-XLPAm!+BMO`pHQfruPt}l{KEB(L>$>{^yT#)Q9Q@MwQx(p+r^p)>+8lk6ke1}Qi5$gGeP zRNkm0$4PiRL`n*|khRbv0ljqhU$QtEJIff9gIuJdh5Oj=jMp`8X;F<5@vyA};VauH zl>V(ZmWZBX$^ZBIkM#b%`{&00=dNGh_m#Rg-ITnIkP7!pKJADoz6i^mPb%Ys?9DXE zlmHa2%sS5Kxy?X;M$q{Kx4Z8T- zk8R9@(BY0_TWONa<`1gyUP(rJeuI}h1dY1I^UL7!_wNBeTN4H`E0yW33e_mg1)gpD z2ZX=Bo(&$Oe)HhFp!l972?kWPpE0dL?Q5~caikcSn$*)^r|Bj7pdoYTjk1!f3ZAqy z@NsH4sovpYe+SSZk%o$Rd+n(0MQ_ee8G3HFNNUBl)fGRORWM9A)B<(DFbV7V2Hr z#VsxF*ud)kjFG+xy4IZ*k0jD%B1S}Lfaz4K>kPCsMKCF?hlJ;Qb9oB_VFA(ey746) z<0`csbHdZ{eTW#n>-UmG{S8mjrQd8`R&)z~YSxb4es-kzkm`}T#CazM%8vI`eJHKw zHF2iJP+?PR!g{0r9qbwIch2oE4fe4^EEgS?QM?j33qu~fHHqDY9)7i4>MW&ZDCGA~*+{$V1c6P=I`b%p6kcTc(-s3+$8PQO)~ynuZ=%_JOaZxfX? z^fPsC9H)FfR6S$oGGIW3pU1;C;p)gWjEX^8*>VPV)MLgy`oU?;Sg~b5CU4>B8xKAw z#P8J@f9nboAGzX$3yVl*IEi$m zY37v`u$F@*J{kon_wY9=F;*pap<=mhh7SPWmr|7iQzWH<%Bt(sDHoaR} z>RmhQ6Ye~WpXGO74J5aH%1HfJ=-sC8Wysa+y zO(y5=4MruO^_9`Cw;Ow#;Z0+@f@AxZLYmF7 zn%PjB$z(|>SNe9W(t6u+BHA8ss}s0f8I5e(3G%jbv|B1XPI`D_SBIP=#h9>a3rTXp ze1_9|1x&@SX3RY|bmxI*=-NpnX3@Va*R`n{2U#HPzejISKdR$)%v$0}0Ih!8RcKYb z9b@yaz4aRezB;Aw%nl!E8uPZoMGM4Gtxt2R(k(pCp1VHMXuZ(FD7ej&gVJ<&k0^n9 zW0k0HY#vQG$q5e(za1`~$|Y;MNl&P0qvY;?$Qwa=ty+ZVkiq8A-eH=HJ#9WEQ>0gN`qe^j?ys#hWa5 zYzVH8ek^lW27ZvbmaN*MiBj1JBr%xCdDL)e@LB7q`Ax@!9VfOjc}K?4ym1@*sXHct zOsK?<&=o^a_Dxn-$ zUb%be8y_|_$YaW5UCV#zM$WJZWmwZ@w~qZ>dj25@15V!b+OwkUULAW;%V;nj4QB&* zQiaR~rqi;pAxdx;tW0d;R8Uh|ZV*?=p}aF>UaA@tm}zn4WmmMP3X=*qWmvN*a&_X( z>fpp{lZE$_NWy4u5BNtLaw3Q_s_qTFrsCRl^vaKp2~ljUZrnJ!^&6ufe;ATvH7faB ze%d)&yTur1{ruxkgafA=8MKhpjAngx7UY)wJf4j1e1#BRy>HUaPx9bWKv>MY5Xi() zu|)f1WR+RQ+d)x}KB!ypi&D$^5Si5F+6KagGVM{r^AT#Rnb>!XD<`$ZndPghLqsBiVaA z{mz;DtI>ucnA{B|N&Ys@g9xkl-{AC;MW-!0{MQacErEECiF3g*(xdr|*zI*H*?J#B zGr0Bg%+ctPp+_#!Ul>(kJ})!O-t62UA&Y} zjM>lJ$QLO6eU&bq^O5a)Gp{5TLgz&Jsn)5f9(+0MX`-Y5M$ezBvTCC}p|k6RUvc%) za9453?6EgrjL#CqLUi0M=jF;%uZCxNcOYH7Anej`l&WW>ubN3}L`kE*aihfG4FkIZ zLj3uz&u6ZLIO)h2G6DA+YVzfpKH%bKeFUI2G^-Dn1p~W}6As%-3kaKo^jo2BO3{jg z9HMqP!08uR`}tY1_r;&Xc=1Sd@RljjGEd!JZ8&){>z?wL@wL6|OX^;|Uxu&1gyYXP zCZYq!Y|zh_Lr_UG`$e*~>iq)5|8h^-NEW8+l`;0eiO-qqmo9&iMX56;9hi>04X0fV z;8>l_B2dDD-7 wr;X+hLw$qob(}EuLQB5GEzM9qRo4%xrD<#a@s#twKG6L8B@6z)-m;MWA3*Ri`)QZs52#FOV)`Qq>QL&X4wb#>%J!@0d z8nuIHZB0?DK3&f{uJ`)B?|Spk$vM|K=l473{@wqaTNUEt;>_;_N1+i&S2dutgcOh; z?g~TNBU~NTfSw)>;vgUdOsi^QtfPf+hVy%1+~8`!JFaLClqbx?69u=|Mj`Bh|JK0{ z;{mruqU_-)HJ~oS!^0VV-PImp>k8z*54SyuTK{Tu)73*k4#*Efy11d>Xf*O9-OI!2 zt}en()7HaQL7~HK47V8{E|%ezFjxg993V5|IK*{zg%i{MqGi{|Bw#-pM5Y&f(X3elma|U0vZY z4}=%O1M{DGNdIp<P}t zRq|gpsrudfzRUmbYT?dsmy<_njj;c(xG2iW{A1#uT>gQ6^3cEQ^E(w)$^WEaRrOz* z`Cju+?;gt5`$VqRloUUIK_dTZ0jxiLpY*U)jG3MVSM#7{ZTPcC4{N&g@gecl~5998YJ5JU1HY0oee-jh6|*ACHY~M8H6aL&uv%s*KUwUTqJGk!nzHvt|SHSw;SrN^%;el6(4 zxNKZ$W^#Lh`m6V0JUJ?>0-Mhbt>|VB}^q1R8ow0(n-&5}z;{q?v z>fPwG0}Kj-N>4$bTwyFdT|CoMY5$3Z3*fFM8 z4d_Z1`l3OAi)a-%G^6of}Kgw>z*pDX{9iFZ<-`w1|*;l1ANSKVjtpX%nCf5q+x zLsA*;)W1w&N3xsVj#{H0=QmQ``O2lvvIBea;c2Nk#f4ynx;vyr{%LaZ(?7lUO`C&V zvWCSV{F&@&rrQf>C4*J&5oQ~ncppx&zJ95ub5htpwkKXsrJqZ{orkhSFxEv_mS^uOtbP3XaMqm9 za5>pFQ1bpMr|=TBmk3|Z9m4o%xtlMY55$?e?J~39#2>W$ly7olhI_-JmO>I6gUava z4SbMn%sIGg7>F)>WhpB4&?K&=w_Bs0INH>-uxvu1ZW)Pz4GXs;V;?cSF)lh)DRp^C zR|81=Oo&RmTrhg7n_oUF@GVln6gVdD|SS)0uH@7ZZ3yGYDb@A;!-i3o(S^}WISL-VttA6gTs)<=mfgSEaLO)!{j`A6=?uBm+_h!m@HH{_)ZTf_%+` zly1n&DyFXf=*5IOV0B5RXf*I(!#IQ4L{jNjrfaaMP)I!P4js-HaI>tTG4rl=)lUWoC_H!LJA|0}eMOhwH zi*Vm_)GXN-6Ah>M)4ci*^Sh0$80U5rS$3zyrZcMxIM$q-wNzP)x)4qUxV@i z$9^(*InfJ`kCkrx2hQMz$hQMz#_X#p`ga;3n>!URC;_I`s^gilM+-+_MPkqRMs{gI zOx33J4!XTCK%I;`L!o_TSoCI}=HVUnqwTjyNDKJAXP|OT9+1&2|NOa$uN0Y)SWgw+ z!O%faV87D31UE;E^HFOv05{0@M#hBVf^y)6agmF;D~Viui-Mk2Z0(x9TkM*ez;DiI zJlLp^C((_=`kmM7=}B2h-+uF9N|TbtLyZ-V)wPK`^FakJ8QD&+ckSfmSM}19>u`sm zD-TIVQJq=%_rVLRYP`e3iBDJj*8{7XVcJwR>jhF9I6Hv>oz)kG)9)eb9}xNBYef)2 z*BRjMo3eB!=kW%ecxVgeh4S?75le)FL4DuMSj((9kMEpox-RBlT()ahy$qdGa{RCijrO zba3|^)6k!8aP`Z$#hj&FSt%x+%Jf9LDB@DO=+#MtzQ@NBM1RmQ55cM1Vzp%bZR0^? znFU3z`NV1mhbnJ|>uCN%(|;4{`HvjO3d4amw7I zuZZEx58fR&Oclj)3Z?~3d^9fEyt9q#bTyHXoSvbFUh=)D1~Lz=85vZP32QogHO;(> zF%Bj~T&N!hHVMe3TF3d2BX8*y;k=re7Wl?aWLTqnm^&Bls1n@1H%6!C?WV>K?r}6q zvQ>QJ#!&n&s@-$7?+svmQC_XttH$-U8;twaEz{?(<(7AYb*4uh6ffFkB{fiak1**f z>#;i^v9X{b{`ncM*l4m+cdqqAOI2`6^*7?-YoL$RvbA`j4vY0Q6iZ`Ap8M8*l*U28 zmT#oaX79({j!z*2k~j&R_NEaox-muugH!uhhy z%5BDu=BCvHZFnia8I-2Cgby=?Z$M$TjT#T0wc()(^wu`n!=y0sPR-<-1om0%2xBO!lHrSq!ipS zwH^6DndH)=S31O?TQdaClomWqE}*AAsFY(*y!l8r6MdSj=IEiIGvnA64`bRxaM^;f z-y{NjGN}fY984(L`p^$lNqmzXVNxz6%OjKY!G=TFWx&d3o54%*tWIyGtPz$VW%T3I zG2SoqCfsDB*&z|QfQye4Fh~WVjR3P8EYPTd!|WZNd$2YZQ*!V2{njq58%E7^dYX?c ztHsjF#!Yp((VxA85JJ$s?i3Ns!>XV^Q^x1POP&~bW8_Fj2PG8V&GS5k*0Yr_L$rtI z9bpE{p?Kk$?pQ;M)?imZHLZyWm}{lxbtF;O_HZG@ZGf?_w`!NY2RhsGhlm-keHe3yo6KN)q)7U&!$X5hn%Esw4GsIEr zqIQ47iszg3YWzzNh+_|~TOKD`a&rkbxR=9-$vw~M6Ohr+Q1bb#M@e#;p4(GA~M6zZ3n5~UqSp-`}$g+5a8|A^8oBj zZX)VY@CqQ>vli3MS7R_VUqgC_z(eTM?5(Z3LwyYwy&uO&3zG+J?T#NWq-X{Jv)>7i z$9wip_pecW3XD%OF=+GjoPHLnl2qyy?DnY=)>$HbOyn_hnfX99S-<|ypWId-g6AuF zwyMWaC5^=Te!%52;Ll$w^y_f2H3zN`Q-UDP-KL!5)qU zZi(w~pm)$Vz8j(@i?F`BQh%>ldSYvx_Vx~!f{jFNIz6w4)A6Ftm&9ACd^&b~$qPET z+S1V5qicA6Cg-wO!Lw7+_VDsmqqC^T8`DBXbHuIdOs=a$}492 zNA?^Kd+N}M6&K2k7C7>n-le^#EA5N@<7kQ+{cV*|Z{;nPe}$)xXu(ZVsFcA-Zl`Se z9u*xpxZukY7`cwNF4M)y-r(7Tl2v#&+B{?EK8#C&)gFMy^En0h>(K3B?tuXmNWF- zV00xDf(cf)aiPoI(AhtFmheUNi7+R>X2;H4{XqrWX?cS<=qkWS^T3#4tZC`Q|bkEuD z=&k4Br)LLW20T!o6xCF zuET>pjYBB=n(~VSHv8j1>--b2^H~MQ^n@2e)4{5#S&CCstW@!&&bxAkTeyANgHM7a zx@AAL;|M}4=VNVhZa~2J(YW48BKMrLT&9rv2olHCmv=|1+)>r-Jn-S&a2!v0j#8$79#Ny5cw8{pCqG5^cd_bmw-&cV>fHVr8&~ zfgH0U{_W0p4~r3;B9@@)uPjNz(MocV49$RRJl33o`tb)B`kwC5utk#I9CEXo=#W$; z`kD5)UtqD~oFZK{a*&30a?UpxQ3fPUsuIB8^AfPGx=MZ@O)J+ZJoO@oY%*wo*a1!c`^rAQha zGv#pEygghPWuq0lf4M)t+=tzyQMa=3T76PM#0xCw0C479G%4bX{dix{yzBuHYbXFsFlw0Dby;a8@;RqNHV;W*{r)>*~`0 z0C1qKp?df0%5_Xx{LZ)3FS^@;^**+jWKL$Oe4HW~$_}wtH9Cr6UxP>?unJ7{!>*V6 znNk!Bunz!hRP$PmiqH1GqOzpHZA zyTjA4X@269<%lmgx2tp#Yd&GSzCJrydSINz$gD5^HnMv7aN*pFZy}$%)$+5wy=%q0 zFR<;Hnl#dq*j&Q0wrc$D&@}S#*3E6fTaa4%R6bO_(GmUj^qfjXT=sqn(6{+iDxcvv z@%=5bVCn9M``FKCvy35c+Z(yxGjX2$YfYfl$cZ2chh5k>;Z<85ztb2WqfwaELO%c3 zP?H!M*qDE!fn^oo*3ocNmcXc!F+?LkQu>|uDUAj`zU78ZgAI-2UB9cfS;rKW&SAK} z&twe0&SbxA&#B*MGWiiBJo8y*irIP#m%rXSAg4b#Pber%ymXm(iNQsu{6x9 zIx{9Fz$z`BASIe0tz;x6WF#%0oLcqB50eNXBdwNTjqq%2??NvjM2rwsL`e#5299HoZgzUSI_;%7T~Z8W#c&v&z1v zZhXz;`?^l2CTxgRrdA*S0brl0?{t>tT&)VwU^und>CoA|JF;-{2g&XmZMlrVG7 z*CAJWQ=NMlSKC<9Td6JEJS_(qCcE?|`@|=ETqXxrue76zJI;F9TgNRJOW1?ZQo?9y zMY5D6SsFrDE)`ua5?uk(DZivsA=g{3Dpn2@tB@%w|D&iv*{NJ%rCegA0?bt|z*Qlg zR?eALMQu^ZW>Lj3QOPq=#i~+8S69hZR|W8^#u3Hth-O?u@h+iRIM6i7D9&UwwJD0tlq@J}U2pzd=@)(qo8q@U z_sjQ5Piv;2q>W+rrAj*K=Qw`+2|jd;j@9e^}PqzrFU_``E``Yp=bJQ?z?Kw=xFR40PyE zi4r<`I)?mD^{?OZ&vf&mEK+&3e31M{5lN#Y-J~o2QADST4wY4razm-#RH)M#A#uHW zxVjQV)vr=n?f)nLA0GjCSLbdt1m1ESN=SM}&L7G0T%&(8SQY+1pz3^GR!k^S^_JGL zVL?%yVmhUDO6U{`^z{!It78beglSIyGUfkfVQC#FS7wrg^V9MZhVNJZx^7@OP#;9`}g|8{6~xW#s5~HG+U3bm)0(i~bhSzbg4Rti=}rA6hs`tN!~_4KLFpt`!cte}L{ zSG0&60G&sfgj4^Nmtq1RHaa=1w2l=Q6=h8{zXxOdXo}LpEo{=!2^ld)RiNYkuYdjT z_=o!5*<2FZoC+zW*`QiMMJoQ$1p#yt8!c2#^~s@DG@?Nh00he}mF zDz8$t{y$N*-anPAabH3)641zA9Js6mC!DRr~*hD~wn9!c^7sr{^Z#K`LN!TZ!njzs8G)|8M%$aaQeA%M15Im8<&yPt!lOuiCHL{ZID&NzXsk z`;%N9??2(x_Emce^Zz6-{G9&N_Woqg|7y8v=YLvX?WaoB=cM-QKh^UmoH{P5{(r)& zb`&lzTu;@fu1|&WYI$K=827)*t9t)bzc5baRjT$^eQv5;<<)ge<^R;)|Fm3fukiS) zdem~YeHEut)qWMHJ`a^w^{7-`*VX!}yfFQf9u=>~rGL`LVI~^D zGC-rK?W=edcVFUS`33o}al2|qSvC;$Fzl;327G>S+!{pA-ZDkXn7 zMC#jLivFQh_DXqk8Bc7G_SkUXp;gLf2;3=tKpLe$;>@^X8fA~v<9JTsLfCMPk}vW3 z62Fo+5E>Dmzzyp$mIpKY3HU@nt$$s5!EPfeMT`}->nmupE=W)%R8C9MaMMCg&UTL zsI|(4B|Y&(5l>HO!}yX`1zg`Taw4XnR%vToGKb2Kd~Fz7rb;jndX|JhykqmI6_&lF?Yi`MF9p=C>T~&id*Xsl)A` zH50f~E)WCXb@X<&|D)X{46H^u>{E^H^QudMIG$$^ssT5DhcnZ(pH6uspV}q@J4LPH zU^kHUc3J4g_|snZxW7gbdku@Ayu$riri|O_&f{Shyoc?H9611nYLrkDp?~RnF(1a# zu%cd%FhP&P8p1tIq!&x8T)ZImTY9Nt9<1S02dy&A489 z)PH}C&{xIdDdUgn&<04WoOPy^K%-3gO$xQja}tAg`CSZewno`4Nee#)4Lr@1-4e19E*yV;_rt&g6uFMlqB7_ZZs#p`8a37pzDBKz_hN z)X&Zl<%1>OLB`>4s*8Q>ksP7-RUd)x6ff}2YYBeGuxqTpa%I}#Xq36v#Pfevf)*T& z64_qhYEw1v?vkqeoOhC^R;c_IFZ^0%F;#<|Nm9NC&uT&W@qnuP zIaRLW3)6Zm&?+?hsJ~49M!7rC_d(jJ?nCkNGG6r~+&$C_V~3xgCkER1L zYDcw`)k42I{wl9hRnFD^W|zvV_Ni2r7p8wISMh3ls=wsNgm%^XDpl=MsajtxSM{h= zm8-bIw6LDS2~Ox1F=eU%o*sn0>h7cN)%Kb5Pv|0(@X^{Vq+9VeBl^Sf~W zRK2RaF#dmP=l?FeYL}`{U;A~cB*n!pGyC!A1eNz z%2m1AuF4mt>Nwuu2LFn))%iunsTCVC<^D=9= zK>M%yYQHF|qjuGGdyDk5sy&>(M)@7t9;YM0kCAbCb=m%6ssDqlZzbdLp38)O4s&6@ zk;EP1iH5kH7j*dL{Q}2fHgJ2S-r{Ts^4G7)0K|cHsizucJi%edHmUE4+;7;hgVid= zQ>j3!#8cP;d>I)J_)EK71_=3gUE%Nd4;1>=t{3`8n2Y*14~RIq>v<8khQAcJghm2) znbO#3=W%B;K%;c~yqamrxk7)B3j!ZKk~*YOGHX(YwaVPqLC|t@~Y~)l)sJiQ3(&UPl-DCT|KWM|#^hH9`hh zqm;`pj>tu;SQp&BO#BU}QB5dro)B1z)xdD5#@ekXQoxMnmor7*C!&VggkU2Vy zsNUz+lOK`(oM&O&pAB74@p!!4xp^t+nOM1VFDgIN?I3iP!~8OK_iiGJTX8=<*I zNw)c7N_^QFeK2vc-yK()>#a$ll~1cAHy7_&sW7Mket#y!kbfE^-d6*=I?UH|rUeo4 z<{oq(xMJQg7ko#|O5(@94-oRhx0%M6i2d}XMFOAe3pntN?zZLkWnC3-<`*O%X8hWv zw31_f7zuk;&G^CZ@jlyF9-leO2Xa5p8TvD>fqZXGS_(ToXd93E?Z_<9bL=2Aia9#~ ztul6!=wFoxGzWXNwEYL}soZb4qZQ&$KNkJkGfMDVPYZlJA5>@+Gwiyle*LBon08-7 z4dJ=$7I+79QGUup@ZHZ+Vgu((L-2Zo9+3OdCEr9nGnx))_a03fQ1$$b%>z%nFRI7x z0raZuPaeThK2?@mNq&#y7xO_D-W%zMCdl#;vb?S2@AajBXq7`4ZKCJtaiN{PavXzX z{jm+ixY*OO3!EQyAGiwaK(&ge^gpT}r`4QrO#Vh$9qJvY>Y)6XKnvqkzB&IxtFU>{ zLr;Jh z{-<(PpIWZ!RjFEDn5y`~RIOK7{{J>#*glmn+^#y0)cLOBRJqEl{ZMIPJu0u(`_nk9 z@8O^H!KvWSU-<&n9(6wQGLQ1htmv;eU2R{*sqyU$iBspFYKPi?b$wIs$*A?!a`k9_l5qsPX*s)ERC#28N6m6)4i!ezWa#4oz@7xV|7}o zG)i>xA*OEjAm9fc5#<-7Xkau-wVyOFT4jCt4ov-mMftjYqI|1X*lq1ZnLRxJ8hT8t zhYH;1LF7QSO3F`~DH^52M{DN4Kb(S*Kzy2>#`5$RO<6wg9Kt)`BATs$V&r41nj(O~ zK53>M%NIB7#yDk}8S?|z(8V9EVlplnBdk$I<+S8-_ZlLPe5^lZ7PZQFx9{*^8YO6g zJq$(OJ%1e6&-$>C%d?tWVt_QtfYeSLSFG?*@MN^gCP!i4<>XVWzsqIv$hg0iHsdWEPg|jjt0icsnJ)L=WV%B`;^#C7^CQ}!x^-Q`4fm|Rk!ai04xIP5 z@tZc2`0iyUPoQ>}PV`$qc!ML=ttc)&>ThpL}o@2KTfi|Z%I zlXuV9z8KUeHtaT)yYzaokmC3E3nyahiny!qnd?WvSGLOkW($6D>3vryu70y`^D%0_ z@rIWJzJTAJvU{ux_})6+rN)D=des>>w{V|r@Hzb(;PvL~d({Kq<+SyX$}|Eimh-`3d~(hZQ1GJ}T6*OdRCRtS^sF%GW5P=Q%ZxD~)j}8WGVJdTji!y?zaP z&+J&kV!#)*x_9?8_#bOsD^Yvjt2ceo9klQEmF22|eomS-mio2Izwr_3&vzYjU+VWl zzxN}ILBBW|R$2{OwQhH#Z=f}@efv=VX6DohEeX8cw2wC(!N)9F;SgK|aniAh=FK55 z7QARJ*`eRRo8@*;oeyg^&n>T2s$|DL(l4r2O1J8#{{^_i{sxA_Q669W#}`BJo5DQ2 z==nV?y}u6Gb$s=^XnM}Ur1Z)Q4Z}n@`mcQ9qX}_@Qa3}R-p0SF}?4gkDyDgcs3wrF7mac(a}4vz`dVZ-G|IZhpLl<$*PbqYYn8XC?14^ zDy`!CO~dcegpqZyQse$$>o2S)$C(0DnbwSOKYnHLdmZfhll3OVh;?PU4tY?GG9RN&xW;aR>MSLP zf$_dcH^{V#;dhGMaK2+J>{?GFhZv(LX2R{B>GSe>I$e|%_og@4~mM(1{juo<+@Iy?of&_%h9j?ked>~-T4nhPay(k4 z7Ixj#Ziow5@bT>MHOgYFg2XSSWh@nN11kCC;V9=rA<)&B}t4&=hXtQJ3oeTE%x4ETGdhb8|QxH za5YM$83Naxx&dB27bh=7`qcdfyLIrRWSl^!tW@qv)lkolSnyb!nK!v3C}nl1oYQ?M zSBM3VMVj#mvjo+X{lCT=1niIGxcz`vB7C_kqJP)$mQg#y@D`AKw6tf1%;%}`5t|1b zR|k&G0Of9is{1{)oV1eO!nCcFV-n!cf89sXXpRx0PP1@*_u`7xC% zY7|?k_n^d?NM5y*#i*~g!^Qu`&VQ2sPwVrr{|EXjOFPwZR@*6Thbk{jRh;@<{?q=^ zTSVij)-Oy|d;UqEY6qty{x+_K#~X_#w=+OewcWz@^0b2N8*Ol?6sps{|HX#&T;XxIggv9s4m~HETE&<6LFx zMfSHX+{giFl-hOZLE%2pXIcO;kF4M>L2tcx!V;oUjvf*IX2wpqU+^slbY^_jusl2g zxv?J71gP!LZR^YcYQNN0T{Ds=KiaZ`XhI{ME);kC9Hi?{ars!= z*j+}T{-WOJ&I)IMGhg>H?q!6&&^_k98SGwqip#izbi<~6Z- zfpdV}E6Tt9ihE7xx3zab{C@NISMyYquk$=mkK*7TL(|$`xP!dmn-ja+Jk=;At{FSW z>tg@#t@+lWD0ldIslzScuOB;RL-^Q_87=5}Ebe?}A5jled!9eD8~x(>x^nfIuCy<5 zJXaZCW}yF7V*&}68GHyYIP&j9ZFrt1*m$%fJ0FycElK?^*W%O)D%U$~-yV=pZuM~`&7Tqjdyk;=jhvIIIJnX(EpxVOX#UMAUR?JD_#-ZhT2BDYeY@TfY*x|N8%WF>`^VomD{Rem&!dRxQr&_uBXFXDA*& z)~~HSl^?xbk>CI92KJAMAAi;XE3;O)J8bS|I_C*|b$=@12h5N4C3$Gw?<)y6tl%=| z1>9HQHG}-;5lYZ#6wBQhR?s37(JbWmhKY5$$0myKw94&PHJLUZMvepXVS`xbM!1W5 z-!g7s!9||_r-)M{e6g)SJ=^7{HT%~U*h>&jej^AZdL+Iv(~tn8m z0&iBD1c)2UPz0_~Rwhzr9{Gr!!cVpi6XV!|;E->n>cG)%koX70f~Qu9hRZnlo-B`$ za!bk6?vZfkZwhKd!vj7{FuFYFBBfCcX- zZ9{;wmHxlF97hiSQIBdPWjw(wUkp-L+#P6Rl+SsR*xv1qLRD|vEYq~1)nH! zk@EeZRfgmvB<`xL=g$L)^I;ws!~t@g`8W*v)blZWK5)Xl;Xu*Ocd5UC2Mlo-O&{Pt z@xUQ}Depr>HWc!Mdqw*WEd}4wj0}Ju^gtK_Itkews-Ln{;9gVM1U~u+8KhCN>lHfUKaA#(?mPD4as1w((?!H^fbzgg>g*h?-Kg^1d8&l zeW^p3&$sDCMEpMmVFReOp4gX<>x=Xz_y*(B8Q1poBIXZunS?hC-`CASn1uRY(rE$G zDzog;n9uk=k@+&|@p$COhaaJdiu~K@ge&$DP$Yk8@?aeTyaV~gE#DBBbc(Hu$ zQ{jg`Rfxiq!}!=$D@SzklrSz|=RsfGAs#u<4;?}rx7i0%P^0vH;_gb+E!2|Z#4E$c zvj4ghF#vBk)}cxl$5XkV!?;TnfB9y8WBnr>O))@-A1rn-A62TybK*Tc(xb`0T1LLc z(uMB>7rbEF%(*@5AJWzV1C09~19EY7Nvouf8wy8+{7LB**eW3oueu5j5_yS$$3f(u z2ZeZ6Bs$e@Kr)qg*x=+x<=2+GtRZ>5<63wm#5Yq1I+%k#pAr&D@@MXw}myfuu(wnd0 z1!C;#&rY`wSNL^rLudXx5Dm)c)n8DfrX@e$jK= zkJ^yi_8rj68~VCk&*kuwM=j9qu%OH&pRQUZ=F-I4 zvr#{O#JnA@i2F{p`*z|3+F9$=Xv8VttRLANUouCl)a|`G&{9Kr!+~3#L(c`nXCKdk zTIZasyUtdt^l7&}v{3^5>=ct5ZwwHhmok`n$p+&+quMH$ep;pEuvJUFMq_?W`{muX zA>v@WSmSRWHA>lfb~Aq=p1gNele883N~~++unGNt1EH`woOytdXL6RncBH-3i08OV1z?YRJbHvRf!9M{(> zu1i0SYL5QwYnpcU%t)=$-qx_)XOzDRX*s0GCF~=fPVo=dVjk@(d$HpO>>DBueK#Kg zfB7ZmxwjkgYKP;KHoiyP@0*!$W)I@(7vFw<+l4$rO8qC@pl9ivO^+smb}_eXuZ7(q z-w*eu`DMMuyiY06<>5y&o$x$bCF)hM0N*%bS`5vz77bt1^u_c&YhpWb)JOhwlK@J49#=vQ^kCz z0Y5fi>C6G(XK%^A_iH8M_NU#A(mvz7=3u)adodqM*N!jo4&yiP*;S`Z;Kt~`o=Wx;vvCe$xow6O4(iK=b~X^DJIB0+n*S?v+VP zoldwW#fO$9svWy@3B5;lo;H!BFXebm+^EC&TpG=9m$@5Io1F6@(vRBnx;^v29bQ+<=iBmnJ?nhwy)v%)GQsYAYOyKRpEvp-JU-s*Lt^?UR0%$5*eb z@TZ1O5CccI1F5}+GQSiq^HUbMbw=f;^mssx?g-o~8Ly|wdYyBGT@6zN&S$N_O{8rW z>eVb=8Lq56ZQe3HcVm3%a29pN9- z;{=YfM8wnAJj6GZ^hU54=W%!&sl2Ql*CiYf!%uMlihZiYTN4bp(UPx0)xr0s#|&Ca z$~}n%kK_^lU_VI10Y1`H(63Ui#*_5a2^S=BA$0}rxRg&L7WFwC1Fo2i7e_S~a$ku{ zmAG6vK6Pb3vYZ9(5)UlSI}eEV2H6XFJzG+M^N8lJnMTlSkM`0c1nvNDh>*v5F5<*t zL$etd*j?bPg9XlRjNo+#3fxpb@gDXWAmq7T0%so~_z&`a+@rjUtgrthA$O`JaMN}Q zzP2Sr{#f@m9AO$(S?H}6LNiFK+!%b6<$FKOXZ}m5mgB!ETWIHkcq`t7<>ec$V7}_v z$IP#Ds>bn_dEPOWKk};0@|ZCqzD-E{!MuG)2gY?Bb(C?AmFNNCJ$9l2!g=*~Q_KX! z9nT^e=eYr47~~s9HDjF5#oo*Z?F?sJ{nLB#CL=$&UW*qK`R3SQyaCAfI7eeEqgA4U z8iW%+HR+lMt#=MdJsG#{N^QH^=AK&pJZeISl3Ag*ncperutf$)^ITJ4Kz>grJ#@WfdPQ870 z5*rQN7hX386)~^(MU^7{WQ{f4PP-2!DiH5({P8pSpKnH^PEejjcZ`E)CGcsVHY~OV zZCt)+2GyVAA9|Z`b81zXML134uin+co4z~O>KgbWFPd$mxHNsRGZsdzvfJRqZt`c5 zjUJz%JmrCwhrc!gpD?k%E5(_o_D<*c+}Y&jX6oOYSjQl`r?7S8rb@jL@9E5+;zW8* zG`{tl+RfE7xj=qzY~YdwlrJ1T&{St0;+!cSJ1c5{H*&u)FB9b>_q$w(LV2I|p~X!< zA#RCywdEz^sEd8SekuUIrSY@D)W3w%Jr~vl{n5PD$IZZ{OwUeTP#Nds7xq88jCi4B z@7<>pP=2m#sS+;Gduqw%#fD#y@91%2zIA=<3yp8Y3_+Z;c3aBCmhjh4@=8_jj(RVr zM(vso`J_y@&fi<(zQ0wgnTE)Vu8eHoYc%w=EK{YEGxThXEN*ZVdM&>V>r>W4tCVV0 z^T`RsSpg%08-ycYdh_b^oTZ3gKA&(IuTXrtKBU1K)Zct%!oWWJHOkN_Q6=jkPMf}G zWL{nLFC{i%ds*OCJkh;S6*%L%&O7W*YLv;tCX8r}yl2l#cPDfQZctArTQA@erd2*h z;~f5I@#?0}&|kMJozFi;9J8~}t=DL`+V^=TLttOF(EGsJ=1@7vcg{Zl%Lel49~WGI0zHnFt&J(3N(>H4 zrulQ=TcgLHz;`xlh_xQyU%C$-eh>0(lWmJpoO8mz19tql&)wlw&5@wr*CjOV3tH21 z@R}Ups&4vylH$r5-s`GS9=J@q3U(bKSG*JTDW0tM_G<7O@KwSS_tU(bzuxko0q7X# z3v-BXv9Hm&aiCEFVfUW_x4pvKAru!TWh8u|Jp0Oh7kbgXkVl&6$}~SuT-fYF_QZ6p zyo=tO3R)9B2YBja)|7DT_I$fWanU%pbNvWsu@T#gK#}3dK@JA)dt?zh^8%fY)4c)ZUDE&tjXWTjePTb!yCt`UVm#=)!ab%Cl*EtUVdB=ot zs|JfaK`XDyj4v1<;<$E2$)Vz0Odo2YH-j^3*sld8vYp-9-DUZS0EBtK#g#)i3tZ$- zQSWlrc*ZSo6>;ChXmlI66Q{9l2d?)Hfoqk8>m}fSJQaTFhs<}zto+P4+mixUG?l*O z)F>|1L_Vaf1HxeFoAK-u;{x{!T>U=i7UYM^f`E>Z@yjUb_tkUE&=C|^AnvjhxbetB zupJmplGh=(kM>?X6}WqxaK(IhAmqXFoRh;t;64o&?RV)U>JO##4&v8FxJl zCBv~FUkA4gTGvnDGW-QDAw=q*BIeakS1se*orJvfOo7`mRPZj#1#W})ea1~l67px9 zaK!rYUhvC)i+Oc;3bvPMcljY<=aTMXKJ-r)ad^8+V&0Ut+>DCI&mR(T+oT+X1>n0( zJI(dCHW2wQy~q_DKg3>2WBE!8Y^#8K^=%{b{;`Lc4<9^_->cTsM1Kb8i#Tk^G*NH0 z+hNAJ7`MYj!S@3jlem5dr8Uc=o3>y+an?hAFKxXS^Lt&X*HkV)I-DY1?0*xSxqPST zLd)9u*BE=7mJ4SFEPJE?8)x! z$BY)-2fwZ6!J(0e6Bdo#dx89&f#=*%I>$@gx2IHb@b(#di_kgn7sH7UpTV!Ly8hOP zt)la>W z2R-$*S51wP-?Ca!-cLUwAx=zwb;DUc_H<^lfsPg-}7sn!RRVushFHhv1 zCI%RetN`5nnCKhB!KdB~=-dx}{#(PwM=cS**e9Q?JPYl6ughI<9dX9!W<_gsfWFqf zM%9nk!#V4uzP&OAYnA=^!wT*pulGJ>?Jmm4^mYH(VbLp$&%-uh^NS;|7I)m$2YI*& z`YmD}A|JSY-Pvn~h(|2a!!{g5`G$;pqrBT-pEzOs`s6YAj_$R`c(YQNN4rKZPO?M3 zCZe}eWElMa^(#|)dm%q~_k(}lbL=}q13Df>+?80hfBbF4FJ|xi9;P@_Us;k(9eueY?zLH+ zs@nM>?tfTaaxlfX+|9H3P!@LnxN^G!o!eg@Fm}^A*l8GLc6S2qgVs#X8&T;3&c)~G zPnd`NV{~?_plulEVwu;iYxTi?RBuMt8}dXkPmg*u*!Zf&Zj1H zb!-7U3{$J#i-7$u4Np9vd86O$-gJr=?i9SaKzXy=YRU->#(CG->B$tISoCg^Kygj4 zjpeq!1plz;!KyT0XN8~Z)(v*Xch!AF`MP^w-%O!-WuNcPd8VPOU$3Nm-CVt(0aNij zE<4;$H^z9FTn}&A4)Rq`;`=OwzTcH5#?ra;k=Q-IJ=Wp8t<2c5zR1HhIg(noGoD}T zvVNBSn15$7N?zOqT%&@YrzmdQx#X5E+3o%-&6M7|cjwQ1qxUeVnB5ejk8H}{qqxm> z>Uurmm$Z&~LA2$rn!K+utmqs_ykRSYDx~lJfg3eR-^G|vctp&b^1q%@x&7SDqlx|u za?p2&ypf6i04iT>`zw^*C+C)Zmr=jHUmmlh`t=)ie^LYe+&L&?Z9~Y5v`^YjapK3i z3Fqm3JEdoKg7zcD``Pk3H}y&uuZQWw)?i`BzR-0puZx+De8u|tB9YG#ZuED6N5g&B z?;@^f5K0*kJonp!ncgjOoAq=x*a{DhICTMz$)V5fjuEem>#jL6uIk2;6=@x6z21uV zgNcJaaJ|`a^ixL~rBmv3=2J&JXhqNeQ^i_*AGly_oi?O*_~=#p2v@epSdPEab)9&9 zx9XA3)NGQ7hio=bLI&p=3(!2-nb?#0r57(TeLq;lR|mI<_^SN@fouArIs1c_HC8dM zaXSh~aQ?cQ5;R!XUW$06TMT{ChxdgK?r_hh^>r?{FckjI`&NI_ZCA{@f}G2=H8`e=db+ncB0HaZaCCf)5xjaPQm!2mU>Ui@-IKc{n2( zPo!Ij{;i4?xXrr-?gVamP`%Dq1V6DKRnRC!rwRE*Sw5783GxURAvdZ=7j2Oz@DP5u z#9Cp89!_0IK3q@myJh@x=%lDW&sx+k7lCd9_qC3QgB|UJ{N#FpyX7YMGkZmR;isVk zO6-$c3Hhic0@tXA;9K_)IE$}2jH{yv`M!k$w@SucwM+!=YGr}5lKrua7P!m(MZM2j z(T^G{?z6r|W9~8SVk4gCsKaNO-*_FcjGA*12N#u4sK!2IKcTN{0rHC`U5}$J6e$|Yh*J-`07O{RR#U}x8a&FT)|M=XCWQrHgwa7(ahy3ADpV5SC z(rrd(I7Pf^T_dOG^*XZuPq7r-1hUG;kc9OC8Uz@j4QI$JV$($LokY%Esu@@4gd2Us9p={LYN2)Ma%?&srxYvQZ3{wVp+_64Wt9Mmc{`2G}2tukeR$r*~< zT+B3U2Ld-})bRR4p)WXS+-`U1s~6`urGh!)wo@6M=cePnljqDcNw9l~gI!hy_{-D! zmv^5){kCbPbjZ(pp4Z$=I*oDcuJmq;^Set{nf(U=XVlww$Zp_P&rDoSe!tz9;_naM zL7t}L?hO`*FYe8J8sG)oH%FVmTCnrlnWRfMiJAo+>IHwER(bjPWx%DroOCk>{_c5K zBmcK3-_XNj_&ezRFk_E#^c&oJthmCm1oBO}tsd?C4qU+6`j5{7*SE>-(AU64buyas z7VTdxayN(OkB)wuu@q;Np7Z`K3b|iV_uWJ~0|H>dcReTcdaO1*DSTAd7Y~lJ-jB>zdZRWufqmDaaic#pOzkG+`f+D zcMHPeLmAg&dJfy0c^75^w_uN0Cszj;u)Y;%HemtBId~CUv0k=uXWY#EQ><^o?e2^V zavTZ|iF}~Fai*nOF|C@7?xXzGRCEXR4$Av|iSqmY8Jpg5 z|9V;re>YR!qn>dT;UwxA(a-9k-kK}oyzW?e;g|a5quY=lNfYtQ#}@(@|Lz*=TV{QW z>lf{bZUfhNkigA2FK~0Urx>?Jml7&?e-i}mw4uNSJ`uQ*E~t+Bxzb-+OMiLsv+$R% z?H_Rc%x(hrCI~F_CCT%dmRqJjZ#2_|zUM;( zuHz|z>##VRabIP8F>05dpdAI$F##j*gs z7jIG`3ir-4Y6-ddD(2tTdd&RSHp5xp@@UcTq(>sZF+DkhaTYt{8CNHKGtcve3E$YS z+F#wp{!*|1W%jFiS`*$U9Itg2KZ%WeLq#7vK$5*E8&{IgT}(HnVS?iO9rOHJ zL_LywvOmA*F_z!I^+N_2QoWNaKDMXwjWyEnDFp5(oNdAFpZ-!Qm*h8|MzOwyz0D+`GfRBD>t?QpZ~tO5v_Ce>nF2a1};VJ(E9PH&$CU0TUE*J&2_Bj-JM_mpmnv+ z)~8)b-_knG@q?9!S2V?nkl&x1WasxDxICo}B30bmu3+>*kGZ8CPyg ze>ykG4v20-<#*jIhLT@DYFuFn#SyxjN(GQV*N><-l-A(}sr!mOf*&dP8MtjII!?fO(2dnSTVF+<#OToYj`iWs7wvPg z-Vc5EaQ-j>xSksqxAc99`zEii)qaKcdp)qQvjwiCwrz9jH+D(Q6F{%@T7CN6dHC%Y zyB1tS91-$1RbvI*uq726=0i`&$;FH4dH0Fvd6^r+>Kr_HRALi_4A&i>5_7j^UgAj0XlxwV7*`hbXTwa9PZiZOTS3fd&f z>^|N1SsVE(Ll1nB6^G-f+$d+I8RZf3GjF~meLi1qV&jbaFR888Q+tOCntdd_%j%lc z+6$_4qxcf~{)SpV)AojmcdoOaP`8d7gF!rmb zb9TO?_vvDKZZ~=#HiTa}O87e=`W*(8-IG@LBcY9>*<)8?VAhV-4^Ilc?w-nt=uV%UI}fugK&j<8Dpt!nifbDeTW13{7BMHH%G*dpkUzad&^4F)s0jiNNJ8 z=XS64`^mT$2Xh!V&b|uchTU|>MhoMxQ0(U-QgYb74bRpyZriDHjQiE?0{cr77vV3D zM+tu!U0e9eL$|TqLeKF7xCRNkt&UybdaFjGdC04k7Ws&(&RA~2pUjG3++oLyj0>J3 zaNXXDe7k0hz+JAgn{iLhi*~oAh<2~h=g?@Uor%CbpJm9r%TBSM-xx0Be$$bL0q%{f zu&;e%G>`VzZHE~0s&e1F3)x}fW6B~;1)5H9;JQ;70)7&O8{qrg6}hG4*1k{GxM$rpt;BmNL(3(-bW&SruiBl)LP4E{5`9_bkqEXE^V zi*y>~KP@obA@5sj1@i@&UDyxhCkQ*c^F?U*0o-;YT;K_65bImL*Gw181OadJ3B!$Y z>zjfPS|i5!c;%xkuZ`U);oedB0o+n@>)_|`#Utc>{l)Vui&IXL4>>1rcP#{;Z7TR- z^7nePb?>m9RmL3S_b+0ixR;TieRd-0H+cDC0=-|qLRPXq+Z_5OLXBc#ahT(P#MDUk z$6elhv>|zBV=?dE&TGi{l)2bOLvEZW?t@JGnu#Zi`%_Is|I;(*0poWB2GfJUzQaxA z9h!Bo!R_RDh`7zGDqc5~k8(nDz@If2d9mS912_&jRx1P#0Q={rd+-B!cn@xG?m_Fw zeZLEy6~S*XNH-zB`N;C^I>K4KFBMGsx{hBmj@G+&xn1xA;=ICtt2Lch`2MVd5k~%g zTzj_nZA)G5Z<}LLeC}dynRJT$czDO0H-x(!62s$oOs^!{WA|N;;}gFr=CcXczkhkQ zzh;TYcroyM6F2-hFERLqWnJRqSEt%i`vr&ZzBGWow4DL=$4PISS<3?;U)L+!@F)D) zbdw&TRm$K#!;&4ICs5v{^Am;g3AH2A=hOwRr6$*V6a10grlUP>0pI>f6HG*$?|ykR zm*R)#Yd1e5dtN+Ju26n+QrD_WFTkHJxZ~tq0`lYbuJaPlP^RJg9 zzQPYy{9%Fx40fjVC{Oy{Ht;$_cE73`olN$w%dO#Qg*f5$wP|lpAnthQ(`8+I+>f0) z#b?kSoOif%Yx3bh3i1N;CLQqHn~UEOIM|u;=#zaTPRvB!zU8*kr3Y8R_ypD-tc&;| zvHJBFgJ(WsexsI)UIY3bt$*ve?}wp$ zZl6bqfv`W|`0KI}u=jS~2)})Zn^t#tK06luP#U^j+X7lp;=TPj8n5?FN>|v7JnP=A znpe3vx7yqNOCsWzmi<$IQNNv2KR0dy{ZEUy-&1hT6>oRDsRekwDml?1pfyr`TG8)s zbbFEA(-FMQjvzQ#+#k6){sYCq_SS6@D83jFcl$G)tLTipQkl+8d=~mXjD(%>MwObz zLVmw>pWX?X3Y#VJ0yeXHkM!o9a&`?MYSVO?UqJi%8QIEelJ?5byUX`T(dWjL1Z zNylv+?UfIDcwRZZHlTa!jCP`XGR5LMUZ!}d<|DQ=i%lKZn4`0;1#uTWf*Ik8Ax zS`Tu4qU+QA&l)#kEa99dm9IhdX3T7Iiq^Tjru5}B_AL`Kjfl>BpV^Dv?=ChqF4B3* z(b1-}NS?U4_hOR&OfAKExyFaK%qG6`<)tU-eXCeznH8-ot6iG$`uHH}0>>kR1EP>9 z#raO7{rWUc_uNl#{`1YAKG<<$-o1XXjmp0@pdX~bICQaZO?DnGrpIwj+p=d_&+y*s zIsP&pzPBXd#-E*wg%a!R8kZ8ppU6MQ>*u%mBYE9fHUB=->ZV!n2sp3(zK?nHKDC*4 zxVDMc)f@7DbCfxKIfi|R{zP7{iaKR*xl5n-Ov5cFbG;FFg5iOXmuxYe_h;2=Z{cY6ZFj{Uy9V zvphnc`&a#qZ5`x?0);(~HVOaX=q&u_9E=vVduOuPZ@*b7@*9s%2;6nPNQ(HjgutDT zCdZ3=$2~>-G3OY%4gI=xMf{R58PfuM%}>`@@4zOao@pP5AzwOK@R4H#KUyp5e~uM= zlY^ps7_wl552iE<+ADKG@Y&{qo*?%Id0%)F!nLAqgP$z*F18W!g%bB(#zpVQOyKY% zpG-pthWg7Suip1K+(^jzI0twGiF-)Zz+)2P4}GsGD2*2JT#Rz+74bM6#2>6@c-llM zN+HU{DCcIub2q@xko6b_Iam7|9?p>KFOjsShiK{=jn)57nn?D8I@bLL5n92l#vnBT)a=Zb6?A0gpojF7GJu*7<^; zKU`2;&gb$}i7${my)9I~7*-FWuF(if(9Zr*b(qggn9saL+;8RsZ++zV#;&1=3%gyS z2a0@dGo&w2uhAh3<~QbDgC$r`%aB1B-|N&M{MLTKo7JPh6zlrSP^MvzsRPJ&&juX$ z(t`!x5x<&5e3XNDFM@Z7@(y(X2mahD!Ox`s&H}vaWO{=5PGrb5R79S8_AZVSn_aKY z>yT}FzAxdvy|u^8!n%ATo$F0oK>tAk@;03*lE?qAQf_Vz@%K($#DzGV187BF%(Sf= z>vwKdoa>#<-^BP<3pVrmx8s6%|BFQ;4UKwR>QP{eee0@=tl!Baj@Q?ceeQF)hpku_ zY^w;~aXh^+*w+p$hbam_lAnK${K>3_GZV-Utay64E$t(ZrA<3X`IlmKPu;DEc;HZ$ z4>FF3mlj_*N%fuUk848yL0fX+PVyI|2O2$K3ER2m^_2B{Pmg(^sW&{@Uv~{g08jM;2bd>$``0 zEM8Igy{L1%uJ8J2dy(R;sJDR?z9Y_Bxg$i0hrQJfHJWaVIPT)u3HQFhub&KY+!fFq z=L+XWq;5dF_Yy-4PJ>RcU*BO6=#ll;1G~cSuh_5j)dPNB*Q2In@4G!EBgn6}c@cJk z{IvdYqXP1K`*lLg?ScO8Fa6(9e{4MGG<*%bPSJh|^nFsx2uJ)+gSa2!*?sEYx%c`+e&omt}(^^VB31lYuO-< zsj_crdOJ_#kwz$f!A-EAZ=v796yIqbPPy=TJ$}b*$$;}ot#L0z$IEE=e(<5T4L&T) zKs>Q8_Dm4$-0YTppbx12{lF(*a9(xCJMhqW#9JW$RHTKX-Vi&B&4^zHyY6JALp;{`cmLiVkX!#qxjzf@XxiPj=k(FPQg!F|o&#Kk8{x4lasS!j!;e_H zzw@Bykyo8TM>sYt-w@Ow#jeyV#I1Eg99us`{bVnjG278zv0ca3>_++I<5j%uz&m)h zx=i`O{Au4G&H=6TblPru{{{z?+(q-|YfU>_ikF^vhS>~;J+qD|FQOn1coMXk-nUtI zJM^OWG^Ab3J(~BQulH%!9rDg?It{1~zWDAb1vF3lY$^{=je8l>-Dc4KFCcM<+X2wW zjeEuffu7bgOrd>JV6HRg!*trO#Bb^1{ANqUia=27*7KJeg8q(eUytIlFuTFUX`Y|m z>B;fgD+MEu6^bM0tyrJR!d8)Cn9X zKB+YW3qShZuo=g_0zCqbXT>tvM@ytKWggb)%+>aC(A-*mt z{OISpPAngClL9a71G2Q?A=icg}PPGhM2ousdK zivGXDY$ADLw!l4?@lXpI2I#3XO_cl5Z~{lSOG%EGjQJ^&x4bOm)?_BiIqU_#9kJj? z5FGqr8Lx5J3m%&&E;o_oCnf(;>X}E~L4CFShAijiQJ;%ZPNPgXHV0IVZ}DTKEXQPF z%FUo&VM@CLs?W`W7A{wLwOxk)H#pUf!nne`s+WEppW45}0<0TsF!G=je!) z0-T}5(XB74H%juy@s<;wqCBE%zxnZjSI5s>jxW6pRA22EhsEG2ilX}TwHHyIHlXTw zt2~F@z(17s|B4j&ULQz+b?AoRYkU;%$FF1bgz;U7>{nYvIcz_72>XPAg17RgfE#&M zIlp4$ye(jZalR|(e;B3ZVApDCCqA;}dW$69Ue4o)8^RuSpQQeN#!0EauAG;hS_yk2 zm(Ya9d`PXw`ip!T$9&rxz0eZ&KdW8P1LQxj$`WmDDAt>{9Yq{&5>TJzql@-|CHTIe zzrbmW3p>la{PfK;=58bV7MpY=E8KxL{T1D4b@Qp z?nc44pGY0T`n5`&4?lSGoY&pcuQuEx`SREey#CK}&}mBij`@-6$-f@*L%IcY@{}V` zfcsHnE^@s8*1qR$;&oT`s7-YH^j@rg>F2qOcdybG9m02q)(03LI>5*Ea#^k67DP+W--Vlth)3U)8%V#qaAn7H9KayX{`Cq855(!Sdt>K_{oNyPH}cB~ zN{!F-{r!Wfj*UrfR-^m~!jJ20hy(=kQ+plCQXIU@C#`_ujjea1vPizNqOT3%jgEG! zLG=40*D#_dtMpw+@j&#*`@9cmz4;dBcba()*-G`g^rA0|ao$kG2^ZXOpLptf%tYu|@^Rwc8D^oso%Ap;JDWGRt>gmUUmiu(} z`4G^ZF*6f%KGllBJM4_u|z`6a>z^WzENim;_LVx4l}PHkGWv##;I}WkKKm_d9;5h_}p?; zU-0LxHZ7z3??YFwD6<)I&*m8;I)ZjGZrIKbdXIDlh;fsddGF-h0vK;BQc zK{LujH}i^FY7e}3)br?JpsqHrk}1wDKHERU0@Qljydg9W_H{gO80_l0)p0Q?;DX3$G(_JVJ+a@@5i#uq^$)OdSKf&+FHF&Qrhxp#V#iHn{ zsONn+uz?@Ou}{o{lb*mOMo#x^3p-uSlgf7n-!O0LZTjx9dhZ!JlwWOidqtWpXt?Vn zni?EbJgr>g^~mvgDwIiL?J#^FWBedMUS zqX~Cn=l+T`KQ9C<$nXFi`K{Py`aR^t8I?9rf7*wbSE4xkLZ}&^AKBMB(un58x|$W@ zd_Y^AtJa;~FVB8WaB~UwE~Xp2BmGszSe$nN?ee?fPWleSFDttX+1GRAD|jH>--rq7 zN$;_8?RfAj&|SOg4WaU2=bQ7X{MfmR9QT&oHG|*hd8-qK(E2dD?t_Z7o)lc}9YXf| zXU&7h!Tp(h_vb{r&8}ofdQ-D4@u45`5$|d|Ao;ZlbNM~jJ$(K%@otSC*CV^j8MHf0 z@6R*WL@bE-{fu8{&rtdE$#laS^RK;u0lj}E!VG2;uUo1z$K~zJ7W4l9!+CKo+*|h{ zViMdFx>vWzY%tN^{ z+=%_xwPs^@zwv!cb(X(619w5~ER1Hl>3S_Lw=+Bl4~gF^HAqKDf%|izVmrhppvLmLQx8tF?B59VnMs-fP77KfOxwqL|6+2w`4@MO{66X}=B{1X1&i_f-PKU>D#u^iCh zIbwEF{cssiEQ5EZdc|oNA+JHh2!7ry!N=k0v77@toa0h=fNM==0cXwuA@=K%=ky=S z?Wq{$g9r}(qTCk*%K9B;xxFlpm;4r~Cy@hBoI}cTB)jnEuYB-!O51}sp>BgZNL(th z;7ujpO6p-aq35<2k%UJsNG&tJYWX zD*q>17_ajGt5j|8KdrCg3-?dud3Z4{Dvlo?c(vb19^eo1=JGkHxPNN@j>P{{xhhxn ztNcGv^*M1^4?7Cu)PAV)HquUB2JqaR zI!@~Rx*+kzrG9nX`1L^j&$67d64c&I`QE7IDqbB2b^lqFJ4Aj~)cYyFhwb!R@Ug$d zzGz)Py3vAt5DyT3pMsW0@Q36&@U_3-olKFwfqXBqp!hKgwr8%a_fzhp^2bvFe%FJF zLGhngFun>Kh;{L`;D_3ff$+!D&Pr0>A$~ykUPtC3PV5zWP8~{QynEmFtk=Z52J_c9 zKSE911KjqW2Ib_1|kl0gS&)X zQ>-kRcJ~AU?{rPzzj{-L@OugcV%;|}Xv6giwodega`uMa$VAJxcm z&@+-xp4Sf}2)}ddDVO(<`^O0>)>!fJT}2r$JUGOE=Mb)dA8IDX3hTsKENO z{9mI(Snm$(Vtv7tPBGpnr!&(d@9D#N`0eva-0tb?E%1v^_?Z@s=xmKV(-o4di=V-(aMwx4dzmmOqu71O_>r3g@hC`REW&;7?N3r zA~Q|OlzC3(sE;9$Bs518LY(*7``YLJo}QoQzR&ZV=lu2adfoT?yN12?+G|g1@9X+p z{pRJb*1cg$^*gQcatQ%H)p4FC<;f1I**adp6oaio{L-&h1b6U*?&;JTIO6xC3tXaBn`{c?tPjb!TB0D!1qD_Bv!IZCVE;Vt60R zuH8wpbLGsZ&V*}>ORv-SHfmJeyphgrEr!LNY7O-8oOW<9aKPiPBj~-)(l1GU$j_x8 zOVPo&M;=_6=hf9$Y#2i2oSQ$-rvB_;;*YB!=sVAMBR|drt>nK0YFpN#JDs23U3|5I z(5rdOe3IK&deDLNHH@a?4-4UayKdXw5Z0WrAfE90);`$c;cu1DAku&Pk@4@6UH-Xp z1-0LM(p6hRmCN`-`p(FP1H3MmhtJ!{`XvOi-0{RJ%i{$tZztXNq8 zn`hJ@G-_IFF8w~`Sb@btYFD#|Z@UnGkEuV`o6sIV#{&I(Ns=wu`CW4if9_|w!~rWW z&ZW-c9{*t{2R>fUyZ>%a{D1+&u%qC6fm8AL1Lc-F{HxUj)|*>(;K zAKqKuwvEqQ@69oMzF!zE=JTr;=C#PqlAZLI+wokaRu^8rbJilR_oEQg1?3CY@8EhD zYOdmXv9C8`0R(@>c3!VWO@t5SKUT-*D}hm_`#Jq1Osv;UHc%pq=NO}3b9?Vh>+*V5 zHQmc;gFCcy;@-PLF{h7Nignnp9wpLvPvTA^jxJVW|8Y>h8$3t{X5dHdUAT4uUa=GH zD|(7>q1>lP+DOoU9fV$wF0(kjV!XIFyw_5!-(!wYLW^;w7$c{riR!-euR8mJugHu=*>K};@AQ*V)+laO<_ zK-1F{;^Q#RQObEZz?UfVE$Oc;&)tEZq-k_h{oLF?%1b@z2M-(cWPN`_Y4>mP|F``A z)SmS7Z}z2J;@|Wn|3B4}ag*i#hJUjs%S*XzFCXsz=qH}0f|mM!tLOhTU-~KiC{N3A zBgdhX%W?jO7sT%%lzH**{C%zH|2sXt%=}{<|4m=c8|kO?uY7ytcpt6QPfuZKo`mxb z!acHbE}9=B_}DbLT>8O}3Fxos3ZI_lQhC|0vOXD?2TDDSxWd2sS^6R4DbM4d6n`XN zjvG1OWt?kr1w0R^E9!T=K`qAlq%Il2cgog?ee2RjT+@S}tgP$uoO_NhNO%u?EIEkZ zN!Jzon7Oi^^Wzxo(ARHCej8Z{*?qiP*r%t{#OJSF0izVZjWPv)7j38DpX42Z_h1xx zOU2%0dO?sJ#cfB|~XY%jVV_v=}nPYJuW z(>h5QWZG^v>7Bl7%k|?k4B!Cr^)KrX8Qjm;!q1k0X;bffB%Jc(KDTeWU^CZ`?nXCQ z$bY9S;c?N6YshJvE;NF0zg^9e>!0<*bu-EbuA~Dk@{KDrV)6VVmj(j9S99Bs({nTy za9kU9h~ux7p$IVE%j+_3KIyM~v}qpYpJByDLkM+GyKN!9rgm$duTDMVi;lv5%2xAg z#5WxI9Zx!u|1P!SdD-ky>OB7%VJ`Y}%ZIf*|9cg+lVjSmhFAjed?BYZkHgGIE4Uxm zJ@E5v*jfL2BFEPm2u5& zP>1I>#*_)+dBGZeB$Rj_X8*n_oj0trE8|5CoOc%(azAfm&EoyAckOUoS>X4X9V+qj z*{^AiuZhkYZpi(dGP5d=fAX)B+`p8%voWIazE!>Lyxm{5O1Yn&O*ZlPyM1f-oyzYR zq`}X<6Ft>2L6IliI>+rbHZA1(OCRNPKVpJK{C4?ja(n*u?eK#wJb$_D>Q3b>e@)`& zb!~SqUT@dsHvHVs;Mq!k4*yiO080?Yr|V{p-p<+FzK;{laGZC1rt)%Q8YFPO?`iSf z6yHD}K0YFkWpKZZU%cSsu~X_KPP@O`#`Sym!s9~NsWrx#w0b{ zJZcTcr=f#6)`*=@hsx=mdCTLLeT@DvE#61#)Rf!F?;p+ew2$}Uejcc6!TAM$u5!L! z14=0I9i;knfsAn%PG640`S`{YPUjAT8<1xXqlE^)57C7g&;f@gadZw7^JL1z5-tyR zg1e9h?tmN6w|U)?<1BqK?{?ONn~rV_tZq*$N& z?G$>~5-DNEIZAmSdj(B5=-E#I8~i`L1)aoSV8(mvNVTgoNB zJW6}A{_=83OZyTfzdTC0#PV`U^I-x1Buf4A`0xCZ_GG#LRA07RmM@Rep45|cdHa%< z^73{h{qN*bPui38-|#=R_wV$iT-GaTS+Ataqtusr|GOyT{O|1ir+R<$PqstW!!^rR+C+8HZfjm#9+8 zMe~Ig_vlJF&W653c|W4h8;tjRlyXuo?eS|Yl)JzijQ5XE3O{Dx_LTe!*e~c=+2S1K zvJ+`0_`{I364qAkwLU1g+EeiV@E>&J_n$;UZw(I|et)a@?aem=oFn{&{p(6QWIQ@4 zeqZN-!h0Al!cKFgypAGIR{Rd-4aV;S%!EDX2-<*g545}&82J0)iv@ZWoa1y-S8^1; z`z@u8!tY)A$iY3l^7khqu987~U#Ng~TD+e>6#z7h5OJBODX?unq_Zf0@DBw9zpqu= zAGBWRH##lQ8&4Ui{JQ|!S#b|IL+~fx74_ew^cUqHeOL0Pl|p}}!)VUWP3g+>W{-l! z9B0IaW6I#3?3#EU)aC~5)c77|BjNXm*OV|IANwrwyFdK}IxoiY0Q`3kk@iA=RWFf8 zdOsKW-L$8o-t^VNPv7S>5^+!HE1tV`{37hOOsBx(`({&VB+>7F4LJI@7dVjr;aGe> z#8%jeF4>2G;X6<3*KobYdvBm3yw4WDi|6@U90zcGXd(RU*-qHq<0kyu7bWbbKNtCB zPM+{{g9EJ`_&vId$b&b8r*L{|n&|)Zv%=3AKEmF&*Ockt?^e{uF%4+diAEgWW8^>R z!h7JmMf}x%i1H3YaO{Eo>dN0=`F{T<_j8#44qk4+X(KN8uNcQM_|-a&=kc{HvfD@f zDW~6#7jfUzS&W-r>%_QOWJEWoxUZncchH}Ur)`8m-T>e<`ph@5(_j&YH`F}n*UuB} zzB5M9M;8gZ2FiE+&MXl2b?DF2puD}Z{+!Jdc7ME|#qIQ4B<=y6o``-j$FCsBzV0KT zS681V9L9^17jNVj%J^>RHBs-{dP2{=xu|C~g%$O^OcnBLJh8-cKP7*zOUEbJ%YG;1 zpOp2nGYu>7=_~A1ex05Yk9LCAZ8*s@niVKHJ%3$3A(Eym$bP;e^dNuuh21yer<)OUZ?T_)D6Jb ziv7ll{5i3~r(UJ{&){@P^g=~X)_aQB;PWs;@0KFx%>bWf1C^)IKzcNKh&EMF(wqce zB3Fk#jczI@%a@n)>LABu2LAmkZhY%gb`*<&u_qlKvb1 zr+Tuy^i$SfzPyx6{lB4%-{0ht|DWoW_d}MKDCH9W*01IDX%L{halqKzI3^ZJqc6@3YnM*QVd? z{fO_HaRcp2RaMIyfcIlx=C3_i75wYVJY0X{dsH)Q`X2m^?>x0~Zs+O_d20J5hnvFQ zmW}C7tMT2ceh&Uyl3a?|9lz*B)gR)!p7kBPs^IT{Xuh;hsf^z#E>hpotF12XyEJnD zxbMZ^DZ3xD>T@!lmyTK;>xTEHeXqt<7>M_ZHyx@K>{cJ|mEWJX`<_)6yRrDx73WC& ze(-};wbXj}PGi;(r`(tL`zU$UboQI#JFCYco?9nnv;8keEKL8B&-RVorkalTuMdar z(s#pmDK(C6-_QvDE$M69BuACcChTx^R#zb&j%Kl%@ZWQ216yOXyYNML`c?cc@=o)$ z>fiC5jWt)oZ!ExfB!0Z^(!n3{{;9941)<%ELw)B=M_g8UtF@bo-xq$ju!}2&|4BW6 zw`zj-jL&&Kxcd=y4=#9f{T^sl$6f}T5$};Ln}xT;_rR}B(zBk6?~3gozBAX>4)?#| z*N30M_qsLnTRrn{iQmD-nrH9B_rQ0J4LUy97WbDA*T)$&LY~|-xX-DptrL4Y zpIvQrVB~l8eCB;V^xcNmd8~D_sd^o20|EOJxga1e)GJ$L}aonwsRU3JddQSgZ|xkZ2ec77sdq+ z;T`ebb#eazrz<*XxfmcZ{7pSpgVg73%7{`tr_3ghnT54UI!GrVt-_P{6xey+b8|EI(P z<6rMkt`XWjv`@{Y1Fi7>ZjDf@i45;AH&^$J?T6>jza}n@(8P0-epk)9?9OM_dzU_a zrJK(*7MQ5lJDtbwxP?aFY@fxV@7w7u)X8G?-;9e{5}C>7y)c+vYM05rl}%U^VV22q zS5%{OPTKk?fPl5b?N>(Q0FZ7{*TWyDmY z>-f8o@6!xUXZ6PXZTNYOHonKQsfq2Y6nngPa47J73-FtTjdw7FzxsD?cN~o0+b;8| z-}OGmuh*ce%cD2qxxx6D-^-)&*!aa~d+HC&V_vGBuO=+W#qWKCF0Wsg!`|wR^)A!M z!FXGEAggI68=_|KFsy1OGk>j>5fz`olCO+$X%?2jTw7fHQSn3uGl}YM5_c|x?d-O7 zt4mr2>)Eg9-Sa+~tj%?;>)(SjS%lk-Zt>Lf3=_eIgGOvA8fXG zga7lqk>lE*+03Y4nzogCF4KIzV!8R@JT@@RxYd}``RrB2BC8|j_ z4ED_IgvN?W8SLSiS*%$~cY}m$pV*@MZI)Vh$YA-qmTWpTMo-d8hQIVRRnr z-Z^wTa{PH8WXpp1W$p)=U-{Zrxk=YX)Nmc4f84Ww2kqyYlU(Wv~IkJxw+6`}5D+ z#``bFJTCQgveAQIea@B!7ouGWU)E_ZPsTa2Z&{fo;$1yy)@)74hlJ-J*<*X$~e91YJMKuyY`^w68C&|Vda|GEm!iGe)P~v9lGVRYE_>2nC{AE^Jl*LU9&6; zf0sPG#Y&${w*PRJc5%B*7Sh9c)S2Iyw@>aY?L0h_&AFXp&~tAld*~hSe`HPuTWE7| z?Tuo|#Q8*ALIadr<{Hc6HBUucm*Q*!VGiuhOgH+bE1HeYL?lRT1wh z>$D$t!9Ha>?$C}`7*}u1PWC?ZBadl5TIaU+a6W7K*`ts1ZshML-<;H`iTC*S#BDA@ zJ1Zv7`55#wi(Po?ullt*n;nTVaT^V#`SvJ!gT&0f}{Cu|1XRQU|AJcv1=)Ul$a=@5f-wa7NI36XD}}UvaZI|#&}y=d(^j=`1=`yYc0GqbS&Q6&HCOuN)PYpS2Q`$G(3;} z^l1ES(vUoMC8|wH^*g!DJh<6Pj}5tOwP{kptH4}Vb#0pEQTS;#rFGnBy=>;%N4NgE z;B1yP{+Q=E#~k)>&ZFwumvY$QymJ?BF3e_bZ|obM&dz4bck1NT3&~-vGV8Yp*Ue>- zrY1dC+UGKr(T@~;EY@U`$6Kub zC*2d9)WP2&nQ+W*rzY|hlZ#J04G2f2^+wJJNqBHW! z>Zh&JUO?XOUQ=HSl$-Rv!q?NG_??1pJypd>yvOJsb1~})evfBdvw1ky?@Ol|Tv$*A zzx(TN^ZwYiJT^G>zE*{X`7F?4nc0nueAd<9X;-xycpopP^raT|;U0IIPd>CMk4>wK zuSk5)WBV*CT&i*_pFKHfHEzr*{JtUxVd}Zo)F|^(`y|Ke1duc zKRc;fR>SkPr;Q78ke_L%4(PlJes*5Idf67_h1c4)>p2(WYU+-(Dc$g$^QrZg*B^%O zo~~T7zhDH)w>0o99jJ%rj>*yY7B|K^cdvK5i})T#(X(8?M6BPJ!dFC%gr7;_`&V~$ z#P_B)xd+z0g>f6Cr5)e0fR$x*H{0b=z&4fyr<{e|oQ*?@W@FqBHffR_wjSU2s@)~` z%}2afzA&o5xLN_TGJn<27;*JEZM0J#<7jeDXMOtnfvP=IY9ETh`TA-9-VeItyA(}* z!<*oDcnOZr7UUuy^b2_RxN11QTlc7FPTe5~-cQw;6Tc%A-(_)2x;lAtA!}`8SEfoVWFe6TBd^;QvA5^_Zm$h1Vtd@IKD1XA zF}7;>j)_MLSR=KgF-;#8F#nuy_|Qcm%ZrQs^Lt1ko8#Tst7u^%3p-e7dIS65;bqy+ zMqqrUG+OAc7lQj$qt*I$CV1bucH9}iuzY5)tnhu9JC>t|ZpH8ACRWk0i$Gq}($>JHVga*0zo>!!^#Xh^IOzVOV}&f%bC%YH zdPQu-a<9*w6N*@!MaCVyb&6U0iABL3rx!EJ*Uq_bLW^1br?VGzzFo|M!dx2-T~f$y zcdb(GPe>syx_J=`)IU*b_z~xxrz6g3I^%nURp;nz z#C%^Caidiq{A=-l(rv>*gLx(e}?wK_ZB)_`o3%&_KWY@U$&0NbM|!YoXW%T zJ)nq6`)l{bxp&y|4L9*!;;((jADf8z@N`A>+}Hkif5Z54j@v#wFWu8(_`q27OMcmj zc38jPb+B2=dLxf-JMn1Q2z)oIty%U9TjZmUAFi5fiucnsdycc*Sj(Re!QbTJFK zW9wM!eldF!Gw5cNO))#W>Faaz*F{X-`?r(cha%Q;@3zXTN{ZORelHRl9WG*3b4n6= z`WLb5$0O8Q78J2sIyEcDz|ZK;)3+Qzy)W)Wc5DhdFS?1>2ej|U_SC>Wn6KLR+CAJF zhvx>f-x<%jh`4{-Us>}O-UrDFY2G>+-(~w&an>KKV@uti$Irk#e{86G@+kW8b?=*- zZ(^OAo;vu!a^%k^hULcS;`=qNkIzd>LjBuIGyY75f9(!BKbq2@nAO=)@5 z*N0uRRip8K?txXwgK_SNZaJ%q1@^auakJO`f`1K;k2=)74E2Y6xg++w;nk;o&cb@!(4gY&={SGge|J2i&JsLF*i-kGZubJ#B-MCo zu0|nC?|W(NN{wO`W}LIlwrer#b8|uUnn}g1X&={;nIlVB^Tu{tg2$CGt8FFyHqIz! z9vN1PN233}sXf@0@~Md3nz=*QcwP~Ea;Br7^~NF=(QMZ4YuI-(e_PbskMr!)P2b`j zZ18-;B%vT|0)9Vz+9dVqB%Etk)SVczEuR_b_9*%ipU?hSIW$gei2HQsS9d$w;#@GQN@|te$al)-Ww)M=ePr|4j0o2f zw#M`Eg{JWLq3%_>uTTPCyxu}@U)qHvH^~YkS zr`69R`A0F^eRpy%du!Yu-Tkp+2F6v>l7rP%4%mlxUVIUcb8gO_VV7TEd^f0jKYkGI zYg#;;VdiuR?`i2751OzPzi$dQAG6I2znk!w+DI!XpA9>;^vxd3mj}O85zCNYUc0+L zc)?i2#pLaE?cbO;fwAko&la#rEe?;Wh5f)n{|hLdAlx~|G+1CzAA_IR7m&Q~z| z`k)uyzYjEO61^UI(+e9j)fIfFqM%a?gDVB>#>^`#$8;)SSD1glGyCv+A=@5l+344v z=Rf^^jq_u-oIus^p(U(Vhd?d$?j7of3Sn;ZIJ|2=vpdw)*LsMQoye<2sv< z7qPqB-~6l@RK(JgetzthUBqVk*K@7yT*PK<7`fr-_5$2ziyQ6bPsB}UF9HAe|5sMy z4-C}Qb=9@!y3LyE=I%9Vwrl%L@w`<{OJlmGM;D*94XU3E8zyJMr1pYe${~dwXY?IEUzbN*-klLq<(q(l9qnR@{%r(Jvc+fn1bcyvb=1sq|56` zf13Tpj_jAVid?p%yd6o){*-nlzdW|#43%)d!@uTRc|B=Q)?2sNC8u^4P8XN8Ph0m zDppq|%Gs?D^|{{vjRGnbRQW5%#T$okys%;p*SA{uh0|xPpP`_N8IN>9K^05$qYhKC zWj#eZw{8-Cuo7WEp{9t>^+Ic|cQ=7n92L{5PcuTr-i{XfZYzX-+j=xIRqWxACLGu1 z3BQ{i7y7#^2!CU{o#XOFtLJhY9<0wXZD}8l`z_2lTJ=zIKh^ZT;Rwb}*FL-*BQ1|} zc_2&S^v5`mkcTM!JBz9Z{gE#y=oe@a-E7Csz~^&Be@xI9?VtEu@MnG!_M;VhS{>?heeEz)j$OQIrBJaSPer-XI|7F& z^J%A2ZVs7)o~DA13YJnB!5>9#0{QR;`Va}Mt>7=d5U7|3nFn9`{Xnt5K+%hH5c03e z_{`-C9^ysai*m_I`J~H&ZogFE7-|;e>-k2jVkwIMBZ&<@jTS;)9LTHv2d$&Xd9~on z^^==I()(n5y_$RngUOf`enKD^^~Wjp3Do%%gfU;|CHsVT>2;dmT{BqmU@3f z+3xakSr6?NG`}U5*OT?gd|1vq>6g@(`KHvD{>t$t^`xAqBdAyENqf>SsV~Q~Y`5f> zM``zO{U-ZY+ACj=v?ui_o1nOq*OPR4lDL7ieaPFXrsq+S?7-e@(U7d^2w&ct_?qksF*9Ii>SwPHbq9o#`hEQzLb`M zey`+BC7D9+)ES|-)kMf|EBU}Ah3>aV@K;VGM^r4F2LyS8vEaKXbk94&-qD4^-k^(u zp0HBrCEXCTUy`tsJeyV&6&qbkD{|p@AwE zeI@`)kBT{0NI`&9Y?CI9I29XQMh7RH6N9RA%>AT;B~*pKZ#fl#LSEeRBj?XpPaUCR zi<*u@094E{{UQRQVlAV_b9=kI4sp4=-&3w{erFb!Up=@54OFrFA(Oe?Jrzy4ykBn> z*KZPMkHD$e;SOK8ou?~C2N1n`<^X-dKi-ZA1oFw027!cXYpuHtwfE-&1Bo$G5Z=#MF{Vs~Db zal2^;!qI^^XMR}B^&@O41ywQ6VGVw@2UhJ+$B^jgyw@19DyGw>6*^GG1|k-|}XySar6NyU=xZV~Q%nTKM7mC-vz?){Uifvtq;y{f|F@F5Uit*a| zlMm<5P>FGAf7C+gjij9d^}7LpFD5?Zejc1ynbWzi8OPyy2m|B^yC4SsQaSN{jPW($ z?Q8B#6IaEa zL<V zd2b=_F=i4Q{Nc*_cZb{rJ)NopMiBrXDfG_Tf==Qao{DWJ_o%!g|4bz4d2s@F3>5f* zx)=O7>IPsPauet^M)bFCf}nl01iCBbUbGPObOPwhe1|s&G_MvY=~s#$6b;fR>x5E| zR}cE3!naqDy92(I(`cn~mHB_*e5%;RAm@Bj1$p;E&)Y=s&nx;_iu|@x4vPT({VT8H zVFt~^_YahQO21`Z#EU~uqHLe^SLT0GE>V{Mn_TM2_^suP|M46p{gnDLUa}pMFa4Kt zd47}mht!iO{llchzrW|Zvc0ljWck0Lv@89Seo2(&_^|v({3T!N(dtEh$$pmcmUXq@9?UC*Ln>|_I-|WeDO1povBjfZpd3nCH_c#BfJz0NwJy~9&9M?Qe#JG^{l5*Lv zGJX=JUs6xTL5>S)N9svGCUJ&}@oOK{C+~%1zP(tHf8-57ex}fJ-Q(LD%B@lOt9ZpK z=A_VkxrW?Dp|5fWu|FyMMMZ@_UO~zhXnqwd*qIMFtn=Jq6P|drICI~9f3ML zKq_`d*(X}_K;oRBF65JKs7F+6Twg)^Hc`s)2C0}{0ac)4`gbUDDmJ8nkS|j9`6Il+ zDpql|;JdD($f}s*2tjAp7icn4;MCK?-ahWAif!8?Xw6_DU$$G&?Zyi`^|#T=qGFXa zDL^WAGLQm_yl|e#pG%E~aQaa9bdJNSioB=OS{e!1_sm7!G{oM4(=YG5;;8?I0*U>$ zRM^oAu;TRain<*2?ghaS6|3-o0s=cmv_h*`Yv;xs9}M&4X#1-cBClevw@l;o^IT1i zJL=8i==7{NxAS|X83L$cJ0`s4{LY{1asJJN8fd7B-SWJH9zy#T{Y1~mHZ^~`AC z!s)>S-*7r*#&Bdncy6LMgVWBxXPXmU@k9eG)hbpr(2L94j2u0c=u7PnAfPJNYO)^! zqhj@M+#XH1q{Or`VS?VY@g0F3x3IESz>T%j_7VTns1XK)hW+L^5>C+lwTbZjp(+d7 z0;`+H;!0h`R<(-3NKvt!^Pf~Bj2#*>i}>l)Z|&;@{HnL@8}Wy`eJLgWq#JJDM99z_sE{SpYnT^U9*8??^@KmIfU_6`?#Ms{N~sb{jm4d zqvU6(m(vNN6O$^RqIv^zu5kTIPrqsqKOpIOMe_6bgPF*^a8EtYq%QgY#KZDB(M{%P z_>tb;%Do%gk$lizYw|BttHM2sYvn}qFI3O1iS65wU&p6;^^ON-C4A~b?H)U&XANrC zq^A3lt$@4rAMT`bPkcUc|Jy&h(}nD(h3w|z;p{U5K7PLJKf&oAhwj!RdHVIvd|XzX zBgT*8t_FNO&Z~Nnk7Kt^4r54f;IJxKDpkzh@&P8Qij8oq#K+UL+R*9a@E=_F?_uJds>S5C#na1?MXgIr<1fG;rZBHO8D`7=$<9V3G0P^|C;*T z-lbAn@KA3504}fHOX%CZ6ZSJq*I;2$G2N$PKI)~>%?r-idds-J-WffP{WcV$LiCHy zR6Y-1ZhFn*s@i{&%Lh!bdc7h{tYb&^lL5>lnCGgCVpWN@C-|3)+d73Ny=)N9qf;O2e%6D+t z!u29kH97y%adK3}3YwCmn4d32{8rL33z|;hgcLnOT0IHP6l{xGLUcA&2Xt5T&l3qc zPNA#tjZeiaFq$}DiAQTi-dds0c?v&$h6%kv)EwA3NZkuuM#BpD%~ABc_n;2-+jJ<#8j@_c&*&AS)Kn-Ap81D;gc zDbG=MN;wk+`zu)0i2eijY!r6jcLHFP;!n6jOaEm(oDDs$29*9$RH(c}sVA{~`M>FL zcVI^Z>RORdPs$}qxkPDCw(D>8@@a;4{yRNdwWwdE{lD2O?@xJJmX}z*-oMdO|KHV1 zt2g;6`&X8e$fq;p(l0sRq+Hq`!x>mF6qMs%mUmS6`rHuin-rR-!>}*cDZZ?Nj^Pgd zYaNqzFZ#89zwe1KwpEB0fQ z^(?NQkpD3t1IR}deplKaKriGCS25q}f{wNl>v^2Az8#=67J4iBf~;a!rVDyj2n7cG zfr8%24?OS#yEO4PJQ4MsccK*x>nd*m;uav}Wf4ODyOFS?mV$HudROa;`u%$dzWEPP zzI_=*Ud3`YM{vAVKn=xxY%v8M_op+(e%Ec2EvHjUi#cvwNr6ek5i9gebp0ryJkO;x0^b9alU8IPz)Wshwy$Dr{@$SEd%}H+9Hl!BTTrR ztj-pw2>D2hT+YAsdmQJNxggyH-_W)Rm)F%=S&Qf@-DxAn_)4NTN$~#5vsGO0^lnqG zXE~Y<7-*+oJ_3V%s*j4xYwV%KMaAB{Sc4OridB2?Xe^=HmM{cP#SBVEad~O|^H{=g zUL17;TZ4+#-1+4*{8t41m&lG34Ke6u77^IC6!-V64Hn0Utg^6Q$Bma-TLKV;Q4`NO(_30%UG3X0la8@ z$(j5b8J^cw54hQE*wDGi+aDce`3*taBpo|NepI&Kc8lz0POep45%}Tcv}8l*-MrAb z$#BpKz1DZ2^TE*g84W3KKIxksw+6T@&!=1K_SnB)HK_CpsIxt#iw*c&)n65u0_P>V z^*sdsw!taY@4?=@>Iv050fYWDeEb>wJ=?QNXF)Hl^to$VXBAtl-@{;3YxH-+nQu>l zU%EeQRwDGeso5_ZgmT*qn%v*n3;EPUzf%{#C$g4rYz9^V-|XlvrzX%Jw5dLxEaACe z;}6|>1IJ&v6Kw+g{%b%TP1xDgyX>Pr=m5v%Z{2}g9n7ZH2Oj*b+t?O3v+BYgEjwY| z?X>aiBG6T@%t}c?xq}O~M2-X9VuH^U6C(xd+R z)2gtD`u}+~y+Je{7RHXjilbr~t>X?5-Yx2}u?O%}(2Voc&jZG+-c0&KQzrY6Jl5Qz z65%SK+ont z-?uaB)A*{g$2O7lPx@OA)kb?Z^|uBV1vE--3>>2tQMV`1y?z+CtM9Oy z&+}{7F}=WFvI@f-_@?_~PWwH%fCB~k-M<&MI@}Anzu@zEWAslx{|`sal^w(nUhjCUgb_N=!ulc;z z{`KuD&8KMFc^Pz$O7#EMhvYY(H^9P-=Xx9VVG9PT{jk|G*uTx>0#q&z%mqR(<*};_KN-wd# zkN(&O3nkW_(FtH6KG!XI9L^oS!}Tn@Q#swhOa~hV*6GldICx+^_&JjEGb`A0y?bUE z+^>YEU_-vi698NYF9??)%7n(szP37&c5*z|t1I;V7Yq51$^!Qd5%{||mQm>4vqSiS zO%4nFb^bzL3!|6#YJ~_R@XT@AVDbFWM8r+^0y%(tAzxAc+Dv*Pk8$@{yni{VRP0-K zTZ?_~?IB@rLQ7$Pi{f_xktm0UkQ_xqhj}nk(9sl5$XhA$WFkSYQRsg8!mb&0EBG@1 z`L5VskLVHKu8jTz_Zg0YPU8tA+E3jJ{x6&G8Fk0#h=p(P1y>Sr(PuF@DG%J%KFRe$#!$I|0st^`v0&e^`xD@#ZA`Fn+bbM z6gxZ(1TE{4_N1Pq`EdD%AJU$TyR08c2>$(#?UnYWp3I*mU)rNtM&%`+M*BbQNq>eY ze5ohvmG-e%@p4^xfq#u789&)SvYd^gC)+9eN5)5Av4@umxLsPs$S<1hgbfv(r67_M z&flld{5l+ZdlmYqVkcG^_vXrcEa45nx~b6XXn8=n6~ki9F_1SL>!#xOLuLL4 z?Gt*lxm*c0sQ#e*zE%x8GiH8wM+>h@%%K44`D4=*weV_#|Z&BorseyaD{GV7V z@Oy_Y!mn0(+Fbv2s|6f~-c3LcBmdaoj|~iY%avG8drVuw?Y!yLiqkq%*YN#GW7K+g z(sT1QLC+&kSbPMARqV)oGc*|MVO&=<7%LZ)t9#`rJbI7*n1+dq{_K+)w?x&UCLm=xGywOW+8NWA+BX_7n3W zssNXttya4Z(7<;}Ln?pFDgO`IwZ8i6{X67|M;a^{Xo0*@qtVs$k>HOX6IhY*e#>jA zohZ-scWzLN@|w;Wqj!V@EtdU`s|wU#(avfJFrc!nCFQxZs(q>x3iMc6ec-Kjm^Ulp z(-wf9bWJ;$^8SX=KU=#2FWh@J+YOy|a z{Aka}ZrInfMmnx+jC$1y4AY^%_I}-abUxVoZgZwP^7=XUT9d8~1a7ZoUvW_)3+~r; z%Pf?SnqpT(^<0>_>A_;?ziC&rPa7CI(c*AlpyQ+&7PhE2tZZg*G4zZMt;LI3XxF3b z*SY~ej@dht^3Q;+N28pPU!Sj@9BU2#!p}A``2+oWXXjO>c-B82pkW8RoXgbpv~lhj z`yzF_nTp-^*gvBx%1sUQu>OL2CLH=|{{-dEo!RlgJuZ>ib`9RDSC+`GX+0h>yeIlu zFXW;tR-_yQwGjv-amqT-_qh`L36#|HcN^*+_JU5kGe@V8Yqo zwduTd@{Vr^@h=#}V1laHf@^QFaA3TjREsnO2AYQ(wglGhp&d{5p9F=iApINj-iHy6 zsoQ$tJD^{ilz#JoYdWi*(|K;+q53mu-03Z^i9{3k0e_O$xNb5n5kD~+)?QTH{8}iWVl)z!VpAyUG@2vW3I9+BzI~>lL9cjnJd>f2q z5cs>t0BogL4{NXF?YgcZ*4HNbv{R|re0wZUz`V*+MiWj_e~1Md@9B+;k@8;v;p2khCuksth`ODT|SU~RBuop*}AG|~~h(D76sHY%r z7HAzO!B69fBH~T%fqzTUlh5BB# zl0p|B5dD3dmUHmWz7zJ3(6$Ns^LIfHB@#4^B0>)TK%QQJ&Q$!6a^4*9dGmo3Ju3fJ zL7C4=d3k*kp2+>{`GM5uX%p=9Q0ye~fZ}}24gJf$%-a(bJ?I7XoZ z75PDW4Hx=+SOf1VdZmiJCQ7`XaRKhPl=}B5aXG2bBb5H1eL&b7!5gY#6P0@Q@{Y!R zN-Z*sbMh)OfO{ZXCV;JIcmrRX2wb{QV7oXmKccW&lU(z@;M>>|dzj9i9IMjn4xqbRi*Xv}FZ>B=M~-5D+&Pb<^GON-?rj`JJ^P1K zgODfe5%d4+(P}V&eQt}GpT>(R5V#+^EArbtKEF^A?lTusrjF;XR_nMtcd58{@YcD& zX|2}TT)wMU-v*>Nq?i(B>|?#fdhz-zO%d!{4NW+|MnT&~L|<7S#QBq!U*r6ny}odI zYxoVm&JOD9(TwzZJKAwSU52Hjq1dM*9T5=t^V=E@qdwOeg|yxmd0)T~#B)i#V!rPF znZ1(lGx@8d9f^M=*v+2yi3dI284?|R<-l;l_$SSA0>FMb?-|bEuzyMQi1LbIV>XT^ zd4+U+1P=Q}h8p)T@xu+Ql-Ori76ua*eL3e$*gI9McUzM-a=(Ks_@xs6c&8=(X`gaR z9i~q7>iD`l2_Maz=TG(at-2W-D)N!}H!l+oHnrXJ6q=sqvGd%v-bfJd9R`9uCDKQWs( zwkz(XH)~o`{+OP7=m+_?soSCh#QUkj`c_pH0`aX`FGeNz@# zs968Hf9xXbC$It+omo1A;Fsf^i9eusZ@XKKE2zKkte98p0}}DQ!XuUe`A=EcmB=^d zzY>|tM5i`JDT&O}d!(B4wnX;!&Ev|?1|~97cU4`ZutXM}j8CloNMwDkjhLvV0l(_J z8`=f_nzr~g`zGSB`(?K6GqnG)sds0u&xvf{c4x1X?-N;HgUB6+tubDsjvko-c~|o> z4ZAhLKBC!eZ)Pas{dVyE#0QCN@2zLQhoc{AHv5^rw-55C_!rkSn=(wdSE0MX{8jrt>d_5^*SoIP0@E*`Pi~7g6Ok*&uf(tPT%h(cW3M_upSg`1tp=v78FR5mD~zALnwrg__qxNOQ8mCH zY2M`+<@NHw{*UJk(j6uF0lVlPw9{LB4HFW5Qc6YSu`E51mx7$k7 zCI%-mr@}|w_9MUdyrnIuj%%RYniNK2m_ERc8()?-yoI?wfve{h=U zD5LgTgx8!$M$tSCsO#}yFtD(m<|E2e1J3n2PV!@wjyEM-Wii@@^bX!^yOidGZ>B?1 zGhpbmHJP-oRElbj#1ZqZo%cY(`-@%n^n#ybe0)=B9{vgZPwe;iACOdkRI@y4E0Xr5l&m^PC9IPqc^7I?HbRg167 zoloB3>*tric)os3ZI_6R0`+w~GnBB$jW4)RKznrG@pW}}`pmQRaKzp~o%^{}tjvbscno%3r1;jNU@>h*w= zw~y-E259(g6JL*?+eEFWc!b2)IYN53!=7@xAHGrsrD9KKSaW|WI*9ysn7`Opd=_YM zy{$%+*?gTOL2NQxACD-&Ys=@$5 z(bIw+m8Zewdy<4bwNN2{5-a3peFeX1dOse&h&9!?{@Ck^A1NZv&)-mnhx06Ub;51X zCJZM4;*iC0D*@=w)derL#Ba~JE``8M-j7qSx-^<5Z0q9;(S$g=rK+=o4%Z*-7C5n#lBiKn$xzEs=xsHZDLJh!sK6AW`RR@ zpXYiFCzf*ht-%?dCte*ypJ+hdlqbr6(!ezU=#pBxZ~*J|oZeh7t!`N@qUYsa=jA&D z@8o(#f$g~7^jZh`JYKAQmg_BZ4dZ%awo}0IzQn0MT(4~U55Aske`j2i_&>X6m=Lx( zf8BxbmECfl=UHb4wxM-@K(v3*I+>5@ff!{rC)5@oHujjz^81lHE$}C9k zN_5O;EMQn4A3o;mX!@4`{{F)4g+IbbPd)tlM%pi)pNQt`aiy+tqe=fyWbHh%cX{od zo21wBW)4;c(8r+v2aYo7}(fG3x$ zuc189HlTUn3+y*5_Gvfj2weUBjxp_%qX+vZ(7n{~`Ih;#-zRCe$-E1BqH{IfX`p>G ztzOaox8~?YyqJM~ezIX_Q|h1a(cZ0 zZBxrA;4tiO-u$SlHJ;0_OC9jwjve|z@0GS+Gvss28WjA5-LuX2#blwLKF62r@c{a% z>wBL^KIu9wA+5)gME1hWq?s1-)%9stwFV%6jr7oaeFAo^M<@LW>x<{_3+#pm`z12N zuWf_eaR0fhS&6zC^0SK*e&@A7etP%1?#>J=H$)`!js$<_l4YY*PAluk*;yx_;AWybE?xzd2R@j{N0V zrS`iu zWL<A9dsz1A=p!A^)BBJpQQ_-m}=@c)8y>_%pS_Sd&D$=e+5Dzh!A6>ooMpizMVt zQAvHCQ~Ot@o!u0J{CK|a?CcRJS6}1wgb787toG!23%8*iPu`sUG8gf=Su>#VDCq6g z8NTBr`sH(aon?9OqtYy`#BYdm?DnYjj-W?hxL2FbBOC9f>@|g6m1*-_XQF(~O&YhT zUry;=2p9?Z{Srf-w_K=R+4u+Khy42fJ^(bkK66?D^b((h=h6M;pswqF_XGY8coeV_ z{u+#H@3I7X*PGqNFAvbKn?uG@erEmPK`(lbLw|mU+6K_GpAx($4SH>jM>Z$Dpb96> z(Y>-u--?~407HtpSE6zD#C6^5HbCdYjjd^%dVYGomFCamfV^OuUzcv$q>|oTbNdf8 zKf)YO9U{G^9al{uy$2DmW|Q8!sXwn%yFcsIDxo~@N3a852f7~(nM-9 zm*}mF(<+j^@2$U1Bzp9*o}<2;l2dOZ27GuO9oRD;JUrzPXqwKr|l z_)d|N*q5dqcjxv0=}#XL!t^7P0zR-(|eSMtc=3x(ceO4DI~ z9*KcP=oP~57)^v-D4hg8!rMuNV-$XXqW3_dKQt41{r3yKP81gCmI5S=7 z<>?4|cb@2{VEd(9{;q=H$5UDW{oa1UpN0Lpae7L_IUHB6!!UsSxstb!bE5`feonIC zxb4w1jNzn!{90mJj695J4a>Q>4@n>utT*v^Vfto9!3VAh%jQx?W}Az1r5^zk&OvSFC6c`3~C`@2Ugq z8GiV_66jH9{_Dlq|GkH8pG41dZF_GFr00Ym-$iVpePUkC=z~=MoMBGyn<5`+rs>(0 z_9+APn=zCRP5y8z!UVYQLq~twx4tEpG%19h-^S6mO0mDGXS(icP5Y&O7xx>WwS#_L z*n;}nhfj2$JrwJNN5`p4QEt`U<{M(6m*uLl$Ow7Utk8nKD&#{hpNw^FM$7!Mx1qqkSaIr~b;!(j~) zSW04pC6jQUbzsTNO6s^zaxC;W>S~I(uIaV>)B@x`)t6kox-o&}Z?7}pXh|Zon>6Fk z(T|C^AI`3^dT%02OEl>`?m!~z(C694R8PcjUze%VaGzH^>+)> zpUwe;pRxGaBkiqmzqfIn(J*@>)D*oLy{&_9~u=W7GZ8hq$M-Tu#*&!ftY#nqm%#V?KR0+Fxkx4kfU*LB<< zT6bv4PN97d!+H!te-4PYb9@cI@BTh|+YtRYyG^4lG;ZB;hb{5~7DRX*jzD}rtg~4& z5p>GkrS|T?jwbtTDg$qf^|J5>_Bhw-KqL5hr|Q>-9-v!p9d?lNsd|H~E7JWGuw2k#Z{EwY%^lJ?K%9%OyVK3D09`p8`JI1-^s;iEK@UDJ>t; zbM|Ep-O3Q>KSqXLhR7dBE_5u~jPeTy46kAhyGMiCuB1Fie{rQ)nxARbPiqraZu^Gc zn+50x_ICz-{6(W=%ERW}R^#WkvY-lB@$p>1>8mcy=eRw|dmVv6JHMWx^}*}%gYzWc zcBCuUZ*VJIgY;s~n0;>mKW}}S@6rYIoxYnx>HOnaWKf&dpPxm)>ybZh`&XyfAwTW? zV&!EO=o;>`KGS?YbaGUup`aaC>Q6HThAeRINA<)m`@aZ#^SB&?uYcSUp=?Q^M3!X9 zF3DX}LMjoVlr3e;k|j%Ii)6_XvTtc2O4_%(QfZZzTZv>>k+o#a@_V1T?(6k@e!kD= z_4LoXGjrz5nYm`pIWyN>bN8?%+-688?hr2)VH*?J&wz2e`L=X?8={>j)mjlYKHSdj z?U;|xdH(0TWR72*4{&?j#86l_{tU_C_H#Jt-VbBv0(eD_}jgsu_mSe zX@7*LFN+rVno24;ZQ4VJ%Uc$N&w;`BKJ_$DckG$L<;8});dDjo_k4Wayf%l+8?fjP z*Yo4P<&&vg{Kk*12(6nbw4(V`l02a zv?RW%v-iFrv~RVA$3LS=zjArgx286dyu>frizr{W$9xKrhQ*rsPkiuJLUkd%EN9uQtZO+-V&&ULt>7L+K$0(2l1b zo+LS8iDkF}80(SL7xfg6>@yjbNBcQ@>*l)~!QPH7iYTXe?Bs!`r%10Bce+iWepnH& z;PxGS(S6j@O2N1DZ2Q&3_jt-7oNR&r)V$$D{d%S1jN&KorR+!==1+cRLGnBW;1tb! zCR2g0%I(I;5TAV8`l3wBoW8rgzv42!(=cuB{csWdjcZ!fOxmxS-+z@k>F>M4Z@mZJ zug#xxuxKatecr?_PuL23Kd)sM$6WYV+cP%1ogmjaUZvg@@rtdMLd(OaWz7Bfw-=oe z4-9?(YDQb|jSjXsyA5%{j-0=L>AhaRw7j3+@Sd=sc5IJx;0x&E(L@`3K~d}VHNiLR zS#@@6$UE@a#kTaajG4Wx&Fn8l{L(M|Xl-BE;j%aJ10l!$;SQHj_{-mBZYyOdx3blu zCmu;M_Q^lVdU9vPF)N(4T@Z(vjp+0;4SYNMK7LK{pkIqM`!x{<4cj>I$wMXFx2K^o zVJG+|`=4A%?-8pM4YkYAPj5P#`+n+(^H;~$X>C=e@3h{k1t4BqYo@Bz1Nvs){A`y2 zxyx0Lr`ol^I5ky2{{r$RF5Umd8Tx7V8*wlJa&lKxO&AEd=kip1JEH%TpXr>*haP7i znG`hz#&vAEj^f|f+P6CN0jAE{Hqi#pqoC~lvtH<5i#wNxHR5>;tFF9Gd{b^YSkig0 z?WRWN4agsVFnp3Z@aobTKYoMHWYx~YR>+s>uO3GGI;&cgFQs^Su1kOIVc^SJExV}% z+J4!)6pG8=>fPRC0W|n+^p(cbDC?DviEoGYIep?Yz7-Ztd@ZfIYghv3e7V1r_Rp;I zn)Rab-2I-tI?b0E^XFZo@&lUf@T2+n#%8k-^>;!?uleMMEnnJCC%%XJ6OR#}PV9%3 ze4gI-xj_0A-c~12netr+A}MX_?|!S*@5_SA7{eQ;&}{r<^Iyc zO~&n+=|kb(Gp`&vnuPsL$0OGW*FJOOaZJrkIyi#w-9viwcq3*}U(TnNvM`j=&3Z?| z;p2Qm#x*^{CE6P}UsTgcobTi7T;4zBcUo~f`TSQp=et`umGhmbyU+Os>Ym_yCP5!L z-;krYjsfy46c%&7AeRcx_vTax$HH-H+%DTG3;wcokl-&rzcu9P=@(jYz9Z>BxE5+;kq|#PU3|d#e#*bQ8MPaa3Hm+$ zB*Zxr<_UbO6!JJ<)!0W|-odRFoUg?^flnt|;8WB=Hp*Ys7X0PZG^h*u-DJUEwp}jx z%RRW|fzrdK3VdDV?`Ib86xum@>mHuJ?!Ca5I$hvXTqn>S_6vM=wtG3>i!MUF$Mpoh z+hGD<)3ZXo)n(f_pBo+jL%k340l-P-0=-XJh$BWtyYTeTE+;w8{E`U<>;t^6=Cps0 zZ+v{YA3V?frK@K!Pd~ewUZ5eK97JENz>bGIaK6WN`CW*v8gqm54W#3(po0zDbG~t3 z>1qJjtzA`k@K|>&Mfe9?*)*B+t(*3R)8-AaobP)lm9CUOx{c7Db=efqVLqLW;(X`5 z>A*h5?OmlFgu(Mx;DKX*R!x68;gL(#-2a|0(sQEu>|P~1NPNoS_dgJB&{pK~PS=gMC%&V#nfNpUe&f`tK+2C@w5*ckT|U2)^W{|a zok@JJk1Xc$%Ems~Nqnj=ZtWz$|NUD?AIg9JO_lro@w5B1Ao}37bBHAAy;EEj`A>@* zlLwQ(Jaf%t8r3&?=C!8eFIAVWxkCHo{VxT~J^_2z+iLZlzDU29<>^IoLVt%BP(6+s z^Ip6MpHizqD>lNjn7MdaOvb1m6(5naZ?o z`tCA1h3uqqz{n)>`wP#;))Svr&g|ObsMk1s(P)x$WhKGW0oL|#x z-bi00>1)+~9L^8DtA3z?eUrCobCuqJZ&8%bshz0Tb49E4W$>F@;|36a&Ko<@9?v7q>n8U0bOr+M1L zT<{&WdDZI^>eI}-7^?t&wQ=sVEbm}_K5yiC-LBYwkrh^c0N;|mI#&xJ=blMI?R~T_ zabt2JJ+Fj58#IRCIa(au|C0RWttUxCHQ+luYNKxx(BC6{7twx$MMpOaYvAQ1%{J$e z|L&R61bblM#_>DI?`Lg`o<;TDXG4={-yrf@qLT}rXJ5swUai5W`eQ*aTAwf9GYo+; z;soo*dgPb=#|2y?fBD+?z)@f7dWe|hI5u3JU^C?nx}f~f0FrV)M5?k*f9mfY{pIku1U^&Py6^Vzm)4TBGTw~*t(db#vG=c{fWXic=zynejiYrpA62t5DX z`JB%w`qgEkSKYY`$BX#%{A(UZL|!b$!Wr|jjVb3_IIxi0;p|kwUoM{^_{(V?g1?mb z3I6h->Ke}XH@tw`@i6)v0CGA{#Igyvz({zX5&6=Z^L4y=m-FfMfttu4*GAy8uNU}^ zMbp6qoa1;e>@VCe5$ZkMT&TBeD&ysf(u8v|@uAH*9iwB)(Q^pg0Ln|eB^*b~-zRvM zfkgVM(WoAnM6b7i^?Mg{9E{xb~gO|VK<;!0LZspfyWMPjG_kN zdn5C49D@p?I2y}H5yag`0l<%3VXPOkg>t{VgmEzEnUG(DRW$JpT`AD+@UldgNrd<< z%dl%tqWvq~rx7MUYt@AC-PJCJH19t5U$~O|V&8s|+@HVOt%N`can{HT1c=x#Hx8ad zc=46*dg51(I>_Z4y6;8Bn77+zpr;Y9JYU4e{{)F21{n7JT!isZABJuMz2Cr&i->yr9S52e)UM31nX`+useR_4$RQ z%J%d?F4r?VaZ1 zfngq+;`lAFq?@w`wR8NT@h-Z+9D{)f@UX9;r>RcpniVpeu!-MgY{T+sVn z2Od8-57XyzH0-{*65rxS3L(UozOGJ<>|Okqyw?5TFQ=@0v+@S$*V#J<1;Vdguo+Y{ zVj{-f_?Gcjo$y^-p`A-_=;<%ZHqe0`_i8fMB^!LvcD;AMLOgKr@{n+K@K5NUKfeX! ze0g`gwH0vK7?YykO-{=W0(wFNqCsEob|yz}+YeoOEfEbZ{c1Lt4W>z8`Y z36ilUUw!n7GGuJiSk=khOR+Dmsl6jmy^J-kTJ`c2_S<``^sd;0_XDY6gJV4#WUSsb z{blA&8PlxXTyk8gl-)g4-{m6YN>+udPDDGaH`r`HX^sAM@vGbZQpTDuU)o{<;unRx zmq)Y(Ur|DZ-B7%@c#(eD=_|bl8uh8@kQ&C*uQ`V+4P|U^__}e6(e5#mwXqOE9P&D; zaWVLs*w_Vr#lHU3Z|Al<9+5GJy7Q;o#mQK_)b&J*LfE0o8x!4LAimi4%%x5P{%x?i z#&wyDEuHt?tZyRbqim#?@jL9d4!o7W0rgLLAMZ7&Ey_8U{g9x2(u>-q%eI!XhsIM1 zFD-x^i&NPL+G8KT&a{6u;-RRaTYfCU^PhdvvEzli@UK0`n0oX;|6eui-W+j=-Jq#D zTF|q@yz?fraXzR1iEObZ;uKGdJ6gLt;XTXLf$Fv>?_p)Oa~j6S+v-GHy!8mrg?AHLRl zSBK|2c(ltkf0Vx*`gF-wq#wH6`aZ=cuN9Sb)`K3hr1Ro8z}n+eZ!L!W*H>b)Xg^`z zz+Skh2HzoAB{h)z6E7w?b3EPH2)n=u1%C6 z|E}tjRkT0SP#CmS2iRXVTbIs%SX|iUPkgI7{4F9qe}{a)fex%+e(TiJd<^`tEP&?c zpVjj#DGuLm<*Yad`08-KKa`#zJ-v3jR$0eqkVd!7|P zm-09LE#!XRH2!Be@lCyznnUe-vt`LmieJ{LowFjl^2k4n?}H4ks_~?9ZqE34AsI zdQ4Ic=bOGF0iF`?XO;;5=z_;BZdZ4o-U&y7@%Y_>mwR(*JpuvPaUFba2wWbL#_jDC z>1v)IXR04c=}!XAj3@m3Adtr|i)tIWoNp^T^KxfZWL&TITgrI3!Cv0HzV@ytj&d*7 zA#4Ngc+r;QYS%LyUGt{%{Dq#_9!9>CvEcVZ+CUs=yM78BKNt)9|KEO+Lx&&pMRB0D zZZG46Po?}Hd!9K-r;Mnf1z*oEkB+`4*F)^vByb0{^Hs+j)9^+72EE6?X1|o&e0hE2dkB+Nm$>>(U-7cMW;sMf72KW1rgUA`M~?ZZa1Cm#(4b|gdqmImOYT$ z;ZGx*b3NT^O?bOD%|4C>LC@N-F@%1(WwQu(Rnr5)`x2=TSNlZ^cI9SzbIyNfx>aAw zpFMfCrxH;1=kXUa;5%u_09r>Dj~h}p0r+g!+!jONU;gZST2Fe8u3Lr=M6mu*uyUt3 z_(zKk8@d3!+3-l(CravSzk}o&ReW7U*d=aH4)p_zv*|(mME8E=gp++Y4eE@MhW(*M zGkE(dj2i5T-+y1N8l`VCSH};cAP#x>HH*?MT6e~VEavTGl`TYnobmQF(HE0$yOKXh zXgzoWowqfdY2roq65J{2{pUI2nYYVJ{2k!We|<3zwe^>=eR@$E6wg+_V1uur-0Yyw zTT?)LSv~4phIX1K1B$2^OS^{EvTRS)V5iu4vgQg za3%=owaq^IAmS7swGSGWo;W}Jy8Qd^G8v0G5;SekV(33H(o^FB_9N!Wf*pV3eZq`6 z%QqnoYSt>(kvV8O6WE) z@C5qlVvGAQM(!D#)YjlCUx&2pbOb06EGz|9x20q%b%d|7b!59Ul(Wp1WFd<227v{tA z^7&;U@S~e$KkS!bU2*p5q;cc1fBHg}{#uIpacWV|S`XNvfbErc5!cnI%^lwz@!}&Z zpT9Q{*ByJKQxmrj{pN6PRcFMF?Z$-cYmfAc)kS3t&-tfKFe^p5;jL89jKll7JGGm3 z#o?SuMc$jhL_Aj;A9KE+IV(87d;<86e@hx`fPU)tdYF?o#)m?8H7x_Q>vOXwHhSm> zeW!(QzTvq%t4JID1^ZyLk3?JBw1wS&-(OJ^_1R2~dDw_?c6RNj$%ep(&z4{RrHOs2 zw^v8{VE=1$`^Bc`)Ux5`8Z+uK;VF1&L=2N zED2O}r}P}d4c!UL3J*3T+}qP;2-$@eeH&KM`f$UB(jSyQ;pAg1gb^2K55H9w6Do5L>h>f&&}iOd9&p?Gl@3z9R=5obIL_EE`)=!8{rXQkN4)npQt54XeKx2|)( zP6a)AxjQ3Xar=1B!<4V9J@v1_k-?6CJHhiGreIkNx^9{dw~IIJPH}x^MZMzo+ta-z zuji@6jmvFl8O-C`HG5`px?2vKgYs5u)i^%jKM;&@-C2c~3vIEIr<--{$8kj^)CK=R z4~Pe@ZM&G`oQ~Z%-a;=?x`RH718+D{Ab@pN_bpr>+nO?7@8D$& zYJQRD&khpm8_@;LLHSu{g*fBHM8Urn#ZKbsuI&Wc&>h9VCwxGL^=g(t#|{_#ek?T? z`BRnwfJQ0;_C>D}ZN5#w3$X&$_Y^Q;tbq49v~LCoR1$52W_^DT8wpt5_LTMwwW;AE1FS{VxP+-kYgFW1_d3s3jmZP z3-qb?!gyQdHIAq6=L*7~^cMKsEd>mvZE%!RyGaVdztS`Vn$hwOxF1%FurZueQV{1t)JQ?}1HXU`@kw7&h|US1 z7_i4OVV=(Ismf`K5%yfJYXvm`ab1pJH+1o94n(KSGUu3-UdhpX{h&*fuG2M8lkkd7 z0*}i-xc!YM+IkxsK>jCM=?8ik`xfc`Jl|$k7v4U#xQmA<{l~TF&E)U0>?WZj5yyB$ z;lUz~UZI1bj(L^g)r;_w#kHU0f2Maf=Xy#G9N_)dI=Brw7V$&o4s-zg|MN^6LS^Gmiw}j%$o%L@QQ5>M+FxgQRI9=9!>o(xw z4+E4;5Pv9Nx7|$jt9dytC)8}$r8()nBY%B8#S!1n4Q|>S*k3Y9nbMCP-rAAmPx@oL zk+9^=P$+=)W%K2DK>|DGfAA>Dshc|(CI{=27`@L#clYt^N%SV4dR*uP|9m>GDao67 zHS#^>&tCQ}g!0pSbmQl-RFdy{kbm}BRcq7&dWIZ+X&MXqi^aCx*MX%6a~lsJ{qx%~ zif<5C84MjZm(F*!%V>yRiTrMB`rIi2-Sc=%A5+9DQ86h`YQbN)^EEE`fWE7@WKf*4 z%P#D=1o+`fSvKv%*%^+*MH|>xZEj^t`(Dbn#l95BjLm;OkDj}Fj*>3%ulseg1;srB z6u0B#2i_;2way|w3yZaw8R*BT-YO=*+wY(Hcmva3r^(JDPK-Dmrx%a&S7y@G!VKuw zs>iIMrOqTebW>BjF=8|XZ}sZrXT&Y&CHq_5rwOf`M-mEv$q6&8I9 za<2^2xfcpte{<_+M_^dy^Ig=xUg`UBKoH}@vSB5yXWXi+yV3gV!N#x8=((;x`+lh* z@W%AzZZtj~?|EKx16b*58@LXr?0@7K$=Ut$O*}n+<7e-ay8@@D?tV27dJcOy_J}L6 zJj1Z28T$2r&gjT9h-(ehrwna|_sx+isza5)uhaZQi_fTchhuPcBv31-=Z|M-*YT3~ z?Z*SZH#6u%>%#$iZhxl!k3OWYPU9$|w$@}VrT>Y|jsq4aruVb}dVetcNbhm|KGu2A zzPp#(ouyR%>B({Z>ASwyud}{&0$u2T+lllY?YQQCU*N>j?q-vKSx*KSZUXL^$9j*( zdg#^C-BV5=zJLBhS6d(JfF9j)htxr@M8|XO%D^|P`|$2rpgVuq64MjUsngAHJvXF3 z>(h2PohQq^=I%BJ^yEkPqFw;ENdvA@T>YyyV>tEO*V-92G!7gqdv~Gt1qWa4ElZ<* zX#YTo^m;JDI-JH+TBOeDfxzUab6u$XZMAbY;~IoRGrv z$nJ)V+z_`H81VJ>uCO$B%0FkBipU4+EYm;JXr5U(G;yKl`dGFGjtb}Xlg+r@$~rrv zE71?;nq^ac$*-@P5dZ4=U9u^CczPP%Gy-p1VoY5V5VyZg4h3=h89geF?=$%5g=!JsD0>Od z&uuo8+us(8VAhe|FoHg$!uJJg(Omx9%`lswKj=*q{Ko#{+-}eBj%66qQ%BH?OT?Rx zrQGh@8IR)m17Rp*IO<-87|^dApgvGJQ<-DlQxpSz z;yM6$E(qNOtlqhc*VpEnux@cahh`zYW~Y!p%19_TNJBU`U)QG}&u{w@%>iG0xlo_# zF1SC?vM3=w*}hkxl}|xD(w&b2fMKr%djCX0z6~AAL;4sWAwRN-fDw3_l)kD|z^V!X z6X`J_eHw)ez?q~ju*V4sU~oQknxL;I4~SuR9fbVJ7&Vmddtb;OWh2mUd6 zd3?S0qoC(adEDNYnuC1)+8lVE!~pNv2{;0yiD+zEajYf)jh7)DpUUewMBRn-1Og!6 zmIZP(fzg;Hl-^Iy*Gyi|4Y`~o%0_+?g*iYC0w7<80C{)^q*+JlP2}ZiHAOTJTY>cS zh~~`$CduXVYC-en0_o`xAI}D^lG7OU|G#ujB3~>omJ{pYYW#;hv0gDC6*Ua)SnMG`gQv=nGv`FYO)ydd6}@PZg$ za=HocIP7=H$7gdY202c0{43{wC8r;a5%S535nmrU!l`hYtO=z*myctzazu;cSW`~# zl;afn{93+(3cy~Bq6EYvDnfj}d$kp(jh5f#=#J9^lpl2r06a}@065lwMiTZ3%>+BQ z&lV);QeGkK)C_^%EMIpW@T3`o_=PKob)DSaSjg#9+XQ}NzHrBTS>6E5FEW!T*C40U z8ie}4W>H7N?rvDgabEBWWFRi=CfM~6_i-%-=$EnQ(Pi*^D(;*w@C)@g?03y3j<-4w z;pN^WPeg~nZd|6B5C0k@_<^6Hy*Yh9dq_L--DZ*OalY^v-Ryc zz8>bq<#v1_^y~A#LO)yZi?Q)On0{6c{NA5$aUAeA`X14(uLdX(mi<|{gRqaa5|8(v z@2JiqKd;jJ0y+}*FishU8v7aEV|hDo_79j#v}ebw;e-R*81nixUf^{BXy+Zdyq?&l z4V*t>;9?z0PYCPD+v8y}i{}^IYt6Bn=`zen*srh(D2{#q{(^r$WqXY0-|dUn$Vfk( zy_VD0m;5y(T65V}XNs3sJnDF#;*GR83v@WzRileQ0q9M|8nmYS|>ORi^kB$x~cEZ>4a(n9PxnQF9toiLfDvNl1ymxre`O@ zQ*Zn7bz=3tIFTtx%`1QAs`FY^=iFu2tzUB!zYX~bdS8XA@{U+F&_~$KlE+l%m zof_AF!oHO6R8Oz@Bl!C8)%V83B+qtf+6ip&V11cCoR8mkJ5uivUAm-(kDJ+T z#uQMw_ED*Ug!68{=D1`1;uNAEJuY=5blE>3n98{ul=xi+cG1mSZx5`BbPJ*NZc65b zSZYU)ep_%61=<;%CL?-f{7rL;dzVMJzM=H0jTJ>CuRyQY36i%b_lJz~zorz`5`F2* z&W)7+^x82#4gv;6PbGTO;x!Mc{rh{D^Y#u7NNPjrt4EAAC$!w|$j6(zi@Ph;6T5$z z2g$SbYHmsS&7;QfelZ(l34?<702`L_`;~pYE3#>v&wP`4h|*`T{KUuacjY*3qVMZv z_aZqy)AJOF?%x=Vtv0%+=UYF*O@rtpBI2^>g)o5VuLWDo2&4P{;&$wX-2fP9?1v-^ zc1ZhkV0)s!oK!{x1wEC>&|>`V)ZowKf;r3$=s)Jy;Q;X5>dK7?6>ezr{CLMxJiq-6 zJQk#XKc0tB2=6`O9`Smw=nCI&%+fI6_T*GqTaL!Z(#H~CXj8#1-?qHM<(bxab2$Mf zSWY1SWY2_QgrCPf=JZS2#s|Gs2h$yRRQ^4Na+g+IZp%bWW2D=+7V?LEh4}&fJy7rq zlZOfW=hA2BKBRZlCr66?O!++!1ACx4&|BRpBE-5&Rd}!4E`mZB*r^{dlfa@@$Oan6 zf8l)dh70kw&tt*=EtB6j;S~Y3z!$bc@EfI70{tveD8J1U*~l;dBhW+Xvl`IT1`G5` zj6Pl-ql-{R%?Fyd7V0^DU!aZUaYI`kNMYQ-3lQItYnZOU8MB0XTg&}qtew1EPXQ0P z2>DWSKj5$KFQ9m?btE+#>EideOG!=8U#S?dJ*f-CB9~)_X#(cL+EV&ZdHw?;L1WR$ zF$ANQ=qK{{CyYqYn0y>DSvcO5x6gNoK=+W>L#KC$Kbrv9L7v}APGd6ibWApmGvxSP zj-q@_4*dO3+(@H_=rp-}F`tu2r%^)r^i&C#%8_?JXs!m3s|lp1MSLgaI8lzGTuvgN zcLR{3t^brS)+_SyZUvuMKM$Kg|H~)VFY<}yL^&dg8 z`w2z^fB)|~K&(&fFBpaYl~0r-@{9c`*29bahrVJup9cStF7k_8_RD|c6VpY$f6I%sSfAK#@wtiVBA+NvjVB=fl%u*FkIV5r7w|vhQEaa$Po$^F z`9)f+mnZ+n^W)R@KWI@8kx!H>K2K4e$S3BD{9-@997id5-z~QbZO03=zua!Eoku-_ zeP=ER@dXzI`%Y{~U(Guf>u7jOqRER8IuHPx%CSa{A$)-R&-)}eZT!Lh$}v@5ev90$ zD9O{gnFL=uIUOO#%eg#C;&g334Y^#JL+NVx3;~;G3F3efPLK40HD$( zfj+}62KJYdXyzbJ;SE5%CAWj^>;-;x>?TtF90O`N;^}Te`UQAjqStB&Shq*OnBIcl zn8pns_N99Z>BHsp>X(AN(}qGnN46LC)0)+d;qo*qsfQ3J-Bkhu))SvyIh{3f21mOf zEsn;;)Pp!z;2#QsScj_h;{5MTs3Tzqq%^V+=e!pBX;3WnDE6CI9Ou}&o*ppviTTBx zIB%;f@LxYk3S-}MM z-x$MDBSYxttxINcKI1)Z91Z5|#(;+(JwZ2#VLgx{jGwOk^m+R_S7~w_lrdvB<>!P} z?;woYGwm4RtKB++-jz<_)V`*trMw^Ol@mCs-n@tbg!!&4eAm%TMd;`E7b>{i+Y5ej zEKmsJ*mFTS*UMtQ4%eq_;#E%1U3i$|)v!#Cesxux|Hw`{iHhfaRQP?t8>3JJ<84Z6&9NJzT>3!Q7@J zPyd}ykrU4OS_=9(#!y6peE_R?F0b9jCcOPVc36HR{kgLv&!09%k)z4a!I&u6r_fuC zPyy?-MfO~;Y5hL)d`qmpDcx%xUe5t%<;>vpA#*H0DZR~fP6sOs^Z#Bi+L%T>)|3nq z*4HsY{JdKU!w$63I$=JqO7Q2j{XFtqSYI9$;^@RmAzyC;)Ij=N6?*Xwd;hvKr|;qR z4x(M(Vt50a1^|FrYVRgZBuJgnD0{6!?k?$S~456hZzkUp!9GF|$z| zxb};{7nFqI4B8}LppRqKO0>&dfo`QL;9N2rNVhE%^0Qzih@K_4$F0W;bk#kfo@bW? zx}uAKzNP~1qHadH3uQw4k989G@8RtYrI$_<^8d>1_Ld5P#$~WPKa<=H_}oZs;5p11 zLZwau9+%7CLt>FWm&5{TRYs`J0|?j`JY}Mn$@61~1f4FYH|Pp9-6BBg5d=V*MT83p zfU~*_*eI{Jy}X{Qa=t5aK01|5{Hk(#k{tWUak3nXzYpD2e9^Z%uvDO&l@{{OeVqW=Gu7v+liBL3TdV*0-*>M82|Z@x&2^@u3y@ozbC zJc{iR2GsvMuEh5JUwmTyBEML#nEo${d?NmvFVg=lUu=)~JVpIP6w8Y!@`?0+L$M!3 z`Tvbil=pw}iO)fW3&Ob^Id+!g2|4mG6yxpRamus*W4=)IN#jq{^S`xMlp~_3hbT`( zQJ&b(BHzC#=9f

w=XuT_-`27|zqP*W``2FQoPGA$XWaXo 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 D-KJQK literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000010.vtu b/v0.8.7/tutorials/out/solution_000000010.vtu new file mode 100644 index 0000000000000000000000000000000000000000..1f0e651f7d1c53474f43e3f6c7c4704275285482 GIT binary patch literal 18977 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

W)8xVY)w_WF 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%0D*eBU~_KMc+-dpE_<+ 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

w4-v9R90$LII=BrpaXg)-H8v9_C|{ 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 CI{cCV literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000020_celldata.vtu b/v0.8.7/tutorials/out/solution_000000020_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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

{?pCyy_=jQ+^7Gk6_g0pK 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%0ALNr`5+4~J5D58i*0M&;^%a@sTUGrevs z|2>II-?INwK67IH`S1D6eeZgQXd5N<*Mu*JdM+XVy1SCH9&piK5x#io8IRO%3*O}J}#S3YkHxv_a$F7*HOE8Iluymczm615=j@zuiF z1ei5-_Hl~ukC)!grgRs(thqsUTS@CGDBo{G25XVuPHSSD5nbvKgNBX%!}8h!!e&YD zuaG}3ML*_|Jhe&-H{D|0yX7221~_jOSUG^ov0Y;%Pq$@x;v;$v30+QWP<~5ipBPPa z&!{1r$ezmUQgcc-=h19z&|*LPm;(R)I(c2pRddL9)K1&i2G}+5mmRe$L&@B46yIC; zd^Mo@|Da}3LFwec5}L0+Ywm>(0&$7W@WbSfPf&CTtv9sqJmCbASQHiY9)qca2zL!#sxlK#zuY-c9zE${izJ z#(z&Lq(rAJ>1o;6@%Lh+avCn=#dmN^Z}a;RL;kw7r*tQ~UwBjx{)@nhiA1-vN)95_ zk-j=b`c3N(rBXelHO^Z=^tlZK>`3l*1lO&C9=N}9DB%>hE~AM*Rrb`FaPpA57;(@) zj?Kmp{2kx5D@-B2uT};|7R0G92i+%(zI+iKH0D3+q7jK;KGUvKFXFekxG9Ek_5KIi z#5eO8&fmjDvK(~KsNZj=u)vG&gM93GKK9pkU;x2;cRG{Xd*^YVuU9-xcj5BDE{o6+ z;ya?4<~*OcuDBi%^pe70bcpzVH0=hLe|z+Z_fy$DEO~!BS&IfZoL9ENYYA-kVL9)2 z?&kaR{&Sk^QqFI>0@Vrm(2g@Xf0fG%-k&|`B8Wd@7B-&j&+U!LchKu?;M|B z>~A5&^FbpDxn8pX;d}Gg6PBDlkSpAmbGBIsr<*LqvD@Ilr?=(`~J!cbq%+on06#=;;^>d~5vLFE39M3j@eFY;Q=GqB z%@NWW+$0APFH$!IOymy`zk4ITcWW{PyPL#$n=hG#-MixZZ%5rN=pxZR6Z<7BQgeGJ zMSnjK3HuYp{$U|TMWQb(7RDFf2SUH>bCfzF^g|)K+^+Q0D^B;e6!PikAoRO46X?NV zywrQc_12ETHURwa83Q)>{TB;(bTK)Aer`8)C^(;0i)jk*PLg1+={5m}trPUiCs0d5 ze?DLEr{snp->fglJ$Z+La}6|{!j75`O$@RB==T>*262Hx1ZoE3M?QW=8CZJ1k&pXv zgA8&>zP3z*=xPHB>3D^JGk=_)vw+kn^{Is~AG`e9TPk-wC zcaF{VgmtgrEyDQuB3>Bpzl~hN)A!g&EfjHRsn8z!j-`f+@6dc7aLnIGJssBZQ)op2 z^NwQ%NPzo#CQ5q~zH51a?~jEqet4Yd`|BIl6WR?j<^C2n?&NWb*K;*I2<%&i9Fq_R zb)K@EFeAK}`}tlu3oQ)K>w^wYck(rTK!o+o4?9~BK6%xj`{AOr2M++}XJl7-edgyO z`~+R@{u2!a=T)}ZaJ_^6<9I#adu)UTf$}N##2bz83VYq*^Qp?&3sQ*Iy0Y1U;^Q_q zR%3+@=ReHa@OxxSBJc3;9GKer05663gCFwb%Mz~}E?&zjyOIx?YIF=52kBreY~iARrzc~Dsa zhD4mB8Dh`p$Hx?OxSz@S!tcu(k6Xt5JriG$Pw6*kjn5-Iq|}-F866Xeo&f7pIcL#x zU>?3UikJ7EQZv3TFe~{N|2@{dQJZiYLFNh%h3DSP(GLbIIXcM7>&bl*%Yx>zC zV8i*=?fvu!_pQbB3MjL_!rSSDiAs1QvEP?j$@Lb`(csU2cs89(#yS61Ex2An-{!nM z-t?ED>&1O>ftVfv-^UK*?P%ohYTnM;*QKKe!*`;t?YQ5ILVEG`DYH-Hb~JbP;`uMz zd1V%*PdM3%w@d4ZC%AvjetL4dS#7TH`NH@@p`E&y&<}&)yseLnr?=96$NlW6KbgOO z3K_U20CJORH{OmX7<+Pmx_Hgw{z+7X`1wqMaNj}5!Z^-0f2eSM)KkNo|h}gGjv76&0*=Vj8UVvhO zKW(|tZwB2E`Wxe5R1fS#iR)gQuJ_?|q%YK=Z~7CjIpo$S0l+!^QC;AFO&9#to{r*z z-bU9c0hekC`OL&@ob=bJ=yD9gE*H^xJRrmOAL9A;9AzX!x{D`iAOk;%1}vP1=q~iz z=PhVJ!}-rtR44SZrU>#KD};V<9+`z)XO@84DMJ2x8z{oTy*fh#epzn;2V4~L^XMwj z{U!;1hEp+Nr(LQb|3%#}=mc@xouVSx9pNa*yWs62dAt~J^u$|8`N_r!euXR%^fSb` z{UUYKkUNXx=ID!pyn?caopO2%z&?1Iq-P_RD+se#;s=Q1dJdU~{4`n{@sE-j(2LNE z5ss!}194c5%iD@_b0VRyMPkUWisi*(8K?Pi7|7j4y{0sLgSMjT27af5XX{!WpmSt{9;$K~8z&__jnFA+;beO?`qb9dp#1X2D> zl=EtYoU?&^nHPEmqWtK;?C|gia%yE%uG1o-bL6z#4qo#A8!h)k?yp?$-$-u>+5I>F z-?Th`uKo{wUfrPO{Is(XbG&xq9c*_CRxO~q~UfYM5K@BQj|OYr@lUoVq^^t)`TZQB;l#=RPy-yR=&r=g0~O)s-Z z!uN#_&(4y$|~hRHRcCFAwlVLa4*(Q z!;3M;(QkY9+0)Y&-?a>ibZYmaoTZpesnwod!8B4ZEgLM;RR z=f$Jl)uw-D?|Lkly6saLlaz%-d47RE(Ltt1a4&d4*TRDvpqHhbCD9rCjlHQIEggNZ z48Iq4Xg>UV#&J(zQWN6tCXz&)xy5ur;ELS%#=3)hl4C}b4T^`PpOxx&T1bvUK z5p#DdaaOA6Y2}|&Fo1rnd7|Q`M){ZqrEL=a}$MbQe%;!Lpbn5~s>#*kbt|XTdW^-Rx znmx6cP3_&pHo9jqvs2$cYSXhaw*R?9z}vT_Z0{L|qvdW=<~T?HZ<~f<_V;O_so|tz z<}|4&@^Q{Lb|k|hF!wcnZ{_L5uHUXn*#h4%ctuoK8h;2CjMzw2I5v!f6@^Fn+F`H4oF7Yyc z-_LeU<(9DVrOd6qG)%UrjD_}TAM37B%r13OYP+IYG4ox)-Z+jgX6lB8i+&F&Vd`_W zLqf_+@cWY+GQT(!vzEihI*%G!%m%C-JEvRUVy5dBH#VrQh#4Es=#lrjh;?W_tI7?2 zoO|UuZg}rvcJs{?_k8lFuz+3c&^|IUppW=i4S2BYEM{;h=rHpUjQKBM<` z&RbQ)99!M8U1(6my1mqVJ-&Gnvt6LHxoCA63)eg}a7|e$eg{3F_59aT7MN}^JPN;q z_~(MD$wvG>&9~B-8J8jb2)HSoTh&e6V<(AyGm`$Qcc-7<*qp>)&a-mAG3UAL>|wPcW*%JZbZB%D ztGJ;QFlk;9Yu{TXG{CHcsd?8$c1kH`t@G@p5yOjFriW{ePO&UzdB(TT z_n%$N41V7|cLsjdce-=y{Gwv^e!((FuO-E-m*T12Npp(Xm2CaVchQda{F$@($H-!) zFuS*fCek?D%p&I1@|F4fjYZ6LRg>Vp@kQ)M{D(n)hM^cX6Yr&@8L1cLYHE;c6rMoMexr#&S1!=>CoHfY|sgKCEhS> zwtF!<#fE)cGo+XW%x{y}9QC%Pu%Y2jbTJD`Tz9C|>=L$Nsd|Ryo)VnLcl=y?tB3_x ztGAh-S;U&2z3S%psE8F$IC1#^+Na~zfg?9(7qQ2WPEQ>91K%sFr2A;DE@cXL4Og!C zEoEUE3F}HKabHgJ=8}cAQg)zZ#+ky564t4u+2`poC9L$ufWSkya4%nwa_ggYCG3v# zImON`q^xuNf#5{6Gkx=Mzq;c2R^QHSsynd+_nc;aDM~A0FZv$sb+@d9{f?>6z8hG= z2HrRjGdi|}Io3S+Jn$k8VQarm+bt zXeeS?cjj(;w6T~KnZ8I}ezllA=zr;{QI(WswYQ#pFjdN$wXB&IFiy(0|1z_lHb%DrMW&F4?wS2E9y!rRuGutk63` zHFTkrB@OJ+Iq$3#_cFGe_%KS!E~v%tz7|!?CXYxQPfOUM;+X>tEv3x1f8U4Mv!yH}&~HntKP9ZgR*M$vm8I;A z)G22)%6~K>Wc`l*Quh6Za#uE2%9c&nXcinNWxjvAO3sH$S?|?TCDj9@tc@hquL#ez z>SXxax(-s-F_Eoz^e@Nz2n*MPHd4fz2zE{?`KJwXO?5)g~6q4{^r3B!81x(`)f{a z4*0I$_(AL1L7ru}v#?`SZcG`w&^Oh6UyoAenVs^neq||p*z2zA?LVcg-oUV(!qPJK zyLjZ^7U#-X!ONE$yxmHfQd?xhihX5Fqp!<~ zaUDw8mcA-$&tshWWS6q~crwP}B@tuudX}+O(o?E~T*_GY8gI?n8B%t~VNCy-jZ*gb zsfW7_^1m?t()6GBy^MR=8R05sWo&4>4{6)t%GmrH-q-hjgx@{-w`TY~3+2?77H50o zez77o*C)7VY}E0Nlg3Atv8!i(nS7}(WA$B34n3Mu&JLd+v{5w=_f2J-Jy12G0{53% z&(%Ft#-6^uD*g4MjCHDewCC`$a<+H*o|$_2)>GWU5I^SL5K{?fR4A@WBB8(I^sXBCX|rnS=j{cyk4*{a=dJx60c zW$WFhfmJZm9~XuUh^k;K=J*)JEynNQv@0{{)&=)dE>`aSbq@AZtO|0plq*;V%V)ZZ zODovs-Is@d?vH)>`wBO0@%>jfUn#;OE<0e{NVG zz;`ig_U~~0h3^gTb#K{Zc_mX?IWa&bs*;_0Vg0H50GuNZy00+89sB+@mM6cz!hN85 zjaid$uf?AwpXN0zsbsnb!q#Oz!T06|rZum`eRKz!?rGn43Fh@}vaZ!4|LqZ0_2nv+ zEb`jq-m1HB9oE5`VJqgg4mdKOeSJ zihDg~I$TOB?^MNdHmowP=}^V$V-}vjJE)3HQFTj{9;sx9oqDMlJ*i~tBJQh?sHkN4 zpl_LmN)@xZ@Y8*RX%+i+=;wpGu9fV9lkN05KG1s*8vglgB^#n;uRFY`l1=z^s+~9P z5qUMFq4t1UCB9?Lce!O!$?}^@+m2sZ$!-LVahi6rl6|>#%y#0VN@nCUGEB z_RT-x-hjO=bR2N6O6B{@DcKV%nO>1J0yrzoXxi`{oJIXbwjd@zgv zs%Agl+ueWDSjqPOxO&;eu!{AY=rLQ)2nZMnXS;_X) zKQB;ItYUp0UQ>IvvWjWFuUOMMwTdkrd1!sfyDFye_pD;zx=J?n^7Dvwrz%j3z%ORI`aS{sC)_RI^sfKG~o8RkOxU zBYjsasAjr}X=ek+RkJm#n$50e(z$zf_42~+8QF|e+JCH?-8;E$o7M9w z_BCPYCf`q0OnJoRQO^e9-oKu)`k}k3Su+!#Gtv91+5RIj+T-6>vC<30tp}=Cv%CAA zT!|S~%`8{{(J-4=&6HlG*!w$GvqeVkL*2$!F!$bU9@8{BJdT_k7OMjwV&iLslHui02w5dmQoT zTs5=b-^@PvQZ-xO*D7qkmW-Wk>3HOF3mH>5J7aqq{7k=56frhWBah6@*`lBB0JnUmVs`35d zxqUH?)ofCivwu@BSFx#)lQmY}hX0dxF7m9bV(-TO%)WP`8t0s^$)1!|GaI)dubLNO zy?WF^y|x=Fndk2+hd+6hO#0U4`Lsoqtj+byS~a+@`NF{>1=GFNtYVe+W+F)bq0;@8$+?$5u0|^$uMYEUIQBCq@^IJzLE_{+ZYBU`jQ6kUe<$ z-X=2kYSHAFDUH=^k4e#<@>{5%)K@B-I>^{EgN&5xxR@SG#T4$S@ZE^o{Y_3y31y5 zGTy(bClBttQO&NkIpUliQ_c2DE*J+#qTMw)GvNpBqkOzI@8#|ONSAP{*9Sux>zj7? zdX$=s)!sRuUV(ckbHXHA&5Lo*keB(!p?&asl1IJTzrT;~E!RE^-=l%&<(1RIwPOv7 zJEF6iJ(RKaZ$};r>|Vvju2`wPvVAqnIBXF;^}dWPj&JTiSEYs}ebw1}HC2Xn!h=I3 z88W83WrNL#uQF!hH#KGAaT)WQ7xre~W*K|Zs%Mw*GcvX_Vf*k^@ITIEPczv=5*6&TigDx^9!`Y<36otck3o&&1cpJwrDG3bF42|MdP`= z8LnGD2K81^=Q-@;XVl*~)rlR4*06hqXSJPg%2>&Hg{#p;)$BshX;Tfnr|EYVWW9ST zW16iR7jFG7V;z+jE!o|vhJCFs|C-dlhSly4(COT+hACV5J&idgV|m>zo|vALvG)}o zkLJOjjR!jF_PQfuOCQ=+eax4!1rA%C)?Jjb->vWM)_pBwukTFWuJs1**~w(R`1Rw)6ZY$-A*N>{=83GsZqOY=fuM z>8bl_Shpw5TFyNxV_PS`O!??5V_r9&EG~AJvCqMlx27$Zv6si{WB)9Wv9dEy^$r){ zUeX=a{x1}2Sf7tYLqng**p~81uWwF}v5`%z1CMl)v8Er6EVF5j?`e*m$(^Dc(V${~vt*R>7qVQ=ScA#JP+xb#e?S_oGCh9Ed)T4$u zIt*TOy->z_{aih-g>Ma8yXyU-;(!{qrRgqb{RSC3soMPE2Rxs&D@ij3!0!ELBeDm< z@2dU|EqYEtx<}>pCiq>r;=@0ln}0z4x@aZ1ev+{n2QvG7?<-^eG4r%$u9C4%7UABP zqh)MTtDE~82g+F610F$3JIYwkif@_&o7Aves|nX)>tLsc#f%hl8FOxK8)4g~id~vN zGb`o_;ug(gcFh%Q*xAOgj*6{o*s{RU@flrfSXrA;n^R22vdpHJuJx;CW6N*dJb7Kl znhlHJvG0nEb?s#FvV|S$eW_kaEA*3o%7Yrbd!t`9J@Ne0dl|cB7*rK1k+H{TKV)B# zp&jQW-w7X8#eOx*|9jJ`lFewX=MptU#uhf4Hha(<8IxtD*G`PDX0wkBm@|H370XI$ zvga+nCu*&L?GgO>=L##5BL(4lpPu;t|2OsdpXE-#!?G6;v%TX>LCGxFAG!>Bp{FKxEM7}(o-2Z>uA0q0>{gvyFRu@IescauF@Jge%Im>S zEc9s;0XGUguNIppof@FPt2!3uTTkl-&By# z;tyED`tgd8upwgkTzLbMurxhE&zV=Sgl**yT*6L?`Rr5`(&bB;w0GlrP-J3?Xnm2!$SoApFRRTpsOICpF{4duz;bNVy>2 znk49l{S~n10(#RW%wnE^_C|t#(dPwB)1nHJuyNC;b3Bv$k>fJUawtexF9SbL@0|9B z(^_A;;7Lf>tT9$;RH_Xf=G~E6g4@AORJoV*%Ro2t2%G74N6V7ndo@*_@9lVc zV^P0*7z!p~XZx0+!X<3lm3cmdA)E8L-!mtk;psxQUD!?hF(1oz5-!)en;g`;`J3BxSrFF7u)l4nkSy`PU+7z zxsC=TVU_o?xPKboSMhrG%TgRn{K#l+8$xvpMLakO&XaiZ@*4EL#qGqqc=3ABnP12K ze{WucS6sr9+N+@}kg!Sf3x*OVCr;&dug3dk^auTXf1?KJHDBN`jN~aHsZ$C6c5-|| zxMj31_xr|#=G^c7vuASryxFtJf}Wcas7mkLjCRajN^XYv9XJw z^z9E0>`8bnvklk(^ShLnN2L{t1ODaKFc0iLUU={Hf6_>X{%8!$0QLR~^0?eW?#KIj zEzaM2L(sd_N|3kTDB$FQIb1&I%Y2S5>ySO{Xvfh=C1H2>1ArpY z%Sa5&^A%8!suT1{K9ES*WIljP*gLVG-4iC1zxg_$TnY4eq5rj$fHU!y5`Fe1jj$4y zQzw+KXAePt)+a%3Al6^#`Cr`6-ye;+{`zl&Ilj?GH6Z=Q*+PA~lNj_YVgtL1eg~0R z(9a2g4^SI~N}^sL4IDWw9yH}?;@Tu+`}NGM@6dj8XnT#r9aq^DL+a$dbac|LMEy&WVU zFP5{VNb_Xi%j=nX8`6{O%j=1=!RO5ZD6dDkpZs+IU#=%dxm>P~&IEt|T~DqrPcQdh z?x);NSJ94~mir}d4{|=eZIqw9{^WKz8+>{Bmt2RlwT5Qe_k;XR>~d5dnER!j=bU|Oz3zJ?@gnG5~h1Z zz_()m*n~*%hlutvc}FB+`^O3Vr=q=RQT|uV&$YK8-_Hw%_lm!85_X> zYw96Ef2*^AgER#kBhuOrC<6&IoaZjUQ_jI@*zt&!`Q)xp5M%>YhS`wbyCVDUu+&3)9 zFPso)#YsIm-#oT8#~ItGMN8N+HL7UDq5X_F?)f;40KR5^bB zqYFnco_4iHMiO?s>?7w-*!BYj!92;%htu9g3LIOEy@eXZxH)STm*1c3$@#5fsHGtu z+$ogHZRAQgEMYb4ggD8*UWjvBY+cRue`GG=xc>Di6hOijMV{jMzZ*ggLc)Ij73`+7 zUYvicQx8-e<~uv}F_cJHZi+1`9^+I=M-*7X;!oIlu1>-l>g}>A9z9b#iPhNM6{)btZQfBlWFfdlYS@3muUsWx`gzPZ(hBA5b)ZF8OzDu(V<1} z3Ef<(Oa=pERvzH>qdu#hdLPhNrawlYh5a0?^dw z(XI)=YyO9PdH}yh-3_lYldu!55)bbH-7X*rGeN{xj@<&u-qilZ=+ZI%2N_KuT(f%) z8Xn5CZ=({`!>1e5Z;-#ISNJX`zGT24MM6WbTbC()sZaC?#57gKR(}IM9=G&^xGe*r;Br= z@PeX0y!ES^Fkuy~#2}9ORLA`h()j`R%Vqp`{#-Qwj@?gsrS9z}5&D(rAOc4DUvxrXNWo0Wr%5I>FF z!u8u8-OBYI{}$$_cK(9hCilRGUQoG^ug403w)!a0fhq#MMdZJv;Q;!VQEPc$PlmPFUiJ+J4B=Bi9i1=yW z1^xrkE_VZbBN79t6%lq6ky;JW+eDP>p>cA)d>+Q9>(C1)^T62zK#C3s<@wn1KvKdM zh~=9r>Zgi&l_Gt+tB@|9nkmv(iS;GV*H28(o5z31N1iXQe#p^CxgBl}G%r4ov;RSJ z_dsKCmk3>MEol1%j;LJ*G81f`SSeb>E-n% z_gC%*Iv4!?kN=zmE%#5JUOo?z%jI_D<)gQP?8s4WpI0yV9Yi?~Q~#mIn=5E_QT|PQ zJ_tha_doMhd3l3i*&NQeTX#meq`50#7AO%DvRyfN~Eug@_iyb zh!+_BxcGjZ5cwBGembux35yonS*n|m&t>WkkY56CI1=`UH+%_mm@4pBUlP!qx?kvR z7P5plM>g>1-{RpE~5naYnmC+>Z70`JG7a zbi{Nr;T%2X&V)T)(LyBRx+*oa9PC4#*}(1HcvAa@=t=rR?Fp@B*>ZWzpLp)iq0hlQ zesbNjk;jRVOMQ9%_J{S+QV~BEE#l>yxLi|@=!(K$t_pfFf#R+N&4kqyKVJ4-zKr6i2c4vUNbWamMLyA==S(!{229rQ=}7u(Zugi< z{MAq2^SJg*-6>3QQ68nwlRE)Dx|y{g`tYymuH60%>njwm9s1ckh~nDs#|t-)1SY-j zgS9Bk8v+YwlYEKw(fg!-#l8N|5a2LV&18yCOJ2EnP~1NK`MZM@?|%E}#`ggXxB47! z3wpjrX!=iz%V$-jcLhB%Z`1J^K&4#u6+gglqSjU5nR1{`Nt?AO)=^)zqz{4b!phBkNv;5nqNu<4g? zia5hD1}_Hc#qHzep};BQzo=0=X}xvRF=`J{?*<&F_LM$6!=yLRWkt;w^4~mQXTl(0 z>i&!7B%ih46@e$>59gwo2|(oz)z|2`FB;+0l=~NoJE1;I9ume@!3w#a>N` zo_qSj-dG}rUFjrrM0kEPM)(q1DSW_00sYw}*?7XoV^g3Y188|f=HNJw$P8nENw)`iE^$s;{C(tVi)X8qMxtrZcF9T zzOw%>$&<^MDiZ!S>bi`u$C$h4HGsMocgOJes$`T4`K$QwSQMrEzqq>cKrEZDU6CzI z5-Ew25D6_(xXY4ciIhYlMX5xJLQ#n*Tau!Eqez<;MA=f7#6w8wO?yeANVI&{naA&+ z@BQa`&&;`J&dfb?&NXN5M;d=d-Xgo&H;zOIhu_-#hWVEi#fQwl)M>Uezj=LzEAw}~ z?Q-mVWBVWu5f%4aV=l3JH(P!jT5u?U$%g0dBh{Ye_J#?So=?ZpJIA0lFJxRp#0CE07GHlJ zOJvq@6N34A^2U5zp;EH0scA4HV@MedFmIu zMxe=a{_{@{EMszm`C5jf9Es>)|HhDk@bAa?^PEHU0CEnAz;x;kC`JJM-?=JCfG?|K z)lm7VfpLDN?nrOoxx^g4yxoqEmucCdzM7^1SU|5CSUxb$XDo4y_^^~;-Y|xbcL(Nk zD7{YT+b-s>kAeZdwOpQG{)Jtn)Nyx7gdVLfLPoQI#AZkyJ%C7VF!{!S%$h+x>ki1w z0}iKY1uhvF7wsC7M+_i>HHwWw(IZ*z;{uT_# z%Le-UJMg}92gVUJ(EhRkxq4vz92r=r5(D*z2HM#+&`$6`I~lb7V2{Co>^@+J*nqrm zVBKi410MGKfb2EUPdm9QJYU8J1U~VHFS`u%KS-G`^DO!JhPD^<4TGp7e3wDn9e9T5 zD^Mw&FV{HJfDjMZMJ@bo3cq}F9bZqhiZ8E<<+mgCfbX9Mec;!R&*0aWZRE?vs{DQG zn_yG?B>rKIi*Yrzj^Fg#4!zUoWCx znAMN_<;!r|_YhX!Be)-i)Nv_~Q<%JW*?Cqk{FpKh*e^D(VIaN};i_N|;@#RL7LQV< z=wf1#muaiVfUqypQdm667ZOHCb=->Nb*z4jkt}P+HM)Z7b?r>Vo5Z>;RmIi--w~UN z6+*mShv~mdc4X}*OKyNCL;qV_*z;${d|-NqH(q1*@N}J-Uzfb9h^<@4J=}9Knea@5 z5>^J@vlL~55ZAkX;X1%4<}HyT{J44q4jza*iC318T>MH6D-Ql54*wt^aOD?uR({dx zhbZMi&-!g!MREJz4WTdeTvp~q*6+$K$;HGQnq(ISQ#`L*d<$C$-@hzf`IPjeuDjrc z;r>8$%}p+N+nP9M;F*OHq0zvdq4g5ccy6NZ&ZX@@ zIqi8(o+vl8&=^GLfR+CWU$~&$^>fcexvU$w5i+XPuf{ABb-@b>tF)*|!4=l5#Zo$v;4kJOS&{ilfc=AkwB{w(lh z6%$7f=-t?}#G(`JeXUsN7Yw~B$7}nf(4U0nq|6iASpUmgdN)As{U{~ffcCy=FV8(S z741z~%-c8#@kqg|_UD%d+S_ug zzCh$QkGnhOckZ65Ixg+cL#0Ly+_!zZ>hX}rNXZm1Q5Ufh4(7Bf&E zu6*OCAM^{p9=b&HSte!dsOExo*65>pAM>NVv9?~0wC zt1#P%!8*Wz$#fS;jggYbj4yF z+NU=XEmWw#@z)m#lm5k!F)ns^uQ7`9MRy@bau?i`fif%1-i-xj%uwUeJ=^wwDHddh zN9!9FA=UlNzs)?9Y)a*qMZP~Ly`{^$5aDq?Ps~T820#6^1pyBCWcMk7 zg}hl^6T6=@YcWA85dPFAdl8i@^hM+bFWtzda8>20|md5`8%#x~!Zo|k!>&*DmN)M)1K55IoE zk8?AIFw`Ae#^Q&s9*&*RfAQU)m2W*R%F6pP^;taeI7N&G=esCfX6K?JCl+r;3zf6_ zr7N^q`=v*USbv#a*NjO2iRS2kWY?+<)odPKd6lwurqsU$k%0fpS9wZyo|_`=NwT)) z33jfEb6$wRjC)|c&tnP4N&$d(?_k=1nU#1Az~&+V@OuQN5hx$3#@ZjgOPa}t=3tql ze3POY!}8sH9?+|gZc$$Ch42WB;`sVD9#~G0JA%eAY^guT;`V~1QZ~-ROE65-r>lxE z9H(`Kq1f8V!>K$b_Kzl^l(7W^%Q%1DmFByS_KOyr`UiSy) z17&P5eZbfTzJ4}KEaRTzC|}P@fREoSJIhn zcmsSyW&j&r^X(9r#Frmn)lj)7(L3O`0X;u)zTIaA<|A}~|Nb6m|0O%vU>_oTN6#g? z^Pf*Avmo23@bTDUJ}!FCALrI=zP|G-e);GIzCB6<{a{hzKlqseOdA+S6y6?{7trzn zvUD|&vcV*?*8rS1V84_!zkDlpJ!@~E`~^)H^uh`KO)MQ7Txech*x&p%Ke6|s`ZJkL&SAn@leVz~N&)D}C8Lg-M$nOX5dxMi3^2|?57gGIn{Z8y0@cau( z@Ce|qma56b+pm0W)FJs^qvm(2*U#3SO7g4yhXlzVyQ%iRv;xi#6?LGv`E%8W%T%wn zZ{J1I{}E+sLgnL)lzk`;HRo(DrT$miA7}mU{3eG92X9=b$kB7drq^SOBHysbG>r7> z6DP5J|Bm4eAL;pz5;MCg|GL~&Y0y@nx_5P;5wJJ-^KIf0);AX<(R0=JM9sZ{Thtxy zgdomGNR)*VF9;M7VBhupc=YP-V#vQ;YUhms-Z!_o_yoMF+?Hm0w0B6)>{MY&71J>6?l;kPx|U5 z$fu1q+3-m&?QDtAH;d`JONY1b6`7RK%Lyh*|c^^fR{J60$w+$jx2S3TF+fnopb7LBJz|1_v&iq z!M{hvC|>)^<7|Z7Q;%<~=k5rOdh=^}Ew{eSxK3{!*1zuYqKk&$g;PzVmtsCPejB$b z3w*M5!90uU7~dp$jmD>Az{e;2wmOLOjnlD@uXn)C!pVig;;=hz?jrx^7+2SXx_h}f zwcMI}OKU1l^Ed$`wXA23_oXbJ4S(TJQaJmP67Ssv@5kIKIBI3mJM(9so;)UYHS|2oX2$sPIT>fg*=Ys zpI_p10{G#` zu}!m4?tiYv-UYbULsy;Fd1TM(wp$EACZK|f))g4aLD9JlMy8R(4- zyzp~sCy&eBEm&g&dyf^aQjajg?@Fq6+!e!m)AZ+EQpEaMD<8^p!FxI#+xn{KJCED@ z=Co<83GCl+e5D)aIr!$DZ|XR|osDn74=`{pP`eaB`{Hhy6*4d28~)a-Y2P{h<-MW( z?6Nv+k1VjM^hg!$=fO&q%H&VHHw*71y}q|=>u4OV@+)U)!tRp$7Lg$&ht3%(541a- zcxW!^B^!3qyjZRnKj#b9sbi5qfG_lq7Ye1CpuB&7p%{x)CX6S9%_Lj=W=^vd;nACqBOago$IUEe5j_WCT`kefe*2iNj2|JRtI;nh-l)zBJ zK7F?<)Q-2!gU(ps+I7p~ss9gmuE=TwC2ZZaXq+Q*iv4L`G^#T0yam4Wcd}XzOp@N- zKaphN1AA#b)V$u4NbO2h^n&oBy$pOV2-JI#z~bYr^5HBl?QY9wDE;Ws5~?prKgZ(H z;f%j5&P=_F*N1Z7G%qHfGAJ5Ma@&sgEUrw|7{tma=uKqpIOke{X~8eQj9yRU)YW=_ zo5mI7vS$;OH|1PMUH=5!x*+m5^=;nIfQTryf}!@$5+K6eFNFv4`CB{DaVANkS7sGoIjiAF`V*q7mK&9 ztKym6+r0U_RXLal9p2j`x`=@N%D?Ogvz8`-kl=h|M8q9&xzn1>i%k^~LC6m$v2%)U zV4X3^B^uM2p45tGti6u)?o9td#Z)G14n{TfY|aCK%>sP%m*Qi~D?SgIc9Snp$wN2L z%ShnMMJ0Ush`%f=KXwblLH)28e*HH}D?$!Ehi-wkTiuzRa)zQz-ZhR0FY;42`Mf8* z1`c+#R2}QKENj@;w@9T`Yir@-lbte zK7!RkxOw1Q;%de3Cl$XYqjI~;{CY;iAPbM=%S#>kc1@qne}BTu`Qw!8;Lqbwdp=K$ z4Ck+hl9M->-6nPX=R0Tf?MU3s=Zj*WvE9)A*fUs`K(Up4{%D}eUq>}X{PFz>IA3s$|v+}a@SD4=A`hj)hO9^!N_4n9*^qjXK!`XK&*g8ru z1PwxY-R2Hf{v_ugTQ48xc(e0xr^Prcs(;^^#p=b6d}g@xbSl$(_$i9<&Fu=4874-H zvVGn6dIzhQP)cR;9-lv$0L<@ERWNjXzx#;3%mxn-K%kJ@02loA*TD=sQ*&{Tm64>81avJfz za{nJelt22kX{|cxwM$qz?Er>6I{wTN=wTdfPX78`&m9+vZ?oziH(LW0=e=k7C9#_Q zdjt_*e@3NOnxee2*YuDA(4l)D#6|h)1dEfvY&gwd_}=Be$ab;&$E#;*ooG zMQ5%8wtm>s?GBvc8~9oR?X_-SQnwxQq{%%mSK#@n!y9*9M0^`Jamq4P)N5;X)VV5S zUG9pTu8jI}4VRr;fC*C$4)OxO8+ov8VTd~7c2I(M(m0$aCTuV{LwU-_Gd;z$kS~p2rqnrGxSkU~o2Tdu9yd)fB-`5wG4PoJTXm0CCX3^`JOhvxz3jLT+8Ez8>_%4v%~g_T>XK( zS(x$E-;q3Sbz+5UKE{)^fBMX8srB5e1&T`ZMwM}6bnHS-VIGHuj4%#x2H!Nr_=bgf0#%d1?FvP{$clr%12!@uiJ zZ4Wu&zS29Y;T4?gxY_d4U3lEk>J?#njo{PuGQu|C+h=`l6`y}y!qxJ8MtVz>aq$J| zGv)hhxK9W6ZV4Y(&&fEy*4b4HUJ&=Z`s1QpuHUI;)|uwJoM5bO($j)+&U1{_#2Oz`16~HE9VYXMO0tm-i|*lC1iA+6Y*5onXsvl+h=*pAw|A|n_DL4FC+AXtBN0N zc%kwVchYZWv--6xuE?t8YZ5u55M&LeL*;Qp3zCTLNGF|x!?_G9FLs%rQn)A=x zA(H%s$6YmS9GATxJh0zKKYI}FEzCSVT);U=e$na+DQXWn={L#;y8qO0Z>PLom3#;1 z3Ws$gQn3EY{w3xd1rOe3{aW=1_+-hiR=sSj{{!ZGJQicW?NL*jv>NiGcc0G_@7!Kw zk?4+dLymFJ$amO3Deh)^m!Nmh^U8y5(98a-;7)$z{Hx@cB-s0CkLST;l#6`Ijz|UO zXzaVO4)rm9_p3>-MQiyj+V`h2G%i-m#Xj+T@_9AnQlFkB%Gh7-$I|u=#lABBV0A@{OH}SE}&2B@}o{xQ{Bnm zCjSj}kb(dC`hA7V70lbt|FjZnq1XE+HH-YblbhQcnx8EidibF{&i@YI3aS0hxtsTr z-G$R;%Mf~ft7Uw0!wTVEs<%o?{!J(!cGr*U2Q^8LAsn`Im>l7@z6+sR!0;F6*>`;^ zSBtx;e8Dw;{ICJ*p}%E3$xr<5=F&Wr^esWk5%W1#PL}w)Qn?e$qkOyH^@RGFdFDdA z15l?~Qa}xuxS)gOUF4f*)l+=>Pd;=I*}r4K8WwLuUm7xA+3XU};=1Fkn~VoMoQ<>z z^hCABu{dpRf0*GaZT@|6;4np2ujTiZ>Dy;k_>g{o!)aT>?RM4dJm5a`4CBGN&)S*( zPUl&>XSxopjPnFH@ zJNtunB=6ORS-=4M9>zERtC+*&VLUX8@)l1%|1^A%&FW9Jd}64772Tlz%xpd%+q{ae zFFK=`%|mUH0n>YNYdzCjC8EI4@SqAqO^I&C!>giOnEtY3xDG&jrx!)A`p0(1m^}5r z_{CISl-J6}f5zbv(;rdBF?s!0Tc-CU9FIZIB1W6x;xGJhbOwkpSx}aLjw*5B+i9_x zulH*WpFi6g;P{B=hc`(w{q`VCCu9$EK9Bt}l&^PYdQ+=7$byM>KK`JJ)x& zA82-fEdD@|S&o#zVK7(hv+nw5Zbfd3= z@+|tw-IBY36T3~dz2Fa}UjB_Bo>_ELW;?Yb-LP1Q{H?M1i(>MR7i1MLPo?6 zw3?E2NIH06p1ad%bI5TLRwkQ(&nma5y2Gz8l*}Q+?c^gL^ zPolg=q>KI8LiqCr{lS-yf%m<%>&$wD=Z3#mX;g<^`kzs@Zm7SSc{E4{`qpxCK6{Yg z`*_nZ!NCph@7$oDf$0B*W!Z*lhz|vA?^mtCb1!b4csvO9XB@q5w*~QiSj!TLZt&6Z z=k?|v20wc4KC=8K@Yg17z~og13zqN;B+ds9_V((_y#RgziNy4w`yLSH@-6%x_sOBwmJ3OH{Ff1?315z z69;G4FWZIr>T5qJg#IRcPQD`2$K!;wq?BTJ*K>8N_T4v(=W$=`5*HbrMtuDB<9kFm zk6TmVT;H-3>%&st{S$cF#PY#D&jZW3oSjP^jg_e9%w)2sbeHpRZ#~cK>k)j9Y-;N@ zsDZ~-9=f{n%;X~Ojk!Y0Ci91!&=TWi&xh4=3nHd>nP7a&ed8A{Kpu4e{a=Dhf1n== zV~@fu5AgT;KmAG_Uc-55O`d+~B;Lc83r`_XZn z&IQbes?Kre+u$ufhn_cC4!o8gGqD8xCCTK~{BKwnInJdbW9u-FzeGbrCL?a2-Z5qa z_~eSOlJB}O@B9AvFPwpO|2h2rybX_eoZj2q?qSl1!(%_h+aSNZQ03kJKCGi_8oOl0 z(eCDk-qALq^mi|Id{zKYoqTGYm9sJ8xAchiQ1mx{n`l0V@h2Q?=~KhHn>Ms+wGeog z@bP4yMOZ)9qi#ux!p^l@U)$YR#rbog>RRG2(`I&*AIEy`kNcuhhkYVwQE=M|?Tvlc zS518BY~1FuT;RQ(!VZ#HmpRWJ&e3-WC+F4&5?=_-jVs*`l(^9NT^Q?oLWbknUue%- z`du0AbI;n|^|UY7S5?2i1o_2Bn+^W3Gi~IDhN;kdKLdTMw9*tAhlm4+swhO6W|63;(5iZks zDo^;V(VWSR+pMlp|Av{*`^lf<*8!WT-odP2h)}uu*J8rJ6}QKbKVIvb!G1s8yxi&_ zm9IJ6i7#!D2a(umM{@I~-$gV&RlQmSRGbqmjjvL<&W!0SeiSxcWW3KYJhO-T{d#?s zKIv_&<}yg{+Sq!QN13yHIfw-Ao1B)~6E41fnZ;9&s+TOjPCTs3WN$5J7LO(B^jDHz zXFvmsr&mE>$Rcgod>a#u9QTg%Q4#oo_)Zb1eS?keE7U$)U1TsCJga8jJ zzh9fn;;MVmGN!k=$bjj2mn~qt!MNxgt2eF;Kq40FO%BrztdyF<`qfIzV|Zi{mJ!PL zRPgzt6~5vlxfQcWm?igywOba$FW1Dc;i-IkD4GL0l=7bs^2c=?WSs!e17OH+q|tya z9&!vH9pm$-#gk^RJe>d0du%-OPSvpb>x*!G3H@5za>iGN$s1abJXZ1;tG~AK5kpyR z`o$o=yYYL#-dBooB16541?)NApJi;Ed!@zMe4BpPVf<|6tFABeNbKUhD*-P4#L>y` zF;L{Khn!kNcxjn?DAlhr?GvQ+{>?1A@kM`cj?oTBqNq!*kcwVh<=i@VwHp)8$> zFA^W}P`JnP`!B1<`q2Ip{AqZe`dicg;VH?zL!;~*fO+Qv+sMuigWu+}fN%bbcOm~V zwoIXk_{z!lFXESh6L(mSCV%(pP|6vyC*fgU66wtwTo~>He8ja+F$eaGN{do{?bL;n zBJ#lYu5*2KZv9m0IrugFTB34VeF^;j-AVg;NPoev&xxaeUvKVHAphaGYC>Bq^foFK ziq40>EvOebwH)QTt#O}601XR_o-755Y5E7yJ+sKCy?cj4KhiL|dllrei<4%?Kwdbi z@$oYF(=EGF>u-XelwMwZ{yFjnXKY7%+oRr2?k0B;csl6F$$IFOZnKJghB)@mf%r9&3r39f<5jEI1L$x;-!ajjfmg^$WZ@|Ny)w%fwdD*Dg$qC3qoR~4B zvCRf~wZDrbyO6JW8~q|h_&>zqifvcqmo#w0dnXth{DpshcJy231KcB)G|Vl!iFW>K zSRTBEd&u(AIj(+%T(!%Pb+x^)OU7f~Y*iljen(pQ(6RNLQ!s zFFobvYR>*7`?nH*M?lW#Prx}YdrZ85(5%~B^qjTdckg@3HSX|Hu6S0%{hIG~UhLj| zE=j>vbrteiT7{)n4s%a)zBwyT`PJOvIzwgSXRDNOD=ZEr=)qTQsToxfPjIm{Dm*E$}zLpU4O##0?e}2&JgUFlI31@B`f_V8gYS#+z z#Dv5}=gZ?CaEbbEL*E~+;g(m#zj%3p?m;8v!mux_g|*U$!0x!k_Z}X@dVF$eF(-%h zyI`~O^+@c4I*l4N3&^)JkA0_e(uT9;g3s_>gN}Xwxd`m%7}YG*Sm=3{?O1pidhc|8 z9~6S#CXI~VGg!}&hVi1b9|oyvU8Z&v6&(}uQNMHICUN>*;DvMgiI4F7{T_+_2Jp>K zpKqEI4|tmD{_ZgNW^u~pypO1l+#=DKQt&^AADuy>lX)*kK6L>y2&~0Ysnkd zYA^8Ix1f0vAAz3nEz#tEf&?dDqWgm@i$-;mzxz^qFN^$T@as#n*8?p>jr?4IqK9t< zQ-1BQ*b96(iF{(E%@Tc}V}!ZgPuRJ>JNO{+rILD8#!o8TRcuL5>aO!I^4q=IL7gGk z|Jvd86AwV%nKnPH56``k8M}!5eC_*q0cuZAC?@?D^sdP)nX?+>I$613TPySg!&@Zj z{J3@Ife!MopLa%t62BY&s?MJLyhup?DeA}V^f_U|!Y3!h2|J_{kifxxfnJ<6#f{p$ zFn5yM-F$K3hwpgbxeg<&Dg7r-?Oa$sXfo-oy_Iy9%6CZQu>6@)jhQUTdmf26Q2woJ z>{<4^$EAgdJese7q@VTloZg5{;|a%gYObTW#I5{%htA37H8Rv+)qKLq6jn!w@O_3?H5)*()>L`sXJ+`KilAD5H;kzk2o>CozEV#`Y5*{tX=;(znI<| z&q26YMZP#Dl=0rb+f^8UNo}xY{AJj;npdPeDgI{%p14o)8U5{UR4=`>YZT$gLdQu|KBpu*$ryN%JGGq7 zH>(R;YG@xWUtAbP{6(&B-|Y>+gQgqu=Tmu)%L)!SCS3AAvRgBM?j1T8sNPj|@&%T^ zvz%}i`|rqjg$<17yb~)V|Fg~S`+8c(dP-YkJb|zE+e3w*_w3@yRysdzd_89a`3sGs z@23;by478mNxWwH^NkTj@LS)X=qg%3?m0c8kM>jZ4>SB!4flCl1RF@t`^vCesnAPl zncV4vcFm0Ce~=xWhCfVe;TN_avT&OX|NZW5U(HLLe}mh1A3P5IPnqFa)Sla-)A

o|j>R{wpiU>zdb1 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

g%!U$ztU9wfydd>dY6@s0QDyiW7Xav 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

)i$nR|D5vplqyaI&kj@KgM;nuK5EBOC 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 z

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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000030_celldata.vtu b/v0.8.7/tutorials/out/solution_000000030_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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%0DQ7t7 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

oQf4}to|Cq^vf(G5CGVxxdt&nVvTzUk1VaHH$ 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000040.vtu b/v0.8.7/tutorials/out/solution_000000040.vtu new file mode 100644 index 0000000000000000000000000000000000000000..f775812d4c967d3d9e0e4e65b9d6380ebd794e5d GIT binary patch literal 19087 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 f(o;Av-Tn4gF7l>b%2^dYP{+XaMqy&t(q8x3>G> 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 XC!EKdCsz%~rb3?vnmFX-($IeZYr;N$ literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000070.vtu b/v0.8.7/tutorials/out/solution_000000070.vtu new file mode 100644 index 0000000000000000000000000000000000000000..121f5cefe4924ad828084c62914c4c9aea2206db GIT binary patch literal 19152 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000070_celldata.vtu b/v0.8.7/tutorials/out/solution_000000070_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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 JOGasIWj;7eR-FI< literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000080_celldata.vtu b/v0.8.7/tutorials/out/solution_000000080_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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 PGk|w;sk?D6#O*%-V%H7s literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000090.vtu b/v0.8.7/tutorials/out/solution_000000090.vtu new file mode 100644 index 0000000000000000000000000000000000000000..fd001329fb38ba8a6a6d9bf48405a480a95360fa GIT binary patch literal 19192 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000090_celldata.vtu b/v0.8.7/tutorials/out/solution_000000090_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000100.vtu b/v0.8.7/tutorials/out/solution_000000100.vtu new file mode 100644 index 0000000000000000000000000000000000000000..1833b3ca1f5dcccea30cc702a3e8a799376548c7 GIT binary patch literal 19225 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�Zf?) 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 bL2z(oZe(R-L}7GcJ_4UaaCbua literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000110_celldata.vtu b/v0.8.7/tutorials/out/solution_000000110_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000120.vtu b/v0.8.7/tutorials/out/solution_000000120.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6842a983366371c398dc4dfc8f0d364e2cf16196 GIT binary patch literal 19154 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000120_celldata.vtu b/v0.8.7/tutorials/out/solution_000000120_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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 aE%PvDmNA}pw;cSca2@FE&8l1Q9Q+S=E?1lY literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000140.vtu b/v0.8.7/tutorials/out/solution_000000140.vtu new file mode 100644 index 0000000000000000000000000000000000000000..ff66c6663f9218c352d0666f024ebaeccf2fa0b9 GIT binary patch literal 19177 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 ZaAj^}Wn@HQbYVUUJTF#MOGasIWj;MROoRXc literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000140_celldata.vtu b/v0.8.7/tutorials/out/solution_000000140_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 zcmbVRcQ~63*QctfO%+u;s(931v63pKErL>`)QZs52#FOV)`Qq>QL&X4wb#>%J!@0d z8nuIHZB0?DK3&f{uJ`)B?|Spk$vM|K=l473{@wqaTNUEt;>_;_N1+i&S2dutgcOh; z?g~TNBU~NTfSw)>;vgUdOsi^QtfPf+hVy%1+~8`!JFaLClqbx?69u=|Mj`Bh|JK0{ z;{mruqU_-)HJ~oS!^0VV-PImp>k8z*54SyuTK{Tu)73*k4#*Efy11d>Xf*O9-OI!2 zt}en()7HaQL7~HK47V8{E|%ezFjxg993V5|IK*{zg%i{MqGi{|Bw#-pM5Y&f(X3elma|U0vZY z4}=%O1M{DGNdIp<P}t zRq|gpsrudfzRUmbYT?dsmy<_njj;c(xG2iW{A1#uT>gQ6^3cEQ^E(w)$^WEaRrOz* z`Cju+?;gt5`$VqRloUUIK_dTZ0jxiLpY*U)jG3MVSM#7{ZTPcC4{N&g@gecl~5998YJ5JU1HY0oee-jh6|*ACHY~M8H6aL&uv%s*KUwUTqJGk!nzHvt|SHSw;SrN^%;el6(4 zxNKZ$W^#Lh`m6V0JUJ?>0-Mhbt>|VB}^q1R8ow0(n-&5}z;{q?v z>fPwG0}Kj-N>4$bTwyFdT|CoMY5$3Z3*fFM8 z4d_Z1`l3OAi)a-%G^6of}Kgw>z*pDX{9iFZ<-`w1|*;l1ANSKVjtpX%nCf5q+x zLsA*;)W1w&N3xsVj#{H0=QmQ``O2lvvIBea;c2Nk#f4ynx;vyr{%LaZ(?7lUO`C&V zvWCSV{F&@&rrQf>C4*J&5oQ~ncppx&zJ95ub5htpwkKXsrJqZ{orkhSFxEv_mS^uOtbP3XaMqm9 za5>pFQ1bpMr|=TBmk3|Z9m4o%xtlMY55$?e?J~39#2>W$ly7olhI_-JmO>I6gUava z4SbMn%sIGg7>F)>WhpB4&?K&=w_Bs0INH>-uxvu1ZW)Pz4GXs;V;?cSF)lh)DRp^C zR|81=Oo&RmTrhg7n_oUF@GVln6gVdD|SS)0uH@7ZZ3yGYDb@A;!-i3o(S^}WISL-VttA6gTs)<=mfgSEaLO)!{j`A6=?uBm+_h!m@HH{_)ZTf_%+` zly1n&DyFXf=*5IOV0B5RXf*I(!#IQ4L{jNjrfaaMP)I!P4js-HaI>tTG4rl=)lUWoC_H!LJA|0}eMOhwH zi*Vm_)GXN-6Ah>M)4ci*^Sh0$80U5rS$3zyrZcMxIM$q-wNzP)x)4qUxV@i z$9^(*InfJ`kCkrx2hQMz$hQMz#_X#p`ga;3n>!URC;_I`s^gilM+-+_MPkqRMs{gI zOx33J4!XTCK%I;`L!o_TSoCI}=HVUnqwTjyNDKJAXP|OT9+1&2|NOa$uN0Y)SWgw+ z!O%faV87D31UE;E^HFOv05{0@M#hBVf^y)6agmF;D~Viui-Mk2Z0(x9TkM*ez;DiI zJlLp^C((_=`kmM7=}B2h-+uF9N|TbtLyZ-V)wPK`^FakJ8QD&+ckSfmSM}19>u`sm zD-TIVQJq=%_rVLRYP`e3iBDJj*8{7XVcJwR>jhF9I6Hv>oz)kG)9)eb9}xNBYef)2 z*BRjMo3eB!=kW%ecxVgeh4S?75le)FL4DuMSj((9kMEpox-RBlT()ahy$qdGa{RCijrO zba3|^)6k!8aP`Z$#hj&FSt%x+%Jf9LDB@DO=+#MtzQ@NBM1RmQ55cM1Vzp%bZR0^? znFU3z`NV1mhbnJ|>uCN%(|;4{`HvjO3d4amw7I zuZZEx58fR&Oclj)3Z?~3d^9fEyt9q#bTyHXoSvbFUh=)D1~Lz=85vZP32QogHO;(> zF%Bj~T&N!hHVMe3TF3d2BX8*y;k=re7Wl?aWLTqnm^&Bls1n@1H%6!C?WV>K?r}6q zvQ>QJ#!&n&s@-$7?+svmQC_XttH$-U8;twaEz{?(<(7AYb*4uh6ffFkB{fiak1**f z>#;i^v9X{b{`ncM*l4m+cdqqAOI2`6^*7?-YoL$RvbA`j4vY0Q6iZ`Ap8M8*l*U28 zmT#oaX79({j!z*2k~j&R_NEaox-muugH!uhhy z%5BDu=BCvHZFnia8I-2Cgby=?Z$M$TjT#T0wc()(^wu`n!=y0sPR-<-1om0%2xBO!lHrSq!ipS zwH^6DndH)=S31O?TQdaClomWqE}*AAsFY(*y!l8r6MdSj=IEiIGvnA64`bRxaM^;f z-y{NjGN}fY984(L`p^$lNqmzXVNxz6%OjKY!G=TFWx&d3o54%*tWIyGtPz$VW%T3I zG2SoqCfsDB*&z|QfQye4Fh~WVjR3P8EYPTd!|WZNd$2YZQ*!V2{njq58%E7^dYX?c ztHsjF#!Yp((VxA85JJ$s?i3Ns!>XV^Q^x1POP&~bW8_Fj2PG8V&GS5k*0Yr_L$rtI z9bpE{p?Kk$?pQ;M)?imZHLZyWm}{lxbtF;O_HZG@ZGf?_w`!NY2RhsGhlm-keHe3yo6KN)q)7U&!$X5hn%Esw4GsIEr zqIQ47iszg3YWzzNh+_|~TOKD`a&rkbxR=9-$vw~M6Ohr+Q1bb#M@e#;p4(GA~M6zZ3n5~UqSp-`}$g+5a8|A^8oBj zZX)VY@CqQ>vli3MS7R_VUqgC_z(eTM?5(Z3LwyYwy&uO&3zG+J?T#NWq-X{Jv)>7i z$9wip_pecW3XD%OF=+GjoPHLnl2qyy?DnY=)>$HbOyn_hnfX99S-<|ypWId-g6AuF zwyMWaC5^=Te!%52;Ll$w^y_f2H3zN`Q-UDP-KL!5)qU zZi(w~pm)$Vz8j(@i?F`BQh%>ldSYvx_Vx~!f{jFNIz6w4)A6Ftm&9ACd^&b~$qPET z+S1V5qicA6Cg-wO!Lw7+_VDsmqqC^T8`DBXbHuIdOs=a$}492 zNA?^Kd+N}M6&K2k7C7>n-le^#EA5N@<7kQ+{cV*|Z{;nPe}$)xXu(ZVsFcA-Zl`Se z9u*xpxZukY7`cwNF4M)y-r(7Tl2v#&+B{?EK8#C&)gFMy^En0h>(K3B?tuXmNWF- zV00xDf(cf)aiPoI(AhtFmheUNi7+R>X2;H4{XqrWX?cS<=qkWS^T3#4tZC`Q|bkEuD z=&k4Br)LLW20T!o6xCF zuET>pjYBB=n(~VSHv8j1>--b2^H~MQ^n@2e)4{5#S&CCstW@!&&bxAkTeyANgHM7a zx@AAL;|M}4=VNVhZa~2J(YW48BKMrLT&9rv2olHCmv=|1+)>r-Jn-S&a2!v0j#8$79#Ny5cw8{pCqG5^cd_bmw-&cV>fHVr8&~ zfgH0U{_W0p4~r3;B9@@)uPjNz(MocV49$RRJl33o`tb)B`kwC5utk#I9CEXo=#W$; z`kD5)UtqD~oFZK{a*&30a?UpxQ3fPUsuIB8^AfPGx=MZ@O)J+ZJoO@oY%*wo*a1!c`^rAQha zGv#pEygghPWuq0lf4M)t+=tzyQMa=3T76PM#0xCw0C479G%4bX{dix{yzBuHYbXFsFlw0Dby;a8@;RqNHV;W*{r)>*~`0 z0C1qKp?df0%5_Xx{LZ)3FS^@;^**+jWKL$Oe4HW~$_}wtH9Cr6UxP>?unJ7{!>*V6 znNk!Bunz!hRP$PmiqH1GqOzpHZA zyTjA4X@269<%lmgx2tp#Yd&GSzCJrydSINz$gD5^HnMv7aN*pFZy}$%)$+5wy=%q0 zFR<;Hnl#dq*j&Q0wrc$D&@}S#*3E6fTaa4%R6bO_(GmUj^qfjXT=sqn(6{+iDxcvv z@%=5bVCn9M``FKCvy35c+Z(yxGjX2$YfYfl$cZ2chh5k>;Z<85ztb2WqfwaELO%c3 zP?H!M*qDE!fn^oo*3ocNmcXc!F+?LkQu>|uDUAj`zU78ZgAI-2UB9cfS;rKW&SAK} z&twe0&SbxA&#B*MGWiiBJo8y*irIP#m%rXSAg4b#Pber%ymXm(iNQsu{6x9 zIx{9Fz$z`BASIe0tz;x6WF#%0oLcqB50eNXBdwNTjqq%2??NvjM2rwsL`e#5299HoZgzUSI_;%7T~Z8W#c&v&z1v zZhXz;`?^l2CTxgRrdA*S0brl0?{t>tT&)VwU^und>CoA|JF;-{2g&XmZMlrVG7 z*CAJWQ=NMlSKC<9Td6JEJS_(qCcE?|`@|=ETqXxrue76zJI;F9TgNRJOW1?ZQo?9y zMY5D6SsFrDE)`ua5?uk(DZivsA=g{3Dpn2@tB@%w|D&iv*{NJ%rCegA0?bt|z*Qlg zR?eALMQu^ZW>Lj3QOPq=#i~+8S69hZR|W8^#u3Hth-O?u@h+iRIM6i7D9&UwwJD0tlq@J}U2pzd=@)(qo8q@U z_sjQ5Piv;2q>W+rrAjArTR&${4_|DN0EUT! za&9YWd%Ao1IQaTHA9i!l^>=gd(Va7u*MTwT#^?S$zL%%lF?$Eczs+E-SP=YAKd#xl z4+Yrz{C(o=zcT&(@uwfpoS%c6gS&%=-{1SrZf~$v`4xZ-o1L$_gRj#ezhhnwzve3l z%DMSkc=-DH_}lsU`#9JegB8s3ulfGf|A@2OZ-1`8_!E)koRoeI_m^=wu*F23{hZw$ zu!SqpAIqc2gDEm0&AH(lk2b%moo6oorrOL z{T#ghc45+g4+fts7}xJiX44_gP2!J*<+otu7sIeQWSc!#|87QvDF-oUKvq`PUjevh zK763a()b5Wz!C5h3e1Boh5nfE{myYdMB%;4^e?RM>{a())pzBu+!!diI8M0HnStuH({uI% zzN=IFrgemY^5ri+)^lK>)|{VqWx&M>4{CkSVW7x?hq0pB3>5#3I^Xy_1KskWncYcZ zptltz!)h@M6rF5Xb3B}ZW)9SZ>4$(^)=ecih=C>pj4j&&7-&=AE3pg=!%ul`%P;xP zL?sbVyr*6;kw%GUj^b@5Vrvmudn$>Ee&(G{whUk*A2(WLyBQN58M~6JD#t|mOIRk~ zi!xDKh0x~>H!%E++*FBt7KWq8Ca)r+Fx+$|Qncq3hM%mUUq1l2xKx9^C>+BBOVZbp z0x*1NnaQUX8w@YamLd!8!f;QcEy<1z7@izvcA=*h!!?W(j%}n=ju6}2_57uk=?d0b#6%3@rkv?CU#z1PdybT*$7)a2aqmm~U z)-~eWrnUAAl*IWyKEjrP*lBrs+o3;hnp+no`Y_PGdl@=Upbr}L_(Hxye{5&AbBP2q z5O?M3Wj@CkNJc^NNhS1$9kTMc<;_6e##z>!u+HV{cFxEe?Jeam8@$YgmPEA%;ioI~;9ZkKy4H z-vh*89pct5-TD;znH)B?#u&ztt#v%s^MHW@J6`&X?Pj9XmlDYzMKD~xZK6%^G={5% zsw`8l!f^Z0iF^xKKg~fll@GAqd_x?(`~4WGX(+YldnyBkcxoM<`OZL!&|HpqR>$M8W7*#H(;?>qe|yiaQ|+=!&`VX6efub%5?wShYE+L#w;Co&MD zpjl0PhJpNl++6*xgNdH32)D~Qis9Djon~@%7;b#xyW6r#48Qhx;6`c^hL>ICU0>^s z;bwA$Ee22*!RvGZcc|l|O;RUj-oZXJmfjr!aRiM^TTdroxS~x+g$>l9w{Fq;>0}Jw z-gEcq#?8=&>!e=IXTxwNGs$);kbye7^@p;dPCwG@EgkMKP_gfi7X435bS-_=AnP>@ z|EM+ay#eZ?a3zDD1pVm${+Uol922S5XgZEdGLdgO$6--eXQfpEq+^E}=y{pJvM=`- z$d^Mb*P0!}>z!pe%pYU8yM1uH`H9)Tq%zQ#6z6+4G8t$$uCq)8 z&Yjq%eENRKM{=Y8n0G$|1BFMT-;vS2!nI#U|+>)-KQ8n!uOys9s1#8GUD9= z=h{~<6U($A25K(gkV=B{bb>Z+ZSKNALP4n{(N5Su@%0i*-Y}8Wa6?MR9t^KEXPR5X zxkB#}|2PBtB%x!eaw*Ka=X1+YCiKH?iPa+P*O|y}O3j8;4RzlY;oA-Io*${84p11# zLUGNu9S|>$KH|u!gW>rarNT`x-+?R23w)u!I*05Hzd?S=w*r-m(=q&=sw$FSgyCU{ zF?a%;H@nY?=dXeN%=u~g()tcKF9x|T-Areq#8GvIJnZA=POI{yVO?I71sdptVt6d? zv&>V~7~Z$w__iF#cXhae(bt6-zRZfup+cbquum`B-qcFcV>z zye&WIrH9>VSIk95S)2dXC|_)0JG`&tZ7bz?F^PbD8LD^##^5aIU2s z%vl)#@s?W;mR6r(pa{R+9@@}1k=y5sjzJ$=ig&(~jb zqL?Mom$uzYPyA${O9{=1MX(=}svd?SE9GSR;AxXflx1{$q9pw|xP>|gKb|H0xUf6L&4b=evJ4YlJA}UIRr12f7QG7+=|~>{Uh%x`TwbR73*xh z{%`-1@%Qyqz~N#2>+fGz&rR$8d-WvVsB`aBFZgcyJKR6~`Sgh2D(D->16B8m1Tan~az)n3Okr0q?S5RA141CzX<5d;diykNq z-2>y)b+fPWh4{kyYVAG{ciOIu#0_?(nt2MwfVPs#F~GVIRjYGsDq!E`5*=#;*m|Tl z{{z_7sQ8%qLmnimfto$=tVNdXUjWl&sVBk!M?_@PCBWaX<79LN_+_mXyQd7uU@mzS z1*mhI$!GxlvC*V*17LBJ`Zo{A*U`wK*$4atEk!?aLY!`{@O$#?&AX9N-wOlhJ3aSSj~t4_dh=GjtAI3 zzt!WY30zV#r|~tQyEhNlVUTZeef;nx@WWoQHs@enc2FOXbW!|$u z{PTk@yVN0Wp?b%zaqzP{YNVb5@@r2Hp&H-?uBrCRz`kyH$=zv?f6VtWPX_+=$gWRq zfc_aHEjZw=;uVKg!2WVZu--@DlatE%TL9}#Pb^&k>!Z{0@Jl=BotC>Sy9Ma=s&#Q7 z;L9}k+%168+wkQ^V4p4Vb_*}y`>~Z8+#qir=C8jGoIN$?iW`hS=*qTx7|=y|Z@&QO zyV%k!DWLCOOOx0Qm{hgJh1drrmM^aH0hR^OLY@E$w9U)w1ixHgi9y0|yQG$D9@y8k zi5=MrXw}f*LiBa8=PP|Xz&_LS_+7vP8zXyTu%9o|F-qhqeu(^x2k?X>cg8EI>-REA z;ZI=qHR6e(I$+3vaR;$p($A=73&CzOL{p{}u$|BKsW`};S@j&30A3H(JWtg1a6|C} zVjsON?JueYKFN9E=>@R2FS*%e2|V@fQ?G@9X0oUKvq5fVx-E7P=8?Hh#6$?>w%ZD7 zHUUQe^pr{i`58_(Rd>P<3)^oB*s_|7>oBaZLBT;YBHpGMJ|?*@Z*sea{CC}p7dp>3t)tAZXGf1-W~Tl4+5`SSoemgXPVSiBceWe z99lQ+0o9C6qLM%#?7U~e0>JDD%{^)`{)YJnM2`Vq%qX*133j@66iZ>iaMd;?V&Cm8 zOMAf%Tt?WnM;o}JPtvp1z@4-D*{T6+3R3s|1oX*lxj^if66xGfGT7Zxe_%cW@s*g? zVFSQZSzldT4t9b&E0eqd*OcDBMb!KGW_&0H*7@tzfu}bBdp`#469oITd2g~M2~^iv zD+H*L6}g<4XKE(1-4D3Y)^kGX5MMmotWgQ@l;q`y*Fc{VIOIq4OHi~pg#+w@5?6a& z1#Ikn$B+Rzo|hj_^h@CW!%ot`QOnv40!ISW_#Xp~Er|D20R89}HbyqYUAf8Y4j;@b z(!n?(2(Y$y#}g626EnL%D}&v!uA1Pp;MZ$r+EQJd->f&QtcW`YCYq5%rk8uULczg<)UeWi`gp${N8Xzo&tf%}(zbwZ;y#COZI z?%xh_!_|RtM4zgjAHQD>^JKRDTtkdo{YFBI81IZ6Ns|@qKfA5T(FXmh*JqW)L0+0* z%+LdWNjW9iWuWig#m;#EaKHJZyF7qenYQJzpy$Zr9XEq`ne6ggKfrydA6(si7W8tX z^V}6dpCe;-TN%!m1xkF~Ykt7KxpE1YgmDgc*}{Jt4x;J%yVJS=`$kjTgu&0??c^Cr zK#whE*UbT|c=x;C1ig*Ma9k_!EL*RvR*0jyCi#{n-1k|e4WCkBeAXvqCryaksKry6 z3;8cQuD<^)aF*#>g*HI8sMZbT5Xa!Q)1syDUg4~nY~Ka)jZyk0*TJ83hMV0Ec;amd z?bYCaS5Gj0CGaB(RrjSqAAQxMk2p8ph<|Y>?yLC`riI?@gNR?~K)4*pPfO2xqYAi# zuS9eV^j!(+msx>RQZ5~u4_qa#X4x~qO+iAg#C)eY*8kWCbs1jJt?&@|kaN`eCYayp zT}x^&1K*0*2Oa?~a))(G6L7mP$2E=tHXRh~4Fc?YY=qTAyi2&~iVuL!Cf{C%LY|%( zZ#hSSA72_}LA;Zg8*T&=b$hN7Rd*dwz}2sxct8AD6;C1d$))={qwc{x)xIq`dmrQo zi%7Qv|6URC%S{kZYtr6m6!h*kI({i&uhYj}wgUQW{D{`>R!^Z# zXx%yPe6W*H-PXVgaZalZPTm6jOBMmrTbOUxT|t>};G<7UKN5XXDVG#Syo-c`uSV8^ zd}V9pB+=*jx$mo`Kz`3H``#q*j%%G)UjVP4VQ!fL{wBDNlBbg_anCJ% z`ms(7;t8d96-Gjwz_LgI;(Ulr32F)i+$&$Zgba1QV=-X69{g^r7HT{Nt{hnOC>HAb zyr)Rk7SQI#`32sfFPlovdwMlUZV^4L-pJE9HfxUJc90bq5;%@@QyF(d5BL9AoB z@|0d9k-xiWn=NpP!>ht#;LbfY<935rn$Lo$7S{4tjI90g1PO&qnxn5ci8%XGa3Du9lB8-w=Hv&+@#BxbJ&+H0gGN z{G?)bOch}9&q#S2l=TMiV=~| zMt1E*{^0jm`-90#K$Twh#jn8b>6rInV%-AGvx`B zVjp`l4`zhHJU_P%A6N$YE>UjOE&zE~impcr$h9>%M2X+4dl}V(#Qs_0^5P{i|3mFg zXEuSHLxPfNMIs^d>uD<+M@i@&J1gtfNfK&T`Np{i__o^|ilcNA#N{==26nE;Kg`hE zNhtbL$7`VvBxEexa^glS3Dr-euqnHdkzxO!ySX(Pu?F6`C~QbZ!k?I(CsfIZnYVq) zQ;v*Yt}?RBSxZJ6Ez;NEE6Hf#N#l)7QSkd1_z_=BM)>I9(b`NZ;>}Z8Y2r*pW~F{_ zwhB-Yn`4;Oe&Ht9tQE+}RvYcHA#_xuT}MM|*XfeTtNm_Snn*|2MKynRB-4>CYkhjm{(iJ`-$n7ukk9_`K~Jov zA9-*XUVRVzzV{8A=r$S}>u`<{8|Xs@yBDuJn%#$_C*Ik79P2~-vjp%+6B@GUZ+bAJ zKt&PLJc0{vP*DxPN4UtmK6G!wI-w|wie{qJIvzUqqMYk57=fk~w0~4z9PeC+RGK%=*^B{8p8JQP!y9M`=P+Cl68G}qhNuF)@wP2j> z@~UiO{Up>Y(0Ex9`e$IPN?m;@1qs}=;`|m(MVCtVS=_otL&~pP64F`e=zW$=++YwL zU7@w^?@XX0t*={~{i!5m7$@WSbv_w!bj**QzDPz#%ZDRZarB~SLwuBPWglYf?r5c~ z=|@Vrfs(6?VV$;Yix*C!Bc(dI?dFkmRJTi3b`9j|qum%_YD`A!;-sb`S5weQdBwWP zj$ZhG>+2iY*U(T^j*OBty&px31-ZJV(os;4bl9DJu--b!W2YC>5m#26UpLG<1Jy^E^6+UD)4GLPh`K0=3Gb*Zj*GSVP(a?`nPX0^Ybo5=4-$%lPjyTs~L;DZ(Bb76W zXV*Wcp_~xT^LwC9Zv@Xv-1D&wnDLSmEKa&$?8!%qBj++N>X47&&q%6Y8+- zL%c?dbwB*>v*m3}=tFT9+}d3ER3uHmxhqqUjEt2xE!qI! zB+h}=?!Gh3&<0!~fNAaMEGz}Tbe%_=A z`!J+p=xwec4Ji$W%DufoLC1N9!Xt&qsNl?~j}Xk`bxUq=6yUH9%fNc*XD*?VzkCvW2 zy_=3`DHTtggQ2fWYComjq@dLmq$Q~M34qBsxJxAN`M- z$4OF=L-K`f4n{O|*Z8XQ$eDiBJoe+zLf9v^J7l9xc0j&Ex$8rs`kE z-&U285q-Pd9X$%nd+(|z`s@@WB>!X4Mky-dP?l?ABljU&>mIu)*mqTDuQe&`hwq^(cf(LgGAwY2VAc5fS?yikX6P(~0oW|YVCAho0yEf2R!{o~EzBhNx zdo%OSKXq!aUHjYe?Os*YhhNCu)`r~G)Cpi|Zzn*>!pKZXZfa+2Z(?a@E>*xuH`$rJ#v|D*2eY^^0@X(VRoY$*CK zF{L09IXVBoqyA0!N339JYHUg_=VEJQ>LhQbU~g&X3=p7XXJe)Omr&Hy#^#TV?eBK} zvFPt=|FH0P!QTLdotz9k{u!dUjlJRDos%=P{S)y&%>E~fe|)pIGyOXh8zs4!y_2n> zvjC-`gM+D^iRqt&*qfOFO#eujDVhF4;b;1Xm4D6u?$%$kKau>q5C2ThKRhtDx3e=f zcD8i2boTf^`@!ttd7KM9tLo%O#B_TNxk|CH!2qW+EDe=+F4tsFNG z*Z&{LeZ# zjgg3{_?{X=>bLAFRnpYlAL84_U8E_tpUO|!gm~uPY$zggN#_5e%&e^#99k$q%gZ>f7v$L@+SVU! zX`RQ1zM&WTLgwKp!LhyC^xf>zLXf!<&CNvMLC%9wwio<+{oWF0iI1ieAx^oI^jsr7 z`kd>&Xu!kv;!790L$Oo+$X6YK^LD2Spy20AnV)3`)D#sD7JK$X$NDhd>{qE9dP2Rr z!h?%Mf_s~?-$#uQCTO@T-pc*@f>!aaY@^2sHfobQ!M3sOmbwg{+jp^`RTr# z4iW7%;(8g|!z$jjHKgF$rC}p^_-fp{ zls^O7a-XRJ8~QR?ytNK47ih5bB)Dr{TBvgHM0OXlf$RD7!E1#Mi5zA!H)3WaDD1#L zq2ouDZo&96Q%BB|mZC49q)~^KIYuq2X=F&WZF`}!bN5*7jj+y7591k{Ui-*c^huS{ zw>8Y44rD|rx38PS(moX}yd5Iv0QpYaQ`iAY4zCOIZ+~;|YLp*Ge_g=3)mBJ7Sq61M z75!f1228v&BxIZq)(!%WOF6A&P6R1{mjj6_I6JA`t{1J3h#owl`aFD0bK}i$Z{qU> zQz9tS%~816&%>~Oq%xF)<^+xGmvY`MA(ef87<*2#JdZTF8c(N>tgo1@N-1rx3DSDZP&wi zSe;C+MemrajVn6j0dbg3m#_IzO*W1_{guhZC=t?H1tV{q+} zWV^)*J{qml76#R2L8WlnoU)_M%#U8h25u)KPkENWBXolnc*3Jsi7LZc(tONYksNoh zVhI*;-cMH~#iAD$jxAmhMmRlSEnV<^nz#DU(e1a!M)2h5RaBXKsm19P^Sr_p z6Qg{w0VE45myjel;OWo0_OGw9F?o(@&cLXZcRY)p;GLeWsP6nIvdze{?uQt0aGc7f zC$)w?2b{$0D~An$lIQ$(PX$P4XcDqdyw81WyNo4Zo6d`vFG7td#-&e-OV;OvgqJM~ zgU?EZsO&Zu)t5GY27nL^v>#$xv-!#1*Qcv-?nID;nFrJ<4n zyik3WU;NaXxN$Z@KQADZS9bSAce|U=^&xK@(iM0Abhw zt=GgsaGab0QUF?>t#6cjDI{VBPF0uuF5`D-jX1xYJ-Up3W6RI0p!Q}Yn)1jc)UW)} zs#)OS{hL1G;a5bIckOmw8B!lWyfroSEUD0EVmr{F+pt^s`d?O|It3X&)XxX@=c9yyoSGw~<7ho^neO2i=*W=@`fojRD^r;*V9e(+ALe zI=<8%0TBkL4m@!8ge3SS*RF#ar0^8<9A_uQSl(W3kLFbxsB z7|Kh$(6}9ZY&HAZzE&DZK$Z4mkX?+7l?xQE60Jmm9)BFSvYf$I= zuW6ctXi>)0+q-Q`l${jpsrpgw;Ga^mrJ=4}=(}W#e`wew^PIaCY|iJ``>=>C;N~EJ zD>!VfoM^~3>3~``8`kS`Iy#APzQ-ZZ<=SM|?_f;aD5aj?&wdQ?lU`pi<03QyCAP!5 z&7;fk%Ho>Y10%Vo$agk~BE!KvL%I4fI{bnubuZh`{gm#^$NCH<(ir+8P8c111&&vb zVWLkySDrtmFGmg`eMkP|OreaS5|_%M;RDg{y3upMVQC-F+V({6RjLGDfm-Vik9*y4xfFX+uY{on~clN(Hpeh^;y0a2T1 zX0G*-asP!(D$z}E8uo)8J=jhOGUoa7=ixBbCuy&1W>~?sac;OzjF@b5 z&3icx& ze*bhsQhWQ;ig(|3ShivcRiVu?x}_yH$gI%Efeq#EMV@;DZOFd6K#zC zU`b>s2z+7manFRE;4xE!!5IZu@$ZwZ_60H9?(0C+(kI%VjXxorTpLV$jK;E_X4bdV z;pPRzy^C-wmR)gR3&#}-3H2e2i}$eSq`vUc$N^F+x8rHdCKFGzM0%9#Dp~v<1Uh&K zsIRY+f!V|{e&Z0se(LbX?Q8aLmicBK;zxqTDZf!k=1dA+8J|=(M@E)wF3~D*c?*y= zs}cKVzb#|uneCe|b+%x&{egGu4 ztw|?Ow$01sbm4=apI~95;e=diQqKi`G>_!1sZDJxeTY&*Id6_=jsq3Ggo&eh=Xhpq zDWU8mPDh*Lyl=W}guAGt*)y=)(<`c~3`el9B=o&=v}PHL#;mrNxX#{R>NE?sLH=^_ z4t`^MLBF)uTd_L-5=DUgz-oKZ>YL7Mf(|heRc8Tu)pntKCVVmt-2AJ8_V^D#*s52e zo3WtyfE&39PO*L`2;nX*9z$eJ3R62x`?HqGLMUk_`g%hFo{D>JaS<#u;0Z&c*SOsj zF(1mTS(>G2myz|cvo}Y+(TQpbJuWWmc>#Qh6|Q~`M>WO+Ca zhEx;qdC~WZK^hNm2QcuwpjF#59&N4gc8x^Y{@p5Zdq>1+z}S+GLh5Y&x+i^;AeBlc zZA6x|D;?TW5umhimQ0RrQ`zXZxyAynB{c?G$|m`=O3^So%f+Ht_3`hE{k&)nwIgqe zQLa-jMVi=A9J1fTz41$fQB~ApOl~D%cG2w2fI+2Nkpo~dL-<}@6JALSJ3OhYDM}H* zMQK`YBPSY{;sx6`8mifLnhk2qFqUh;;SNi65!?jD^%d(E3@HP-!G4n5ba z2@mF&R^Gs#?puZwkUHkm(#L4B9MX=u@vb%>5qg7&PF#T(oc)HuUd(VSAfXz+Qh67zpmR2D4!L49k`B5C2Y5L}lRcRRlAn;YZfg_obJnnW zFx{qHdO}N|%xse@ zgH)l8en+zdH~Tf~DTM|c56NxP4Idu&?{JK_&;#fC?T2`GvLw$e=V3adcZ!{n$(#}?Jn4U&4^RLN)gip`}$0lC4DvQ$}Gebv>XMKP*LN2~(yT1~AbmNpE zY?5+o14PeH52DX=f!C1c-vn_I;9MV{CFqjuA4TFV8}>|U;d%Q|^w9z(e<4ls(vm!g5@wqj7}_au9}c`=ST3 zxVs}+fr`F(o1eXVZM2@tED1jAaM#^qB+`WQunT2~`G}C{6Hv)VKjDvNKOo}#+@E|V z#!{2s=Vu&4e;_Uf0vQNC4>qw2wfBN^9tqmy{a4C_pEwugLsKf*989L32icF2ajGqV z@Hr29G~xS&0YxW8K(U#9OU^O*Se^^HYa-4+hIER6ac!=MIF5f)Ea^=X1p`7Zvx)GuCI!?yQF?yo_Ywa1gE$ ziSR9zOoP@!63d@Ombau>N}VU<0?Ioy$)SJ}GODejr-X@|KJ;d}?EZ;O{(zP8?pwrh zP|p2nwhsd3cu#vBv z=qNLGpT^KrxQc*Q2xqW6;vHOhj}OYuJsIpmrQas1{ zyg*)G+4Uha>&ENk+rN%OZX|DOr4yQtfP?pWf0FJSr9HptnXF`AH}kxUdE!|@=BRg^ z_wXQ61}O&idNif&AJA{bA4~8@L#Ed4m$v7mz*H5GWeec-dytCIbZ-ao96G_Dx8LzdqB$Y^G(q?mfBb5xi@xiKju0&Y zb%U|%r#k5YlpTeCIB?8Ic?F&61W_zls|bnuFtNza&XUOD;0`wwq6+q7-#=gjQamu*%!IaeBNR~kG*LmWCB zMjITHybkU4UhMY`%`*4XzQ+oFvl-vi5I4gXH)R($M}cRKVIc^YOwQ!dOu*4hVpt4< zRXW;kl59BSsM^Ck@QW+e0Gu$(4ToMu>@rti|Kd9mE<$0i510wcb9C-X7}uF2njh$@-qa`T?xqE|%aP zo8SR*$FA=)sPaDb;y#n?{-HW_^mD|pMZ`FM#E?eB7;PQNkp4jar2E0LQ6!wgHp zQHmcy%FmRPAWedP|1Tq{Hp6JAJs9b~;dFXjbS6+&2W3}B8CHjFSI1Ak^g5OGy>~Uy zkJ?pXG~os?(*Rhwz|2fw79r#+=J2Y|;nm#IRUf6R*+;7Q>8mK|t658{=t`@3t*bas zsu)kI1&OLCh^krAstD3*;k0XTv};jUYDiXUvG{6{TWg3~YZ1I^@Vsito&awUoIW4` z-iJ8hhXAl804M`a!~=l0G)|Z_0K!55ytxyuIRNdziSz(~fd@cLaw13qz^OaosDr6! z_1iT6Vmkgmi2dfT5%ZsO_w=-`H!w&MA3R|b;NRdd!WjRx0`{L8e~rlhS^)q6VBf$L zzM1(;^~b-p5fJ4cy6)*XNgn*FCwTq(fjYgFDPdvL-;rpo+Ka`8RDzX;Vnjlv2y#%0 zQHEkX|ikX22$H&*|G{I>rFl ztjkVd5Q;5To;@%S7W(Z)zkNcmU+@a_)ZhOqXPb4KLxeCvB36QZ!>ysMh3&u^s8Bfy z5kOc)L}eub4mVOKuosWFdi-8SWP^<DJWRP}PrDfl?C?!4Wrh<{aBV z@V2!^rL@=rd+1~{02_;r2ob8*BEE43lU>=$#86W9k^PSLwcQ&vd#~69XWk_cKIDmp zkpI){VD;WOP%v8(OS>cyglYA7TzNn!8>mKH|3S9rNx*y|1#k0!6s`5*>KIXV0c)A- zfg*d^=(j7Kd!$uKLt;grXX;QJk9(#`(*mz_*@fFA1jq>VJ)Wz~L^(P4aj~k!6qHb^ z4U1Eu6&w(Cy8`qD3NmsM%9oL|Pk8*+#PmJrO`CkVXqVTvz;8Oh;`Ig1L<;eX1W7Io zduApTBOLc8I3Ur1l%k2FIc{9V>=h+PHCQw{-{F_6SB-55%BL;%t z>s<^Hm}hbrsZKh6cXL~EE1w3>$zlF`uVjBhK=M||%)pfT?s09=?IZE-*sFdlhy+2M zyqIk@IY6EZ&aL6g=B7(od{B=NN?DV!b)+=Gm!jkwX};iY?%q%zh@pW#pG(TCBz*I3 zo1EQ;fG3~ahZ0(pyUXo{gj|rhJ8&|MyWb$`Hk}Yr2)-m|0qJRiIhpUN*>m0zKAx1; z?d^4!y509uY@f=yY47@XPI*w7-%qUkkTescy>Vp}kw)!b3ELZI@SQ$u;Ri_V)(Lmj z=HyFy4@-y>lK48ZRJK!DO&FFtM6%exbYhDr>C!#p{gPE{q79$>t`ouuu<&Ajx%r38YGpbvDG zP_*4uDJw4FI+j0~F%xyUX@>B?Ky+qXS1MJ-y}j3kUZU`F2`3l2+xzgYW5}}QsXDeF zGWB#3_ScLrZ^*u=+7h5TkS^-5JNx~4q^A9AOyAG+IhtlrUF@+G8m zV!2F#xaiATm?gYVH8ya^*(wc=tMr7oMsrU=qAv#n>tK7R{DBj1>$6Er?(}afA(9xH zb%tx7L6&m#44#}pWSE`K=pk~1NBh#&jwV@)#1aq$8!z3rxmUOFAyAKSQXV|;e1wyR z3EUwL&>BmjdI2de@YBa?9&q1JlG70c3UaVHgO@xa6na`ANg)RM`gd@dN)l1Jb}r93 z!Je^oCnVp$+1)>RGEC(J%DI0$LIU$#+SMq&>~w$4Etj&`eFysug9v2Fgs-9U5bXx) z6%>f_szvs(^PH>C^vwNph{!klWgwKkF2Q4@Pi##l2Oa>reIL;9{uV=0=*4+c`N+=TC=+Nvo>>fJW}!? z@$SKX?6(!T%LjqR)nP>ulAtfvnX82%Ep74fx%#8sDYuMDtU?4g8n$(WePH8oj)^Z_ z&rt_7_un|O^~*6AAR&%biqBQw%iymq>&~)zRd;JcCZVje`f1_m=9J@&c8cp01Lm<_ zSatDlTuEO#@kr z5GX0&^a88<^it;(lE!OCf7}L03om`Mj?7q4FLm!R7`%cDja;0Nt^J+n%hvR(mAxO? zgJosEq=NeRpuR$Q*nt22;?7^D#3(Lgn z9TBZoZih9;O=)zFTtm_)?bNe9gZ<+L(Na6MH%Dj1SA%4c!$*ZP>suAVhPOQgo$pdAkaGQx3IhxQki(k#pa zjI-2hz2JZXPpD6+2u~HmA=^|x@lo`zs>MRl!#DbiIm_XbM?6N1y2&BFtW-VTij6fO z(PiLykKn}O?Px_b%*53@dlzC@(|!5}k^_=6eA)(L7aYKvMmH}a56D+cORnec zv?7|;eCDte;WoL9?%k9vL;CA!mLXhOtP#{IL^hWc-xH%u<6nNB zJ}lg>%cqg@<4N4TW^p-VaKa6QCNRf4COl?v@u|lZJ{US6+K|Q6TBgqQ5ag+$UPISH zO8`)^?13Jp5Pw{uS?KI*L!MwcUk&tOZDOt;!-4dAwOXr&D5&?atPE>8T+n{Tne6<@ ze>$V)bIzKfFqkBj*bjBlFmTW|Lk{40Xk${+L#g}b1+TJ-KbYxYt0Zz@$fb0L8d29x zl$T=8A2wS?f`x>iX^mpW1pmPPW>3Lw$#V47;Hde}m5Dok@-s&m@a!|nV?CO0;rip# z1kviiaU?DXip(>lO~KBxM{sTKrCi7F~=OZjn&0~sRPP{xMa%n#}L(aGopNY(RFhTXR@>j|5D zXwrA}&Ky$i_O8NP!Pp4(1kM5t+CKPj>vZZvGEf6vVYypWEdHz0$pzA1rxTK29{jjk zSOaU6VmY3q-%N{3o8m6Tv`8Iep>g#emUTW-C%zxTO=K{U&aqMaY2smnC|PVGt>idU zev`Eu=k5!BxrL6V^8m(EQrHgaOc@=+U;0d2UneWl_DKv|8{eOlTt!wvB;_B=gHG$^ z#fLo3-)jpq`rjIjzfbGj-2DtIBe|SMb+__9Z2{6jk3R8!rMr*W28@!_9?3<==9D@T z)u>KipS)co0qY}D%Pi;^4;}W18_~OzGu42*c`8ke2gi?8R7yv08Tde9CFI+GKQDkk z;UCrNG_*W?kwymBg5wmn@nXMjX+k>SZWXc(X1jc1XK+$+CO8g{ey^4$XPfL%{%T$Yy zAg<#b>rF`UF%KKZq3O90t9)R_C48|A7W3fJ7z2st5^l#MLyUAjUf^lq#+&`yo_ah7SKnF&z3u zk?=)pq0%wxeN(qBD;f5#C+|4y+S;{^h+*Tj??xc%;Q_h94odKaY1k=Tw9d42Zkxcq zKUBL?A%pr5Ex6{ZSBi_i$=1MuUD|h6_e)Kmd;)jT4UIa|oil0M8QpG8^rwei zU$30e>Rf}H$cpHNq1WC*I5lq2@2o4DumR|WG;WK?dXbS~1I%fo9JXsoDvFWi8JW+Hf=9} zQKUgP*R2+|<~fA!gydtV!53Y)*DK33diO5pg&RFBH%hT@x_E74wagHC1vv$}wD~n- zy@4$6l(0yXwQfNo*LNnfUHaXWOV^BtPYnBaZlY+)3~MilJ8$zlEAT}0e_42>pN~Wb zMjh;_Kt{}@Pr8QVw9vJfN@OcN1uYi!$UjIz=ygU45rM2mZD;os;q7Bi8SwU`7GckC zI;kZg%hCRwoObDgXsIc@_5=upT2>@j1`uFQo&&K;>7cz!Zc7XaT7A#`wOwDxON?$C zWd>tzM`GEyt1EQC6oJ^{GY>qp!T2$CXYeW6%Yu6EG=iqpl*j;-@V zjgMN?7lbwb-M90J*Iq|*?K_WX&gqwDu5^t47G=$}^O*;RJCtEb%FO*CTjCHqYgVz|yW>Jh-*oV`WBLYE8@ef830g)q+lWDZBV^RroF0=eSv z@QX@*;Wck;3;)4-(?G498H)|!R^^i%T=SDqw%piHlUvQcjpKh#P9;xk2VubxnjKe$ z!_81$FgYMdd<&Fq@9JsBY>72M(?5bsHK$u{-XM)gVpA~b+6YMOo6#9mJr5RC;x7C- z8aL2C$&~oemo3QSd)26`qJA1`n90cOa416XU`)cQ_4T0<5W6DvB+IIq!xiS9UK;B| z{iZegq!*51>j3oPh+gu#UsD~UR<$`laHig6*_uR%AW61ZbP)MaOG+8$y#5@{RN*Kb z6)(TYc1XY&PB-Bn;Nk-IIR@R$M2jvSDN3++$0kJG(&kgY!4`%~QJKGQS|jD9}n zHC>?ZN^LLX@m1`Q&?}YdidHz!tW=pOW=yZVjj2!b;r7Qz=jC}ZM!2!e4vAyz?#z11 zA;GTvl1=GBn6xcJ9$j)2g!@JfO zvyL_KO`>9-Z%kct2VWN1n~Hz zWx6UF(FCnjKsAgQv-Su|I0)2VO9^vfzJ=*eBv5AnMoO-1WsWCQr)f?$5A+wXGD)xz z{FcS0rTNRzP=Z(Sn-{LIlh@R@Z{e`58BhpeK`*AGPw#ZfP7CD@=5+Y@Byf#($pt_Vohp0nK?l#RE_I=mn6%p{Bys0G|(?#hWkD=aGB}t&2SRP|$I$ zHxc-(cXEbk>bC(w&ezHBNX9X4_FFIHpb09ne{Y4(q2vuPV|=xJPs;BkJwqf@dipcp zt*w5oca{v?R#BKv58s*aY}Aq0W>&I+3K#OKuvvKjOS(}i z2^O6^OsZsAGxw>z&zCOBED!D-Q3(0OxiFC0?b-K$Gjf=YT5L~yLGaTF@0Z_+=zN3{ z8F<~)A$FZ4$?YKZvrsFJk;$Pqp--or5^;Db-N-w`Mrr7|x#1(3AaG9wrBjzBEZX>t~%8`64c zehi|*1ePotcy-w2kSz{Oa%Q<@kBW4IUp?AV8z^BN%{{>Ss4%8($InA~9lO=G)=2H( zT!f0L=6yB!B_&_GArp(rLP+mnJ@%YoU|x+d%C5tFC<4M&^RJv0)ptk^jAK6N9na&O z8lq3lZ8>S{*)T%2$pbf)_+}5&?V2AygU>MbDyP4Dqn!BKdq5)ZDlvg|X)hf8!4dqZ z4%xp)+rT%ZdRr(;{P#qa0~>FwqepNVe!noHTIiDGJz}B{D;5H=pAWDeL&!>ArsXg6 z3XgK(5<>V|(Y-eMdDoFWFpo$}#p-XBbjYk)?q~R%^XH}_&wplRwm}FMix=OOy(0A^ zZCGeXL!$VGM#673aD3Hg+NE#=u7V#=>uwErkzHS5O%q>a{;TaU^k3UyoL_GIc*l4H zwG!$SKVvYm!?!7&ZtJPO)s$SIE_^2Fj3}*<*#5;TMf)+=-Yh&U3<*PP@clPhs^O&J zQ?<^ChZ8980nY*W6wHslI;zu(E6W;XSuDomD98G8mht5Uj*s5kZWIoMPV1x9d(tr3 zOI@`6^Xqt~=RUJbJezSWSe!k`p(oUY?OJ&)uEe*Bz~0ENv)(VGg2iNXh-HXb9|QO^ zh#P`mZyk2Y^dd3Gf#R5>1hQ5&z>7G=J^t3(pYAF{aD$xLj{OY(SWHbj{)0fa){8nj zx8lB983B7LofHtVvHxv+!12%qa{Orj4ya~%UO;@P!f!c;e?M*(xaP~A#5rL0C6GJA z?oDo89l-J0Pj=ED=V6h^_Bh!zx&!PEFuo?1BT;_Q z6~$mn{~7tnKAR7PsZQE=hi}ue*_@lYZGMee2vJQghXZe-$ZD{kqQ^e3VX3;q?X09; z)>g*t6G3x%(4elt>3C~_&prH3Hq*`I6YQoKwy0^^*`V3ejq)Ep+&wFU9&fHD=t_x+ z_LopL=m~3sHY*w;HaBcS}{t8q&mbR)D`G`+M z20-)jOynUEH;3U<5mNVvN@ZaJs9NA~dhLKa*~Y@^Xz;nl>$H~iE-my*RuzSJS>HKX z%3!Q_r|ToL*5F}}DsyAL^wyi}x+XJu)Sf#cED$f8ZqFFq@w85S1ijnoHbi8@io$Rf z+4C2X&P6+dY3ag8dSiYOaC!)k`~obwbLY<7?E{;{@vMIm|J$Yutv(N*=RVh}X(76M zogv;vos!z(=1{|=%8#UW+{&o!D+fS=g+-KFDGw#Jn0OXmt{r*7?t6ziEvtvtUM!RnQ_j8j?jI64kEjQU-11|{2bO)TVN-C zz#_lCdd4s^iOx4qw?^uTHQ%ahH|@cE{G10PC5HWxUp%w8N9HHvDQaxC4{O%PBx#Ph zBn4Gl;~Mm!geL_bM_xPH7hK?m)!AK$0Z=yRH~28Q8rtUo$iKYDq* zpVDEdt}OJ^ej+P#z9givb^QYQ77uV@BSF1=2KzR*y=z6bT&gBZGF8Tj>bk*!!Oj}a zzKMA@W6PIpLEwo{C-hY|EAUQMy5o?2`CA;}t-7c_k3UX6(zr%=UL_nHydar%)-3~m z8tS`^GwkIO_+=CGIt7wMC)pzdDt(bO3?{fcccj8;fw*Zq)id!YYZwL=uNE@lZ$F(o zlIfnDY`VKTx*I$l_FNSOQYT(|+J5F}IWGV&~KEsHeqN{O{W(FFl))MTCcO^ap z2+SHICujPT_FCtL7jT)apFSj_zB*5JS;_8(qk>UQ0>-IxM^WxO?aT(3bM%KU^V&7J z$t)KnR0F%|ossK{RS)EnrG| zd#y>q#*Zm^Ij=Nr`zbI6U4}FFh?DNJ1@!GZ{wI~-zyL=fGvq@O#(Hgq1aUnIYws6~ z(+oMTQKf9Yf~GwGfa6!r69wMa4g0waMUmBgkR?XxA^#~e@9mHArI=44pPt9aR!E8k zoH}p$=Zb$f<>0n#;K*K!SYz0)tZ>LeM)KVa4z!jxB<>8+2GN&{s;0=&cXns^r6JY^ z@&LMh0tIiy3!%l;Beiu7gUO9^+?T=9gs?{BY%o?&d(<(MZ(?RhMct$hD4lah&181^ z3S%uOFc$hzz%<{J+F`Dnn(6-YL?)9;(lNtEGFo}KMq+$D$y}s{EeuPl1l(&n)AQW? z25V6F(e!&*I8RUq!F@XHNyRX@tkChk10^50D&#`C082Jr7cte0gvpyW497S}@AB)d zZ#3R!uHzobSaT7K_yS$cp)b3MXRZ?AD${0d0ny27FVF55M831x0v~7nlABCzr3^Rk za+PPIjx8Gq4WFNA;H4jrVx-Ik*(H<%XGn=IR;%X7K$Rg`n-X;E?Qe{*{h zcirkKwD>fxVw>ecU`}IdMXuKgM1Hbgq^-f@iSqA31Vjf3&v%T(9$QRwPzg@KLGPr4 zIxU|0yK_rivUFt!XDNC)R(~~Wi{6%kMJ3VaT4TK~EXcI4Ck`&);qH5aMvgl7_R_^4 z!BKs$6)>%Kn%n|;zMC^i3k_33Mv50B&NpnV&Vz-d2N!ha8^2g44NQ#e->rdoc_gqF zH_%6Q@@^5QfLr2!zMaoC=g9~NunC9U$nlwE$~}bdyUAyLCF1A$ET|g%-0g)%u{4RN zsYtgXbzvU1lyg?~;L>@TC`??rM^pW7aiWv9LIXv6@o}qz`_dOTyjE?RZ1jl5n3$W>+`^s}OLQDJ?nfo$(dusxG7b-sY+yjHM*^u2UVN)BiXM@4J4LvA%%M zV}`ga!T(KD#kXC5BPJJsyIp*r3|cQwH|eyhL)Kp>5Pdc6aHwtIJ(Q|jZgmV0fQ7aE?2qOIstQ94pV0WML8icrjT+j$zlwn1$c z!sSVx^hK)%eAk8J!!qb*EY0@ZjjtNBTd5}kn%9j?GSx)=1fP$<=_@Q9>|x}8wK*>S zk1tt%d2p+*y!OR^qCnlxuAl|vv{2R~QHUl;Ax+`LMh};N&y$W5Q~F3N%bEZmmg6`5 z13pKd3kL@T7(YP4Ny_UuYV`FzJK&iB-T}vfmA6{fb%Gh4;*{Nd^+bAJozhwP^*WI2 ztalxs&PQGeW5{{9=7uhX5YhG!?g2tlYzd0 zyE;?kFciS9amCk-#Z$Hz1e~9H%NW`|!1SeCA%#h}9e)v!H+*b}ibW;BzO#ntM65{( z7oVPRMiPAawVNgpuATSYdGvA4^DC06V&bZ(FYPQNNwJ^>J)D<%bAhmOScrAU-T3QR z)`9ol>ckp~5^yjus>Iwuyu9*R7CykMgyN`}5k-v61ruIqrmFrtoz$?K>iluqb59&C zBbtfU$%~sif{*l?8Z+*2ppPj zvvBm#~{H z@qh2YWOm1($-?h4`(uX+YdKAo-Y@&u9P( z4Ib|ob>P?mOU01f!|gY;DcRAzi5d4@uA^o3@okDued+?SLZJuaB+rx^Kv z!2vKRW835DAr3um$#M>Xr0dT=yOc zoH4Hi>*q&3pL=7$$j~U89ZFk5W0Z;Z!IrPWoGWsjOY#2u3>Uv+m$7qbD)_fc#Drg3 z_DTAG`1dnJZ|J)z-?KhW`bqX~K%PiCi=sb1>D{W`pC~8ubKV}^6=Mg7?UVuIF0Ndk zL|Qcwr#GJ69RlLWFZ|WoV75X>QvAcV-1jCa5To+WN=ZIFq1gff zJ=qd(Ly!yfzVHlO|F&^m5=V;5c6yzpWxvJ}4W!zzVE0|L6tYbgzMmi=U>N>_G@v4( zLf{l?UdxVI?|%6k=4y$Nbni%ZT@dE&xI^WFD+aX17gBdfsWakaxb))<63)|DEogX} zd;H3Dm4?tXLtN5VnxM@deM6nL$EZ^F5|pOGy|~7oiC@;cGr|6<7(~J^)h?}0M(NoJ zu~u8i?|G{QzY19pd!Jl;R98m-P|1c%)=mumjH1V<6L*6b$zxln--cvtVA?!sZd!m% zqvPv7yI~ZIK(vD~!Ogu+?{4lC6f)G`KpT1fmNDsZEk$~~-F1C;Hpc>n?^(5>@+JD- z{dN`)Z5PUpeWNWUrxZFEi?wu?ZTK)dX*RC;yOPVt(=h>CwYZQiK7!{nb}?EK&*fze z+A)46r9tp5)osYo+wsV>lROEviDbX*W~sLtufYQ201q4b^~WzUqmo)5R<)bMe^01i z=sRq&vm0rT+qHKYWNdwRW%8RH5U zRB-U8COPe~VKHa=ZrY9H(JKA%Ic7wU-pS4V3x`Qw9P~bMFO)$rvmmoVjYYfX^@fu* z9A37oJzPAn zH8!~e7(qeJY>{iq3kr^`+2U_Y7?>I^O^VZHF_yPIyOQE?Zk8yGnl2!5=HEFV$vk)J z&YT>mAV3-&e#2C>6IY1MlpfAMZw%- z_mXTk2A|6lr?f9-(YHZT*QU!uN9DCn$qE5ko~7>V_6lf{d+Iy=Jdgf^d|<=?i{ys0 z^P+kglxEwn-EKjn-)MzYO8i`QJ0@roIbVjouD^(bH=zo=Br zHHJrF`q2lXT>`YK(l6Ef2vAz1ALTZI2ldwcKRYs~(qj5}_!tH@lZEWu1Pbe}znpnY zhC*}I-_JGVDg4;fQuoA&#;jW!zuPBEaXWjl?tm?a-PN?Vo|H#Vm2vZ3;!BUzPUm%> zdE}h+J1ttoA=N{!tye>eORGwKn`aQ-t)Hh|Npzq1Go$58mjrGhJA>>*6dvk#{a!$L zASr%7_WyMwmm1*JMsm*g#I`z$^I+k!BZff(G*Y)+N%Lg8EH}tEw5KfpGIj9tqytI!A zQ1?ir5SrU!7CM%~@E^7@>Eyl?_gu)Yn1Gtx7EkesOq<1#bhp`v@{(a-Vq#>_V+{DoKB{RI>3Z3ZhW^tx;#L3DHGlQ1; zX#_ETa{0R%P+lv&$CDhgx*66SPI{Eek9+1Jq!&57(=+{p;<1dMHY@QQ(T6Bund&GO z1_lXeSj)h$-@JJ15CvLwQBaj8g;uRGLzBoo*OKLy`jLF{bTZ!bIhw|h;)5{vUknVQ zaucJ8zPGRR*Uz6TVBF>fi&}|)Dnfb(8Pa=tR7I~}-{PQtI%S08Xcl)}9^`c|X7D?( zoTLAxaO&PewE!}oH^K2`Cy4*o+ec0*JWb(xpuN8i(e>Ge!wI9vf9yYUc$>{z4zq`Q zX10@F6=vIC;YPTAYC=mZHB!I>Y1$LLA`W_IGd^x>mmi*;gV@1gKMZWjD$7fC`Npa^aIL2WSl6UmGFYB}Mn0C+?+>ILO;)nimmH-dw$7 z&OUO_T9byHTjbq}{Cs2g264c|tIZoXOQHWt#rkX>ja}M0M_RopEF4wGts?$WziTtq zA%a4QdFOypIECNFz9~*5&$s{7v-D*@4fgJ(OW=-M@#U(B&WxI`Mp<>#^Q-7oq^=N7M(NkI6?Zzma>YL1#cxV6>)k+ zQ523`)l%=|X~3!6)M6sxZNQkgGo&|$eWi^9hz=Hyb-s~H__HAB>#7a*Jj52|W3%Ry zoQkT9yhHk0!>2n@X@r~huJgLh$lU)AmcsC|3LqdnFF|l{Wo~3;WJF`)QZs52#FOV)`Qq>QL&X4wb#>%J!@0d z8nuIHZB0?DK3&f{uJ`)B?|Spk$vM|K=l473{@wqaTNUEt;>_;_N1+i&S2dutgcOh; z?g~TNBU~NTfSw)>;vgUdOsi^QtfPf+hVy%1+~8`!JFaLClqbx?69u=|Mj`Bh|JK0{ z;{mruqU_-)HJ~oS!^0VV-PImp>k8z*54SyuTK{Tu)73*k4#*Efy11d>Xf*O9-OI!2 zt}en()7HaQL7~HK47V8{E|%ezFjxg993V5|IK*{zg%i{MqGi{|Bw#-pM5Y&f(X3elma|U0vZY z4}=%O1M{DGNdIp<P}t zRq|gpsrudfzRUmbYT?dsmy<_njj;c(xG2iW{A1#uT>gQ6^3cEQ^E(w)$^WEaRrOz* z`Cju+?;gt5`$VqRloUUIK_dTZ0jxiLpY*U)jG3MVSM#7{ZTPcC4{N&g@gecl~5998YJ5JU1HY0oee-jh6|*ACHY~M8H6aL&uv%s*KUwUTqJGk!nzHvt|SHSw;SrN^%;el6(4 zxNKZ$W^#Lh`m6V0JUJ?>0-Mhbt>|VB}^q1R8ow0(n-&5}z;{q?v z>fPwG0}Kj-N>4$bTwyFdT|CoMY5$3Z3*fFM8 z4d_Z1`l3OAi)a-%G^6of}Kgw>z*pDX{9iFZ<-`w1|*;l1ANSKVjtpX%nCf5q+x zLsA*;)W1w&N3xsVj#{H0=QmQ``O2lvvIBea;c2Nk#f4ynx;vyr{%LaZ(?7lUO`C&V zvWCSV{F&@&rrQf>C4*J&5oQ~ncppx&zJ95ub5htpwkKXsrJqZ{orkhSFxEv_mS^uOtbP3XaMqm9 za5>pFQ1bpMr|=TBmk3|Z9m4o%xtlMY55$?e?J~39#2>W$ly7olhI_-JmO>I6gUava z4SbMn%sIGg7>F)>WhpB4&?K&=w_Bs0INH>-uxvu1ZW)Pz4GXs;V;?cSF)lh)DRp^C zR|81=Oo&RmTrhg7n_oUF@GVln6gVdD|SS)0uH@7ZZ3yGYDb@A;!-i3o(S^}WISL-VttA6gTs)<=mfgSEaLO)!{j`A6=?uBm+_h!m@HH{_)ZTf_%+` zly1n&DyFXf=*5IOV0B5RXf*I(!#IQ4L{jNjrfaaMP)I!P4js-HaI>tTG4rl=)lUWoC_H!LJA|0}eMOhwH zi*Vm_)GXN-6Ah>M)4ci*^Sh0$80U5rS$3zyrZcMxIM$q-wNzP)x)4qUxV@i z$9^(*InfJ`kCkrx2hQMz$hQMz#_X#p`ga;3n>!URC;_I`s^gilM+-+_MPkqRMs{gI zOx33J4!XTCK%I;`L!o_TSoCI}=HVUnqwTjyNDKJAXP|OT9+1&2|NOa$uN0Y)SWgw+ z!O%faV87D31UE;E^HFOv05{0@M#hBVf^y)6agmF;D~Viui-Mk2Z0(x9TkM*ez;DiI zJlLp^C((_=`kmM7=}B2h-+uF9N|TbtLyZ-V)wPK`^FakJ8QD&+ckSfmSM}19>u`sm zD-TIVQJq=%_rVLRYP`e3iBDJj*8{7XVcJwR>jhF9I6Hv>oz)kG)9)eb9}xNBYef)2 z*BRjMo3eB!=kW%ecxVgeh4S?75le)FL4DuMSj((9kMEpox-RBlT()ahy$qdGa{RCijrO zba3|^)6k!8aP`Z$#hj&FSt%x+%Jf9LDB@DO=+#MtzQ@NBM1RmQ55cM1Vzp%bZR0^? znFU3z`NV1mhbnJ|>uCN%(|;4{`HvjO3d4amw7I zuZZEx58fR&Oclj)3Z?~3d^9fEyt9q#bTyHXoSvbFUh=)D1~Lz=85vZP32QogHO;(> zF%Bj~T&N!hHVMe3TF3d2BX8*y;k=re7Wl?aWLTqnm^&Bls1n@1H%6!C?WV>K?r}6q zvQ>QJ#!&n&s@-$7?+svmQC_XttH$-U8;twaEz{?(<(7AYb*4uh6ffFkB{fiak1**f z>#;i^v9X{b{`ncM*l4m+cdqqAOI2`6^*7?-YoL$RvbA`j4vY0Q6iZ`Ap8M8*l*U28 zmT#oaX79({j!z*2k~j&R_NEaox-muugH!uhhy z%5BDu=BCvHZFnia8I-2Cgby=?Z$M$TjT#T0wc()(^wu`n!=y0sPR-<-1om0%2xBO!lHrSq!ipS zwH^6DndH)=S31O?TQdaClomWqE}*AAsFY(*y!l8r6MdSj=IEiIGvnA64`bRxaM^;f z-y{NjGN}fY984(L`p^$lNqmzXVNxz6%OjKY!G=TFWx&d3o54%*tWIyGtPz$VW%T3I zG2SoqCfsDB*&z|QfQye4Fh~WVjR3P8EYPTd!|WZNd$2YZQ*!V2{njq58%E7^dYX?c ztHsjF#!Yp((VxA85JJ$s?i3Ns!>XV^Q^x1POP&~bW8_Fj2PG8V&GS5k*0Yr_L$rtI z9bpE{p?Kk$?pQ;M)?imZHLZyWm}{lxbtF;O_HZG@ZGf?_w`!NY2RhsGhlm-keHe3yo6KN)q)7U&!$X5hn%Esw4GsIEr zqIQ47iszg3YWzzNh+_|~TOKD`a&rkbxR=9-$vw~M6Ohr+Q1bb#M@e#;p4(GA~M6zZ3n5~UqSp-`}$g+5a8|A^8oBj zZX)VY@CqQ>vli3MS7R_VUqgC_z(eTM?5(Z3LwyYwy&uO&3zG+J?T#NWq-X{Jv)>7i z$9wip_pecW3XD%OF=+GjoPHLnl2qyy?DnY=)>$HbOyn_hnfX99S-<|ypWId-g6AuF zwyMWaC5^=Te!%52;Ll$w^y_f2H3zN`Q-UDP-KL!5)qU zZi(w~pm)$Vz8j(@i?F`BQh%>ldSYvx_Vx~!f{jFNIz6w4)A6Ftm&9ACd^&b~$qPET z+S1V5qicA6Cg-wO!Lw7+_VDsmqqC^T8`DBXbHuIdOs=a$}492 zNA?^Kd+N}M6&K2k7C7>n-le^#EA5N@<7kQ+{cV*|Z{;nPe}$)xXu(ZVsFcA-Zl`Se z9u*xpxZukY7`cwNF4M)y-r(7Tl2v#&+B{?EK8#C&)gFMy^En0h>(K3B?tuXmNWF- zV00xDf(cf)aiPoI(AhtFmheUNi7+R>X2;H4{XqrWX?cS<=qkWS^T3#4tZC`Q|bkEuD z=&k4Br)LLW20T!o6xCF zuET>pjYBB=n(~VSHv8j1>--b2^H~MQ^n@2e)4{5#S&CCstW@!&&bxAkTeyANgHM7a zx@AAL;|M}4=VNVhZa~2J(YW48BKMrLT&9rv2olHCmv=|1+)>r-Jn-S&a2!v0j#8$79#Ny5cw8{pCqG5^cd_bmw-&cV>fHVr8&~ zfgH0U{_W0p4~r3;B9@@)uPjNz(MocV49$RRJl33o`tb)B`kwC5utk#I9CEXo=#W$; z`kD5)UtqD~oFZK{a*&30a?UpxQ3fPUsuIB8^AfPGx=MZ@O)J+ZJoO@oY%*wo*a1!c`^rAQha zGv#pEygghPWuq0lf4M)t+=tzyQMa=3T76PM#0xCw0C479G%4bX{dix{yzBuHYbXFsFlw0Dby;a8@;RqNHV;W*{r)>*~`0 z0C1qKp?df0%5_Xx{LZ)3FS^@;^**+jWKL$Oe4HW~$_}wtH9Cr6UxP>?unJ7{!>*V6 znNk!Bunz!hRP$PmiqH1GqOzpHZA zyTjA4X@269<%lmgx2tp#Yd&GSzCJrydSINz$gD5^HnMv7aN*pFZy}$%)$+5wy=%q0 zFR<;Hnl#dq*j&Q0wrc$D&@}S#*3E6fTaa4%R6bO_(GmUj^qfjXT=sqn(6{+iDxcvv z@%=5bVCn9M``FKCvy35c+Z(yxGjX2$YfYfl$cZ2chh5k>;Z<85ztb2WqfwaELO%c3 zP?H!M*qDE!fn^oo*3ocNmcXc!F+?LkQu>|uDUAj`zU78ZgAI-2UB9cfS;rKW&SAK} z&twe0&SbxA&#B*MGWiiBJo8y*irIP#m%rXSAg4b#Pber%ymXm(iNQsu{6x9 zIx{9Fz$z`BASIe0tz;x6WF#%0oLcqB50eNXBdwNTjqq%2??NvjM2rwsL`e#5299HoZgzUSI_;%7T~Z8W#c&v&z1v zZhXz;`?^l2CTxgRrdA*S0brl0?{t>tT&)VwU^und>CoA|JF;-{2g&XmZMlrVG7 z*CAJWQ=NMlSKC<9Td6JEJS_(qCcE?|`@|=ETqXxrue76zJI;F9TgNRJOW1?ZQo?9y zMY5D6SsFrDE)`ua5?uk(DZivsA=g{3Dpn2@tB@%w|D&iv*{NJ%rCegA0?bt|z*Qlg zR?eALMQu^ZW>Lj3QOPq=#i~+8S69hZR|W8^#u3Hth-O?u@h+iRIM6i7D9&UwwJD0tlq@J}U2pzd=@)(qo8q@U z_sjQ5Piv;2q>W+rrAjAxTIi zk%(>D+n7>u?`Pe`Ip=-f^FGfX&v|}-yzg)SvA=tb*SgkP*Sao!3Nu=5I7x7ZAVGil z`3Y`9^yklsFZTH7x%w~81U(_Q8UMjCj-lh2%K7UD2O&w&GRbki=(v9cu3rp?alNgZ z4Gd_`g#QT~H~TmIf1Uv&1HFxO3bv2ufqxvIkN3|w`LoyP-#?WnnEwr&=+}$9zno0? z6($z`WN;C@gfPKRaJcT?=i*6-VqCvMBmW5He~D0-AjjrJ9 zLI#BsM@iq!#eKiMr{_L9XL|#0XZ!sI6RMi4am|VK`G2kN?&j>b+kWrgMlg{qbpEFu z-+0{C2W41wE->-|kr-QYZpS%6f z{Z2vQ#D2|OJ-zmO@AC5AZ@+szYT+*b8t-52_v~~2WzY8)d)l+Q!{VRI{bgMqVj7)i zuYE4|gqQ;SQJzIY#3D9^Ik9{{<+3`@frp&1pU5xQFZIi8 zBbkD?7THGYuTii&@p7q40tF%?zL(|VDG)A^-xRouf;sNPoo;p%$UN-jon}pe4wbia zjSU5kc?C0$@1|g{_iMSS8FKncEd^8dOWc}ONWsAYa-T{%1r{UUj07%Fa7kL3 zm3NW?PU*U}mo^im#b)Ko+8(!EuSB)Tp_qNY|H=7_2@ms$dQy@rq`66$F96^TG za9fQ{CP=%n!g%s@nhT$y z-98bn5~MZ0FRwLzPLQko+a+}J2{MOkdsSXMK`xS=XRtb&Ae;94X&5FFq_xl4XHRYu z-Bx=+-`ylX`iZPsX~x9Z0@x&UbDe=3BLduA=%o<~8k@Tv(6gkEf&d<^Z$e2FoPFSu%P6LRYl(iH zz$gU;ZPy;wpj;(P;Y#*Z3XC;dBpX}?Y! zLFRV9?cJG4kV&_;Oc_HzyCYSUp6sU}UqwrJh7*AEJ&IMLo)I#}v9*7NZ3TYQc$3DWtuxb$k=cc=GA<{3O6 zW4^a;Ivl286S?v)@LYAhRUeS)4g&7c)jUqkZY+ zL=iy0lIN$tPj)28ITa@JPGVh-zPn+64$t$*`7bhqdnkzc{o4ksN!SOQY$Ln$v1UdU9m)+e2g5>elwW(W#eZH@Hs`ytn1WmtYNn)MvJh-k^iSvUx{ZP!zo`T99 zUfqU^*}$DlRPuQe3n1Uunaax#N2-SWGNdqwOF3Z!Mnw&cl2gT^uv;K0`rvgAk~+y zcV5M2L#D8d@yV|gxR1GP^-rWguqZ=yDfap6Q-vuCC$P>=@<_v}TpLUG^E1||#FMPPqa%un_Pg4B&!y1L$z4a0)W3~@Y%kA}F;yC1}T zKH9u|CeB@sMs|Qj78_!x&-&oYO^|bk4U&}coXPKyEEOyyNZ<2a!ttd9sqooqYa7m? zl&D_AYsqXd7%E*H9YsOVmFv^CV?C{P6x|;+P@w1?wP>9R8w?Z2ehbFB9C|)|W2g*4 zeyr5nDjSOPQNsP%5cbRDjC%7}Z-RXDBCXuopAB5477Tuz>vAVf@twwVIi)L})f-B| z0nw^9d7KwnAB+Z*>nONeU%S>Sn+@}96du*1zoh7}ZFkV$M{jp0hgBGNO=~hknhh&k zOiW+mIVzezx+Wa&r~0P+!(n(I`S|GQyl|!9`=%HALNz$g`aIX~l*T@en8gwPgdiJY z-o&puLy(m-E6vV4U;|Iw1AU`6c>e@=NTuL@o4;1H-N*Z|dtSQobYBV#74Bz`U?0go zPyBcn?~}$b&Q-VZKKMP_A+8nYx%^9Oqad8ey1p_E=Wwo+t&o?MK1ab{@96)@-xKeq z1o|b8AM)q-pI^Ka?@&<=A^byOpDq3|;%TkfIsWGmzEu8I@79a*zoPm_-c_3aQ|~Iy z@qGQ?{w3q@^QlGR!}{mvUzg8?O8>ol(r?s>cd9%7-uTPiKm7go`O*mG8DHn`<%`aa z|Jm>lNAquY|IWa_Gw|;W{J)cdqA>2hh|xYcISiRKoc-WOm~q7O^h5Yszf~Sw{U9+< zz+DRYL-$X@MWP>g>I>N^R3AL5GfA}=>w}jKeZK{veWIY9120EEP|suwHnRI5L)*&f z5$cUOwA@>cc7cbZm9mhp@qGL1aK!Z4Qj-EvZqaBbehcx7R?6TO)SI7XJ*yOHbw|A) z9jLd|_-(Z}`giHwBXSM-f~HDAn^CV=&H8pQ;v3SuQvz{`>i(&;U+BJV&WkkvMh9no&CWh|#8qSfrP za|UrgpJaJY6(DVC%nZ>%yhEwWoke}WUC%2fAAUqFEp$|oL;K6 z$C%dFUuGbK{$|Dw=9nUV{7cQ3r-)-qSOTBWPspiUOHrgZP4UekP|sMlaajZM!;k2s zl_72xBa1!I-$QjHFGZ9moGjh29`zHpElj2Jpy1DJSc-aQ5^}bj#5!N*G%Gbke!#bC z_d%q^hdOJUvHzZGbH0>AJ@G!HQ?ZC`FHSS&BVTQxB>4j7xBf|cj}`Lm_J~%6Al6ka zFPF#l$YMT)o49_-CiQI*=vT@qPC*X&@0UH$Bm$%0&rccuDAD8QUC0# zSE-VS68;g?Y9}*R&i>Scr6W@h;vR6$N7}i=znbo&%dZa(njlWM)jkl0a?22d zrXr-1&L~Wy^RvC6Fqp0zOZ!^WSEO|~OfFAOL8Z_SVA+2X)qic#d<+)T1eSYrqIT_G%0Y3C4q>qr|*nxL$oU?GMfw!Os zaq3+}jq3*2q;b8z?%KKZzOVF*mUAM`e;K@huDj`qz-76p#~msf(~o+GITtNb#&u(* zAGI7ry;}{{>?+h-v?g4624X?3yzVYU3F*kmD^PBn7Ro{I&();Az5>yb<9AhhUIib~ zN;F4*&K@C6YDoKRQK~wOez|%+rEB5&KXxWgBpdyxi*xLz&+E+cMCp1&*}}UoypVtC zT=120v~TIJHra%H7wu|Q5yS?fPd*R%G50xKpJUwHyo(1lk#F_nmaY=o1!x|9D~!{BmtiE#^vt6Aob^ub+@iu!i+D+asO zs&F0q?#>eW-SEmd>lmF!7wKcu?;<)&`k8D*9G)u`&p;%Xmx@^7dNnOKB$CnIec|FO z!5DW@g$=&}#`nX2D4RY{CEI_f-az_b@b_ezZ{ywZl%8KsKQy@MctR@HSK4E~FF!O} z&yTd0QrtX8l+SZX-wKFsTNvi_`HRj@{+x^c;&PLHQqT|6zU3*Mza`ZRTXy2THCcUW z3muP0pX4cT%-f~3Q#}J{$CA9gnVwf!=he^CbrL?eRx%Iy_j9NgdcN=orizas`m0F^JI`uo!?Hd)7=zCc#bxva=@;96N z^5-DhcU1=-LySJVfH;q+ZW<|c67@EFdPU5{^@lvCG?pO!AxU)bGs;>T7zFzT>_$Q}}vkqFpaJ{{L829G#HgydlDwu0vE@tA7{fdFj64pc|N{1F{#q zR1tR!8&rB=z71QPj_YEcYhx-Rd6D0|ROV6#qUqtmJM?>{OuUm{3jOFg1wL*>{kmYa zNA!8W@lHs%08v=ZCEb_S)0EMMgw%tw8TDy6-Kk0BM=9>y7lgKcp>oSO_tq$?()D`hT@8*e)04=OTT4 z=y|<%ndU3{Uc4^yrjzbNYqj<&6~q$rx5J#MH@m#wlg@{k!*SEe$lsVDwoVi2?@n?~ zVo0Y}+FAD?n!PaW;KzJyOK#Su^OCoejG*hxRn#&_&nKR}`hmQt_npBqia^v75n8K? z_~Ak2>vtH}WNu;`J-?<<&5KC1cOR-7{D$;vVznrJpFTNJy+#}TC|chbu|mu_cB|J0 z`PU>Zp3`${+k!!f7_6&%i>%rP38UgzSk+VpLLfbrqJ(;RLyiJ z7Of}cmP+U0uB&9C2jV4hu&3w2+!LGhO3<&^nwAx7alO^+XBYcn|AqB7lpRAlQd6gt zo>SRX?|A9DP$HTG2a&&|;I|L-yEOI0j&LiCCw2bbVqv6*1k(@R#dzYXl$KcH`Kb!n zbzuea)o@@FMay)nG4F#obD|0!Z>MiR^NyEiUDz)=Ww3$Nk%O`fb!X0O0($wK3Kn^Z5N{OB;k@Zi0@Armo7te zdB3K{4%e%1yq`|b!!F^KX>|Q+c6Hsnj(!$OzhxRBeM`P%4SoJI-*CT~f$LF|O}&?6 zyrYxwTq13HJAgkE*IQ+=_0}8Yvqe7-b-6O&j29DXe8!T`y>@8^8&84%x`Px$XHq< z+I!3Q>(%YBzr=aKtiBzTX3N^$K)H4>|J;*3?a;HhF>U8aJDA$=9J|lKfI?-(q2*i* z*em|9Yi>pd#4jZ(lumX)^YP}DJ*zu_U-9r|2ks7-nOWui;2i_@XENAD*$kNUwo<%5 zhyma2XOxF-V*tg`y1{4_12X+jE;ypp1GU2`ZYMr;!xi@e@{@Bn^cWc&E7R(R1Gfer zq^Neoa@}Vy)09xIan%3yr!Ht}-CX$Ar3=`HJ4!udyC7@7|Aj(L76d;xtv$oT0$Xo8 z=R>7T2vyZR==6pOi}Px>=*zM|=#avjWK$O8Ypi>CcLNKomURWJnZ*JSq&*n5I1o?y55Zm zd57k<>SZvY*f*h~m%#*Y(fGAWIz8a}u7_iFQV%?C`=s6Qxd+U474%BP^Z@_NRMkP( zZrG{r)f%ka1!t69`KLVXgklFdZTGodATdMBeE!8QSg5`GVPACzEY$1nP+!*xA)2lO znT?&Wa*FFo-|$X|D#;Vw=Gy@}qRPof;u(-Go*uW`3-MUN3wAjJN|Ry_&0f#}a!<@; z(y%Wg#*D`16f&SaZ`(Fete0mR;Zdp30aFs*i9B#(KwNT`S~S%TQ9b=NBZKWwe21so zcs>JI!diVT?hLqL_xQ*R#MF*mWBzIk2-l5$5dWziBKqIkU(#lPXN-dPZ&y2DqVpS11ww9xSQoWVR(wgt0sePU^K5!DC1;;=!k2g#4rTa=}(X0Y3#L{PU}7ya00_;im+*l{HYeCX@2g4gsUlQKiV%~x9keWaeFa5=EU0@Ji+odh;H*X~?3vX87Ug{!l6bC{?07YQ zNk==lD@TtWvFL#BX9O*I1bV<%%;rr@APd@wQ>7-qW54Gc*#*aR!|jwd?v~&#{Qnao zlLU-9p#G(1=B*qQUbE|>qJ8p?u%OluJd#~%1- zRv6w_(+M_eBQ`GzI$)QC3eW6fJimML3*)hFf~yV~76>umP;lPGzR*rE6Ia|@a*hcD zb%o;23t7N#8GW}}vm0EqGScQHb- zZ4d8I=z`R+R^kiRSG`5%Rb49+a)mN{FJ0&YjqCyW`Oc0C{?%+ee%O9CkOFY3i;~RgI~^mlP7pFLxDjE(fLo0+H+1>&oX9q344ZWT;Tr97;$tV&7Pg-GkVtx2YMQdO$Jw)x$;ko$%PcJHlrj17Z`!_a7o~ zUOcuHILu_g%9ZyxbTEI=GMu^U1?4BP`2F`@HHrlI9o7F=xl@I|4u z2j(f|dowIBK7ru)6x?rWQ>l?^Upu_#s!R@B#()@$-x7uZ?;pas*RquX>bGmHtGjUh z3rkKZEn|XEjms)GjBoP-XUBl5Zg{wkS2Q@V1Il%M4faT2o#$ET&B6LknHgne{k|BuvYP2VS(udLr&{{jDkG=KmA literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000160.vtu b/v0.8.7/tutorials/out/solution_000000160.vtu new file mode 100644 index 0000000000000000000000000000000000000000..a8e3e59363e74f81b4748a4a4f9e7fa9b2e055c9 GIT binary patch literal 19184 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 SVRT_W3Op}XR7*x_Y-K)h^hQnq literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000160_celldata.vtu b/v0.8.7/tutorials/out/solution_000000160_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000170.vtu b/v0.8.7/tutorials/out/solution_000000170.vtu new file mode 100644 index 0000000000000000000000000000000000000000..36db2acf76ce1dc043748fa106b3d4b151ebdabf GIT binary patch literal 19207 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000170_celldata.vtu b/v0.8.7/tutorials/out/solution_000000170_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 zcmbVRcQ~63*QctfO%+u;s(931v63pKErL>`)QZs52#FOV)`Qq>QL&X4wb#>%J!@0d z8nuIHZB0?DK3&f{uJ`)B?|Spk$vM|K=l473{@wqaTNUEt;>_;_N1+i&S2dutgcOh; z?g~TNBU~NTfSw)>;vgUdOsi^QtfPf+hVy%1+~8`!JFaLClqbx?69u=|Mj`Bh|JK0{ z;{mruqU_-)HJ~oS!^0VV-PImp>k8z*54SyuTK{Tu)73*k4#*Efy11d>Xf*O9-OI!2 zt}en()7HaQL7~HK47V8{E|%ezFjxg993V5|IK*{zg%i{MqGi{|Bw#-pM5Y&f(X3elma|U0vZY z4}=%O1M{DGNdIp<P}t zRq|gpsrudfzRUmbYT?dsmy<_njj;c(xG2iW{A1#uT>gQ6^3cEQ^E(w)$^WEaRrOz* z`Cju+?;gt5`$VqRloUUIK_dTZ0jxiLpY*U)jG3MVSM#7{ZTPcC4{N&g@gecl~5998YJ5JU1HY0oee-jh6|*ACHY~M8H6aL&uv%s*KUwUTqJGk!nzHvt|SHSw;SrN^%;el6(4 zxNKZ$W^#Lh`m6V0JUJ?>0-Mhbt>|VB}^q1R8ow0(n-&5}z;{q?v z>fPwG0}Kj-N>4$bTwyFdT|CoMY5$3Z3*fFM8 z4d_Z1`l3OAi)a-%G^6of}Kgw>z*pDX{9iFZ<-`w1|*;l1ANSKVjtpX%nCf5q+x zLsA*;)W1w&N3xsVj#{H0=QmQ``O2lvvIBea;c2Nk#f4ynx;vyr{%LaZ(?7lUO`C&V zvWCSV{F&@&rrQf>C4*J&5oQ~ncppx&zJ95ub5htpwkKXsrJqZ{orkhSFxEv_mS^uOtbP3XaMqm9 za5>pFQ1bpMr|=TBmk3|Z9m4o%xtlMY55$?e?J~39#2>W$ly7olhI_-JmO>I6gUava z4SbMn%sIGg7>F)>WhpB4&?K&=w_Bs0INH>-uxvu1ZW)Pz4GXs;V;?cSF)lh)DRp^C zR|81=Oo&RmTrhg7n_oUF@GVln6gVdD|SS)0uH@7ZZ3yGYDb@A;!-i3o(S^}WISL-VttA6gTs)<=mfgSEaLO)!{j`A6=?uBm+_h!m@HH{_)ZTf_%+` zly1n&DyFXf=*5IOV0B5RXf*I(!#IQ4L{jNjrfaaMP)I!P4js-HaI>tTG4rl=)lUWoC_H!LJA|0}eMOhwH zi*Vm_)GXN-6Ah>M)4ci*^Sh0$80U5rS$3zyrZcMxIM$q-wNzP)x)4qUxV@i z$9^(*InfJ`kCkrx2hQMz$hQMz#_X#p`ga;3n>!URC;_I`s^gilM+-+_MPkqRMs{gI zOx33J4!XTCK%I;`L!o_TSoCI}=HVUnqwTjyNDKJAXP|OT9+1&2|NOa$uN0Y)SWgw+ z!O%faV87D31UE;E^HFOv05{0@M#hBVf^y)6agmF;D~Viui-Mk2Z0(x9TkM*ez;DiI zJlLp^C((_=`kmM7=}B2h-+uF9N|TbtLyZ-V)wPK`^FakJ8QD&+ckSfmSM}19>u`sm zD-TIVQJq=%_rVLRYP`e3iBDJj*8{7XVcJwR>jhF9I6Hv>oz)kG)9)eb9}xNBYef)2 z*BRjMo3eB!=kW%ecxVgeh4S?75le)FL4DuMSj((9kMEpox-RBlT()ahy$qdGa{RCijrO zba3|^)6k!8aP`Z$#hj&FSt%x+%Jf9LDB@DO=+#MtzQ@NBM1RmQ55cM1Vzp%bZR0^? znFU3z`NV1mhbnJ|>uCN%(|;4{`HvjO3d4amw7I zuZZEx58fR&Oclj)3Z?~3d^9fEyt9q#bTyHXoSvbFUh=)D1~Lz=85vZP32QogHO;(> zF%Bj~T&N!hHVMe3TF3d2BX8*y;k=re7Wl?aWLTqnm^&Bls1n@1H%6!C?WV>K?r}6q zvQ>QJ#!&n&s@-$7?+svmQC_XttH$-U8;twaEz{?(<(7AYb*4uh6ffFkB{fiak1**f z>#;i^v9X{b{`ncM*l4m+cdqqAOI2`6^*7?-YoL$RvbA`j4vY0Q6iZ`Ap8M8*l*U28 zmT#oaX79({j!z*2k~j&R_NEaox-muugH!uhhy z%5BDu=BCvHZFnia8I-2Cgby=?Z$M$TjT#T0wc()(^wu`n!=y0sPR-<-1om0%2xBO!lHrSq!ipS zwH^6DndH)=S31O?TQdaClomWqE}*AAsFY(*y!l8r6MdSj=IEiIGvnA64`bRxaM^;f z-y{NjGN}fY984(L`p^$lNqmzXVNxz6%OjKY!G=TFWx&d3o54%*tWIyGtPz$VW%T3I zG2SoqCfsDB*&z|QfQye4Fh~WVjR3P8EYPTd!|WZNd$2YZQ*!V2{njq58%E7^dYX?c ztHsjF#!Yp((VxA85JJ$s?i3Ns!>XV^Q^x1POP&~bW8_Fj2PG8V&GS5k*0Yr_L$rtI z9bpE{p?Kk$?pQ;M)?imZHLZyWm}{lxbtF;O_HZG@ZGf?_w`!NY2RhsGhlm-keHe3yo6KN)q)7U&!$X5hn%Esw4GsIEr zqIQ47iszg3YWzzNh+_|~TOKD`a&rkbxR=9-$vw~M6Ohr+Q1bb#M@e#;p4(GA~M6zZ3n5~UqSp-`}$g+5a8|A^8oBj zZX)VY@CqQ>vli3MS7R_VUqgC_z(eTM?5(Z3LwyYwy&uO&3zG+J?T#NWq-X{Jv)>7i z$9wip_pecW3XD%OF=+GjoPHLnl2qyy?DnY=)>$HbOyn_hnfX99S-<|ypWId-g6AuF zwyMWaC5^=Te!%52;Ll$w^y_f2H3zN`Q-UDP-KL!5)qU zZi(w~pm)$Vz8j(@i?F`BQh%>ldSYvx_Vx~!f{jFNIz6w4)A6Ftm&9ACd^&b~$qPET z+S1V5qicA6Cg-wO!Lw7+_VDsmqqC^T8`DBXbHuIdOs=a$}492 zNA?^Kd+N}M6&K2k7C7>n-le^#EA5N@<7kQ+{cV*|Z{;nPe}$)xXu(ZVsFcA-Zl`Se z9u*xpxZukY7`cwNF4M)y-r(7Tl2v#&+B{?EK8#C&)gFMy^En0h>(K3B?tuXmNWF- zV00xDf(cf)aiPoI(AhtFmheUNi7+R>X2;H4{XqrWX?cS<=qkWS^T3#4tZC`Q|bkEuD z=&k4Br)LLW20T!o6xCF zuET>pjYBB=n(~VSHv8j1>--b2^H~MQ^n@2e)4{5#S&CCstW@!&&bxAkTeyANgHM7a zx@AAL;|M}4=VNVhZa~2J(YW48BKMrLT&9rv2olHCmv=|1+)>r-Jn-S&a2!v0j#8$79#Ny5cw8{pCqG5^cd_bmw-&cV>fHVr8&~ zfgH0U{_W0p4~r3;B9@@)uPjNz(MocV49$RRJl33o`tb)B`kwC5utk#I9CEXo=#W$; z`kD5)UtqD~oFZK{a*&30a?UpxQ3fPUsuIB8^AfPGx=MZ@O)J+ZJoO@oY%*wo*a1!c`^rAQha zGv#pEygghPWuq0lf4M)t+=tzyQMa=3T76PM#0xCw0C479G%4bX{dix{yzBuHYbXFsFlw0Dby;a8@;RqNHV;W*{r)>*~`0 z0C1qKp?df0%5_Xx{LZ)3FS^@;^**+jWKL$Oe4HW~$_}wtH9Cr6UxP>?unJ7{!>*V6 znNk!Bunz!hRP$PmiqH1GqOzpHZA zyTjA4X@269<%lmgx2tp#Yd&GSzCJrydSINz$gD5^HnMv7aN*pFZy}$%)$+5wy=%q0 zFR<;Hnl#dq*j&Q0wrc$D&@}S#*3E6fTaa4%R6bO_(GmUj^qfjXT=sqn(6{+iDxcvv z@%=5bVCn9M``FKCvy35c+Z(yxGjX2$YfYfl$cZ2chh5k>;Z<85ztb2WqfwaELO%c3 zP?H!M*qDE!fn^oo*3ocNmcXc!F+?LkQu>|uDUAj`zU78ZgAI-2UB9cfS;rKW&SAK} z&twe0&SbxA&#B*MGWiiBJo8y*irIP#m%rXSAg4b#Pber%ymXm(iNQsu{6x9 zIx{9Fz$z`BASIe0tz;x6WF#%0oLcqB50eNXBdwNTjqq%2??NvjM2rwsL`e#5299HoZgzUSI_;%7T~Z8W#c&v&z1v zZhXz;`?^l2CTxgRrdA*S0brl0?{t>tT&)VwU^und>CoA|JF;-{2g&XmZMlrVG7 z*CAJWQ=NMlSKC<9Td6JEJS_(qCcE?|`@|=ETqXxrue76zJI;F9TgNRJOW1?ZQo?9y zMY5D6SsFrDE)`ua5?uk(DZivsA=g{3Dpn2@tB@%w|D&iv*{NJ%rCegA0?bt|z*Qlg zR?eALMQu^ZW>Lj3QOPq=#i~+8S69hZR|W8^#u3Hth-O?u@h+iRIM6i7D9&UwwJD0tlq@J}U2pzd=@)(qo8q@U z_sjQ5Piv;2q>W+rrAj3^2E6H_!q8mj2Oo(?%!Xy2uXq(lN{HJjmMYe`K@po zx7)r=SC`UE#Gk-%w|~R`=M^x})iI$;U@=|?fpL5`&YyAd7uTrozl>uT@iWaaID z!2Z{I#c^?C0z4u*%r=uP=@MoPS|E?1? zua~#|fxq3DyT2#HPcDN0cP8WMP<@m7{hbp*csjZND}uql zzWozlCeEG7)Zfv_|0yWNhKVewp$Yr(>t+0u{ps}ISl{uh?*CL@*1=lW9ZVq#^! zs{dRk`?D5*{U&gXf5k;Ef;>CsKK&98K}P;zHVLUnR;y({&qUc(O6iS0jz`+a@|SZs z@U!58XZ08dHpVRFZD(_!cvdz&53&EH$HpVl9GI$k%47a~4(weT;C5D#19J0(g*8@l z;Cr;u#>Jb_zv#w-j-4E^xNEm2*_8v0!j|XG25?}~(ZaxYAsmp^oozc{%Z5UFd}NLb z8{(G->bdx`K_OppUC4emta@K|{IWM2c3%uVy)l3d1_==D zbJ*a1T4|QfG@K_Z;OzMkHsqFAXg=*=!=hvFZbwwHVW2*CuH<7joXl>Ows^<}vt}j7 zp_^=oGJ3ArpTLG8x0+b3Fg9e!Z_qs~g>+J^II1p8kn?1#PEH=+z!TTAEpPfckiJ{V z#$Ajcx8|-;p1Y7BYyBT;zgj?$Up;QUaup@W%B`|V>0dd}yw5m!b{s**MTn1S9VbY? zEt4MVA0)`WjPS>05d>)?gM!^1X;Cam*enLf)wOwRCjzpkO#hKMKqNV zc zK`JvG8XeLJ(!S-Hrr&*n^m1S59pOlj@@+i|?S~1{;`+9Os+eD*Yjxw!FoHC9yy&*a z81o5NC>@zjkg_WEWn8=jS)+U=Nq;^;p0>I5vq6s_8=QoAb`u2o&XGTF=3Ij8nNwHP zyn!Iaugjo?@;I`B17CPFoW}T&XY&hq zQUwW;CBH#MxtIeAO;@~pG&%6VI>|E__w!5|%X))78wM*yc1+41^fUK+;H;;GS?c9M$XCJb51*qzzda z8|v6_*QGQhdOruGG*i|!B9AY}JW<&pOOOurcSjq1IG|O~`do1p&J!ibCH{mB(Mp2i z^N@!|W>vHW$d8xShGZ;o>yF@WeS z1`cHZSSB>9hz)^c#i~9BHk5WP-*@{q8)ywGo*&XVke@hwk!KS@PV!p)rsoWvOV1>Y zch|5kEgl)~v5wokSL|k-5Evm;gRzb!hlB3~ z;J!~i9$9Phgdi1CQym+TH&k@hVWeLYZJYycussxk0%@K#dA<()n+Y( z>-loU(bUI?{Eij}ZY(k6wajG0 zC2@C)ZaX$4s9Jv)zRHGl)s6WM$U}J#^JF))uPM>ex5hlGmbSO$VqB%iQvyA3eU)p9 zoosVBu*c@{(#1^l`>yq<%9RaD);y=fjlvY>+q}RGk8-$y)Pl^Y#!QVSMb#)dS@~)*WT7mVENf&h!R3XT+Fq-dZB=TUHRNg!6 zKW`(p(oZAr>K}SM3}bM>EU4{vZZjJ)e=dk~#{EoFG;o$iempuKQ{x`V2CY3-M`fO} z;grA=+1pVZSma#JJhKn`?2*7`KkRRMW9>HEf(UZ>gq6(OCwPCzY~K^t%Z86qzK_pg zK9l{5RBbP@;Z0eKS3BMZT;4I|ipMd2F+J)c-X|k#2K@-kFZpn!;~DIe+}kQc4K0wb zSqCl{T<1VR%)A9+`) z{oi_5agW#QfAudJe_zk#BtEQv{r&gVQ)S_Qt)A2yb>f|R0Kc334)+g#{(ZevBY4N> z`TOw|G2=fQ{^4x?9q!*1_;&^VU4j31DiD`*jZfugFQ_?;{&>aJ2Up!{qUt8~0dLI0 zL_6+2=xLiVdo$`8@{N)$L?6V?w6aq}|Ri4o}4d={tK;*?%1Gyd18R~YQ)aD1|AJK zZX=PRxewn|gM8Jkc(-_F^WiuUvss{V%%_XVX3voZdBi^dx=SnpHy zdabpne+uCC6!q!{f<3OGJf!$(KE<1Z;_DyiqCREJ?yv%)6}J*!HO3{C14K6C`02TY zu^fz}ooIc~1NG;ocqRp)KJaYLQ(?rIe7!}KT~B04Knjkhrk3ytV}8cLNrhf0OCB@d zt@84*3I(N zd8#QX+fL&6BHk?uLug;U`}@Xj#5cFzUh+nL%Nf1iy=X^^obr<5ZRD9g1~m_-Z%QZ+ z>NP!|&22#Zks(w>?a$o0z+=O>&c;~Zjd^GnG`fBf#c$2Z?Jh-?a6@J1lY-r4#c zsp!{tVp3Zg;>BxAc%u;2##Vom#Br9UL&z2M{~D{4x({XJJlg>Z=dw4r<{;KM7wHrt z%BC=um!X}-=JPd8=%1~8!buS2lWyme4?jd?bwG=pF1)+?hayIK()Z>WK){~}DePTdv zSJrbxha(pTm!W>$&Z5$fD0@D%?Qov6o_E{g@w_Y(B88F=-;CU&Q}QK2 zjTaQpLp{vzQ~dY#YyC#~Pc4|~NJp&8TR;36{mq)KKgXiHMyEn675CxJ%H^Goh@vyc zW{0C+rSebwx!eZ@*30C!BOY-W%Zx+&O_$OFsC9FnePDYL(eZQ2wDX7z_HNEyL?{<=E$h z`$?3u*?z@Ih&nbiBHA!s@D7EanYg}lNtGY{QMQy5%Ugxx(r>;l2tz;JeT+M&P(G{@ zb%k0-V9!m_Sd`lbJ1p=6vam(um51J=bz^p8gw*HYL0d_#P`yHblKg&ac zedQ~Iic|23bD|IHMT_c;l*ara&zs%L(+B%q2Dq+b9+{d7nN)x3OmX&mh4y#uyf8_` zcq{fTxUmiMV)vIcKSFFudJr>&eyxv<#3k_FyLr7?j;f1TIrl0O^`7kESJb`V+sgs&Oc(zRkbTtr{Jm9spLH#_R3Xu@R#wdgIZ5WTZklc0}KS@{4Q4MkXuB8geXt%4w)Ib{7-SL@Q^)1$Q@6e|sER-vcmj?x7 z-13UkvD46hmlR)J8|J69^mULi&Qn)ov7YL)iAgHH`WWZ+6xPl~Xy>yf=({lbC%=|D z8jM(!tS(9Q6=j=-!L?|AS-@;&G-ChJ!rT=YXPbnR(=ei~V)hdc)bISdd=_;d8-D4U zR)cby{Jf-Th#PX;>nJ`y)81Vvi+qoLG7{^#+uEbOHm;A8g z;eNyg`*?LIUVmC@#BM;lgz%LO>rl>~rqMz1dX1CuF!jy@og)iXFy5)Twe^Y^XRQ}& zOC083RkT#X8ud|^i;FzbZeXitCKsZK{mON_5tobDAKip;zJvybxK)=an zv};{(+#^$AP!BO-lSpbY+VQUm5}l87zwEp6+h}ifIBri6;*@-iO(zglO48_xIBs#6 zCu#uY`J-Yc2NAP8=!xd2cjk$+q0UMAQqilY5p_d*yPqS9n=TWl?(st!frqH|KfR#8 zo9e%%&yAbkpkHqHGIKY?oM)N&c8K=jFRyDMLZ3@p2_Pw$=8b-IP_TTL3XM?%pWH=kOy{#T1Vv(!$SopnT?MkRc1@YeerJK17E=Z8NIA zsb|7hry}ZWzEYs>BXqVBUQqdwI|xSpE6SNGmx zp7xreVf={R--{Md@1+@1@?sRPRE2^Kb1|Mn@1{9a|D0jP^7@9dVO#br62}i($ZWEk%9bQ0fr^^L$iL_^}=J^78$))IG14XKG%Cc`T_i$_Yg| z$Jpy6HSg$$Pu0}@nWMnEMa>)TZ&Ei4{jaS$;!5>7d#UW^$!J&YFGHu^?RA~!#;Eg_ zkRV{0iTXoB70uK=-CFsSE`?~dH*;&&j?)-N&ThB2VgF zkkD-~c`f3SD&Zz-|3^;kPiw?+>*}JZh3NmK+?}}z`_Vy@5^ZhtSG(4~(gV>_UTfMb~5oKwgr>V6s(Rjr`jy>F+w zOS2G{*SCjE#qofOId7?V-0q7vr9LC}yRMpAi{lFW<1AlbUVqe8ub|$S2g$WIT{vG+ z^MvR*}_@H)nchI?cT%A4Cpg~Kr4Su^{NQuh$Q z;xn5tT)&Wwp+3d0?iy25L-hY(G;;nb+8+`*MpAi-yJePkB{5;T&z%asd?uJJ7426n zWx|#xmUZiLnQ+`I?fTSoCP>84i#H}SLGLAZfg;))`EL7Ee}M_MR*N-mq%xuSVExd} zNIKZ%zdg}$f)4rjvK!u~(_!}NtL>axI^272Fedz!4omMXD=(8^!2L5{B$PE7U@kx? z?K5XUPCb{%R%Zqj94H7m*x3oi=S~Rlf9(V>msaIN-#g*w%c+jrzIB3jdG@sSNi-Om zY*ZW~L4)bJ4+>3HX^@c|J6YY52JVg_%9=hj{QvVG4etBt0FU@Rlb6xq+66_~6J0dW zA9k6|S4@M^N$EE^_i6CWNaboh;ss&R=$_Lw&=nS3cwsvYBsx?=B-Cjj!c5PSmFxof zu^qFys+f?$x+gVnFB5c)byV~mm>~N&Sx>Ho2?Zu?LbcnwKs;sHiu@g2;AhhC*|C=i zv8uA}#^;zYG&UUdU_T4wqSURG`Q=-cs zJz%ooOHGw`58TpQHRz7=9)|y!A8I|2UMLp0J+cS%zOS0OAhrj#@~Ner3GV@QU*+9) zCwm~#@!TJ^<~4>PJ#|qsLxk+J()ff{5pWg~&++c$GJXc=NbzQKn zyr$toT^D2xXXY0nADlw0pFCaJ1x@vHIq$l<;JtCyor2;n5YD|69}&ZZJbS19On(Ms znrg2zGGRc%XQSkd5eCQ)2Ni3dXM*S0jAm2hm;Xie1qwV&$l|H9FMdXcXQR3tS5F%L z{&{g;q^%Q_XB{3i^QVE-+4kb+6?90?D`$(0G2lX?`4$VT^FzNiAEu5n!0gkz*n18P z2=S9+?Akzwldt<8J1(U`ZOKL5oSseyf0@^3L_!1W#{)#3+q=soAULacxW$tH&iuYEy&hCzz43Jpxd=dJ#hMF*L*63tY9 zCM1rk1tfjy0ww+;>&Bzqz}CFG!qJZbeTTkQB)y-IT0!Ha zF&a3}d-|Lows;f^NlyaAp&gG|jFV+%U+MRIa5cQ;6iHeGDq)dPhgtOUn> zJ)nEUqC=>M1yWlzO%8Q;flGpG&w&ail$$M`9lnzeNeANN=^Ys7;kA`6f(&p>4g*YhZ>*MlN&{`ft71yr zG+60k{_!k<=WDnvsH%kpex9P=mXkej$SJ4xqE$Dve=Ke8U(p5ASFV}bg8WfepL(ek z`-rJxo|>K;4dNNcnh89|Dv{q-e@33(s4$fXRq26G70%stLoBc-L%7mvy1=aX!i8_h zL#K6Der6-?^C>PLz)1$65$^C^>m(sy6l+V%g_`5*&v& zLraU;3=oiiG@Ux{GWQKr*VcAHfW=0;t4q4zjg;y$u&-I^ z6zsN@#yD>!917IwFcJ`b(!-VkdeaU?j3AE-q?e_w9b`e(kFT>DgIQ3qPgP4IS07->eRovsTzYvLI|8 z_+meqTDFMGs|N&1Dn+HmSYWXvPxZuBCYWE1y8fYw2J79;AHJb=LWak}X!E%=I4;A} z+??oUL-OhURFZo`mru}IqS7(|0Whx3bn0tMSi6xWVT+gW5J9=8_v{QGC}jI zUcf~<4Sd%wKDnFI3EgALUL^9>y;(1VhWm0{q^Oc!LIbtluQRqDXMo^PsM*)#Ztyxh zqO|u^4_K()D3P1S0;1%)oq{m#OIEkA?Q}W>KY3y)rodyriSL@pH)8N43 zf!4r>fUrr#>08DuaQc>zJA~`qv)xSN1=debYfhlzQwA7r{rWJkk`Aw3 z`X)VbX8^b2j7D&vL;Y)(rjY;*dL{>|{kTVi2-O;%o55XRBeij^WdQbF=UJiIAuLem z%I+}2{iRL%l4i%ngpEe;d&N@l{#0JWiFaW@{)$lgGprkrvrVMLN*W|hHybY4oUWPmrTfD_81^ME1awb~`dHNp!XD@L8 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000180.vtu b/v0.8.7/tutorials/out/solution_000000180.vtu new file mode 100644 index 0000000000000000000000000000000000000000..b9b9fb69761036cd78f6ad5eb4e0fe387a2558f8 GIT binary patch literal 19179 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000180_celldata.vtu b/v0.8.7/tutorials/out/solution_000000180_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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

    h 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μ6kpf*msqC-C%#BDefiJKjjr#}C1-KOPuftX8jpqK zLh8GLH_X@$SW9wRF?PqoXu@aDu#Q&P_%d`vj8_Wx{pp3$Ymv`~;PtgXMfO{F8z^uH z7s0stY>#ky4br#fc2ZVxCunIF-TtWF4euwfHALNMgQphL+EfVtS(x@m_9gi&F#W;R zK01a08{Ob!eM{v&-+R+d46d@#Qz1bXU11fxADNk zt|xXd{oYXB=SY4b?eJV+dODD|t<=2E&4p`wb)o^m z?y$mZE*seF2NG9OYcIY|2R+A3V%_K*aE>+F%!n=m+E;{ZC+lU9R$Jpsip)<|rtfyo z)*3;xr0bB$wFqu4P9)ncmmzWTjZ?}$wIDr4oqboS0mO%^sl5dALCE3hgur$YIF#NO z`&3c~+N(PS2@?n(3sa<~myruX#m^=TX9|IjLFRdCavcyWkaJT0XaH*H5qYTL4CXp7 z9plCW;8y)ZDi4I8#;|u1XJwuP(`qL-J)aoD#m!O6#xD$5D%;n3_(Pd+EbzcoK`aNn zBNMZBg4{vXcZ;e-!yOLkFXm01q{CBw%h0FD`JH&E%nwmxKZF-R$-6S<3sj6RcZ5t* z;56@DUc-f4C_lNbwicNS36E7?#(YK2TetK5W01IDq)6_Nv!ekB|KzlIbmhVNcS?>? z`2zS6rR~d_hj5f_cC}^#8{k4);o#kqeE7lp$G2mu1RhfOUtr3vfv1EQEbn;LL3pC3 zfh=hrto#weRU{XHrD==VTQ-C%gqqq5KdpnNPPDIQ`~Vmv-wz>)83MkUouh`65it0Y z7j4Er25h7UKY9fRA>4*9r@MIwWQ6I|r7TB)sm7Be>E$SVkGbIUVY45AHZFyWWe~W{ zsXE@~4#O+Uuco?6qpkB&gNrFW*&$|zi#W2llc z83$MYr^A)n6A*CY=BVZKKG0gl^{XEse9g4qIyZg{!PSq2T~0_nuo1_g^d?g;cUA#QI$R+46N1Dj%V8xXZ`E zAv)7Rq;mph)?E*X7DgcTLL)#JIBanPdPg3q6ggQP{q+iFOicbfP+E*th~s1>&r z*&snaUlgC)>Rd*~WD3%jc+ zrS5-cp{(j2mDnpB^l*=kY79<+)i> z*ME2D;NU46Y5rG}S@62zhcc9z2b=R(-6+`SA@0q#rnl7uT;kw1ekC#uB6-HKPQPbh zE^wf*;xP_xe;CRg4oB+QqodeVi>DyR%b&owVFoJ4K5*|MkfaTf2<=EMyfYY^|J`hZg63p(eh0c=VKy+;(*aCU2l7m>N(*&x6h`KPQ7Ls0ix^y?&IkN^7D zC)h6wi8F&RBfi9cE3XHJ$CFo|aQ1<=-<%k$_yEuuw0HhRxTzv0 z4R2-6cf(PCBW^Xd2Uf*LcB2aWfhAa;z5D7QSg9uU={O-Ar@moRCB$!NF>}1px-|;* z5!z8r{bTUWR=c|7-5`9I+s|?o8-^M-+-(a!q@JCY!MpR@7_2aV_x1=K1kn*m|36Jb zz=Hj9wgOqV3e#arJ@3chEpFNYk7E$NpbC|TZH6G=azPU{!ikF6_*NMpFb>&*-J#c! z@oBhVcc;sGp!^Zl45X)r z2UM2&KyriAoy}nYf&?S*ej&UmzE~+0n~hP(G^`cYM08GP^4ly<3@1S{sQ*K)45G8h zsNh~qoB;^2KQ5gbgZ7&PuYQzIg1T&lF49mDNDG@Z)W~K4t6Bdm|MM6G{SJP8yB&VcF}Hw9(H?@WFWB|bAZ3l@9aZ|xH2 zz&Yvjh>iR-c*i|aBt+ILLD}Ckr>t|Z;;Cg?syYV-P3F~SNT%Vf|JQG47Vr)9{9Mrhxch494G`u9;#cU}}>fb&YQdOvM&xkNKy;(~Yq{ zp>h;DUk#^dMUTU`lM5`_?vuzqH(twyehN-4EWYfMO~cSb=Sy+&NS*()4;@W^W}!v% zeods+96V2IcyK0j8a{a{ewAhR?Xzh(GKqK@g!m-` zL#Q=J ze;@1ysw2fd&q8t03Yq5GD7Zw|In|_iU>TG?oz?pl15qIo#d;%i@MG$-g96L~Y5SGE zRLV+(t2fE=7u>OnCCeps^t~7&o8UT}-)(A1DCPK-yo98foy)4|Mcl7{ECqq~C=Pl-kEHBxxf;uK}GH)d_ zI|zgJ@n~U~H-qJk+Aim7=RoY24($L{6y{Tya&>roBgSIU^kVegdB_WVGI-Hv7LINV z|IpDy&LRDAcGW|UU`)q46U;de<4QhfwgTp$($kA!6*+%?{-ic1Llx<>%|oYQr#laA zVNcN73iI%1PA=`p5(h_D4(0_l5l&a#D6uwX9%%R-Sn3<+!Jnnnj$#SC!_BvaU4g=_tY&Z3P&BZ)x`9tbS(StGYC4HQcVgNc%lIuAhGDB798+{{_ z228QV{e8BN)0p#bzsdJ-BtuzW&6@Gqd+;)9NNFS?y_@BS*O;o?Cyc)Muiw+p5YC+G z{!a5N4@e!l_t!f4Dt4Wt`Eg$d7Zk+B7{^L|K%350r~0wDpgGmriEMGNQOY*cb&7!$ zXgdvjybF?x=uoB`PVZ`-qYGLeN!rDHM+sB2QxXtRpcg1=)1#5|LRvSbE7;8#1>GZv3Yn2a;_-q6Rn~53FQCkbA?HneocSl zLlf0~lyTPSMa>b?lXKrTM6rGUtU3SbJc?#||Bff61-eOKu{Yu3HWTl5C}(Sl!dYtj)fpwDGxbQtZAMtog)H7{`?`LpT&oZDeUm+?Rf8?f^@BNd^6c!~ zub0ozH$=^r8VJKtCB7*U*hy0K+vjXI-%9VI_e?CG7&iK%vFC=S=xwJ^H9Ur&E8=gW zAK_(cs+iBirYE!1Y3)2xXKLhm@Ma!HQh8Lr)J(yZ4{Y3Ct8-8uBfVkUHxG^YIjv{A z=YcDX?B$B=9BhsYeK%p7gOAfBn#o&d&c;qB$aMbKEB7N%XW##y-JygxENc%B^c zr3Kz`8V?XFgksOcpQpTjb`cKS_pW`oumElIclsXKPQcjnP^qwU8CVz+{`36qA~4%m z%c2Ap;oZ!Lu}jPhL>lpnPU7aj#R0M=P!o3SRw`sRu^t# z)aI$F&U~c@wD*m3)rr{{E@zJ`^{1qmhl<*?jY47=)*j^#<0poo?Jm1AnEwewliqJ_ ze&!kGI=gJ3EmbV$!P-cq<*6BzOz3nv-ywv3{mh=Fu^`Mjd3wA2-7?HF(e90`GhfkO zwGp0fiXrH4f6S2!DV@RaUK61=yPJlllqli!A0t7NuIIN> z#fzh-pY8X`_&vdR6-beJcP*fG9z9y{45CK2ynGpM;^v07Wxo_ucEJXtr88J@dh|cKPwG<=(EGa5LP>QyXx+6?vbgJYnCmLn%-$@^VcM9u1v`>j z(5ubeh7GyL=)|K3?lLY5 z)}mYCqrw!0WkNg1-)dFTzlzi^Rgoy}yZ3-0^Nu`>^+7#nBsH1u0PMb!Zj3^Bu)nY7 zX^j6I1>6fk)~?(>xOnN!>x!xY&_y4|EwYV(w0A>fD(4uqzQ@hyKJEoifsT68wLS=T z4@gcj9sbx6g)rL4a|wr1dreJ zKo9|U-GoRBT-I496+dVPo@(#R&xYM_agoQQ*tiE4ehD(uBXu%{vAfFGKexiN?{Sa# zRiy630eK)g2E<| z^R{i{JG@g6%ppZYgyebD?3}AMr^aF7*ya%O z7!1nYlIH$64oa-zY0B)AaBA+$#$_}Fe{ZZTKY2F{wRT($!}boJw;FWcoQIG}n1Pl5&_Y-W8j2u`BCBG1aN%$Bqd^s^wkj9)=wr!_M>$d@8x<-z+_miUR&uT zJX*!S85lPN*XX1RVhTopU_xJkY=4 zHPg_HryOZ_9S4UhNhlxMe1k!B%#;?4YHJU1z)X{bKZn>+bTdox zb&W7***sAy)&_GC<4xB6T_7bV79zKc1$pk6rdw7GFt$FY7mU_ENf^bstd#zY3h)+$FMWk<78Ie2xSh&Ul+ZR^G&fm z2Zk$MFnTsO`c+yFq)nlUQ?+}bo~|*Ad8!vqK1uDnyc~e9XOy|Fnh$|)QsdTUdJkxA zg(%%K=!5ZuJBbZQUmFXmQ-z-lL*ScR`Rg`P2PW59-tcg#7aV(N?rhr)facATyH!Dh zaG|4mddsT^F5Rj2?fKRVqHVcm!a@V^^Zvo!it->7)M98%wHpCjM@+L6)&w8_RP}6} zbixZJyz6r=$Ufb<@)2VI(#NfOZ`jhK74F~8i6JZMgx6`fesLKrFo(q4?M|$RD+i0( zx4t0tF2rBkp7V6U5zXvKRW=r?1*GZ;2pYg>*Rk8Mpc&MO%yzr3cEMFg!Y#}M7Noxo zE^s63(`G#XgD%3EPRriDe?}PL-M)-aa#I6#;4)GN~9Y}oszwv zaywkkBcUI{%vNlNg!s{4l9XIS z5WO&{c5i7IZkr|0{k}2=FK-cxlF3bgGwURsG4h;AN8Rww3k-u;R`NZ@C?x+VGX2CF zxy~&X;%YvG@2jnH40RO4;KKc$OEPN|h=jt+Z4r*d!(g6A0UMJL%6#Cvi8lkfZ?8>~ zpl~2SA=t1Oj_BESKHqIe_SFq&{#Zt@DG)NBFZ)zI15IW02hzwq&qa%O>-i&j9O~6* zd)g^D5ZUgl@R)(2n9?i!u-o5H6RkwzefvyPw7~)tKA~B@_zeew`lDhJ>$7l1OW`9y(L6X1hqIbwFCd)# zEjG8G3m}sEY`Q3Q5w4OZrfwm5QOoD;hn#_d@Xq?}E3>u*u+uj9zOb!8aTMO`V%Y8wQYZ3l#S=>WgEPx>670tVwlTcN1mqo^Z0Y7cbJXPQKMr6uRh^Uk~AsHfck6ENrDUu8knWxM{=Aq2Om-=DkE|dH?v(B*j@b@4MK?T&h_MRY*R7mFvLYD{Pa5Ho%Z_XqA4vkj zyjuCj7Oih#;C87sc6bVTmXs~{)d0m&Nb}N?qua%A`)FFz(6P@BD?QOPQ8sp$1RWS z!MZU4d1iHHh^>o=czvPdU0Wd{4$@S&EB_-Py)WFCF67vu`Kv8UKMDnrqdw>NPxhNJ zo?8Od+TXrlqBK|vZpGyyu2)n|2h%V}^@d{btzT6*A6>*=LSqM$sG^%7h}QA;@syEK zvvNR+e&306`ArL&DQu;V7F@`!+2DGP-VucJvqQQ7}B|E2izsH!im|#TiIbbfG{c|IuWaZXc$1Y(}>=H&?R(_@G>vv48 zNv^1SgcoLfbMl8z?#``@7XqU3PJu8cTD1mn0eiIC)Ita~Y)kWxdrUGpLe8fC< zn|rJARtHmmJEh3)r4=UUcK$$3EE-QS$8|EzO(C1EKamfSc*L1AMTL`%fN+m3#yd(( zBFailm&gOBkh(a*+gkE?B;!L*+4367dzmW!*S<4>Y^h;&H|?hoeICco)5>_nLx<+7 z+b2B2zd0;mhT1X7g-z|}p;Jgl-g_D?7d&FF5moqzgMeHK7ow6z^|#1QnnJyrh)g$< zh*BOBk;JCx*)x~W`FtT`eT*BOzry7FOzK30kMh54EXNGeVW9OZHGzmUX;=^c_Ysd+ z$Jew-V~EJ&^Zw9Ax)~&UuJS{0JQ4XJd%+@_ih$VkNOiv{CL&Y;p-pZ=Gl<7>Mx$>F z5ec5Ll_9;3)~C^Ep3Zwah1ePX7T0veBR%6UyH3&)kmMgT$_%K#sOahPpdQ8NvsoXX zuj}HG&Z8TLpU`%`)HtuF=97qbRpMt{JX(ikN%`)rCwOEs!#O4W5RcrUGGu&0hsI|( zg&Iq&rx3ka{rMMKc;w~^zZ8~;@)mc_F|{0{xPJP_$=lgPgcpBwQCwmMIh7^a(9386sZt@`_pKB|5x^-rdJx6MlkCZbAIZe%)4|;z{!)L)uuZYNA)Kj0o z4`z@eCEE;#6ElcT%5v<5Iy_Rja<;(4iHP+6E8)N~&mdLrhWs}NiAbo;>?=m}`7F+? zQsSqE5Q*Mofp5HqK;S8V)}jQZUPVB?RMau8=U2Yle`HHwXB(W54=#32` za`P0DEsf5P%q*ShvSr5HakF8{M`IhbVsZl(8&Ik;42(78HZj&mHX)Go_72UgOY zM?K~?=sD+8ulkL1a6cdC>L>~p;3}lL?YsF-!`T6Gw0K%e#KEbr+|oPTLt{=NBB zoJ22WsHP$%Opjd_6y&f0&#+lK%Fz_uEbF4-Y1Vig@r8NXeiJF0SJc7hRACK%!5TPn z=`gTlbPB`4NeXSwBUpU9mqLuV7 zCeTUWr+9SafWr*dYzgnZz=iL(ysG70#4%^?>o52{1D87etKz4_VdS387%dZ8x_)g7 zb6#x{YF5a`aRoh)zR;oZ)}o1B60{`%0V;N}US+sO57I3~aqpQAKZsu-ZE z582OVGJt0*5{aW@qhO*iqHS7EfbNbPBbWMPK`dKSZMDY`d3&jB`o!NscpLWC=*(#X z*zEi|duNphl5>2k-m){0r}JP?(1{3Fk`|&1KjPu$kB?2Zb3};j2+C5{oPoIA;NfSU zM5rlp&D;HkhlJOL*A=#jAo2Rf!1Kp5a7M^Z-QS-G|Cy@p%`y-me@kDNt(6EjaVf&r zrDtGY!|Oe3J`s4ODPQT35n#SNJoM=%9^}GrRsMK_hgUrc6J9P;aCX!&3As86nT;V- zj{o5yr)`fq(hv`aU7=A5$x~1ikbY6laT1vRnhK_&@1c@a?s4#3^7I<(6tynFLBPqb2!jBHU~HMxiG>1A8;w zMP?O5sKRlai>4vKEgHU!GtsEL)cQxA)H5*7!^hjJPK2cfn{=IJJUFW{omGe;f>y!h*bx(^3muO{IVz>yf@zcc8<}4Ayt}O?c{~m7@SK+VzxSvfSn?#Zkgeij{WqQGiW(lobZuqR+^67e z@_;YHsY$SS%ecn<6A%9w7Q-(n9~BGMgMKksH250wd9Y{L;Y$S2z5j3L zGxI3COKYo1-Q&aMoc$2V{CWrbs>JtKjI+hqSzxeE;rYn#87aCR2!e0MzVs=XnOp4#lwbWbNPZhf1f zZ1*2F^JhSA4|W)Pk@-hOe##?U*l`IbpKA;5)R@i(R(UjhY5Yn{%3T~WF)c6FeK(64TMJ<#It0UfB9_PQ}#Lq+nIaLczA$r+O(@_u($1 zLx82eu?z1Ph;S%%Wm&q92+s6);+^LNXeqtYYaK`c-1#WY6Inz^`mn(J>md=cET3L$ zQ6_+*r27etoM~wGin)Bvg$S0z>_^SHM2J&9C~JE{fJ}sgHuujY_yo?)@AVKsG??a+ zD#;9BCukX-S`fhVL~fe96ao4YKK>d?#lzblG0TjLQ?RNZ{hK^~637C0YpPEWATjY= z-+5zHAMz$eqQ|Cyr-WSWY1t%nAuHw6=>6QyspsawIkvaHaR;)a6K^7 zpZ6mGt>?gtq|#AHjQWwjWk!Iuk<(8_t`Nbqe{|n+3AJxIbt?MiSm=2}RrT6s8WfU` zbAGB3VFMGqLES`v8|%(o)h`2JqSnmoS=Tctn^O=N_sg{jwX-Y2r-Ej4C&2mWg30afF(}MkK6KO`fssy|m&WKkx-l*OpB&pH zm?n{@{Qfi!d8c^EugakFr?>Zt1Zrn#qZQh@nI|E3_Ey%A(l}U4U#?g@9){Yt1p8U_ zN$|Z%=h8kf0p=ajvLsStkW4#2bNF`%wmz(Ro81}#`Fy3w?bbnfnf=%8-BurDG8B(k zdiBD4{?g`IjZyIU80$8ZJ_LM|?Ki*r^}}VOlH^3LJ`idQVGc4Lfi426+57H6NL3IB z>%Q3!2?~hX(t0nP_VP1H(i(>5LceP1{Q;QZl@W8=>4T(7&hDJFUeJ_p7?*o62?7eX zM-)R7Fs=P4cVA)*1bEZZ)Q^XtNIATymwFO-^t~=~L`;Cp{U(Y}#8H^C%_wef9RjM4 zDWmS!CxPU7>ZW}A1h{>BJs+w(25IkvXYroHaQb~TS_Eej)H%nNo9|4*xApDUBj3kC zQX^yF-px_?8FQD``^hjkRkWTS{W|~><-UZ*t{PlsoMwr*(}QB z=y!@KJO7T1cNnHFN3^qg41ind!9&H=KBz|iz1~*q1s@*SRacrGu)aw1;(TBysBETd zZwPik_K&>Vw%>Yz>(Rj;v7`rFXidl}o_0YslXyeWLrPSJz-562M-~&h?8>2ap{| z?1*?{;k2B9?)!jdXuSJ#%fGQ6>c~4@e8}#AkE$zb6slP8{&!7Z?m{D2zX-~?m{A9; zBuo}ZSsie2-Fnf(uN~CmTF5?-Hh{;=mJ!P@b-)zOCL(hcfPeBkyK+H0Yz|Dyh8b%MvjtCYL(02>$5<6lqo!ZD*O=fF%4 zxKpc?mvEwX*VdVdQK17`C@p7?W&7aF*_s+o`Cf?kxqi~JxeNYvB_&9n?}W!DTE+jl z^ntdtnJq0(F9_MopM7u{9X~hztLdH{Af`z^z`zTz#N+)qxwjoYMt>rq@ot8N1ZHDI zw;q=M`0+>!cR;k3UdwAnEG%8Vlf3KK00w?bqy7`MaR0vdJR55#oMYTp@mR+KgyjVT@ zqgR0bkJWcCyfz6LL1#)t(#IgBpg4H1WEe2+idOx^Nf_|`CfSVIiIul)4Re`e5PHdv zC$VoB;#&n$z4b;x-`8l^QE(VW%gA2R*bKmCt+c#JQ6F3hdwAtYeH2czo_!FzHVnH_ z`T{cfgTR&=ktC+n54+dPo?TiVhLL>yaG}W%kR@#6;#&sb>xDZWoilwfxgf+=x-bk+ zM|7VHJ|6_37|BMK*uo5 z-_{y&|2qlqN~t8r-6kP8kf1EpISxkBK}K3usN9XbBw#ZISFekBU?x9Nu=&2V$Q2U;O@RPK%+kfQ${&{_@Ys8ixm3O@n{$_y@t_U z3k;XEhb!K8Kszpf{}HAirtsxSb$C?2U7X)l zRdfOSxv}=&UpnB6LPuKKSRc?^Wc4+5_QD&LXwO&b-S8alYsmU{LSu>3Bt3ec^{=bu zl;b_{W_Y4~DYy$FxqD+aH#Jp5DSFt73UTv+QW|L@jUbhiWF^MZps&>LNNAaz<#sC@i?t^6V&Crm` zy26ZW0DCtQrp){fD3f@jFnkuEN$5?>`iPMHR(Q0)X6m5c1X*P|ODA@xAvZEhP_lub^z@&3jNKR#NZWNgAR{%|&8wY-B1)O{FWzFUp+SRe5} zzO;@#Iryn!@p~+Gz?#TmF{prB*rC1fE58J{MLn0i^0EWFQ^7Lw-%n5MZ|ca?`;O;v z%1?ETi~=HXYu@o{3Bu`E@x6(5x38AiYM;QVJKO)Tp(TuggkwisruhZV<%W42<5SUD zQiEFDkfQ#yA`cf_&J4MDxM=~;zlo5k5(zk~>uuSOwVH4#98G#g@?5}bG^DIXi|!-D z3ZA00>Bh0uS4d0N72%#^u5*{ZV*?-ii1S-(7T|X|d0%F&2G_w@xN72=fP1*?@0+%8 z8t7Im>He(QKtgJTOY3$5R(1Ua(|-cDu@5<=FPw}2gQc%;fA`hU21ilp$0tbZhCOp| zBg)>28QX5w{cijo0sAGL*CUa57pHLgv?isy5;mPI*Qp_f3VZgGCi^?a6l|aB$$$sv z$Z^fOrMA1zn}ItD>)QXXh7Ep;KON<)5yJUYeGA-97`WA7JHxQ|^bM{} zv^S=)dkr^|Gvj936bDMrZ0_p^PXLt)VdR!L5q|c`*Os7HpcSdA+f7B{$@5fXACACO z-@Sun6c-CkRWd435rO6%?OD7=2%=_g6L8DA2^RG<8Kd8zIJ{QBAXb@BIV7 zn{MuD>*Fj4Fn5)D?llE5M@k{LQ9rx$q3&j;AyZY+HC@^QS#L&=MAu-1mdG}REp^oL_vW_htSc^YM zrr&)DXXv%I?n;>=r}?@1Q%^L*VyjfNWzQrCaZvqE`hXs*wWQ>IUXL4jVq>V9#mEAcuQC0^^OG0xaP3Ct`LJ3Pw;T1fXns%}U!uVH#Mb+;zPH56JF^c_s8}D_nIk_tP|_d^pi5=QakO z7exqtOL&kiyvldE8V|RX?K6+f@E|^W(L?+tKlawQ!?py2vG&rc5QF9)~x2m4te z&$w`W%%vM_+he!b8r^+pz!B#yGkJwsaRK+QuVAzC4=rxut_1i9XJaGBR^$Fy>*Kx# zymO$}@4yYXy$+!aCt{~h|M#biGZH(Hrj?NQLlmc3Ch{P3EE6ZT7P|%wHP}A)tE2|ConXnXRTH4Z znYXt3w3~b4{tc?_J}tv7|1Ay~=DvY}exJYf<`)*pxc?8>efQ+ozWULKJtLu{JpZ;fH8Z z#GYC&?~K|jKy;psd1ZD15!^0KVc_zB;cs!CUwC^#xbd=pi0lUL&C)iP*iaJYQTpU? z)r=UNY1NpYoKApCg%w;93==q9`H!F-|2mv9)gISE6(>XoD2pz38v*rp`WiVAaADn- zWkUP1af|b-U4OaQL3FEoLTT9+zO}Jf{mdEzaizsYegYn@$X}LeuERqj&Ml`$4iEdq zgI>1Rn&IyXpUe~UNk}@So|SnI4!)N`xLGEP{fxaQIHzAdYl0(Ra4f0+sZN|UfH!5L zFP+{{D>A3a^;|^VNdeUQAF*0+K^4}Ak zaM}*Tt!&>qaI*HClZnf2$P@J*rO{typkHO4WF$8Q5Biqgyhm~R$>8Kz#-k`G$EC=> z!+RhvFI*Pa97l1kYNwdQ&nbxT%CjZ3O2B@1fgfq-735KSt6x%0ENFjp^_C4Cf&$Y^ zuS$oHa4vciYcbqpKs-5j!K^^_D%wQ#B%Q<>i_>1 zKc$LuADLDVT=kwzqlTdqd{q{;L$`e@Sv?lnDgI)XETHS>yAWPe?y&X0M zYoB7tzv@q-JTBczT;({t^R)5qvYv+O!`egv(rK`IN_K-B#oO>_kiLgw96XLT{+v)9 zgP^JG0qf*Zh=P62dAVU|Jxiv(z&QwcHlj(Z569sdJH;d9;TY=IJbGavFajdt!NrL| zLy(f2$ZoMX4i*zp>NGQBK)QJ5TRmX}oOBK(_|1l)B&j4?)@2;NRXJalDI5dAo6S?! zJtMG3n{ZTkaTt6PsF+h6rlCIN*hBkp3M|R4Zff40gu1)ljyGAyA&JEI?9r2H_>%g; z`~vSZ+zcyBT+y0@XBX}LiXV@|4c0cL*YVTPbp8DuGyD{I2N#kSqU|)kw$8uKO+fHN zlJPItY0&#>yj}ix3NCgwS;&V@0y{-{j(*kzoV#@IQkw2K)QtbGzmYNqMAfFyCF}^S z6^!})Vj6}PPnwjcN#h_t?O1ST3B^_6|IN^UAA!EOGLh16LvU`cXLXBl0{V7o{pG?48C@$a4^~KI|U?AX)4d58j;S3X*p9*|K40L3<`9?vlI(4i*4UyrrLnzFu%ok2_vSD0C|?kgFL$aQ2Y**Bo=nO1K=`>?I|4;FNLG<~iiLK7IIrK{RX;3z zUiV=*hw>70Uw*PET<-?XeKPE*ZU?YA349i#zya^K2hu-p3`1uX2c7P)%r=8XZ7Y7*%X}goQ?K1?QZ*y};gszpuB}4NrQ2rnIjU^vR2s z-#c}{zT67~vE^QHSHkDa_w~THdH(06=eoddmnm55R0pUCIrx}G_QCx22;ybc3zy>; zS7x}nfYE52(G=wc$nhU$w#%l0>p|)U+rbo&1}HVZh?#^R)Lw2GK@(swu}_fXL3zms zv0OEJ)8MDw7UGXZ@pAY-zb=bO=zF3j{aq0CNB*;C+RB`UMymZ21IQF8`tHpZ%}v18 z6W5GjQ9R6w=B8oD@es!n>0pP(FB**Hqn`ga0X=c{EKDfx7#38c({W=0u!&}&CMfTa zP&|0qCv|gul<0h>Odcr9Iz;_jg|Ralm~pT=WhN=>F#_k($#8z$ zcnJO!(zbRR4|-8*YI0^%5S16^Yx`^xLe!A%-Ct9X-L4vD!9ES+cQ9E^AEv-hKog&i z#t}c9D6oxb8Uv*e`@+SANg!}u$0;38fy^4c-Svnmkf1X%IIL)d=R1tY>?ct^SO5IE zNNRL_lB<^Enx2BVQ_b)8{Luf|k{+L?ngkme3(CI&;}F*}Zo7YZ1X^_BlcF+Ep4yb| zw=_Bqmb>qT`lu%0hx~!C49e4HAAG52K*t+*^TFiHdy~*ln_WAnf%cPhdWFa~4pGf% z|1=t=0Phj;t72{vr2aeaArL+RGxlfSe;FPJHX)5#JJe1b`QhI`VH<=6deXd*l75KZ zn7gai+6OWn360DnL(ot5?m21RAk^z%g%rF7K=H%}i%hnDcqml%Y<_+i&Y!pMm0KTz z4!@0|1?nNxzTEmt{b2x>b^@QY_m9BU3t2iI^~3NlI`YY>twFGSR77d{aR4&^^$hu^ z^+6f?Zeo&cFC4g+;uSf%VATBD%TxRvU>bP4JYKjT+C%LLi{-s=Ej|UD47;F+TRTHe zrUNWI9b&%?4Zsb9*jMLKd1XD2;^E8PK=Ojx0AcTh;G$7CI#iCx(w1EAqdwTU7`!+} z+5-|P+uSjkP$PK2i9!m0RbV0JKsqME$` zC85Z*H82#?^XCn!4(t8XG+sMKIX!MI!*I5 zhg@)Ulid*4$p+PbSC!{3heBJw*rfz^UwAA_#mFvK0L-=_MdyU_p!@ms$fwl+X#YAB zcDDHq;C$?qjLGsq_jvvGm}w>~n+?2J$q0w$I}#6X{0o3W39a-Ti(Gh|m|Oe3G#g5b z+sr(jqre?oRXaKm238UkPNS|tpy8R-6?XU-dAep;D8u3o@8cytid-&-oe4T_7j-{i z`ufE7XNnn8%W&hLJnw5*FOy+6s4D|LA%%#KE-p~}V>z40!49cy>gcD#*du8gMgKZ* zIl$!oi@xZM8|e0N{S$C}j1=o{JK7n!B1-sU^9i#=a0?I__UNntUIuX*{cA0do_^(~ zC_N4e?$dhbJ!l7?Sd8BMWCh%z>lF<<-vSdDH_L=_ELdF{;N-f~4%e+QCJFcQL2AD6 z#pG%uRMRNZI~C&4^_BT5bx)P z3ts=|B3hpfX|0Es-Aak=(l`*Owdap2X@{W=cgFLw z;gBqN=StP*8j!v6muV&h2ZF}}L03<-feRA%qs0TQ$Ig~`aGa741&k(_IUcvcJL6p? zTH{tYuz>$^Tv7#dgpoRb5KSXaK)=bldc1b&&rw z$-BO!2zJUDg{hiyVTiO}Kf${J7^lr&7CP0z&tUQ)E2~O)fKR(`?OFuuXIP|$>KhchYGwSHXf^dl6YuDJ-rm;16t@;517@)X-KPlwCd@@WZ+i&J^!8%CnTh zTMmel{+0`NY>bZwRdYc8uqvE7D-vQv6eD!i!XeE|T4^b}2uhf*l|^&qfeT}mb8AW> zs4h&qf^rNH>?B^O29`q6lAKQNaXuuGULX?@&jiAP-LF?+DPZ(EjIQc*2^fXyeAcci zfGa=ccIf9bL5l6}{`uF*&^19lx?tD@L2rG_JILyR+iBSQz^)P|kB2=U@|S|vKtNGX zPcy7?gdCKi`c?2=#1LVt1;r@$@b{xt5S*g*;K;ZQZm=8Vq%bwZFXp$zM(SEf{}iwk`^d=?jC^@wgH2tL#{EgYD7fnk+-SBWhmnsXk7khsR{!Igo%k*FSZdAa_ z#9uyBbftiAVvy3lSO6D$R}=4~W@XejN~msh>}7@Fzd7&x}wK|(MN6DLEHfKH~p zn6EenK3oi^_I}_9)~tOhLll-E9$eLuCl!p?J2UXkW~V{(pWV;9WG&!yL*;Z=e;X{* z8MO9OhafBLDUI1O!C;J;6SM571H!+7%hZdlaAnraC49vQsk9C)5g>6!&+RM1+g79l zzvUgBoeK>Rn?~y}X!Z(-t3!c`O)rp#PJF+01q0#P!AJX2LJ>sV{v_i;oeTn%5xV@l zF`&vN&N*x82(+979*jR6LB)o~_x+a?@Q%wb6Sazig3sCSKW=+~V9u)ZFoy$VRnR`b zv1GzpbWa(Emn=Ms}DvdNaa%jeL8=Cq$T5<+mo0; zuo1fpxhvk_kt=W$PFca|R0FoTF`jMa9Y7`Jyc>aR*ze2 zVOzwmIy$xu$U1DQb*7rpcy$9AwMhfeHt(db|EYyhfq7kLOgo(0zgTVixeeOnd0Uv> z8o)-?bgKGHJp`}p$Q}%~!%e;VYcFhCL0fHAW~rh9_Iy92<)L{x!zt#zM;B`0?dPu3 zdmhywa*^qKw{SjO5RD~C2+e_G14Byb19V+3BXKuos|E_o1O?1~2|TYB<-$$ngP4!e zvlXa=!xM*YzRA_l_vhUP|G6T_<^SwN;hYPaLLzs5NY%lmf8P`N3~PWP@MEr-Sux0U zFQ@FOgvh05gyxYaWjDDb=*Bv;lV;P&&NfHce~<4IPFDCwUrx>5}#=4XV$E?;3TqCu`u&(Lp4aYB8L0Sii8) zmIqxc@pRp29Jjrd^@_!A4dgT`-!);Vf*TpsVhl?qa5{NZJm^yckdM}}zG|<9rMhCr zEXfLR{?_x5a;F#$lbqG*7VF`>Mc-TeK`osALi730Oa-XvpB10gEQN?kMH#}Q9FSz< zqjTKMfomNSu9?4+fUV^j>G5_na5SFjmCVkE3PVcZ=g0vaB#>r>KM5SAIfy)}aqvJ- z5|QA~1*+dUeN^+=Kx6#&Mn7#PZX0?3b`tt%y!RUKHEmmR?SCayM!t8DW zG$8F|YK@gof#ir=tf`+vAh7W2t(Ri7h&Tw&gb^(w+`1|zascg_^erjtwoB^M_UiGmA6@zCe^V@jlLg?Ri zGr*n6gH;K)+o!cM!K0tW-|S-v@LKLOboUp6&F--E*Pl6%I4IXDZJGgWG}4cXQ_}%I z&>dNPF9oPfd{Pb0g@7{!Ir3kM2GA?W{8P+Nhc)>?alC&#T$u=rb$#ds3wPJfc?!M) zhM*Nn8o_iBWd1$U-<$wNgGH%{+`*t|V$G1q$qj+!=KGs#=^%S&_)}bM0+<_@Zk%E9 zg(Ou1B7oMlUGzBh_S=PaP&Pt$9J!_FAR+C5Zn&Yo)x+G_=0+WR}U zL(MQT^w?fWzY*q>X?Q79>mfw$71tq(ANbr&(+mWf;1BzL!*M*RxftevYQ^|cWF ziPH7UU^y&$+j9oSmcY&&yTFWZ9i(qjsS|KDpzdBR{Y$wF3<}&CZuJ$zS*fa-t<4gk zdqV$%|79Kg$8>I$E}wylX@T^ruQUtYg7dMCY9FS_brFHYLzqJ~MgkAJFY|G$J`eLotp4@m$f{&$}jv0l(QkyE<40yIRy+oI~#lt3*gaI zdgr&(c~EsOEc3*TOqg%q^39)51ncCVy1DB`!0Fsw9F>v>|L$Bjbi0raW4c8wybdX# z7=lyQeo_E*U2#4H>pUeXvOdKMO}If+pmJ( zZAhXxNh~VT?Q9EpqWf&$e6I!0MN#Qs+G^P5n$Inb#DTzbu~tdckFBOqv1d?gK=Tc+ z_1}uDg(eAVSDBS|khIS`$<5jZ+j5mbCj*~^H`;^0n0dPHe=8+29ZO>wd} z!0p?6PI5eTP{Q=WZ%4law!>d8Z~j8_JQZ!y7SMQ9PG|juFPcB4kY0Dmd=ucRXDU`3 zl|KKQ5Y$TK%IfH--}YLzDZM0p{E{#e$n#a4r^hCDqfstrW)D^vFh}v${}yuL(abFdYbWls)y*{cGaftgF)|U33u`D!f4+sF$*8LTl#(Wk-l6TJJ6sscegd7E^_z#HAiu+GHc zXa&7XSw3!-4iH|O`FW%?8ah3Dx)?5mfNNQmz2AX1#9aHeVXSHoQ>UHx&iW+5u>xMT zEFlgZuTxR{&LJSXKh~pn!4oXpJZN`6r9$-4bk_~(WboM*T`${4Z1b3YRvy`f+D6oT3vMOM=XWMz=BKbDknSO~+hyj#zta-m1Q zfj;%WY!KTvujrI21C{1%FWnxYF-4Q>!MxJ?$rF!bYP({8fDZnb3T=68dmr{BsWM>?q0^N@sx5E)VAm z?|85q-v~8`E&y^`7AAxt4_*b{FSFyw1Q|hIcWcpP2>i}O7tPQC>pmJ!zqsO{{e_Bx zjbk&Mtn5nd3U7pMSA(%>iw=;>SE@NcaNsjAHt1~F1_t6eacp!g-~rw{yF#77=Nxc; z&KiKib0X;_Z97!37oF%w=fTwq;{v_cT@ZbX%}JxL1N`jASgggcz*=o%FKN*R*Hd3a zco)?}b>dOUZd@Jkdglym#Z`cy+fC(cObN8OL?_8mv_LZM;0E8RC&!X^CXGRS*H=ECCSjkZBblNzeySJunoSu%5{xYwSX>v zdYZ%SM%cxyp8cv>2RAqB*#5Y8LCov>oel#X;PB^H`JN0G!X!stO4YZ)7mlE5*12xD z_w9Mud66!t2q>eVyWRnx^g8CHVsYTEV?ws5-3!JpvVTN=b_0dY!`Dk_f1PRXwf~3a zf3kiMNO`f+1KKP58MNv>fYDy%xf$6FbDY;xk)2KeuPde*Pf_{yo9wL4wt^(TM2IJC zBXI3pHJ!gw55M2kCgpnKUEygzQz_h`9@Sew=f(M|i|g#2HE^iB9Ge_i4P?*V9$R*mz`3tf z8V5&3K!_FKKWkG5n`%EpWy)$`%3_o9tA8Z~72?#j2_-O^8f%svTn7^AvpY;@YN1r0 zZ9(&LC73?+^!xO-6lw)5o~-K?Lf|_U`nHHXU|?A|rJ4w_lE4yz5%rhiWN+9wIE?(Oc&=>4Ke0h zuRhln0nOcMimhkGz_~*&F1(fxxJ-C?5|!_n%sScE2UQSM`okdqQYo~l+)q$`mk$OK z%lA$#=Ys|G`aC#M1tf1Wk2Bwv!J1eST_x&|D8E~*w`MDZl&5OubSmh&$82of`lTGr zqf%3gFE0hZK!t9)lSS~|K9c#=pbJzH%5PpJS|PE+)5Vkm0Z@^@KHP}PVW8Burb}%P zPahnpk1Fyb-vTB4{95lKk38%PxAtBE*}ztL>vM1D#=7uL=-a_x^<9OUD09gEmT_`v z!yc0PALb#J(clk13$o(_fJcLm&V|tf68lC(`ceYHXz%F8(3?Cs&yx8->Q))#{Cf9! zUcMCcHd($#JaXYJ|Q5C6FUyHq9dP{R#m zOn>MWk;S6>4ou@GoB|*>;+g8!dv}OnPRu7D0jS><5c7y53Ldk%{r=1z3Waj}y$h=z zAT5#`t$ySPxpQi=Co>aJ`$Td+zC8wh<%sf)^Myd$>l>2qz5U>|{7k`MObV#Rhx~&l zv4DMj-r&jSXrLIlbHCjz8eW8+8{^jv02&g3g%fnXkfQaLtHIC(qFJ_#asurk+xk60 zmD&Z2)l>|MV|*d}ME9(Hc_3VNDvvLf@&g+=u@aRaKgg8(NMCs;2)^3pzx`_v0cvWm z`}~w5fbfQJ_x0^)Xv-pZjUI@A57G`VUW-S7uX?ho*hUnT-F8+s6hZyd|J>+$Me^YC zbgyabSSnyB>FK0eQ=oZGU!kQn4_X)k@45=3Jngk;d1N31`W98%X>8KK?|!OWxI{EO zS8Z0&%Z-H{d8xIAFLBWBRK=_MJQgBUmtFjSDk`550RPMnCcfSX zf`zLx9DTA$@DX7VOplKRLJorq4VxEmyFYNFee@7y0zQdGM5Mx3L*Ea3QRqIf7gj&L zC*6T7&c=y-_X!L|2wS$h#)1Z&!mEeeQIMl)X|G1&2GS;2Vt3_pM2+1~fc<>n|B?0G z;atA&`*tX+tb}B%?8*oaDoL`6q^u|*RQ3qjd#~)h_a3j;bJ=8%6e6UI%&1V&@A>`l z?t2^`{<)9ibso>-y61D>*L|Jm1>Z7Ttsmw30{gdpq}&(K@-F+YbtZGLKnL*n;#01&;)i(5ScpSKn^7ri`SijCv4IHM_?Q2a|RCw>)Ni-_M#3|PSX zb%#r}W!_K~e`SHm#{m|8#C0ov(F5#-)lG2Nh%hMT&R{$?`6UrkNLFF z-84vlZ%Ai*ItgyJB})xoOool6RvF#&Oc;9P*O6S64qOXw>7tDjA%_5MQEQCH@@QP< zP>hHKBjXRRR$9a1I%9QTZC)tEi{7r%#iD`wC(M2CoQr|-NydWM&PdRC@O_uxB@7%z zkE(n;9}XL$ed6Dgl0boHbHMCR3{a^m9h|=!0Ux!~*5&-8V7mJ8*G8HIn2Avh=r4@} zKZEVzgX&lqvsAmk|2Psz(!5UUR%F7~fPV!-odI5K%;q@GMEEAUCJ_HR92Ek434`FSUpa+T{(#?(xbBzZ4J`PKul+h?UMuD^*NgkcMC%oO*@fG&; z20b}1`C@JdY@c(m#c;$9j6{>DAD=V;2i!1o%eP0!3DZ1XQ?6iWN_T$mTw(>MB@M2; zKO=^aPcpCI9@v5yKjHAbQZLx5nKY0;VGA1e57LyF4MBN~TkE2<5rmeWgB$AJFkWI< z5w`OLECnUB&BFA6|760F=b#Dv7oR$+zV4N8Fx<4cX4h%|*9b?xEu3*L{LR1kRh^1U zw=!qMn(khsw?dE6;-alA2&in_{^1Sp`qd12gBumjk8@|V`!o^wL{ZQ4erfve{rUZE zu3|4~8)=M>pMJl<{O@=3hd(bSoubAk{%txE*)%TmkY=AL{-zn;IJB;&Q|uj{H?8d0 zq)rF!&3CSteS)Vl;m(^}ez|AxBtFy9-0X39x;To~*gPd1s|oXga;yxF1f$dQq18m>)ktj6FN4&ko%M)n03a_Tpf(*;A=yc_;|?!VGE*{=O-=(T!z zw_}l(uNe;E`5Ga=BKLT3l#v_aMSX#|Zr(s;@`d$(?YpEl(f=`{s3~6jx;t6jUEK2g zs+0fwmVdab#!NVw+PS8+f&qlod!k8IPT&ZA@|}OU#$1_ON>oqd%r2iq;F4R@f@g-O zWb#~7M(8hwwzEvA#JdHFF?9mDRdTOu7by(UIo11dS-f><|J6s~kwWkBM3Zl_Kh?#{ z@)ieBPh|E{JF%6^l7M_Z~Psu|WcEcq8$ee~`n$Oe`Oj1c z$L8zoyslX89V@8+Z`}S@CK2&nxK8t+ZrW^xwrG#}5Z=Wm{o+I0NNv?UZ^xjO;JW{w z`>!lJ=Nds-()iCq(ueRdmWdcXm$mA`uSN2kd{s67J@;Qp z!)RN}L+4XXN-yv^PfgcWiRyIQ_X7Y{k*FFpI z`i{PowaYs>MDE#z-})G0twAV+_M^Of4rTm!y@$ZFb3iY9X;yWyzTO#+1>^GLX4dfM z-e3K#axMY)nA-p8&NnZa6P+xJ6pM8D)7#NoABFAld&FW~q)AU@I=_UQY;O0+aQvd9 z<^R5on`b@nlp_+A{jYzj4cpt@d&e4ghw7i>KR#+o^09(bZIu7)PY`UJGQXhSNYC9% zlt;R7Xng4d9aZ6IM?;C@+{~=qqeJ+~(W$jX=Z6gv7Ir#qM&$qS-;;L-gs+<8hWWVO zx)0jRFbJLCQDc9L;~90bt5TQx*Zw%ZgmD!CE}TtDu6x5vADsIVKkde?AOGw-sqrSY zV5qoh+rs4F-W(T>kcpmIFyG@JF5W1$Y5Dw4lK|&pLjvtk6QMrMW~`{R%)?hC^C2hk zpln8MXpZsRbrTJP7h^|2;0f8B^~MOOek?6-VU9(Rh4A1-v=vkjX77hE48zCOx%Y1| zepaXYJ$1I^5V(Kd;5%Qh9kRkZ|B~bN8(?40^7>;r4D}=5L^H^(pg7un;qSUW__*;N zH*&58hP=FEjP-+HHCg(su4@D~vicprVf=y%Eth`H6b(TTg_f(F&=8oKUQ9p!WCYH# z_ge>V4FlufzEx3-f3Uj6f37BE5YBUqUfRO=_X^DqSmH4La<=cCb&*U=7bV4xvhU~+ zEQ|cC91tG@ro78jM{WCws1rO6&=``*Gk<scg|jzX#m5bi^+?ty?{@23#xD) z0^5VP%$Zm`@rO!xxvGb*z-p=5^NceI&R@CGEAgTqa9>Esl}(3$_NLu?uTS} z=3G0_3kqbJ1iyY_{b2qzGn5|VjZ7WUKo|O<@ctFnqevf&ZmDF(^@@^15 zFtfLJ?1Z}dsFyb|f9Zfxo@3Ys#tV;shJLxx1G|6M1{N|qVN&|2-tk&YAAz+YKen$I zP?h3Ha)uu0duynHVmyVn7MG5Z4Ru0-?U_fFe|kZSlVmFo({uPRN=Ze7#qqB{T=R~( zjOiqpdb54_H3WoIF_WZHn0;9SeUbMEAZEposm>O&Po10BmJpj4_m9hb6d8i@rrSy~ zTmx{aXNt`6cON|a=@(#4Jp{X9eilSn{Z6^$tZiQ!f)0V1m{Hk&*b&jGOgujbhL#Uo z7@Y^Rj1v4bYkZ+ z=0%A!{qS7OpseX-FC37g4M7HPfaQ|Po$`0x&|%&EqE}}Cep5f88(-;#TNNeGEw5lY z8L8wqGccZz;clZLvNHfg*0oH!fBIlOze@#6)Q7Od24KzLBK_lgL9jM0*^0HEhp(04vxn?Z}xshy<38UvP(QVn?a3hl~l#JXY zRsNnM-Zs9laI(=wwlPLD;kpU~+QM=7Vd4{abf>7tDM-Ub)|^(H&O>)X)@5$(cX{1k zyr+*xlX)0DdR$_8S>;6}giNt5S~&$Gcws}Tr%M3BcbaDNMf!myyIP-9Q3~SQMtN9! zL=j%x9bc(>cTl66_NbY_!G~`(y~dGsXdwk*_?PlpxqQ`4JBGw1Iob*X6~|M?NbdZ> zy_nY~=)`;O?2O7Zl(>o{9Z@6Bq6Z-faWbO>!RC_vFW~>+JEesoXw^Y$elp zg3?=b%s2#9gz1aA&m{3{Df*g)Hw9&H@IJ3c+dc8Fo!2N?e7EstJ1_l1iS2MPA+LC~ zt`*DVe%mBDLv;%8PgnY8^SdXWk7WMT`m%@2(a8_*XSc^>+E!g6$eRi9AIWt{$SH(m zIXOPY-*NUq>6>>|HBLv$6;${z!Y;`H9Z~^~f(dnV9b> zYqL>&6m zNrMpbD3v<=MGNGubI}uP^}v9le@El70hp)}`?}#b0B;qSd^U>pVYn*&+GF-;z#{h5 z^`(2jVI=?j`||@Z_7lIwsOO34Vdz|*$bATEDFp&&x2l2Jq-U3WwFg)R&(hN|41!)l zlztLdKjb_8eNa}^3yZ`?QKex$fDhsB#rq6E=oFXa!i9dIy|h~C_N*6P=-2$w|Mdpc z-bJs-xAlRFlU0!(#_J+<(Nx>O);~9fIObcty&yt;_tOZ*BY9Nz{^#ADUPuz4Jby_8 zo0qq470Rgg0o{>HClLcTSUDx_Sa0u*oT(Z5X>_F=OvFT+hd*|KJUyvYZ;1f>-5?JB znRN!Kv^jkus80t{l*7|k7V|*Fmz_C=z7iFd&TD_)kRzu zI__tOxY1vKtSO0UvgIaJ1(ikq?xI14%AB|#+CbqoQh)V&H+bNNKc-&jfy|;;aH+fx zJQmDS=mq-VadE=ebj4yAQ~WM(CesGzV)iv|IrM;W181oEdJmXO2hE&Pc?S1YWEl=D&aWFu|IYtL zf-eFdWwBISz8hG%_VH`=fBT~U$}6Vl_{bSUssaV<^{zfQK7rZ7<+8D|< zHCFZCbN`iW^1=xVG*Oj_8wWy{6rLTzeR>$m*Mo{`<0%nYTK=d1_NV_nFX*_H?4rb5 zJ9Dt8GPpZ;X#Z{hgmaHYB%@~RbW`W*Q=LON^Q-kz!=G|BLF=ZG&P3l1?Z4BEhk91T zc`Kj%y}o?g=Ex!YZfV@J+}n?>c=RM{i?+_C@;|%&D|JPGnpd@xR#bJB>hxu-Rs8q+ zf2E0HA7^$=VmV3LL*46j-iL6UZ?Nug{baSJ`uK}uq(O)5yI{2?q;^uPn*5w#gIPYo zAzXsy-t&;muBs1#Wiqc$I~?jCicOL&L*0i}y^&o4dAY|A;S#xD1v6p~>K91@Ue&!g zd_G!^4*jscZd?Car?^=oi1*O>4n>{wASMuqNPhMfWsLn2t5$(EO}6%lh(X+`Z!2 zpc6lRwA>*)g*iE}l3uR#{*b5t0VU5N`rait`LfC-#cJ92Uz0C!{5iC~DD3P@ zT&MX|RUkcC*>^tv5MF#qk6SBPukQ1$Xfp>_!b9V8+eZItcucl+HA%|AA) z^_`;%O0_w!^}mN)*g0hXxvSz00wtenJVi8|4YcA8;qJ@}r02o2>f)!2z)cqML-q-r zNM(IkxLXOexXmQ8!b9WlUSq{?rR?XGyMI#Y`j2xS!lM%!;vP9rR~860H66uh?El;U zCG}J6Z$5d}5Erw#){{2cofr9`1 z4?K3;k6D-LahJuA`VkWsoO+jHu)^*C^Z(2oUw)-Do7Lo46R&LQbprRp?CPufhyUmQ zIhj8+XX&Ee6#ME}IU{#VQ**e#(kc->PSnO*R3iEXcG#?0clZ`ATTR?5HbK&lFCQD* zFv1I-Vx{ zK9nC!b_5gQUp@DHZq5#ggC_Go-2EN-Q_+()H~~3(JKp}=G7n<9H4o--xX1b9 zkroWJ|Lha_)!3S&OODH+xNzXAZ-{H6rAaYT>ilP)hd-7Uqb{`Ryn<;EyT@A7_H}3c z&`sTc`189|DdrRxn#5=0h7LX@Hc6&*@{#uaZhCBS-1iiPEozXwv9m|&Czlf9m6-h& zP%?j!Bk%dC!G$Je{JhI))c@L*TzB@9amr_Vy`5Wn=1T{9GA>bsmuvDxIG##Fon?8+@|E{Gw&K?A>Ql9I930_)xvmV$$pM z=r_WK!0PMlU^!{?gmFUw5*3bBEtG2j$x@=z#)L5tNDy>+(!WPtJVxy1ez(Y3@BN^l zjv|JmdlYoLdFt@_`icqpbu)B>u|fD}w6+}agZ1l2zGh&07f&l)Z>^zcM7~Z8O|hV4 zZ+<;{@ai@i-b9;rOf(9;+I7I#bgTkp5xDH+*Q|jbR`S1?5ojb!YHJ<>lWBPQ2ihT` z%0KbN4za4WyX1Jy{O|NtB)c-Qr=B`sH;wqUF=wZj-&61epA_Wo$yniv=lbe+Z@rQc z@*6)xZ#RT{?_JL?T!zgbser*#aw@pY+DLt4RzF;0o6BS`TRAS!RD)aT#5WmYWj@O* zCQ|6nXEz6JNyX$$TcX3-#LQ9or#EvP%*#=!<~tV8ZqMO=YrT&b`1V#-nuSwx6LDqr;x=CW zq|&m7@F&I0p9fX=>Z=rr)ONI*4z1q}7Nc}dJ8gCR$E9;3Sq%>1!O4ChT^$pRtZ^sl z*f_2=o%vZz|Jv-;KmY%c_1xm%ynBu0T0s}RX1f2)pa15eli=URQT_J~Cp3myr|#T5 zgtsrYcKXFSHW=TGCAT#AcF6v07O`gOe51NsM@fuc+8e!GG&r?MsEZ_KJ4b zL*F0b28X1HCXL!_4X=x+QTW~GNA4VdXnmisv`jqG!q9M0s}+Cz ze(WLpxZLOWuUrnRC%Nv(w@P&Q{_sw5VzNOwaebs)dEgvT%pv;&aSOHsW2tpbrxKGi z8!!FCMW>2lS!}kOoJvDEOJX%}XIxn-o34i7cq{TXKP!Iyw|<=D(l4c-A8z8a3`->X zB7ozwoqA0m{^B1#S5}d#C8*Klv0`!73Mv2BZ~ygA_1lY#-uml}v>`P+_V={^;U~lc zz4F^6@IJh9HRynXZ2w=v@%=Z?@wU$<{odu(;`a!KEh@@dag8tA-G5Gu$=oKd4EUtK zgL93`Y97sz!xzhZCsdME!3|URML+O=AR}xTyCP`oi}Ug;xZ(eED^Yhc}A@-yXP_V~`B{HqArBfTQ>vdyWf`6kJW>eUZTy_Mo^iP6IU@ZXaBF;QG!8pp1?T0{T6f9?BU z`Z#&G=K6~XM-3}%*genr*ZBX}3glX@f1^8vJ zD)&`%K&`#0_*udZs5w58@YkUYtoNQAk)UsdlNV_2yGk-U7MFuBDS$9P(#h&Vwt0O~Ar(g8w^O2O&Fy@F5-3 zt6cg>bc((OenrsH=_})5Pb!hkI<^sh$PC+Dyo~7|R(-XX-)IJT2`ihlR1`$YJ($4| z2i&i3lYXGxjqTB&?kKS0vVD;an`DikWYlcX6vZ0ixDD+v2g(*4XU?!Ve zGSM5;iR8aepfb|}F$E=dGS8a9&`$WvMJW_08DB)}Uup-_g>A(LRBd3#OCbH(qy;Jx zZr;C9f$6^pnzCg-=zx5y8|~cTZ4iCLE<6|0v}sLw_64`9a~ub6qmrm9X^=m)6+c&ldMemMiE zaqWdWy_?#N!1#mJOVg(rc=9Em6V9V>kxNkz7%<&}FK>*i&osg$f$xvlH#KmkOWuN&^XfMoscL{Y zER9BKrxF4ZtY&sGeUSe7s@M<3-H>=%`{o;wP6(9h<21k00ZczPnA0)+C-)~dyY@~_kg&Kn9qY1Oy}BUrmH`!3#t}py_Rlv0GoZP95beWbZOz%VuOAQU_qzC zW{;ZT8DZ<+?&MC`SpLrMT|iA@Gg@cT0YUp! zw8l70pLsu{#%{L-d>qUjd|NTy)g!mokACX_9__Mi@5VMTnOyoTZ_@@^^v5o;$n?Ru zwfqIK{2ok~d6Z4b^9|f-GoEXE*agO+aoX=3F~95=SIxVbZ?HJ5VRd<#H!zY@!tRgx zhZpoZpSG-Y!pU4i^@kbQy^@*Z?dknDpjV(Ba_Ir4Q#?nPc{R`l8ior>k6L0nPv=i` zmomNq62YUiXkiz0nDLd zr#o=t#r(^R4X1fFOuHZ@Kxxw~qZ5(>l@@9WJ77j3hJwol<0mC~%2|1%pyl=Y_NCk= z01esrl!yjQ@BBE2M+(M^;BzjO)@ueEy*8VzmngJ_#=CnBH$l!xyimxoRw&k-)uhX6 z0S037PqpmLkgw}F-OGW8kmUWbbhHg#ybp2g>~DqBF9g3^3Ssj>XTZ<=01r2wNURlN zdcX5`*&-Lu)x+6KZ>GK0t09DmRXc3F60)APN#FNs0t@mMIzEh_=5#J%tfjKMLW#9 zS{ccCw}ET|Z9vtM|O8zL2faxK;&*oK6YJjNc=@G7(by(hv+71m)6y8nBu1iv) zz)p5&eyZ?Bd=%Etq+8dFwD9166u&7!-vF6G4aSwv z^B@8Ljres!9xxll(2b{Mftr;M;g$Xj80&mbTl1*^m_4$M3!dkLNCV0zeKZGzC3#%j zd$Zu^2ESv98K##p^Xu|`%3>&^zFIrUGMf>|WyFCt%#a`$+YCM|A~=S_tz~ zQL=2~NMb2e|WE`g><%4vfo^LKt*^PrsS<@Hf@^fHYzyBW3t85UB8p#+hN(T=r z;+yrYui?xrUqH}74j9!N+2)ED4lfu^*BWZ9ucquLSMge#D-M4HQPok3l51}b|!|M6sd>hU< zjL-c3sH|Z)3~=);*hRkr7s-$Bc8WbAmHe_}{JCgw5MOL)SBZdIhPN05218+9Ky~oS z*8m`@JvC3Q7z?caWDn-EBZ1oI7h`yF5X6vsC2X1aL&#O7>W{vDpghw^5O>oEcvnnu zQ6u-DR$VP$$Necx=Dc)SYIOn6pi1*&Mm})!$+?OBW6#0CbM2<-{f9{IM}7KmLVqyg zRJw6D+Z$Yn=v}r*UO=^{;7cA+6~x{m!`)f21WLJK6x{mw8j1A{nXJ#U-RYiS~-igKp#_vl^ z4*S8@1mCk-Z*Rcd5)yeXDZuuLn0nhX9+rJ)_vP{f;mndxQ0P%#jL#xoK01>Mee};F z$9EH8g`7@eF)JL@e(PT4z7m9uccz-u0xzJrOi1t%4>;|j6E~ang{X1O2p`{Qm&}*nIW4tjE4zmHN z%o=FZs@gA=$N0YTZ~BTlN`X`UGU;?$F{IvR_;65+@qNGZ2ZUqq*+O&LPGR?}S|0J= z3fM|u@JLP_RbMWovCmJ5-^qf=i#EE7(dn?S6aO$*EFH!}9b8hdd)5@G4dt=sY@qxj z6TKmu0dlX*EQw3gp(RqEM{l?Yd<*i5^?eJ$j6adTdnpIj3tMn2a@nA7Ewa=`R|4&4 zR#jh57QyScx8KS}6 zYrw?KNJ)000(ur+*V=_PfY$zU;f2d}uvNh0cgdp~I11m@Zn0K^<@%9FRJV&k_Sc;u zLyZ4K(b3=i@p3L0B;`KV#dI~A83j}Qeam2W%`9u^YYC9bnCn;H&Id2%h|gjDnb7~G zbX5Z54RbL{D7AdT^Z_!H;)yU_k1ur8JI8U^7_TZ5*X&#gjU4hWkA}-(R=(Vd8H(Tt z878>vkPEKsb#ER}r@{EzlQkN-*HAd@KcmSX0k%YRG=~IZ z>$b#}I-Pzhcs1&;?MuV~-cnSh>sh?vGihiIMiWK}^v;|G3vyPUY zQdr(C_}_G z%Z{tmH~juU-~xSSxDE^QJ?yD50k=Pa>S2Nh%ZMjRph8 zd*MN^F#gn$?z3KO7|()6=(^Kd5?uV1?)QQ#9t0!VHY%!fp-hT}v-f!xy!i5?{`g1= z%rW{gb=hI-Zb5F`w`gqLlr%VFIS~kHI&=-X=k0)~t}p*CEvBu2I#$}o#sKy2!fBqV z5Woi@Ev&)z5aTcOg_J@bHc#uUOAExq5@IxN?i~edPuFR`MLEG6CAWhxf)hy5!XL9x zpLoC`rk+F@M}xG~nWeY0?rw(R1nrSb9^K2L7OOVXW2(W;@gp4zC?If1} zuwx=s@&VG=d!pWgEdqX|Z}?0JjHC5zQlDsyS%Gp{I@E#H7V`MMN;?P2AWp_NB5BYr zV6)7dlHTY9cBPq~5TY*lvCx*}nAZs^Vyj_-X_(((JM;TMa0le^i?D0*Gmd$BfHT}-%SN)PX!3q{`xmPPZNH)32CQ&h(q5^ z#detV2g^x4W}6j*{PnD!CBs{>jUQrAogmH1Fh0LDp9I&sIdIF8DpRc1x8YDSDn4l zudA=S(kmlSG2-ByQMYuoKXgvDf#S2=-v@0>bpeqmi7)Okx4Q@WSA6^!vt$MOXsMN? z>)~&-WSU7|=WZ8p2z$?54{nD)wUhU4hg#rg*!#H8*g0!`{pyO_b~`)@_*=n}(1v~g z4OdlCTR@oRMErKYWsQg%Ucoo*bk848e z+I%S7Sb4;}j`6Aae2tw3F&)x!4NW^LUlSy{t21`&=9O843X zj(0CA?(-TWTZu#A#Uc*K)bHt#>!U{C-Wr-d!+U_An7&FSX7fY#)|H5es~L=_flrcG z!;CEIwUSjEqwj~`E_>Cx|ItO(lS0MdNOwFw^zxI>G!i(xEv=qJr6M){X0&wSA3-8n zU2o+8_DC+g$0|-#LRSkvOYXceBr}TpA(JP#aF<4wI{)fN=a*9WElJB2pFalpDLbLo zhtF=KFMAd8^g8aNeD}X}X}t7ADO!a2RTxWA3q`Uyk!iqxLw@XRB46+~c)rrtXwaZ{ z+3!1FvX)05MVW+M{%wHY8=ijpBETO1Dok2rhdB@5BlPPk8T}Og6h#>7w&R5N68drO zfyZln*GXeSXZc$EIWEe2$*^hsQ(eNwP_G3X$FTy($7!=NWjCYa$@EC@O3(JWx{ZbK zHy+=oCKrE(OO7NJqdj9Jv!;qCbQbl&eR@`tH>6Pi&;NQ7&#*Zb^!c*p!_b!d%-lF{ zO`9yO(Eq!C8_X+W;hqn=EcwwzgbjJy^faKR-d6h*ZcN38@Fa@{-izjB&M~5U_#AOB zzQC9e{NO}qUG>#UymG2Mq5X*!Tn{Y6iGHp+owkm+SGGak6(HE z>Tx1;bMpI{&GqAGrd~tSu7^A-(ngqiwDu7idq*XDyyFHewYK_q$SMG-G&?WVHZzpi zFQ-`~@`JemQO{qk8Pu(s>a|nDJUY@XF-=ClgkBMH&I)2)L9>*uh19tiqMg~Fq~vZm zqv~Qr(z=ZPsQfJt(ko+8C}C`}SVNElYHIyeJT}M`%?RM{otArrhG$&dpSqWXz8!ek z@N0eszewb9U&qD>Ki<%N?U61i8pHT*GkS&>9l1(e{BzqBKO8j`l6Oi{wq?b!*p1Z> zzs6*9-Bl+OFRpr&^i%j6F2MHcthvf4F7C!r?u5t__%jcDPrg^Wh?l*dv%atK3-|T! zS1WU8QhZ(cc}DpVZoH;E2d|y|?-^~&9N)0cR9E}_cRod7&j!WrynosaK+U(Z9# z-Utq7UN2^a)xl7aV{72&YLMI<|E<|x0rk0vkosTDufk_!Nsjqvgne}$J5ghLb7Hxz zmjbI{-y^`Z?_(pRagnrtS8Ievy;eMxL$%;mpEqsvrW(t?IFf9I`Av^(O~iPGH9?Q2 zh~#8*9Z(Er)jLtu7v#euWj|+O5wwYo={zl zB9PV>-aA8D12GGd**>(@z@)xmb7Zz0QuleUkgXR3PN8;zj|vB39Zfun1~|AcMD&{I zNIgU`2uS&uRztAa+=4SJ4z!!iHyyJYfaO%0Y4g20IKCGm!-(Z!lb-m)K`K!THs`1^ zP1)+8VIWhqA-opMSN-^%4{AWkm-KW%rYq=~oNKv>C6v3xaP>lrXd!gCeUW{S>3&VE zI@Pbv*FgRQ$Cf{7HE?03C-O*I1+2 zMR@h%;j?YD6#g(jwj#y!YW;KkSBY0L!Laz=sQ+9l1TEHY?CTVRW0lq7=Pw1I5}u^m z^(_m=u2On6=q6!#jv@$xILm>7y^H$tTp@55-F{pplMT()(_K$aWWcM9oGU_Nr9iFm zJO6}T0qpq&n!Grf1uO}9-#Rc|YP5&t)Mir(T+cn%DZLmAPW$7u?mix{B;-1I>8KVk zjjzy(I3>e;jg^eAQ!Hq&)>s)jdqXX?ddkd@4zk;r#`bj*t(gN-_ahoI9- zVBdGk+$>c9Jku2Y>9lm{9M>$n6d4bE!hgD*Ih{dj9GznnyaR#UdpL0+b5K*&HkZ8i z9C!+dPxz&$z^7xXU2Eq{pzOT;P_679I)twX8~MD7I-D#?$}zbJ`f`64Fe(cq-iB(` z&J3GAQJ}Ng6LPg9GMu41T&NVywA{!N$KfRayD-ESNW!)0V@&#>> z+ey8oL;+J8W*@)MmclMWUIz76F@#lB(I%-Efr@ds@WZ7d7>Xcr<pSKvK*QjI7Q zN}y}Rz$g_2D33Dd(`CR>;@+PxOa97vM=gEaD_%x2$2t}l!g;kd@mk$mGG-`&E z7~tkvrMu_sKXb9#o&;V*O633-?MXVx2!aqmOYnWm3GKq0AjQ=W08{F>!*a z?n1V5^h2p`X2C~7l=7lXr=`acREMVq_wd4Tlpw53hue!EZG8GoXDdDfU%P;>A>_-& zUsiCKu?VTazj+!wRpC8|=VqHKB)-{%H#I8#erB!#Uy#hOLy4kzWMHPIi)#W;ak1=l zCsieSnqd9ZH~metDmvQlyeb1cJ6-GJwR#3_|9$@~KI06kJ=J=_BQ{;bze-p2K%dtgKn-29qJ2ChT^XCA|yBamwJg|^>v8eGQ1613~({2W*!wsLt zbWW!XkO|rlY!%Ibrm_tShmIuZa+hO9*%P2{Q*niIQX1SzH{~1MFF`>5!Zq#^dH8hU zS8wT_3Q+LaD!(y%0Q;q3%j_n1pmhSx*)CTC!Y1wUSHG0O?$ka0FD9wj|3AN$s}~1u z#m9wBGhLwNU`TQ;?k@P+Z>A}2$76bc!V;#(qhawt8h$7v56>-`>?5n;J5(BJ3f(sm%cvECz## z6vyFboAIhaE-$2{rT=oy^B#qHM6bOgx#4M(?-V1Z0xoY}WzAo~p;I){u*S}vt zH{|vBy9Dr z3a+9uD{JH2wwY+Nyh7GsMILI~qWYYbrwE<>Qdml9nTJYDoFjNCt%&-DNZ(d#7ebG} ze&xOwB9E$E)yU}4y^7NOU29%oyLu^8}NTD7}f+t-h(iyKV zE59F)gq~L}yM9p~QCD?cORw@nehn_4-=m90G%Rsk$yy0W8z-+js(b>=OQXTD|0)ov zEFR7gSBpic$ZE93{w5&TB*R!;vG>hnX1bm|8;fKLvrcVTXCRzWGy_)U8OWf`w{87L zuaRT(TUXR-6A_6O(`|`|8A#vLlQYI>He&sXv#?Gh5g~FaT4^atMWU$3NE!Gu5YIM8 z>t5STWNev)b>&9_V&>W1KVp}LU}7Dt0Wq0~@fogb9*~XnJ+mn47Gp$C_LYb7@dhB; z;>s2#OK}KCMgD|;&}-zoQ3XTeClla!e{4C6%n|v!^y%uFMI5rELru+iIT=|wYux?@ z!E`E!jy^m#=Z9FEEsIi;$04^8(9KTbWF$;Ds*lLa6mjGDDXKE?3gM#mQy6oIMNXah z+~T2`ioEI_cw!;^8d*A7T}S>P4bk#3DHK!ALM#LJMZ+qxkxt)>%UUxj$P~HujT((K zBnq_&&@jnCvd2;%Bt0lZVpqu8sH9R6=7@nXcdWi)Gwb4MUvdz9%N4^BqyQ1RFlY6M zC=~&POs1_b8Hm5dG3plATx9lRhaIIu0rL0Hxj$=`8Ayij_QCO;Y{cpvjk?maGGzXe zan&nMOf$MPy7EVNBZViRLOcXktxHWQOYZM z$O%20PVb>|WW)0Umw8?l;!&n7pZPu;*%BO}mp0Ew2FS(V6em|8H2aZqYFt&wgwmRf zno=cVRh~6oz!)WyK)@_X<}YvsNNxHjb8eYpM}z$6u!}o@hdz zf4U~R$A&}l12=Z1!>W#&krnCAVIXMpP%YhA%C8S zpJ1`gM;Mykd?g4jMfNzEcjrG=AlIhMOxUZdkg@31W9%h`h_E8P_5ak^V1_Ei@tG5)^f(J#mPK z2^A*&Rf8-Lx!j2st3%4WhvaWgH6Txg^L6Xunh-&2&llEv)yUboNS_<8YmwV#VvR>a z8<8`Gxi|bwn~=Q4pdSNF7RWgvZS8{jSBT|AO!kmKEHce~Vf1`n5;AZ7IX$?G1^FPm zx6$0pLv{! zOzBMtIfQb725-*?f(;i0C)n7yCKQd_BEG;@8~z%h&}FN5MwyCy&Tf)BJEMS7oq-oJb}&*ypWbKL8??)#jB2R-Kw7@0<5X)EKkoNyvc-}DMN1f*i3 z*pp8@CIjVao%spxB5|X|c+r(Q0bCE>*Iv|40sF6*8vhd+I6hO>SaP258z-2}avsNn z@wlD*A%|q>_x&+*JC%k9djF;(1pK4{Lnt{ovBHGY}Iwr9<`&5$IC8wXcHV zI!I%GyB=@8LV8K7_z5vTd_Tpsng2Zu*BeXcUxu2JC)qbvKS$YPY($;s*X@!V)f%*!lD z<_a7k5%v-Nf#kc zn5kFT?6VUQV*-PKUp{vn)}o(!$rD^x9s#n@-@IyE387MC8Kw)pua8#4v}6yDsh1+Rb;>*ot6 zkSlbTb?mY$LL@#Pu%ORDR+rc(y)8>L8Y-|gZc`)k9AB3^u+I^D#vU)5-%iFm#uFiT zyXDCDcP3iQ^t~cGWUQ?_&_BeD`Dht#*+`r=x~p`OTbs;iGSk&V(jm8Vo&GSMZ-rOo zN0JL&s!{P(q<&XJA#;q!Vgdd- z9Qdxj>5DnF6JqzSRif^vrAvxP6?ofdJ;sw$aaKC_okzVXaUQ?#r)NS{&`2J*^5(xX z7_Xh?Z?2BQ^oW-@W!r1==ua;C5~)aB>kjT>p3^4Z&S>^<+OI|4VYH^es%neLN@3wd zZx=kB-|{b9v?Vi5h2Pp|tBjSa_bz(KyMT6^^-EJFCvwiOU}`51C$de5{^Br)CIm_+ zhn*hVqpNa9NUov_naS{QyV@~5vMW#HSwnbi!Y6Y-`HO!wpeB^V#46xScq;0i{G7y-86o zHJ<|KM=?P~Hu*@^Kh%(Zs}MK0agWp_*h7duLh9sQPgFh~7{8Jhjc;$GO~!Z=@XY(B zaL92Nv{ZdGJaQlaolk0}Gi0K{zU8`Edo}^DBiv2m^X=hvT2+?nsv82eQ}Vd~#zCiW z_k>}35`><X` zUb0Oz=sdZw5GGC%7lj!TF>iR>P$N7Q?Q}N;^R^XWTMt|ES9!v}o-`Wamr6m^ z$L4fjt8`pwpck1`Am+F0x{vbBLd?uOeKol&6?|v-mwBx+5kB9o;dib8I~Noq9^@9` zV$idQe^Zs%Aok;Pw3H$C2G38|{n3#7PkwrLt_^wYRlb6~S|v=BB^ZY!iqL4H=3;H^ z4$d*2bnQF`@v%=w^9PQClji$c1%2{=;lE%+;EcGs6xGNU7f8jc zwV!0QA+veJYo>K56U_C)zzb21C`&*5+tA1dyV)Cd4H1XPWIf0fdQov7A0#u&KI{0R zZHjSwhJ6Tv%J(h?wpfDdi@nOl5({)0*uE4u@I_6^@#%DqP;kt7TWZv&L$1i5)hgHt zRqv+u^Ssd`OXlt6$X2z+@T$tx#asi_eh9Fxk5eEI&Ykb_kU9#UoY|0uQ%~S|fB%ke zlNRJ;!-;cJuO!Kwr4HX$1N88=^|s$qzeM2p`@pTYe-M8kUS2E*4SH%RPK#JFO%5 zrh1*nW8UCUW46;?(-7i*n8X{-rV+$CI~2Y$b;qnlNak%uUqlMmhbd+xV4?S#meZY7 z4E+B5M{S!w$O-Q?P80^>3A1TO7&!^Q{&9Ug|2GZCDa2QjDZ?=SSJHluNfg+1gC4wY zO~T>>jc%U@8PJGU6_)uE3dx*z2mD;3!8h~bclpy4n3Ugq-&2~7*5~JJI~G&XeX`Fy zQY;hQUpAlF_ZNVo;Yyk0Y7t60MR%?7WTn)S-(JOghox zeJ=w_(~CC~wz9Ej`?p|siDJ<0Qe;b^D#ho$>Quh$nfSQbd@Z^v7u(lax37g1 zE^YI;9T-kTZf^Q&6twZ%mF~>LC5h#gskI_d@6}#S{;wRza@0I}Br9QV>TNKYEs4LJdwBCQ zUnBJZd(c!v0RFDLI}+a&f=p-0g~9*>OrEHb&C0OFyf{n$4tYPkIigp|y%dfq=gW54 zWgL*bur%{N?G+{kW%S;@_60>ITaLG3AeN-AUt5i4P z!h+IfHwfP`+Fi-)0xRiaD8fqlT&{Zc22m$df~|NcWLg> z%o>xZdijvxo#M?#7>Eq=VWQTvquOZnJ@Sts+7#O@8Kn~V49HRm)Tx6JdgQ-9V+@Af zh46@UOit~aG4#tucKHw9B+m;yEE9QtAKz&|2x+bw@6I__sWDTWuuXOAVe6vBmNL4HLJlE1Vab(sNJPg2&FW zrQ_6doC`Kk5vFn`;#2K1pM)>2F#Ar2bRqA({-A`|@13KP1271qR$XlhK&y7KMu?dU!qoOAs~DOh_@5r7-g#4)p)0dT$`Q+2 zZjm_k3O-NmC%@3eL-}jfG z727ZMu}2dQUBmWQriI84o(0xaf04nNGa;hw4~#+oS2%pZ#~6)vKR#qzKY`l!82#|Y z=kQh&IqU7~0F(9d3~p{0h}W#JHT&5>mP-H9{C8J$7vAPjZV5njSh?+?5gW9eu`p#e zw?+V2Q`j!o7NdELTW5IA{-*Di7)*$k%ixmQbP z{jhku?QpjE8(da$Yx|Vp1cmIaH<#P(F#cK~WG&qne}mcTIK+HVzrug&34tHW;aVsd{ybDG&)eF~6Ta1doID>e>4P(SD}) zUia}pkaa>T$L)e}KyBLL%4h^$s=d54^Y0wFnxFU8H$`PU-%<`EKQYFY-^Nj2qloVX z?(}~bv=iTz)e9cfDI#TdqF1Kc6x&+5zqTa2!jec9kt|t*TjIW7tLQawb}xqBk$eit znIvAPB{KOXrkgK1iXd9Rc^ zl6GC65$1G+gkHhvAIII0$!@7)uj&tLtzQYxUphl^Oy~3XXJ=?}V0p_v*xy|T0!UY9w`*Zv=WnxJpE0Vd3Wg^~<8(^Bu-r3`9ha(2_SJdWQa73@6?#EkA@(%q^ zoDU83k*j^W!TF{QCik#Y_flJ62i0QFLYfPN^O@_8+7tTq*`RyN*$r~``Dzcn{lVYF zIHi8m0)jO)kE4Eh;$Dynb?rz9?hm{_vV1fMAFn?tT48d*%!0xBHy^yQzb9KES1km8 zl&6yxwL9>Wy8ee0>cTf?%(5aM0^^7$m8~4;g;&1)syc48_kr z5ZhT_xj5#B{%`k7!xe*2a=Bio@UkD2Mr2z5MEk?3;Yr|rj$kDJb;`M|8U#%ME`|KclG8zYVnC9yxM!=c+ipgE2SkSz4w%}Du1UV;=qkBKW<4kJF z@e^^}|LR`*-hf#6rA#!avM1uW`RnNvCx857f6@5tcrdbQnx&2Yg<^uStzU;f3^{?6 z`=_fyVYK|^>sku2ZV%QEP|t+J=lszV(l_H_y7!0t-MBCa32BU^6ow*)O;aYVKN1&I zd|e;hibwf^CG&%G;c)+Q`@bH7hpICeR+xDh4GH@QgSof_e9IGdf8!F4pF!5)UVkHD zaX~>zo+1vCp=?1OO$lhP_GRrL^6Gxg{ime=#$#@N`e+|H5pOq6c+*xVVtH(-LF8W? z^xk)!EMq17^Nf8*-iZ`A^9i^wlNieqcQhhXAyBi^?J*}d_8}#1&i=B z#0O!>TSM8LI}{_|kIngxhM}y~!R=eIBR2W%8G;ymVE9g9E7>OmKO4Tw_Wy~%$W!?z z4hnua(8WnBFdm5FbPw6+%h4b!ES9VB$K$!!(mTCtA(*>#Q!A4*5)UjqoKD`3$5TUY zJJ*B5NSZ>&|@tC=-l_{k0dYZ$;zv2qk+W@qbz}A;+lh3?b~; zZNjl28oJ39`JNI){o%^i+|`&QR8r+pF#QRKu+g0eI=2`^&3dqE8zf@V%=C;PYYK9z z^oLpKBEWxY-kAAXG%kPBpj_!ofV6Ni^KaE;D7|`_PJ1n<;Lma_PsELM_!_;=cqEmD{!4rI+rLS{Wi^@qVv{nk zw$QrQydWJ8WG0oXM7%#=#WM6&H4>&VzKLszagf#1lzx_*g<%RO%K(o&NYfqbyiAt> zyFI%C8fcSHr1K^H9%CL9R3v#{2NYr~G|fFwHyI{#lHaL!XF?@>e}GV|G` zR)9sslK(|rB}D9Z?htG$#NQyZiElk6aJ@7uxS&t)f^OuL1gBa|y>7bTev9D8IvP)l z{w+hm-$##X9#=uZyNNaYcn!WEF_WN{DS~U@b>V*>N?@1KnA_N1g*Qh}Io*n>1-0L_ zennXl6ul0s?OjU4xv}V%A^J?YNf}@wRpSEVn)MN zheV4HJ}vRYyc3>CMiJ}UG0P>zmQ{+QnWQ?J&$hxFy@6LC!oh9;ZDzv8@n+RGzZoHAT2OEcD#vP$q^?S$xs+%*Cza zV}o`N3SqP(?}E#65uRNdXMB4*0V4If@s#hALH!~4_2rLgctq<~?lG4NrN!)9sa(k* zN{D^4PRUpZy^%_FITPiBcF&{>yo= z8QxldHjoMvoo^S`lrs?|Jeqw>GaI+`Uj8}4o)4!Fo?B&9>98I5O8v~1hhL)R&C)&u z@AYMzw=tv$X}ho3cYh~v>(*Z9*Mxp`Z>Qi3T`oo-O%mFll!EPD{68TAAD-H(N_`qZ z)XA1S?z}ZAL93;H-2Gprp!2(BEFzSTeEUXC{fa`Uvdz8uI$eTY8ah=C+GW`3swCxk zJ_F{Gje5D$Igq$kNOhaO7@k|{7u}gkP+ROsVlyd3|JVqv_oE^_I!Hs2bgc~0)wR|2 zq6AOOXYom0xClCQ#ifQNrLg;;`|j3SIs8q6x7i&fc+qXoB9~)|K;c}JTa#3Zd&l() z7WY)bC+@+^8(~%OmSgYaUMj`KfJ>e$Z_BZISW8>FqZS6A-`k$!uS48Vc{%-y6*yyX zDpZzuUh$4-&t0=xOneCa`OUBn;VFT`o0lqa^`F&wnv2y~NM7#Xu_A*%_D3BTcRgsl zo=diuRl&+RYKC9E2C{b=Qt#E)Az)v+froJeY;GmRhPf8wXya5Y15sbw<;lq1Zc~X8 zldNk$VyXyz70YxwMAQ|Bmz@^X2)unUDmdwG4d|3gInIXFLg=TPpnZ8MEl3p6+lXqE3~w)7)u>b{O|D!Qgsmk0ze|tI!D5D^7Hu zrJE45=igVyZ%sH%f8)yRyF#pWe*I6}yASG_jDik6^u#)q~)e=bjv~9Pat;R0reOweSb!c>C zI?8sh2r3_1h%5EVkTE&HqF+~yVAIGwX>GMo^VGiM^NkECfwzUz*Xm)qC^z~xun}t= zWxn};n{Ylz`@&_XI{X_D-s;+_$FRhB;}@wWBr_>W=A|~n-kL|vdM`eO|a9`6iRh_1s{ ztxC+Txk4zEnIFjJD#gKnIbWr|S7Y&K<%mI19b&w6_e${=!%K_KTFSK?v%l#su{2e~ zcO-Q3`L9~cX`K@1$tB~#J&}V)!s>A{Rh5F9kZ)1$hN`xEGZdv~LgV7IX<)@qRiss+J?Swur8K0-#P;7wn13T_8v1Uxfaw;7&Yr#N#^@3d% z85Hv>Gi|B$C@b#`3pm>ha~kRo1%)j*$S>xzXLmC$Ya~`Wv9y9?;f{m6Y6q;`FPv;I z>cWN5*XP}`n(^)GM5%W~D_(Ex2o4qOM17O#{HykE$aD%ac@T1DmznxjUu%W9qw4;y zyB+vg*b&My*M%?q4fV3bItTLoJt2C!6$R_*)Xx*!VVdnI7WBCjoF4qT4?cH+pXOJD zbAAux3$M|bfmc?g@@~Vth0sONchT6HMdpKCIs9ff)-UX(P7}?kvr2 zxflBJUf85{%DEYWk4IzJcv{i%&TQfqA>Xu(?2Pb#ojCF~tY~tz88J-#t-6}6cz4Tr zN4irx3e=tt4HkAH+AGsUETRRcTi@Lh{@n`cWx5^rc6J~#)lf*~Vi#DZL~qniwt!tx z<4;>v8ajf_t$#WhZ?nOEYH{a;89tt70lIzD9(?cFIe;-RFY+KPeC8J zsD>xBkN0CDJwEAfQ#an2=7v1n>c!Y(qS(4bKh*X0RZn>JgGui8heK+`h;v>Izsp&U zPd0v!g8!?AbA5`@Db_k%&n7DlnwKCdVV^DwQFl#~)w567L556$ZJm=(9rVQ>bKhAb z>b7Zqd+#2p#D!|={hW5SNR19-Wc03sTFv$y>wn7d->ZMRrXrOfU*mJ7&#i^)-IBgt zQ-u9E=-s+TQHQfm8?H1Fgg>0TF+0!QjC)ZnJr=nwh%Hi5t~yZ?#^I8gS(4s2IgeGwAne27D84#n1*5%LB%GWK^Wg zEZ8()FY9?*nw`xE$lqmqMxg~Uyhr7C(3XQyygzG3t`eei!-{iTL|z%5bC`0h4m_*k z_Y&zU5m;DcFO4e1ZN9sinoowOyIhc~R6RZ>9<#0EtVX+|k}4!?!T;yqHj#bxxG&(r z(U8#q(W(Uvhn7klY&hT{%Upv4W-HG+dg}1JDSOo^wgJCFH-_4X=T9ZQpBE$K%d$On zH;%FyrZw)iQWshvFK8wcqgxNEWLnx$a+lNOkF&`tUax1l^hDO}yL0rceZ z@7ZxpuzDANlTWY>XZPlnid^YHs?M(ae4!0choa;cvnDv~cwv{+-3l|}jPgh99nfsr zN8UTv0=_UAF8ACv>{iOUK#|)CL#YAYt+sA#+-$nRlGch30zB*u+dFXi{W;s+H%snA9|~$Q@>KX zajQ+P{bxZh7U$nBn4Rc{+5M@&lsEl2f8o%z18+Mqd%&2~Pw4-`KhOKqNBY73g0G4< zwjcK#rBa^`bz+_CsqYzLe9>yo!A%3s{YcY8_J#AZK!yAuqn)U z+^fG6pWc;9e%J4TO~T%__%RmY8ii10bb!-8?|w52qXPaZyGCD5G?+2~`}zFF(fh?!h4>uq&7Z>-OV* z;jY=wp#unJZu>Z?JcK3#+f|13AuxyJuA39`vM&E_d+j=a_{)5vp{he*+H>xX+wNiP ziIY=d79_^wshmeV2H@t`P-*gf2wY2F(P8&_1bIWK9~JrA{bB@9E}YY|qaTIq z!Q^4HjuG6u#^-rkmg^;BdAqZr3QNhYxjO=P;)36>Tev8o_r4&CbG$qcDzV@KhZnK7DneVNs|b zMm7)bR}=DcuPB|2w;00l*w@w+hlb(M{GEH|S057I_H6&pcmP-8o!@j{CFKA4BV2uY z2>D-K_%nz&QuybtPngpHmU#1AYcCIhLH2Qq^!yMeLMVr21NvdocQp+3>xrMa*BfJYV7KC*panm8DOY zMo_=}D724p6g2Gbc*YMvEKhr-xwtu zS+4Tlhp{g}^)aPl4(XiMnd)=h38aFg!@6x>pTh3ZJ?jKB27IJrIbU%si6pbz{gvF8 zc#?pNz|_sF#>n$%S!n!6ho@67*>YY-k@Pt;XCwGxNNPvtw%_M5#-i!|cR5Uyu+c5t z_ue*`WVo{Sxrr-+)T6PVWcP3cJOAo^R#5B*&zEI3x?DeS1nk!-it+~K$Ohlf9V1wc zT{od4_rYvju(|803!-=aUa#QyLinoE6W_vNqOMG}jeVvY0j+1{xRo`DI;KGUFwxga z&zDXAhj|$Bc8{gb?(P5`#pw6PKQzealvKIH8w2q^P^9jdqY<9WTYo9Lunj4@y?B{^ z`jR5Y#_y_k1(S~3(5Q-p89+U=^FO-t8zi$m5q>R_&ZO6i|K!Cv14#5`ziwr-=z*o| zQl5qW3P~e3dTe*E1u6Y{bWp6LC+Ws!)3?HghbYvtDk^w1O-i00{o$&oOX}sG=)0?I zP6`_~+4X|(vvhxUrqGWMfH~E=uPI^(4|r70hh7|pgvy=*mZW}EKDN(0*fD_JOwVr? zX$+zKtKpwpl*14bfANf=y&p}6l7SM_=7`-M-^U;;86Dy z+cVjNxR%P&WN9=ENhywyt$!o165e(l9m6OOI#=_OY5xB)6g&TudDtbGlnmvR?_w1r5Ey8~}M&E$>0A{$9 z7^K4nA(Fh;zjbm5A?2Cuzl(>#lJ{85USt5Tf2u#ruOCDivmfiL-|uT|j?`;f zV5i?|`WI1+wa{XRWPFm*Lb;4$QjI0NHKPrf!C2IHll; z^2J@`NVbXl{(77kKFa!xpic28o}Q^Sk_5GTH-oKK^J)j2s2;ykTqQk$z?H6K6BN8! z{5_e@hYMajqIEyYN!^EsTf$doNyVg1o%zWxB;Q$yt$ClASTVB(+#hDxcI4NgC+b&?%cVvfWvINS^t=gu@=xh!PuHTd+BJNHzys`S zdCx1<8ezKMt19y=f$w9x^sgo~fUby4!JyxSl>dt8r%PJ#nTL6Y=(Y|_jlHBk;M9m{ zn@CPO%VxYyS56^+w#Lqo;S&ZALxC^B1a0b-0+Nn!wA^ z0CwJynOEISXyg|wR-`3X}y%AZK8 z-5l+J#!mYvbDkE|DTv2*g|y;{bnZyciFPb|->Qus=s>V?(ofN^Es&$w5NL01g)c{? zW6SP#ymdNdyfd!@*M^GQXa?F5;rZe1YFH=c*5;1vv+PEo{$uf8#vV`#UGl8v=mZ7* zGc{wWE(nQrIrnh)K=snd$_0U5jL%xXsw42iLD|u$&t+ZM`+l7&w5SKIxA}v=_YioT zZcpv_nNCo~+7xL-biu$^y)4MP2e-tXLVg+b!i&iucb|NT=Bv}KUUXdrnq>C{B}Fn*r#aXJOGpnVVe`RE3zX$YJWzM1(wotXEQij41<-F-;E$bO1hq2Gni2Y&^vurt5p4q=MaC&Swr_@#W31ch z{uay_Ye{^)PzQ5&n+Z;}25h<*RUPPP##}&B+`+4@Fg@pLph{hjS>0b-OUD{P-)Iy! zUeE%Sk+W|a%G&U;?8vbO{RVuIR(>$N(ukS#>wNDCyeapJds}698yxg3yO$VRL9MS? zRn^dnmj*9i&~LQi(nZO)jf8$WHa47nBG!se-#LUmAGJa8um0-Qz;-0PH)1hw?!dxw zr2RXBS4lp-@Ys8+9oN2Cq=$d*z`i@x8QlaPyFS_%HrCOGUFlzGnpfMA)AIJGF~PS4 z{EDp8tm(r3qQM~wf@iJYcy-_VeIvnle$u4sZ2^VcM%_wR8_K3Qm;=We(e7WjLx#Q? zrQ2kDCIVZL5q51)hC(|6Ls=aT@HV5x?&0do>=u-dr|)|DtPOt`!}^ZS5pvEIM6ab>E2%71I^2q50o70K%qM2re`u?hY204v-f*opJ^)Urr3+vP3m+ep$-i91aSSj z(G6F+jjHQ{eP~OYjsFqThtQI~?MA^Jcqx75bZ>Jv26bfe7@GR9rrD`i&q(Bj8bf0? z0iE#YJjnhdh2WnSN^1KG`@m^;USyN5A340KR&!6gFk`6gb6BJo^GU-a?wfrWzboVT z>{dS><{VVBaqNS(f+U5JZ$FBw&i^&~J%G!vNZG78gAmMr#3-QOk2$>}MuVDuY}E%) zIXxUi!XxEEd#)jj$@lpNzw3jY2>rd}%LC}1{+o9@eh|H4X>Q`DhVZ0tlj1Q&KbE{y zL#nI?AZ&A^>^;>Gaz$<)j5{|3iM>CxGnu*&vDzknfwLFKoGCNg3EnX}=CWX}Ga-MY zjgwh;^~e`yEZ>r}~fD!qyHC;!26|s@m!R%vE#scX|&% z)@YUa+P?vKFD2|eKiv<3<{QnM%{}-{-x+>~@CSA8P7gWJ4kBgasiivce=*sn^u1=b z6tZV3FC4!*09N)puk2a}!DcL5zgjSix1sygjbcV{&hW0{O_l+)oCtifw0{VP>NiTH zvxf1-RPbCB6OoU;oqDLVI6(BD_53)LJBW3gJ1R}K!-#&xd4ccd2uzN;JQipegw%ch zwDS~0xX;A){k#7#y!N-<+QmD9#L*`;Bj-o(s_P^v;^GK)i1hug_wBjUt|Q{Yw8H61>bW=wnX%1Eq{K9tA^?)*BdB zA0NcIwwj*>4MQ-R)H9B#9fG~K?gt+NFU1X{XCD;?tbmjge0rwBa%z1{cJ zi|ig)tlKC>d>_WC)tRb`sspHgB3(RtG!85$_t)Q%c!@T;f?6fhAw*OP1W9OjBRw)j z`qIBgWaYjrA%KFKaFwE*y7yKHbzXz?df^e8A6Jf+SjEiP)PFUlxN+=SwLEH z@v%HUBu5(d{q3UbQzqfpOq26Fa$RCmC`DXxDueWX5CFlIz5{VF1{pm@bEu;$WD?Lisv|+_*$a1&84V(xlTe+SBdVBo(0K8ptfEi_OHZC zcUAqbUPcmK814G?Fz;^7SWi#w{Ykwi*lvx6}l3rZ*Q3o+1tC?J>}xdPXvMA#5;q z^rysbx@((7QL+;E+a4-UScghPy0i)JvARY2_x5_QZ`rU!s_}L5cRwZxO@}dMDhn%# z_j{(c`^i(0rUpClM<7DthhvOQP1{b1Gpk!?l6@s5%&r8MbWpBItoc~1#wxf=P*HI9 za0~np_x7qzS-*8g!s_b4Jw6Pg*MUAbaD%NR$!bhmW+L6TepuJDYE_Uc3Yk*6!-r=RAn8v14uQ|1~17aF|8_x~boo;F=V@eZyN*QKPm8al2+O;+QW07h{_(>4 zv)EC5e^9J@Mz@I6%~&MLKHEz&NU3%?^!*tY(s(?4)DNS)kb}u_J)ZQUNVb2Gp^o%5 zwM9m)Z4ldediQc;0Kcgi?RM>MSG}2<$WEyE5)wACQ@a2m`an*P`xZG~pI|td2 zmrfX5^Znz8!;FWDnPNMzI5gU#GZ%;|kMVDe{(NM43$FT^BSJ7YI(RUf!{#7U23wVyitSDtS|zbmwL`Q^DkR zlIw~2z1kmWN$vEfznnQzPul)c&GSWx1!?J@wRBcAbM4dKADR<00;Eu(>wWnplcdZu zJJrIc%t@#D7?}-5dTUDVTyb=L#Yy^C`0>51aUF@>MB$sPml{cFb>d~_(Rhg;QYX!1 znRk;qT78~Ll*E!|1%A$7TsliK{4jhy<%zGvRd1$hli(4FZ)X*+_|7?zgd!DH!W{OJ z%+!A7B#D_xIJ1gPg-;hqh`5eWxJrMKxFg-4cDcwwf>D35iORf3{I-_K+)4nC!~t@} z#YfA763tKTynUwhBsh0GB?+JP5_eSNjS}pklekIwFzJR)sKoOM^GNHqV-j~6nm4i@ zIg0CMu9szX*NN+i2bHsJnn;u$+}GA1xGA1Gsk&Ru@0Ivq8-;FuijjC)n`35f#48e= zwX}}BG7Tx<(2r8L(+4DiujYo{lgX4=u)E-`t0qa3bmdB$*xxC^^IoNY^X|v$H&SyX zjWJV+2Ro+J-(DY)_}cY#<9+cH3EqtM@c+Voir2d^MLnQmka+a{+kUAV^Aa1j=?Atr zUP$DOYp;!s%!r?P;?6|l!XRN;ug7Q0_*g~tne(C??yPR(P-PZY-%p>x44EKEuZb^w z*2CGmDp~RB#$a92oN1G`NAgwYECXjx&<|5KcD1R)?{J)0rm!*g_%06Zb+toiTM5V6 zcqe!}#~e;*u*OUC>TP``-ssh0{={Jsg#R4-jvvkoh5W*_(k&`Cm}38f$Sn`VNq1LJ zP!fI5Y*O_XJ_e(!s5jbWKj6kl5l!8y(~I;$ftU|*c< zkX!e}GJE!w?VtwnPjl&PM%u!rnV_dA{hzL2#mYCa)Xxo*;9;2pCv`p(+suBK-rtO5Igsuw? zk1|_*^mW0Hy9WBE3Q}Z^cdxdWu$qHIej|gpoC4A;MKg=ZZxDBTn_sewBNn`Nj}$3; zp!C0<89SQ*41TQRlnDvLFUkA%qkc}P%Vm60*X|1A_pCn)UIpRT36+eW8PPcTPJZp@ zBRBZoNq^jC?}>nq<+2{bp|~9DFk*Zs7KMIo2i!%yVW>vW&C=$F$I=wZ|4k5mjeAx` zMRnpZHKob_H!2)-f0I)inj?`a);NDJAsXefPk%pnlL(J1!aL#u1F+w@pkv3?Se%-c zzkixH2_q#t9%~IHLF#jc2 zeCXWAz@kX>U)>G)OY=7w9zSKz`Z(oh`grS~Z$9ep5!io`KO|t1L^(btK0SSasJElxv0rhV1tYLUPL-P zeMP^?*yiB(c-%*xrhMFEql}{VNrmZ+kCN*|Unj?Wqv!D*xoFio6V;hrfOV6{+u1bI z(Ei{^xA|dWpLf`qdiyi^i1f=#_9Oa!YLZ+$15e124M%r$be%Rwg3n}GiHbYEdgfN% ze&mgpv~^s{yZH!vVF(<2Xn{ksdj2)`F4&Xv=UZW#Cw9<=^)sa2#BTam1DvccQIT49 zOK6Gczdz0t`$Ewdp|19RPN5123t9JP@F4o-FFQ>z@AZOKcNe|5N&o`x>^Z9QpEsBe z)D7Jc_s612q@FE91URMVvrjt4fg{EET=WGmbbVhF=6U7^`T;3hbE1#hFR+mRcTzm6 zOsQx#TnOHF*33(qCJ1}%#Fw^@#v*);LM~%72_Jrbj|gH7z@>Tq4hoS_FibE#p*s-^ zISteKV7){vE*fq(=(~ey(u&7Q<8!>G^*X_C0p4A~_E!3q zNJ@P0N3h--OWV5k40;A*LNxbXWEn5{sntiOL#)FtmJoOnvZh0P?IhyF!YH{eJI+@>~OBaQJ!8 zbljf=sN_7iv^o)l4;{)caUc?$qA!Y!_r`<0AjE$eN!Wg$Z#;uN4E0$Is)emlPzpH5 zLb*2)Nxg0~=`JZawmjFHDJ{mC z>*h1wWRy0EE991>;L~b}H}8o|oW2~l5vh{}7s;23g)b5zV)`&%L^T!vBke1rs@kHq zkp^i*xo5VKtbsg1PM`4kq#*VC8ZA>PSM?sv`8r-ASEi_8RLER z9phu%aev%j6ZSLqnsdcjd+oKJXKvY(A)f;?3c*L0gS2Z)MZj$FMM8qhd$4qepL)Qx z0ED%CIKN<83Jk466?~fs{NcMHS9!GZ2GE59DcRS8Pv z9n8LBt3alAQ}8;)Td*YPd@lAV7gYaBG-Dzv1R2lmzkU!a0{2gJ9=@m~=!@m(PG!M) zpr*f6w9?xjxL!r^^WY@!I-SN)f zNkoURaY!fVFE^HKg?Ebxdf3)?DoxXjVlHVHCo-FrKRAJw0f(Y zSQ&WHf2+UzuoygEQ{i0PBjh`nm7yecs{j~8@A=aN{pMA>vL3^rQgCV6jO(#6f!8WW zbf&nk61ekRHXqxd;0hYN33%vVo=)J$Mp+z$xR--qTe;Sp z&y}FoQovzZ5(y@#x~T6Bl>&>&`B?FTa-bzxxiS$%;Lq;mGM$-1f*~6u7rBz|SR!2H#~bu~LsA!G+(Hyccw8fcn>2#YJH> zsF$3G|J;Bj?_N>?I3Z2m4Sr~Kcg+T&;DS<)WGp-Iyw5Mm-&!K>Od#nnE zpa-=w)Ggj)!2?A2I<7IJ4)Ff=ZcW5igAsMr{KbP>U_v}UL$62RCoPBlD(a~Rx^GN9 zwe@O%b+-iDtrKWam@`eYMNtRVWb54FjC!zsBeyw#!0V!}8F^547Xxbea?E$9>cChc z%q*1I0Fv}I#259@;3LCV9mhp1s1-=_$=j|24qLk98x{=!^vfQE_2A9a{WemL` z0Iz$5K0{-T;I)PT^{^A+obpBUtBTXDfJ-_~naZ#Mbn=R77xp&-@QjaRo4^Zgr&R3> zxzh?_WCXX%Zlb~Z{hMiqSy*t&!BD!Yz7C9A^k-u(Hh_U;xA3d6SWxmgSN-1oI`Af9 zr0wdDdSIv_^{Fhr0oYx_sE~9Lc&>M-`(8b+2Wf}!zCK$c@H0Jl1_<@2%F)+~eMdMy zs-}$$i>?Q8Gt!pQgmbfV^^!x%=FNbr=9}GD<_4g!bP#cApb?;3*6SZCHiLo(;tp3B zTfyEL-zcGK!oEB!!^}#1BVaIYYN+MS|G;L~GHA zS}+sAxp=)F3&w>*^j_$p0AlIOX}cUW;L#v#byed)=n;GUC}I2-8Pfdd8$*LEb+2+N z!Z{@UZ8C;CPIZ9lHW(jyUkB!||Khe*!Gh$VbzuszI`EX3=-Yla;XFcqPD6!oo@Y5g689Ga2 zfSEHVD@2L|t_^3>thsPtomg-1%qbKY(zHMd=o8|+v2cpyHG#*icWA6n;CW+1n6?t% z;6NTq>D=%p9t3p1BXRF*01JjXN_uilz>bEgFKHPA?xosKOBU4utAyX&pC31ZJ5A03 za}-VBZ1bV5w>AzKe7+X1=~D+{f2TYM^=|}GC8SOMUdIG%$9Dyf4;Ge#Bu^#j{ z*p$!HHi0?;+f$5$^U~m}X_UeQesy{L#%YTC_2Aw?tG=sXBlxULmH9@i8JuBG+#YDF z1CnQ*6Hf>?fJ6iQyq!TaFdrY0%uH$lvzMA%=f2m2hsnP)5(wjT2y$gcSv3PR@wXEn z{9A!|If;er*Lc z`>VMYzOCSyj=r56q8(IEp0ct!B=BZKuGC3Hw*p$BCwyLC+W`7K++1$e0no@8au*)L zE?^oTd#qn0z=~Vwd#Dl4kz0^y^aMU275yH$V<};N=pTQ(4mSZx2~Mt!(MCY)8!jR# zMBwvkWtyubwE-))-@bz9nt@r;Dan3c0&jC>=Y^qhE4bf7LUNvP&Mdx>#_mhtPrG@R z{_@Cd0RjeJ{O;Pe0^v0^242lJ(E8}rt0#p2D~7L0>I4zauVh07T=O~r3C~q7TEZ@6 z?QJ7#mzh>@LSwb(vuZoY($(D(A@Gw+CU{nhdb1m4c zHgF={_uh|<7BKzUl_9FI6`ZPX_+osz9jMK(3v#(NfwFS{yFKNPKpE`-@^sL7{5Bgy zyyk--AWRcnX#F4t%x#1Q@hT(&1ZoXQSVrP|^4RNZqy2$2LjSjiQ5=v`3!B&FN&zio zv|?Xd<-i9)9mOvsf#9bAq7`*H4%FL@$UJ3w14<7|hIMVF!J8KX*TYDHLC|z`?rHgW zK-x`JpIr9_G?hDIGYGoL_PM@EW|efXm+-!#;7m41DL44>()t}pBoXnvk(dIMkpmB8 zwK9Nok|f7kWG;Xw-!Qo;<^%Nw50_ByH((5E>6^630%ThFQCoxefMIas`X}Z>kT!KH zdzd>7yh}|9bDw?-9*YfLJV?(6q225h*sdagKD|}-*2fT;xKU@+201h>;YP%A>11GU7KOXHB0<6V~>GQHuV9LR`KyO|S(C3%R zw+VUHTFH$fP}hpUH_mOfi)RUXhy8)>lTwvnm#^ODkzpb5Qvbcv81MlgmJhYUa>_w= zV3U(;StVG@Uia@^F9I={c~X^ArQr7tY!gk;7un09q!UT2K%bqGIowtTRuH0Z9hNJ> z;pCEpU34{gT2H~j%uUFH_asG4^?4;IdWepoS0x4ay01uLQEG{&oCU3A&)YhT$rx z1ehy9rt_;MV2LY2-;$$@pileB^Wl-I1ixrG6bD%gmk zX$U<071ejB$AtCf&yPDuvua=~a&z74Eeb3$4{7mmVn7APD*Nil-&|%-PX{ssw--}~uY=_x%V?o@zJN=Zro6f^1~^QOae2@r z0n&Xex4omN7o08$dv=W$=Lb+SB}?0@$8cP4Nar4*V&o@yE!)Yk1kV0zc)h55M9K za!%<~g>S#GM4&CCVTE1iJe{)u)`{efYpMfqT|n=i1lw8oTaw7tk}yHI$ZAJF`l1^A zJ9F$ceoYuSU7rlLH5CAj4)(f_a)kjVpO{oIO9*_PG;&IzN`;L^S$rggW8e>d_Qd9o zqG79>SNbdZV_@|y`cW4-HCU)0lc?Qu2KMUp2Q29KlcZkL&G!Xj2BG^W|-;nv z=+x*V1qgZNN?pqnTW_R;;?&?$TB_H;pLO%%gSAB*&!a`ifk6Za{fc`eA9(@)QB8yE zzCIg1s%3eAXNcRlhH1^;QEcC-cJQOIU#T>A`s~sbb)c zE}#Eco<>Mgd_G*s#1#}m_D@+w9D#$@R4BECDX=|IGDSU+2bb9()uPX47%VFwFVdtG4KX`vS zns-&&5zZ+zd+ep54}XyB@ev5;hwYCB50f$&;D>~KZQ}ypAoBB5%9q5)p{Gc3C03$A z$Y$o_Q%yQXn36NTFl}%H8i*HYSv|7^b(}AD4_NsM&8i4LlVvZ3FN)?lfR$J9GwX0t z&nGT0O~L*{mQG)|)4`K^nMnlxu6p67)OjX2E7Q#AD3k&gEqlxp-f#kT+uiaom+ggK zX!UE`JTHTWNAHiBNxg&aTYEgZ^g0WojlH&VFJuh5w?H~BoR5RJ5}9vNETEu~C?mZS z>S)OGDxOpC5(+SE|EgZr#DOCpY|BEhvk6#fiWe0u5pcfYSL+0w%&EL(r8_U{3Hzz)iCC>#kbQ;9y`KRMDwx8g zm}zk!`DwzA8)Y3}SR!(S2z$f|O(i&)@RY5Mp%LBB)XTgmao84Kh@f|N$K;4=!W3#yv*H-ln{2A|RA&0yarRJAOFu9m4a13i{&n)QGo<#LGtuNQt9JChkM)(WgmkeRn%)`1g0$;C64?*YpT z4XAE2f5LvgInHRelJ)aHC)2)JvT)X8ykSr`@~*? z83rJ7GKQ(um<~io)Dzz;`2^p#JALZsZ6YA2csj==<}*&?)yS7Q|4g_r``6~AXos(tncyy7ZGk`ES{N;<9f7;&ILE4>V)$V5cjLxfByL8h5H-4%0E@nJ z@Z~eGhF>z|Dj8o@flVtl#5^bXaJp{3-6nFv@THIG((YEiu<=v=0Ia(n{8dgXrOJ;3 z_uA{l&xT$mcwKg=`d*L-SZ%e)!Dq0671?_IbyyvQKGvj5?bZf~y1)IeiF}1ox_2*R zFf79>1v?IR>*wJ-9;Kxw=Nb6r2cstgD>1NA=rUUv%~RNOk46z~;0q&iEn8;_En)a1 zX{)1ID$Kli>z%~KU|72K+W;oXAC?}?sI<)Xf}gz<<6JP%1V3Nk9!p&%Y|m77Cp_HQ zhl@pd-zHjp#NkgTO_O#t!s=Q#;@voM;QKGZkMDdsxJdM_lH{5@JW0O&R7%JI&YXX@ z>-^yy++SR%pLTa2I~L`b2b z8h}=&_suQzO0itU^0DN0snD4(G0Dht{*ZXED@}ByH58$*;bQkj5bM96-M+Gt2i=WN zxA$ax1~L8gA$tEP01Crj@hOkAgf<#qPRNo8!~QEnp~U`V@HIyU2_g5}kmwZS2@KUN z6rSo5ndtKtGR_FQHVwidrpU2JjFC#%!%>~xyPS3q5BoX!*Z1Y2(KJQ-`9fyM?0(QS z4%I=#hZ>HnH2rG`;x{Hg=Wb|1a+6LiOSxyE7nkCsMPHIZ12p@EXPkc^ezr9n##w%V z`(AFabteSDK5xX7#|kZA8eV;ul4K*8D6pji1ggOS^qs+}F7$8?+p1baW(RkFXWknJO7RshO66iMCF@K!_3cTd(K%xUR7a<-*S|p;j~33>i~Le0`AGw)4)N*?PpWuF{b5^;f~64`I0C| zk%@y#L&_XtrQ@GcW7dc4dnf|MbZ7V*5^W>(0AzQlK*w;V&6l$!R2`77e|I&s&& zSU=*q?t|LWs(i!=F*=e;ODoLQaCpk;h#&-q0;>&g@*E;RKRugv9*yXpD#>Hqd4>4j z?=m4Cz5Sw26e0;pZ#Hl}@+O6D>TV^6A!jiohX?C5d5eg^)29k%t!ohU+Vjt8(?Stf zgnk>|R1w^(C@z7cP?}Rvjof%<(FnMaHc&EwI>AbW*c#jEE-)MC{g`urzyqG%`Qk~~X9<}~%uopG z1TO?P>YW9;L3@FlIBR!1_-79=}>j_ZDq zxLha5_+)dL=|>l+@>U3X_`L_v?)&j~dUXMRKE6N+s~%vF|7_8v*at4^+dqa0xTsMhW%f zLS1#MrRyW)+1NC0Ch%7^9rPV4?-O{o+`q1#^X&z5`VJZs1pdA{#5}nu-3Rz}Q<2TZ zeITba&6DSAKNt&}dwiv309;DtCJ`m@+!qUpHEmISfVMQftA4W|U|S@WyX*%*+U-l9 zrl|TrSYq{}Ko&u-?)*7v!;ru)%`#4)mF)+&scnM4UhfB_6-VTHIsE{M;n}-p)DQG8 z*|Oy+^noAiMcCfe0WcmeQZ^7j0LtrU@HBM&fSD=tN+KZ-1(6&h`WJzpig0|_bmuf7 zt~=Hn=Lq|w#Ks3?lY;U1^cmg@tj+{|8S~1S)!cUQdOTRe^tK0nnr`gG34W21>t83{m*?fp;W#nK{3A0=q=L*gKT9p!bQ(C6rAcXjTl{xaiXj zPCoxSq;8)IIJ`zRmR9^gO851qn7CfBZkvq;(-iU8S6XY^3VZfkaeYvKBWPH z>)cImD4xL&%NqT1j11t^+Yc4OUlH;(aN}f&2>RsOqd?t4zHZQC`EuqVV=wUJ=IH7C z(GKz{GYi@ubOP&lG^HP8yMa>#BLh`v5BMDrelGcJC$KOOGn{wr1{Jm%cO#m*!0sg$ zHb#QA3kJkyI$dD;wY9K-emAHYx%c_wUMG-X^J%oxA?PB4zkG~|?*&0uG36}0eV~#2 zBIgs*UVvs9w7tjC4HAjQEMA2700yJA2y0pbpINDCk;JqE+&U0dK@iScGO`uCZk+1@ z4PIWmk_5fGv$kRnm0>Knh!ztue0d9KU(A25wbcREKOv??nXAC|N%1)Y-#dV=JUm*( zHwfI_3Uoda>jGMs;jqGzF7U1Y_fZys5C21gu6SF!4J1!`-ukfK0V+505hGq5fE?D? z5xUd}az-ZNKv)rYtlXs}Cb7BV4B!Dw^-Q~5!Dd_MPGim5qK;Etg9OyZ)BkNr9HvA>`Vew+1B zmipv7T;_0}{wafU*j4E4y;2zy(A255$FFw)17GP8)4gmQ8^>kL(>NixSf;{?U#=U3 zuYU1cKT!t|mnTy+UOmGvkZHM_6L?e$)(Vfx_A!9J)^c-|;W1Dr{a)8jcOEaAz<tiF-DdYK9Hhz zubK(Ugd?Pd#*-Lq;fv)%xA8Abz%`$#*y+X%`0!bl#3d~=+>Lu-sB^w9FxCXSbtY>I zwyvwojP4D9#Z>HfNT0LdCi1v_BBAqy+~b zlk*xjTP>W0lLe;lKBuz>=)^mDcTIW0c)6kE-iN&l_RRXK5*wd`9qQDQoHug)2Od zrr6FvRKq^}{6iEnmasL?J*8xKB3yZ|;Lk8CR(Q0*D+vlog9DlD*?XrXVH3%7#Os@h z*n8DW$wyYB5POZY-3o^)JhywV6gyK5O*ihbEo+>C=&w{+OuI`#zHiu_vgUZ<7%Bbc zYu~WY)589xTd^_Ngdq-(okIjR9#MVU051)cf}dN_WL3cp0qssm!uNUy3QV4)`xwJB zQ6bm(c3NT0_L+A=zGg5ZDFzELAF-$I4qWCxM+NWN`rfpix(z$GeB!HU+<{n|uJ2O; zPl$wlZGr5i7c_kDft`8(93)QuMp$NI8ai(rFPkV*gI&?1Acuv~YMJaTMBChsL_-4tVP4;m zlzv_lF|2n@y`J*`;{>;~)zAhbOeaGE(&d@|@>7LHEDvQ`+Yz+WqytU7)`<5u0S*3l z`v3A%nd%Rfcat9>4$##jne+?@vPKRf`_c1%aiY)|x_O}mRTd$^dtci^RriS9h$7M= zRsO7h|5)#3O{Ty#Hr3EG^g)BV41e+1WzhIubOSM#+9&gVgG@<{5h6=G&F@g-s@0gYGzl@{fAK;#zd8HN zIaT!y*2ieh0M(yG24l$fj=%o@#D|GWU$$W=P#N|!A5csyRQ_}QkF_F`;hL*wQEAIe z*qf6SJ%%5d-w_Vx2qAp7#Lw7kJy+?^eSd63q&#Lfghlz0`7pC&>gB)qEBZ%YTFfNj zCi6TA!S+_@)Ys}UF3v#g_)RBw(f^Y5hL! zxrB%$*`%*3_C@rY;+;AiS^oA9J-+t&iD^$nkYzqc&jBmKJ7DOjk}lzI`~N2ERy=7u zt-8iH>pRC?uUhfC=4;nI#lLu^_NRLP0A=We_mH0$JcJPDx}a zo$~Hb!BDqWQ>n4`sU}tIOH#eN{uif+yxuN8ON}@gnNFWQYp0s~LSP!jJaTM&cr4C( z^%5r&2t5-8R>%<=FTT=s%Hk)`U_;Ra;I3u&= zoe->=>c&#!D;6zoRfCnur!@6;$I35smw0ARo}hAq$6Ri6Z0zs-f5w;8Zw=d64SE&+ z0ArEl8tr4aKeG3J{Hp@xz4vj{pTuVWj=w+m+Z4+B@eSrFMLaVzG+dZh{B!+})g5fp zl}lt(+E+geF%i9a3_qD4L`-85sW|nKt%G%JK;h4Qe=H3RLFI2DsOUps(ID*Md<^HO zL?|=HX(-p*@m8{xcpZ!Hl@R|{LL6Qx`bVvpPu0dT|CbM>riy;bE7iyQ-Cyr_JceIv zaIY`68c@{Kh^XtIp+1JMJ%8ODt=XV(J;K%~m4*CRd}QD6*7mrnC@gdLIs}sV$^WU> zA3LoXJV?D?F5g^AbE-anP43V2Keo3 zcaO$*4Sv|G$tre`1qa@Eqo0*wj0+{6qf@iAhn=jQBxBghU{_~{kQvn&cve#H?AK-^ z_=!uo;J?2sJoY#B)hOjE9o=5f@)Q5c64@1(+UG8C`{kZ^}z%>BN;TbK=R90sn; zEo;EFb;^hL9N2MdKdG%wPxHbd27zI+XO-az4c6UeFarDMsbUu3+aIghn| z^nLz24-4$4e2?$@))-{FDEZ4TwG=z{Af->NTL4S?U3_TBr4;5Nyml#QIKpainsXGt zWpMq`?+$gHlws0TZSBZr19NFxLN|$R^Wi4)RmE`ZAB_3-oP< zLG-XK8tUqf8M4T{i*1x{YNFJ?0?mjk-*Pk^g#6wMUwLKv79vOrw%s{=v7un)De{&$ zR%lfDQl-r<^lI2BK88FKk_|!5l;vAtix1CUfBRV<%1I}ZaurC2UdTAV;s}?6ZuR5t zogm-Gn4SGG)5$>vP3FFIzR)KD(PX|QeHht?aJyC!wC5Cz8Qr9p5jK5*=t=W1_^P~# z33+!D{w-RH=s5Qe9v!I|T;8FYRAAB#N&9q}-sO(Q>efuD zpwVtnlrR$!W%(dTg9N?(lw1fthSID^K#C_dt&Ii zSx#kVa1Q2a`*7?1=?92g<6pF=Uy(px(qNvu8jA>jD+b<5r!0(ftOXO7C;~zA5fP<` zmVkD9&c>LfjUZ4fpZ(&sUt#E^{Ukq)I3rx9*p&Fgmk?7XbwP9!eu&LC*;XmTr~b~r zS6|5l)}?wP`U1};P*9#isMUPD+%l5=cYeKxe|HcYe+uEn=5JCnSg)FTX2~SpP46$B zcrJQyM}`5~@MAV}IfX@Bn#>U&vNpmziE+*@`?l9BKzvcgrPUlcHHKlZNz5b1=jGy@X*YmP} z@dzhI#^G8@MEv53o}%&lssel{A(X@SWAm@B{q17mj&CaAty#dj%l#Pc{!O`Oh{|2% z8v=If(cC&V|Gw(qI@z1erXt_^O-ish_AkEbPUbV-j)Y7Gew$Y z;5Fe@MJU-fXHskwh6d>-pD+gQAsB9oztfo<#)t=bHw5)HAdtD$#d*ww2;M=K#hEu@ zh)SR92MQH8F-3^)Cp4fd2(z+4l7Wr}gim2!U+eWa1g}(8^XzlYzwO6(XJxa=;R_;Z zJK6ENQxxLTGo=3fJADLA%46o2=HFF$aTfc&a>~DPW)mr44th;i0fjO^* zzvch&FWzZw{m}S8g`hf6zZ`bF|4RE4Fh?>!RMr@5r7paTICj5kjYZxsUtg7sjG2%| zgP(ua* zwOOi$>b55S9?{$JWB%XEe9Rq*>QMQq^_WN`!~7V|#d---`|GNT?}_rCg;t|~%l{K! zdzy3ig$rBCg90Xu?^C>w;XmKdE7(9dWpc}w6u(n)$MDqR5Dq(8NEu{Z50nlqIre;} z_sH`{380ncTG#8oNeCaq@umz>f{nM71W2DIO|>>2d;X>d95vS~B`D99=~z)VvmEo^ zm;Zf?{vC^Q9>k|e481&7K5sPlbvDm9r5C#AlJ6Fh9K&m>zOxVWC@SUue4?aRlYY#< z%de@os{KcbmN#!*p|P?$hKGDT_gLeizv3z~4dtOda%_DN?QAyP*1D^}|Eg675bGbq zk2qb527V_f9K1PYA?*6gj2$ z{YYIY3tkHs%+hebTyQdgFC@AAfT6dm)gO~$pd zvW8c(d8mrc(mZ<%*SBeH8ECXp65`cL8=$H`=AWbb!QCa^ImOuz%TAeBxsTzc5>r9% zxNazFC*>DC&4@kLzePqT)wA6O6;?0rkTllQ9K&z)^ycJixGGE~ICp#?mS{D6<)#@hkBF^ym3SPpt-$p$$7u228ON7etuG|9nQu0JJDaY!>t z_RsY{Hff3Z2kZE-taRu+MZ3hW^M9`YvCX4j+88go$QCdD7P%`Ga}4K=@cg<`6)EpA zpBx;6{&>tk`f(!uLBgjG%!DtAoHhQf2{Y?WXJG{Y>M8th7g(92y$HNbc*z!`~KL}C(j<9lQ^MdUYnaI5N2^~{8c>I z_P&4Nk>cjr>{u}suX7Am!^%$PXQGg>lQFq?p<5MN9E8Q{N z49GsmHvUlsR|7 zTQ8`F^;mq`i1EYv!s{}6&cJ2{^YU1HrKRtd7hZQun@n)LiOVBBhSQ!7{}?^vC|z>a z=CW4v@%Xn`QMP1^Pqs@Ui$bsotLn;EI=Qen|1->OzUcpSb_nsLM%4I=p0( zzJ?sqE~R|OaHpv+tg>b)5=Nc#J;#%`2%lXRWv|P#kgF|R~#C9V@&i2QYl2xXM`w#i{hnLFIrQt`aB zFy!U%+Yjtz|5pCL;ks{|nhkJSCE2G7X|HFImPQItchpt9EY;*SIz3g+S~h&=ck7Ou zL#YG;yIyqASz1E$16B0KsEm2wskfZW#DDhBZZ0-8`!TTW^3-Tn{j<+ybD`9b%eqVX z#(A0xxqXM_&WQy9JF#$ilu_dOhg@0Z{skv@(9XgYJggsUJ)}x2{;huhhRW=@-b5vXkN*ieVXRW#2k0HuWm}%8g>D zuU0rx{Ad5|vAaT6%rWJfKi^Ng{r*`VafEftV2i5AjBFR8%H^okn-|H7X&J z-!oisGDF3)(#pE>yK4;BcJ-Iaf2-fW;iz)fiXO8&741uAJ3DV%D`ds*4?bl#tYq|j zdYKyavGS_3m$*qTQ>9X_fnzPFS7k0^J4e}DqN;i;%Kf`L&#L~d{C~rR)wSZD?7~$t zeDi`#(pgpW4EGRQmxYjWo*%^mpB5t7xi9rS+WJ;y&y;v3@0tlRYcz9PVr&k1_Ot=# z+ok)}|5pCL;nLH+3zF`1&<@%YCC|^|878}Ncyu=-fe&j2!Cp?a>H>$<&kq@XkCm=;oUoSttwuell zX*8-_c~reAfSW))J5lp*_4_xRpY_U7!|S4|_v~p`nJsCNMLM=A^0~1{_c5cY-XyMS z54AB*-7hXkfu%$xPO?Fy8a_{PB;m#Ww3 z6$efhyVYo)Rc%&|{#g@Kx;(j-q+a8w&pP{q?QP9uN=_F8lMw1G=hwc{m3-8{)$iZ% zixuNFdQNrKChDAIu}K0o-6=ThIpxBduZQbp=YGnd?C+c$y1{5&Q=)e3x5fFo8peJP zh93eKP%=(M_@C>#mAM@|jG>h@ zn*w#KeruJcc*}X3Dc`Ee-@`9)dt}HBDwmIA=k%*OMkGBOHp;6eU!T7)@x3Gv)a42n{jn`zFPL{^(+Sq4ioag<}VXw4PYrj+&Sl(PphU2i;U zbaK~=gs=2hn~^Lb&wZ4u>A%n>`c@rR6Oz*|EHrodKlguUq0^yw`^Or&rx(MC!9|oG z{Bw0_pbupv+ISU*zfpU#8|K|1DnPZF4*OjmpsRJ#nNqK=jjvVr%-#@h1;np|cqcpWEheV5npsMXXvsLQ|=|_b1yN zL(hw)#axp&#fY?aaQN>1Y2f|TCOp}i}qx~|Dy#|Y6yo(^!Y$25?OQs3fQ|LdPI zfvO??y#}UOaY^0xeKY3nnB8p^MLKMIin`Ltd?w6l$5W}$TL_H8roMi2j632~+Uop6 zuQ3E~bPhswCJ1wy-Rx6O3?T<(>kbuBH$PU7k&aef#~$0hE$Q2<_ybYD|LD7{023A{ z>T+3yCtz#8Uh$BJN3j1;?Z1~BPc92>>+t{kqn$D2 z(Zv=8^sGfg_v<@4DG zvy-|45?pIAPesnTg{_~&EZN4$Etq*>?ngPje@DE8IY{jp^D^T9$NHxxeiD&=bPtmk zK-oOAeH}d!LYo$pUyMHJl6`xrT>xWs$778p(j6g|=hx;y+lQvV)P>5P6u_j&zuHlE z4aJZa)u2AE3}RY2@7tY!tAenViVNWld5n2sUfKUtZwJ%JFqAXvqm1QV=haHEcR;jV zkk8K0PQtW3Ph4p`CyKq*Q@}jpZihuT3fH}0>qOWf*5cMULJ(hv)oRbUorXSjnJSaq z3Wf$3PfOM5eaFy#E}*?C&V-$KS$Ak)?T6J!9;|L;>%?Y{ObaWq%Rnux(l+z#UfA7X zN#kd)*Rj7|_-;@-OW{%r4?0BeNFh?7@co#!53g`D5u=ia6dV`5s1zl|$xVIVfo=%0Nzu%Rma zq0AzwSm8&H_)SPpK^a~~PZDZPu$hCWPP)W)Vu>H<4J;U)#5KOPt`htSL3N`0Hv){L zv3VmDTEo4g*u9g_+DRZ*+?SGBUp=!gj>-Cj<*x!TCgy?G$A)Z#UB3CaW*vrJc zZCjuLD-x#>YrToY?pX_vUYwW0MY__U#WQc?yf?ObRICMYq=kN5`kg8`mwK-+UVZ5} zvE9j*C{HBr>z9e6&#HHz!9%s%KgK+;PU?j7)d5PJ+qwg>SBD9XHKJrxw-p7|mwXg6 z#d=^pM(*B{8X1SQj?5EoZqmYfS#^cm&a>E-{fTFcm>n#c;RD|YA~Rgq9a$mfk}6!G zYFwX8^Ed1Z1-z}9nA9s5@{>Z8t#@3$(myIG4yD1GEJpBBDn>mx|&-RFB+xmMMKiVB9L0f|WYn)@&9 zF76=(r@mj=?ewqCzLF8hBSG|^pTDkp_ltzTH&&ZF+L{<^3fD~iv=FX|DXFozt(+## zDu>e3*L=Vrbi2md_tCceO>|B5Sj?}eOAzXX`+XHdF5G{9{+g4Ti!QgNS9ef<{T-c0 zQqx-@wfai>WzF~j@{(^Y3o1%S7Ph#fSW}fCq;L=rR};W`m%hNB1;v`VIa-zz|DXLA zP4!eIzVb#LK0TP;F&jkeGwD|4db=dwXwvU;hU&oE@TGq)2XefvG7G~ zw$;YUZ1NKeU;fAW_gF{&!-ZK1=B=)xSQOpFdE<1AE!0LFx6Wjzdu?#O_h$XQ@3qdB z5jZUiwpyD<=lHeq+-l1whSHX_zSTNmTTK|+?){_x>(=htSuZI5asKx-0DPy+oG~w6 z?B6JVq=(L(-u`rHAsd}P&u#qe;1ovKGI8-b`74CfWhU)V;d*o?W5@7=P-cv1e)RWF zTR#kZy^6-wegu=gXZ*AHH#4RtrM2$YMNf=STnfI;bP4ljZ#jO5z@z<#Y7;3Ie&li6 zet;pCxmsyVA%||NdLVnb>IJ%bQ{!o|F(t;-YJ%`VEF;9Bw^Kp)VhY+(xV(HTXbqj4 zOWJewwk3wPsC8Ox9fLWGA6#4QJVaOhAeV>>F~e9&nMF$wB>!mx{E)M` zZB9?sE2u@F|_K zM6D0Sd4+tlR8-+5uGeD|d#K7A1zr+-zO}kz&0o@Y5B~G|k3taRXmESIHvS32t6V94 zG=yvo$1eAyPYHiN!IrI$c@;V=taZ~E?eNQJ;I4WpdSk#unRQtdBbAM$f29+3Yt=qe{Qu<>V33M;h<_Vp{>3wS#&uTi zYh&uneFEkx8ZeCFcLcDlir5vKt()jTO-vs3R%lJ$O@wJ!W#N~}VZ_Pi-(YA;9SW#- zju=ym!{|c@!`CmuFtHn7c7>hyFtMvnn9xyItiWMSz}M;q4Ef{1oqME%7|}H$4_-Ws z^|b#Y#DhX&5u@wh)u1bwo`Ywy4|$w1PM^`x#RE$0P}cn`s78IPvct=nL+)_Q&(`&W zUY%gX6PyH=TP|Z(i7XvkdcC>WMsF93T)BNAg!?SStyH-GdPoL}_Q~qk zc*={zi9a^I#^jDGt9TWu6Hp3OWYduJ(xyXE9;cQm#M$9Di~wIk7Y=)yp+h)Z#;~%& zmbc}2rm$-BKgk8^G;j#&MG>tPJdQ^9_Y>L^EV!2DYL%zV%DDMo^w!#$*|;*sbd_$H z4$s^1ePu~o9GZ2Z$Y0~ zR;OpzX*@wGGE6o znpyJTp$7H9ch8J)9^SRPjk(6K+jajh9rO+VkF2kZs_F~+mJ$#oBqSA7L`rD{fh#Gf zw1OCffFh`Wq$NaBq*Gc@5b192IdkcbOLvR3goL8^*zV#BXNL zR_x0Z?P=Uq0)9Du7iQ@ww8XTMV{7{pYGHL5aEW9<4A!^B=j+1j;?H7@^u_3hmrBFU z7VD@$x$sG<3LWs8dW-PPnnO5uTig9gFL@pFvNN{rj`;e;gO}%AuOj2Wi0Vp7UWhw2 zsiEfdp#0d`XPyS`dGc4jrjT_xh$xscF$bF%#VORQ2Rw(8W5|GKAipRnCqkm0=O27{dW>O@4&h@E%w4>2l3>>uj$C*&|B&Fmk(Us6s{>7 zyQ2!ONEMa!bk3|eI-6G_A(`_ERh2coy4yCY&`|o4`%k31f>&+{l3m8CI1zT1AvhV))xhEm`^6MLyvp$;>55Ri896M|D0~d1iQkZCLJ5#m0I3e9wXMpUe7NA>oXYj*-{oOfR9;f^Vz}12mx6HzWV(kp=o(+oImLuM!Pi z5~3XqlZBhxR@R25k-!zzn&0|96*Ud_4mLNhP;|eP=BkZ|;es_E$=}-##AzRh{*X83 zfie1?!48@4ihRo-qnwuCz+-3J;w%{f@+yi|*gf6hg$=7{5NN}F@2UM12cDSo=FGncwN4UFzO%?H!=;v)X)K zjtF{RzP0S0uLlufUsb^;UEr1aSh+Q{7u3JR1`2o(0S()wl}qk{ale9bR@Yw0v0UDW zIfjkX*R5!T5Fz~SlP){qUI;IA6JQV^f@ZYBL6dDCFj(=DpT_sWNVVvB7aS3|irh4V zZxBH!(06k1ClQKSX}mf1iLj-_piY7k;UZ1N2x}S->AnTe>aP#QwM^g_uS<)|>pGC6S`cht!CFP|)L+>te+*_vdx4#l(a;qkhHukrhq>V{ ziu2?>5XHFAy182hvjtNvGS}Jx5l#w|KG_Z5G)hz6ob81pA1BXe>+SG3E%!yHa5o%I zuMSW8cSE>ce4}4t54>K+|Mg+K3sXOKz5eS`Jcp!ik%SD^t$7F`@-CEFn?WKaHXfE~_H^0+D`JpzVS(qbIW?O2%=0M3e^FVX3O#@|#Y zDjd4N%Ba}7(y0TMTvYyylypEMS#8lhtxll+6edzF)B%>%BB~ci+krP_GDkTCn22SLsao-4he)+e#!>DmK7_d~y=GW7z>DBr7FV!hyL z`aQ!;wiovMSwZ%BFMR5a`dKC23qIuN`r)N+xTmjE{rg!rZ1nLh#3S7>Kg!#oq1pxf zsyA(Ijyhp5KJfGKvrg!=nH#Uf=y|Ji5`{yslWv>Y?BT4vU~KZ~EmKAhK*N}e74~~X zx`y)>M-P-FO{T6lcSGCMRWS-bj8EUoz4Lx_f$|NJIkl5ru*ZVe%ze-aj`deZCG9(4 z)cCFx?ph~U5Yl;k>O0^igZuMvicaAF%52S9kLe3O=>*$@ZupDtmpypU4aeu&of|H6 zL45w3*<%dY{;lJipB?K0N1i60%iA6BeO&puw`T{mQJ0w}h;@L7%AMgY*$z1TW_Wi= zxgCB4nbDZtZUg%^>)&=Atzf4ic4RNy4)**;fZeMZj=xYUgiKar%ORcaiitlJCYlgu{nckRp%@7>2ctKOK1$IRaBkbp!f#FJb zH-BRj6xv3Lkl$(iKk@(nt5>GM@2{|NY%Xi!kNW3M7;SFX#yblM>V0Ft*Cx|Px|*2d zHwz+z^Cw*J7mjTytf=|4n)JjA|7^#h`IGbz8MvmYtFU}YuDzKY;3800&;Fd()K zqsN&K=#l1dnX&vdJ46?MtM=bvHZpzr%yqlMIsDU+_NXb}eZ0nO{*3^dd3oz+OUL}0 zn2;y@cZ@EdbVh{4!f2`rY!Lsmqfdr&+p(@k{mPVVl&Dhqm+@hlCFFDI^SLt7A%voa zg3Fvv1+C*w%O$<*j%KH&Is|3)qh7W|b-P3#RIcKYG7W}%IUd*PVzS>;!w zCGZZJ$nRu%NS=UD{1)@ra~wn>c0`NKd-ssuUlfiK3p+?I!MLA|lN?1d1Y_>AXrue0 zY?6)HFVJ5)9+c-jl98Oy$$phJsB9BB7?stHm;deE}<{DA9`mWXNNEMGuHyXnM19T+qI4Tr?7uz zVfQpu30jWSq{fampft~yWq20`(S7gepF2Gh=x9Kj|H;%?^fjaW<5#j-=m#E#4F&s3 z^b}5BTBst_PTP+emLL$NTC8$)cc9sEu6oys{#R$p&P5IqM<=Le3yt-Jtt;Z((v z#b;0%Gk<5K#sKgkwk?c5{fBubI zW9&u8bkALTB))x^Uxs z7;$~b0Xv*gJFTEsc@}bi`7#D z_5!$WPTDQyH8)(_oSn+dY%WkVHZ_NRumw6k@lxmbD8Rp-$?)%NgSEs)4cTjbu)^Tl zYW^q)xX7khp1HJx2+!xAMr(Z_aArFyrMVv(N>;CmFFC;esoTkda_P9U^To#6!c|Z# zqkI*U>|gOn1MsA1iEKV4!oQo#K8*tdFr7ScZpW<;nD%beZ~OGa zeG)xZA)Nu>q$X&WP@d0pFqn(_(Gyo=t34%%{1F(2A{bTm^0eBGm{zu+- zNjQIt*Tw0B6|gGiu9M)yfxYG%^K_gGjGo9Y`{r~WC;J=lr!6gUUzgd~)p=}igXd}2 zdWavPdq6-#W#%n#Uy0(ocdiOvFWgJ#)$4*&w^IU}@ASctt6_>2V=J`rwbqX|6Jde+ z-jCgv128s}moTw82+B=6c{+D|0X_dE^~B&ioXY-hgJwb^ZlW)*KA1WN90EBf6cbb7 zi0$mPuIfslvq2X$EINTtliAxps299wa2jX5`@mUo!uOrm0F<=qRGH8W!Vyj3c_zsr z=y@_HD7ZBQ5?0jz*oB6mGti^UfN}^fpNXM4CNTu}{(927zV8Nxy|27es{KHpA-@$- zJOE9PvWS;?hJa#XAV7R>01C&GbT-fdc;;lSVa+=TBzRw|?&LvO^V;{kP%;1lE1Z(| z>IWc9nPR^e``^Pw1=|_Y0bqWsFlcUrt@mn7m%~gyxbA>!flxo}7B#lGoE?B(mge0I z{voJ5T0P0AH3X?HW+BncL!f<7LH;Ru2u=qbINgjGgsTqnWA{7T+d_k zsVW_WTvoo3aR+zcv19umO?h~syC2e?S;d&N_QMnVjbz)cKJX9K zXgbEx2lw^OIW&~|Ab8M`_6nvyvlW?F8sD8jMYcK1pD^;EVr9Io8dUsf(r=1Z&Z7>5 z`Ir3VJoQmT@?(c=S=<6bvMs##K4b^UtZ$i1C^A4B|Iyo;Ihdk}$N72Fue?HgQ<%?( z-uFPQaviIG{8x=G{_$rbhdPvsx8sAh#0bjcvnE#^>mt_Y31PyfU5y@HN2{EO08!@#OFUpac| zKj5D8SPy#s8UEzjwO0t%gU!?C6LQ6!FqFpAv5QlI6G%*7g{uQ7zuQ&Z$_a<-CQiQ% zrNSYPFP!Jx2~ix`yPpLvfk@igzn(aO2SIGQ&!6L#xNr_J8e#Azey+8}tPCFA z8nFM4`FEA}^nS0h+ki6hdIO(W7pQG}K1^{Sf`BgXe zv@Lq9W=ZJj%%^9vjM7nU4hyvERz8}0^BC9TKP2EYRnMh(o(5P{?zi?wiV3)Vf-9hXH@HT$=zA*C~oV7!wt{J=l;hE@1KanV?WzV~m8V2;V$q zrXctve2MF1R0uG6czc(LnBoS`&)yl~H3cD~gXiZJ{a|FNg@?o?9Qb~opUlMkax!^* z#QJC#1YY9ppRehKfQ51C^jk!@x#D-?6Z0Tg{O?3+KohfY)l}IB_~5$g?Dp^@ zyx8@g+x7kkT2rUSCJl&CDf#b>D;Z{Q*tle}Li*r%`M1CA@B1JmOi^$)eh5yzCMhc% zAA+LTkWt8>ZflR?nh(fCvNU=Sqts`)R(4T1P%_0jPgL-6cGLu#ME5O_5g zrA6-yLCL>^Kc9aO!eLkM$Ka|#(CmH5Z$38&zfvB25%V2{(+NFFtVcvReut9C@Uz5QY4T9obrRuNFLx4wguV{Q8f~t_{NT0bOSShAcd3tOZ zJf;%2Ww7xTku^NZB>LC7!Us<@yv2(O1GcH*rD z;n?ch2AkawOeeI6Z+!$c`4HeA}!6# zXYKmHv-|L&&zU~3lXE4l_(6m-!Hh~vZkT*{Z2RtB9RvoBg00cxgP@E5rQRVo2sgjm zT2W))skFN0-v-M8h&~k`q-r$)?{>E?r=(%ya@y9i7@a3v3vN5beNZ&?M$4nS4~V}j zUj$C|0Z;TJ(xg2i#7?WW{i`EFI;{v7YXT8$?#CxR@+Lw}l)=0x_Yho7DZWJ&I|OOp zUOjo6G6bIQyGPYphrn+a$tNBRfm53=ryIvGyk)hq)Ll~|y?!Vt{-;9%!VAA**zT$=2kH;fgK&00POo@n0Kx?ah2OCc z!iVXTMHh*foT!pB@KX%~FE{(%!uk-nopl;tXu1P zF${lQM)4uetbZ3Av>zPP7-7mnP9p!~leYPsh_u)HO=vh;cgXwokT&Yv8FyJOaE zPc96?wAr*^?7;wRb-A*gFB<@d>uLr$T!V1A^2@ocwE>tc;f;E*H~_Dgq$uUjVsgXS zlShml082r=+v7I|;7Ul#@y9m@AaNy8BE@|GYQG$|uaEb^HKq)T_kMlgre|dv^0E&Y z57{e*ut-0*Jo6J<01+gpW#4%46Cp_dT?-F}t9l2}bcSe5Nmk z^I;gCd67~-Se*!+iv=6TrWh{C+Vmzs6!VvgW5WuB27ppHG-3SW05BOQfABBthpD;b zJ#~r!2t93g<#Sp;xUb^((jWChE`?>h=bt_}aog6H#sj0HFS6C5+y@FIO?HkL9x56> zx#k>3gj)tF<~}4un3#*omYV1Vr%!9!>`#cm9iI6&+@lv-rWy3v3;W=OFh>Q&^**RB zQTs%ZN`!~5W*)=-M3B6*{O$QP5mdfz*hXk$cx`$NcPl#)ES|}o)4}lP@AtA~f`fbE zrdNeQqBe$KCI8NrqUeRo;%`umGd-~6JG5~y)B_n5?K3M(J+Qr5@$h>=H-uaRf-7k! z)Dm4ii8@5M0N)CH%@kcdf{1h;H%c6UU(@)N~MEh z>tIp3aZacg96x`=35fLor~08EA-)@U8nQafkuG4Uw=pu*>Vo@*Ov}F>c7pA+wq;9D z2N-1y&UBa>>;t}-a~-$~{h)9e5gGf@{EiNx zx*pLBnZACjblARS^A`&yb=-2$$-3g5`!;Ibz?I34YvH$RAJKVV( zw?co|4(Bfyo=iH~0ScUt9xpuX0guds%W0iGaA)=g`+eQe%3DVm((Z1sBcfBu1WN@8wdvj7#i*e+7^3 z8ftaGvG>7$K3KLxRlUx9{6-s) zMb8#>f_NqGhyoFl&noBf*s*r#BAa^VHQNrMRCS~E0|7EqI3X@`4kd-=AjZ7`^Fpkr#*20y2bqkSh^!8JnP`#5(4n&NaiXJ=cFBVa@QYrp93TeG|MLX|Q`^*aVsPQsayU8zB6egLWlJ z1E>X_s!;g|czk?I?AUpI=fXA#Jh*>WdJ!$Gdx#YuX`4p?9CJ@FKiQ$H0{_N77x;FEWr&9J|8J5^1h8E)RC?6L4@1{b#_eXac_?0XaJ zyY#FHkhFtUq#I+ra1-!Jv5f!T3Cp-P6 zdN5peH+ryH2f@dv1DYQbAXK9+o$(X_GABQb&SHFDSWN3UWleypbS4|?5(M~^^*RTZ z8-Yep{g<^>BapkNxtQ2DfGpEV9dm<#7!l*LnWv&kZboWP4q9 zs*wOj;P1feOn`S6w`xD65+ITmaofuxfEWD`{-!trUGc2lz7+^is!jyj*&;A(YJb2z zg~Gh?=h*p@{ z-VKl!YD)0vhT#h&f%omY0C&(3TXN6=B<=0zSbB(XLcL0z2J=fD$6NTQ{fI#N=w&%C z_FOJ2{-KKbE2Xi&RSZrOp-klZRx&3MBGd1F>$ygR!3NFRQP*xbGhI&7g1w)nfa}X; zd=J=lzYTmqhuKfoJ|?Nd4ygT5F>Za-0rvLiFH5&{LG8dJx)VEHu+b1UC9l#A!UbCo z)Gl;G!nSnMUG*;LM;e0VXgk69p`K!0eizn0LYccH6N{q@7RxKJ{L$pS2Z#9`ZE#<1 z*E}e{17?FLsf=1WzyyMxaP(t&8_tUqHHj@yg5T?uNNoc>hUuCe?D>U$DDiH23pAWa zVN_jcg4OG!rixgeY4XR>ITN&;HjAW24OuFVX~3o$Qr=&UsX z+YOUaiH2ry&xzw`lx%^{Wd?^T^JXAD2qY83;s9F(62Y^WUz0I5oxqOyr`PG&={&@V zVB|v5_(zfm@#WRw!B{@oIf3~Uvtuv(lX>w|C8rnDg9=}Mk@tedrgj63PdC^+E>R(6 z?FPQl`V;?~PjepGQkKTz;^Ak(-N|B|5J;QrS7g-zY`#{=Kg=JgFV1aC6(mAyL~{Z+ z7RLs7aM)Jf#rz)&lH(EN*tmA$al`Chm}ZI=i@^N2Q{LZ%8z_iyY=ci)*QFPh|4i;1 zKI#U_ue;(e9%FK7KU+q>)&sFpjA}=i9h0km{Z8Dc1HvTk76xMW>_eW~k|buwNYvIJ zLPRHMX`cz>tmpzEHa9XATqnHXqR36e_$n{-ysWdc1McL5lW01Y@B5Nl^W|3?Jdosd zDtXWbosX~3%2>2P#Em*qiT_&Rz#}k>kkkTKnX#J%G5xJwKT=bI<=gVl51yDZYzFRZ z(mH;cX5h;4In?xO0vn6(eM!bmz@;Lu%8$v-x>1+3PiZHZ_J$l@^}+1=o#QInSbkK` z{>Q^K%QlF7VKq-f-VTioYe53Uc6iGl3FcdEa8I(C#(t?8^lcgFO4(Yl-oaYp8+I+Q zQX92dINJ;G1V%iuqK#W>Y&i=Z-Ovnz}OVCNBNqy0VyMGQ2s}E@5g2v z;7RgUy*gXKCf0#ev9Afv|0vKZy3+#h$u^dw&=yD%I=v#l*#skIkvQqkjc`la^tKLt zBP?De7e0Qw5uVERWk~nc!@!SQ)n*3uAmN|3PQD9H;&RQf!|~{r`Ikm`H<4R6{kjR#LnSLt zeQ5&j*RzcSotWNycz>epPCfiuZr}(SsfYDz)+C1;^`PsnWz;)S2LY>$ArZ&xphngE zpEh3|C@VF${dKK_k}(bBe1fXRuA@$@7=V_v3W7{kalzvAi*Hl z(RH2x<7}?SzMQRtTTZ?@S4atvl&yZb-v?kd^=S6VLj=Z^*j56cBVa!nMx!5B3%9ko z8bGB6k~2&`N2%9>S@GbHf~9JRzGSFj9#;+Fm%kj-)vknp4l!%1eFO-qptF1Yi2z^5 zw?+r9V|3zsMp`uqFl%J{>%9nolWt12Y7GjS-M`3=2?Hc|KV7}$hQi6_i|!itYruHt zXEKdT4dng!^nv?qH4v+CqJb{epcxQ4a7C~ZUS9KZ2pg;bRhlq0qoNA9+0$jKOellu zq_+;;}+Zq z%3K%!m?}1c`tJt2>g76MwTwMIjPdV$&)eq`C+lGv;d{D;`5#x#>+egwAi(4a{eiv) z0<6!`JdVfKMQJwt-71Ly(~MUdY%%+4rp?Le>DmNZiYG-cS2Y36;T(15sU}dk#Gtf; zYlIBdl!F!XMkw8GkI#6E*>Tg@FNJ*#(7Da3T8mwfVzb#L{AjffNKB~IOs>?!#>ji$ zrwy2#d0fWlJ|O^eWLZX$9JX(F!Z+^)5Wso%Pj9q60r(xsbk3Y0z+>sFEs41V=($VR z$Fu}c6J7qxJBR>=&o@0?$WT}k(5`DG{rNICfq*$UDLJ1)HVQH^WhXA{e7#2f(5kMadP3teVj@+ewI)aY|NR4a#znu( zt2X!WSzE7q&pfEYXNTag$344@M0<_h*RboyznhXW)_p*Sq&eO@RcaT2kVtbdGbsE+ z&NT9>tl82lFrGOx%%e!Epp{!=%d+RD@HqYT+{Bw*h0EuRT*e}0kp+vrZ!bTcNB(37 zu&_+VA-}@QgPqD)QF0mg>>(yogtPzC(OnaLg!kJ@THS3t@@?!i1uwNC>Nk4j^uLA| z_;)w7V?6!e;;G)!OEmpm!LO%x9_jAtAQT_7={){~<9~f274W`qCco%^HJ8|1EWfue z`jbt>82RBdPf5~Si{IvuzBrnhjZgbE`i#2#G?HYN#ZsLRf;7CKw7V5Bi$AN#;Qr(S z5#RZTD&X%uS>)YDDsEk-1UaSKe)s!7S7fU3~&e0tE+!Q?xkEns6IYGsV>m?+)%ARL@VNU=(xWkIG5j8ksdwj z9!@uWBkV0&f>nF-*PD4Zm2Bl?&DF!XQ)4r9t&3dz(!(rdZ88F zlUtQ_Gtoh_BVX#jye5an#250h2;`$xB+)bP0+hhwYG*L1_G?skT3bmFXO1?vF%bXz zGK7+-E3Mtj)`R=M3Q0|rN6_2a^?V;?IpBjdJ=GakcfhcZO!0hY+{x?9o{{gk;9+S? z63tU~+{u7|fuUD6P>}l2XI`le3?>#_wb>m&(kW=GgXbYmgy2qP5=?+}lBxfOG+W@J zVAMM~1qIxhsj%iG{s`DEq3&)IXaTFgzw?T$TcGlf;q+=$B)T)%Zd_jGi*Bran9I>T z2Ekgr>9o3f;BU`4c%IS=wI=_%e>*P%P4UwwiQt<@r>MvOY;mdLa#oNx;|$WjkVQ&l90nuXxM zx%SRx#~31BiZQN#e~C*QT&rw1U#FtY5KFuMj3CiWz2?3kd5elh3-YOo&E!!)EBF zKcdU=f8P{bf4choI0zD`RiyW|LS?67wcao2qVu#i zQhf0ZXsR83*R7j3K!%G?V7uHkV};Vb2^A=_k;!gKolMqM^;REUL>?HZpa z(#+&Ate|6#gn88-QmOSJGvx=ar%7(3MLDM{N@@d<&(AH^&o{XtFQQX|T3i;8=3yq8 zZy$|N67N^rUNKq7Et`j4nMaAp@Vq5??eZU_nEZ=LY_dHnwGeddV9yEd+RFP>eZmC2 zdoGsLuWkx;V=ZG=Z_otgu{#;=%I@eN`S|XO7hTc$YdX}nM)RnqoDq+_iV}#ODp0df z_C}3Hoprdj0?_+DX}js{OK99VHB)0=4p8fEEtMNcLMhoVH;cwZp>A2azVk~fC`(3) z;kuOo>`;7r9-Ki6W+RcD3Zpw{xE>?dhK>b}dSWnqCbS&(pXeSZ+f#z=F1tll4{2PJ zx05IPopf+H`Vy{x8U=bPIxn~5FW}DE?1S|#Jsd%W@eI9AH3T)Xy;qZ{gVLbI4Kj*{ zFedfO?v37C(D>BjakT=Vqqwuwld~S)<2dEBPuIX-y6%lj?TzqAmrsy?vk@XV|KdO2 zYk>mFl?rkHI!LYJH#3T9024Ve$Ew%{m=xxsJ^X-ijtu5rJD_aQ;@TM z^sx@Sr&f;fPS(L6lC0#@OZDJr7o+c-UJv-CjZgv1{{ME=WmuN1hns1oRIfWNAfJh! zu2aJS7$mQ2Y2>2NV;_RN+NuM_;)x)!9y8oMdHv%dcjI9|n^FFfB?2$+Dc=4=O@R6w zbInyTXWSia&7hHorQqkR8cL4UftE$z)ci?_Ld%!*B(q{O7#S@6mLOFDVaFe;YTyuH zj|=KCV8HxBw~6$VM)mNC`O!U#H7wpgn{_uUv<@lws=-&9uay0G;v?!s!?4 z;N=fff43fN{$nJ2bjRvIHo)*Bj|d9=((iu8TtXlyp&;IUsunh{79#BGD9}WI+7$Ju z1>?G1WpB?K;G1`ytsz!J0LME$6*VV%t4wQVd7DriOg%b!!4Wi_O`{|E<%REu7?0XavpqzF)OD zO|Y)ABy=d!1jF=VUh+zf(6&w2LFd*0edYr#$@MKjS(=J;yR^V*f4=XQq0OMV>NR4h z)CAXy#93s2G=X||-_|)SUfd}i@NZmk!rKyCJ~bF$ivGA!R>SS4^8Zx(Lt#?-tG{)`7Jgd-4+Y-Tpr9d-b9V z0ruD&zfb2Ouuv<0O0<{&d^3T^ehd+SKC^OaFB5?s1Kt#{s0E2@@@seZoSxkz2kGKIwAm>-DpVrHv-&P3aR@}LV*2uDo?ki2|$ORn(N;} z;8a6?n5i`$?mcHE8*QqANWodV*M2q7^VE)~-LMwSU)>Rqm#TqxG?!k}(^P?}HSM3b zj+H=M=GB~k)C|+%XKnvC{*pP)CKgZK2uE6X{{0hc1g_u~vn(vWH{o@oOL)@&|G1Bp zTD@(6!}XItB)aOM_kim4=bLp9s(Ly9z?}eh_XK?wvI(#;MWU)c1Aq$rCo;G~fOth3 z`Y5bp1v6tpbJ!dnyb3wTYXVTv?M~N7Eo}fTA+n866!p+}I%bVBhX7aZ&Qaph2_Wrm zUHq-F9uC(83x8sIefiGLlTUU8P;Zp+?HfVClNv{Rm!ANyE??zXyg-0&p>y2Al_;2= z*-3m(tOd!<2EDvP1dd5=6x@);_#WMMO`H-B&Ci37jNoecZnONB*g=55yZx6=@S-4l zGt|VDfXDFH<>AvpC~!Hx=F*NMK$O$9Q}h%lIG^9Mz8qc)*O`RJ^1^Gt(fw5DdtC%{ z@1>@-U&O;wu*Ip2sA`~iZN>YaZUty+TH1Z0tA+v1jGlJoYApXpolhHI3HM#*iuT*e zp;+~9Zc!ZqqFQ%mUddoMg8KX$zp7dgedPK)wZ9rV=Py)T@u&fVpzmLQVS4*_meXlp zwQ6vkKlV@QR2BR;EO@PRxB}RPtrApwD}bez-9dDw97L1juE>X$0sd%MS?xpxJRZ-$ zZY?Q?O||Lo(Q~E1*Ybj7z_J9Ko;pRw=Mk{_JNy?X41X|jx{Z}lAh30zob^x?vm=~Q z$}y4vXM)H*s*a*YI%UDX_Qwu@=hjEe<|-iTRrp zCtc)>D`9K!sva{>4Tv};WlRXyz=1$Kt!jS-Sii1jj9Ds&pnt9;2?n)bkl6UWkh}(p z6}|?zeXj&R)sZwJO(jShiPvVYy#|>a%YN^!HAv z@NN`=tiQi4?(ks`x)^)8*jFcCGxiS1E)p6zp=>7s27RRBdUVBFH(Q z88}cb1CqIklR1MWP{-Y#6lz@rMd}~j+>G-fcT<>#uDcjQ`fhH`H5P#xlTFLkjRF|o z6%$EH&xNm1-uDMHi!gkw`hYl705tNiiqDMZzzgo5lB0fEz(->Lw)u7~!o`+*<7U<; z#3%2w-cMyxbW1CY%j%&U+7g|0F1(={`5eMvHoN}?agZvxT4YFx$|#aH_4wJLgG=2S zyaW^xtk$l4?pKTm1Z1`N@}ELYQ&$qJo`s{$RMNRuWJi&~Lo}lCOAm5JF7kU1atZZa zH1C~gFGLMjsb}QNGSIx#r%eRk6!Zigq1`n50PRg=CA;+08ZK&8sSp=aQK?mH8^ap` zD34hH&)(V^YH%SzcO8qU}Y&j_f247^1Ym8E$`{)Gq z+Y&11Qjw>iXFP`cn{=DnIKdFU*fDc)?dAdb9fsU$iZx{OHs#YW$$q4|zFN-`!RqcC z40E)$icz1M_YsK_-w{-`g14%F1knoA_M22R%RT_2uK%SfGqmDm+ zAU63Vsh38rQG2_Zp*0E?P~**NHsoML2i@I{s%#lh)7JuW1=((>w&Y=!%>XYvky^>U zD$WAm_E##V>W&mUXBe6iC(hu+*Muv#5AxxDzPW5&^mXvM-`KMw&V~~_(XIEYBLb53 zJ(|-O^FZlbZRl%NV<0`B{8Bzz8TV^`ivzpM3G%6pYVPRdLd$t_jR5j{AZ(ny6=T2; z;jd~o-RVC;mOr;;%~CEL95heyQn*8(rnF4t#R_0cTtW>v@Zj5fOP&tXlWx|=%m{xB zENnVo(_*az4l#-yjnrxw8u&aUV~husMT?+uEC=-FWpNk6Dj+dGIwJILB^;&)?C+CS z!N;GLTx3+GkY!Z<`CzXcCbwDlOTEh>+1^I1#Tb+8?x*S%Q1#;X=MM*EkTM|kRDGx%SXS@L?JyJr&*ZP$rZ#0z$6!kgr;Pf#YI;$(T|hcotEfp^+$p z`hrrbyEpP6)wf^w@vQ>D|5bJF`d0=s_2%;Jg%DuXLIu| zyVB&rhhIBli6yRQjoXw32E z-&OoDI!PI8Z2J&C*nLSdr@n^Otv%yZdi@DL$3JH}-jD;QtF3PyKDYy14m}@9jHDnh z!OoBG(kH<24t@P{?JHcl@lMRHM;%0Ur)Bp-lwiGN{QzZ7hJ%(YK9}83Fu$t0%37`g zm0v8C7h7+F6XQqYi0ko?^H%7v(Jc*vkdGF8W6Ef&oe8IGp&Y9I@{La=M4+=zvybSl zF2eYW1l*?ACA9u~MaQnbESeQ+?s|0ME9%*j9s6JM8SoKMauTt+fJUB*+-a6kLc@|) z!?oA4P^C!WodGX$z(>c2`mljFhOArC*7{t;AL#MJM1%0b{{-AOesJ)p>bqBBVHrH`iS(rUp zZIrQAA^o)V+xJ1X*oyJ^gdzk_L%2$&i0t^kDZ#3W(qen)zlw0JEG`y{S(e;AL3O?J|7;whH2~ zo^CAQuDgo_n|Ohn(p96Ql((Q(b*p&Y$Qy8`X=dA|-Vne*PoRFU3+K-|2+c^cgHX?T zdU6gGoK@3K?u~JE2v9j={h%=!;-1}UO#7V#@5HL4FUluE39WXpyhj{JjU|i$bu2sp z;Y()nF~B-pbq2W^18ys$A55b=*8Jg%rJiHQcK_%4cD&hWq}?0+Mc( zfSyVzn$jo-;_HX|4ic5{+K?@y?5G_0KRcw!z|HV~5$ zV(itj;3B~@@vqre$O=Z0?=B^9SZR{eWLXSOnM7BTh(Z|4v&)qh&x4&v*OJ$LMexe( zM%=Z9Lb&hE=vdj850*df3K{&(0V6N&o%X(5C|>go$a;_iB0*9-y<%BV1uQhbSH3`) zZh7KtKqjz0N;F%l&j7q7QZm-?8T1FYwpYG?0%0=($;3t;ILc?SshH)0y-MG+(+OW; z>y++RQc5PA*8Lxv&O08<@BiZ}C99H=3W?GuB(q6(git7jP^1(xqmYrEmA&`gdym}r z%Pf1ZN@-`6(bCfIeE<0Ubw7A`IM;n$=Q`tcUhn7Y%MqExLQqxxF86X2V6UmSJF{OF z0`u99`X(R5UaB=O!^n~q->!;OV6Wk8AN$eH5r znV?DWGnN;m;a!qg=1M>s`ixJU5<>+TxYw1{ij zQsmU{yp*-O7=rn)ECjWS;a->%apPnO`oJ!TwTa&Wpo22!G)vX%}9GG4;J{Pl8L}$H^DM zuU`Op9t}?%%LS*Y#k-4KC1Ca3Tfefg7_`XO9OFy*==1H8;lPvsE12~C-MC=0DtEm6)4xmc%Rm2#Rl7rrNz4O+Ofuv=h2=Co@X6ke`Z zG3&~~70YnS&Ko(fW>Ye9AlECia_)1<-dr&3`FN8%CKG!S<+K7cG9mcMcI9eq7Q(po z!yd3?qe)v%s;?pqXX>PncRWtRvvXUszwAxNXX+ajAt~~E8P-b?f@zrQxMBEwA{Bev zKi&4WNk%cx-kYvvap3!JvO(#24tA-ZkbAb0gCqJ3x49NFG1q%HdVP8ZLew{mUj35= z`wAB8N9E)gI2UnBPFZ%94_gpgmUF;A3 zE}et}zXy+5Y)Qb+i5F?&`q9|Cd8@fqZ!BzL^c}`4V!*7N{Y9fW=bRV%ijbopC+U9(uA_0dOpavqKBiMSbpBB5LN{3ziFIOuV3uqO1mfAPM`n9I`5^L|ikO$DC&aVwxs6-+B9$Xrt4P@%52=D$ zH#gkD+_hzeyF0D0Q}Ko7zEx`k9Nqrp#nw{@7^!iUeZhh5pK&)1{8gdkJY^VgnNg+C z4tLYEhf^VL8*o^tBNa6(A4J>#B_q0Fw{rRYIM52~)f&^|;q$@IxmF_%ycG2)&bVmU z+86Tst3`q@^~Z!JxxZ)P%*;={4}#^F?S*!I{+J$1QE(^;AijKd!V~ z%_fBylk*Q?A1tF0w>ALU&SMutdr4hOMY*%FRuq&DeuUoUC^T6_?uqt`NAfnF{xf1`nBOMCjQ8rH1NEOO4+If-rm!cp=W7-Xy1=hOqfGG%|5H3<7>?x_fJ=` zJuQ+$?2j*`=>_x>JpJIpvX(s{#Rm!srI!L5ys@zB!=AryeejiO|AD0qzUWxKedbZI zBPzH%mDrnnp)hhp>F0V!EDz*M{4}$N&GY5p)Awz$p>r#{+hu7iEPD#ditFN31^3uq zwj1bgYAbdfI*$`A=STkAtw%8pxoRi(vkmvoKlR>2^kqwa>3F8vR**A|>ciKFA0|_N z-<(Dp@i%`G&Lp~Sj?pazJL0$a89bY1R89OGDQ0r!+O23*_cLw~X#wBIyt;Vek7>=g@FrY*R%L$2pdWN%OXCPBl`lsh#sPWZ{&^A9lJ+}SQ=H?dZ`7hoxe2=w>M+* zQS6yZhD``y8vHiCo%nMezkkS5M)W{7&pn!_fs9#Mv0bV(h#aK+l8vJwe?(DJNZnO8BN0>#$bsp~zrM z4Rkjhnn-9T=S%kS?|#oWK}Azo{MJ4ivh^4_mjoVR&)SZZXE;ryU_f39WLL&bkTn`cvxY3bDK>qObX6# z8?vfFP>uKq{Y*7@sxEB1oL+^6%fh1CF{bqF)Oc_Vd8HGH4x z9?!pBj|@Lw7h%6TNM3kR@a=C6?)f=hGv*-s*iUivTlH$tcy>#2n@bJ$lsFnCyHz4& zv*i}g{1P1e^N?F{z7o`78vFU7N(hZ;%&_EDVC_AHa>l&{koj-)T$w-2BYsu%gw=M@Fx3>S+WYwtSkrR%Ynqbh`CcxzNb?bTSGnmM z!X6=nULuv|QIA;{WqRK5YV?n^o;G2q!^*CCb-lrA2&U1^iZxUsO{i*DaSBz;; z11jMjKbZJluo7j$|D9TTRtCPsCsS1-)u1ooDo)iW`+XOK!}df6v9)Dy-tAb4Fx4xg zmSUb$@I*Zw1yR+|WqjDFyA#y=G;Pa(t`&{`>d65`206 z@3=E}K7NmSE<88S2j}$W!STCASg-Ar@3^H18T(IuXqn4Gg>H~O(`p5lk1g1#9j%0D z$Y;8d+zLdm)QYj!m*J!PB%48cIfTOw$KReO>)z%9EoGuN++^qK%E~InIg7FSDS>

    r0Hr4*DKN%^RSWMS2zM=<84N8sP<-O9`f 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 z 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%0AAb0>rGa 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

    ac(}nXvtqO@DZ{7}RTZUwkSk0`{VU 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μjIrK%drp6VY1a%k3vLP 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 literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000_celldata.pvd b/v0.8.7/tutorials/out/solution_000000_celldata.pvd new file mode 100755 index 0000000000..d164377484 --- /dev/null +++ b/v0.8.7/tutorials/out/solution_000000_celldata.pvd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/p4est_from_gmsh/index.html b/v0.8.7/tutorials/p4est_from_gmsh/index.html new file mode 100644 index 0000000000..64c258fb91 --- /dev/null +++ b/v0.8.7/tutorials/p4est_from_gmsh/index.html @@ -0,0 +1,366 @@ + +18 P4est mesh from gmsh · Trixi.jl diff --git a/v0.8.7/tutorials/parabolic_terms/b046ec06.svg b/v0.8.7/tutorials/parabolic_terms/b046ec06.svg new file mode 100644 index 0000000000..2eaba3421a --- /dev/null +++ b/v0.8.7/tutorials/parabolic_terms/b046ec06.svg @@ -0,0 +1,736 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/parabolic_terms/index.html b/v0.8.7/tutorials/parabolic_terms/index.html new file mode 100644 index 0000000000..bf24d41316 --- /dev/null +++ b/v0.8.7/tutorials/parabolic_terms/index.html @@ -0,0 +1,131 @@ + +13 Parabolic terms · Trixi.jl

    13: Parabolic terms

    Experimental support for parabolic diffusion terms is available in Trixi.jl. This demo illustrates parabolic terms for the advection-diffusion equation.

    using OrdinaryDiffEq
    +using Trixi

    Splitting a system into hyperbolic and parabolic parts.

    For a mixed hyperbolic-parabolic system, we represent the hyperbolic and parabolic parts of the system separately. We first define the hyperbolic (advection) part of the advection-diffusion equation.

    advection_velocity = (1.5, 1.0)
    +equations_hyperbolic = LinearScalarAdvectionEquation2D(advection_velocity);

    Next, we define the parabolic diffusion term. The constructor requires knowledge of equations_hyperbolic to be passed in because the LaplaceDiffusion2D applies diffusion to every variable of the hyperbolic system.

    diffusivity = 5.0e-2
    +equations_parabolic = LaplaceDiffusion2D(diffusivity, equations_hyperbolic);

    Boundary conditions

    As with the equations, we define boundary conditions separately for the hyperbolic and parabolic part of the system. For this example, we impose inflow BCs for the hyperbolic system (no condition is imposed on the outflow), and we impose Dirichlet boundary conditions for the parabolic equations. Both BoundaryConditionDirichlet and BoundaryConditionNeumann are defined for LaplaceDiffusion2D.

    The hyperbolic and parabolic boundary conditions are assumed to be consistent with each other.

    boundary_condition_zero_dirichlet = BoundaryConditionDirichlet((x, t, equations) -> SVector(0.0))
    +
    +boundary_conditions_hyperbolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1 + 0.5 * x[2])),
    +                                    y_neg = boundary_condition_zero_dirichlet,
    +                                    y_pos = boundary_condition_do_nothing,
    +                                    x_pos = boundary_condition_do_nothing)
    +
    +boundary_conditions_parabolic = (; x_neg = BoundaryConditionDirichlet((x, t, equations) -> SVector(1 + 0.5 * x[2])),
    +                                   y_neg = boundary_condition_zero_dirichlet,
    +                                   y_pos = boundary_condition_zero_dirichlet,
    +                                   x_pos = boundary_condition_zero_dirichlet);

    Defining the solver and mesh

    The process of creating the DG solver and mesh is the same as for a purely hyperbolic system of equations.

    solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
    +coordinates_min = (-1.0, -1.0) # minimum coordinates (min(x), min(y))
    +coordinates_max = ( 1.0,  1.0) # maximum coordinates (max(x), max(y))
    +mesh = TreeMesh(coordinates_min, coordinates_max,
    +                initial_refinement_level=4,
    +                periodicity=false, n_cells_max=30_000) # set maximum capacity of tree data structure
    +
    +initial_condition = (x, t, equations) -> SVector(0.0);

    Semidiscretizing and solving

    To semidiscretize a hyperbolic-parabolic system, we create a SemidiscretizationHyperbolicParabolic. This differs from a SemidiscretizationHyperbolic in that we pass in a Tuple containing both the hyperbolic and parabolic equation, as well as a Tuple containing the hyperbolic and parabolic boundary conditions.

    semi = SemidiscretizationHyperbolicParabolic(mesh,
    +                                             (equations_hyperbolic, equations_parabolic),
    +                                             initial_condition, solver;
    +                                             boundary_conditions=(boundary_conditions_hyperbolic,
    +                                                                  boundary_conditions_parabolic))
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ SemidiscretizationHyperbolicParabolic                                                            │
    +│ ═════════════════════════════════════                                                            │
    +│ #spatial dimensions: ………………………… 2                                                                │
    +│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 341                 │
    +│ hyperbolic equations: ……………………… LinearScalarAdvectionEquation2D                                  │
    +│ parabolic equations: ………………………… LaplaceDiffusion2D                                               │
    +│ initial condition: ……………………………… #7                                                               │
    +│ source terms: …………………………………………… nothing                                                          │
    +│ solver: …………………………………………………………… DG                                                               │
    +│ parabolic solver: ………………………………… ViscousFormulationBassiRebay1                                    │
    +│ total #DOFs per field: …………………… 4096                                                             │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    The rest of the code is identical to the hyperbolic case. We create a system of ODEs through semidiscretize, defining callbacks, and then passing the system to OrdinaryDiffEq.jl.

    tspan = (0.0, 1.5)
    +ode = semidiscretize(semi, tspan)
    +callbacks = CallbackSet(SummaryCallback())
    +time_int_tol = 1.0e-6
    +sol = solve(ode, RDPK3SpFSAL49(); abstol=time_int_tol, reltol=time_int_tol,
    +            ode_default_options()..., callback=callbacks);
    
    +████████╗██████╗ ██╗██╗  ██╗██╗
    +╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
    +   ██║   ██████╔╝██║ ╚███╔╝ ██║
    +   ██║   ██╔══██╗██║ ██╔██╗ ██║
    +   ██║   ██║  ██║██║██╔╝ ██╗██║
    +   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ SemidiscretizationHyperbolicParabolic                                                            │
    +│ ═════════════════════════════════════                                                            │
    +│ #spatial dimensions: ………………………… 2                                                                │
    +│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 341                 │
    +│ hyperbolic equations: ……………………… LinearScalarAdvectionEquation2D                                  │
    +│ parabolic equations: ………………………… LaplaceDiffusion2D                                               │
    +│ initial condition: ……………………………… #7                                                               │
    +│ source terms: …………………………………………… nothing                                                          │
    +│ solver: …………………………………………………………… DG                                                               │
    +│ parabolic solver: ………………………………… ViscousFormulationBassiRebay1                                    │
    +│ total #DOFs per field: …………………… 4096                                                             │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ TreeMesh{2, Trixi.SerialTree{2}}                                                                 │
    +│ ════════════════════════════════                                                                 │
    +│ center: …………………………………………………………… [0.0, 0.0]                                                       │
    +│ length: …………………………………………………………… 2.0                                                              │
    +│ periodicity: ……………………………………………… (false, false)                                                   │
    +│ current #cells: ……………………………………… 341                                                              │
    +│ #leaf-cells: ……………………………………………… 256                                                              │
    +│ maximum #cells: ……………………………………… 30000                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ LinearScalarAdvectionEquation2D                                                                  │
    +│ ═══════════════════════════════                                                                  │
    +│ #variables: ………………………………………………… 1                                                                │
    +│ │ variable 1: …………………………………………… scalar                                                           │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ DG{Float64}                                                                                      │
    +│ ═══════════                                                                                      │
    +│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
    +│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
    +│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
    +│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ Time integration                                                                                 │
    +│ ════════════════                                                                                 │
    +│ Start time: ………………………………………………… 0.0                                                              │
    +│ Final time: ………………………………………………… 1.5                                                              │
    +│ time integrator: …………………………………… RDPK3SpFSAL49                                                    │
    +│ adaptive: ……………………………………………………… true                                                             │
    +│ abstol: …………………………………………………………… 1.0e-6                                                           │
    +│ reltol: …………………………………………………………… 1.0e-6                                                           │
    +│ controller: ………………………………………………… PIDController(beta=[0.38, -0.18,…iter=default_dt_factor_limiter) │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ Environment information                                                                          │
    +│ ═══════════════════════                                                                          │
    +│ #threads: ……………………………………………………… 1                                                                │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    We can now visualize the solution, which develops a boundary layer at the outflow boundaries.

    using Plots
    +plot(sol)
    Example block output

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    + [1dea7af3] OrdinaryDiffEq v6.66.0
    +  [91a5bcdd] Plots v1.40.5
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
    +Info Packages marked with  have new versions available and may be upgradable.

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/bb5a6c21.svg b/v0.8.7/tutorials/scalar_linear_advection_1d/bb5a6c21.svg new file mode 100644 index 0000000000..5be2a2c19a --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/bb5a6c21.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/d2c2088a.svg b/v0.8.7/tutorials/scalar_linear_advection_1d/d2c2088a.svg new file mode 100644 index 0000000000..0fa3b3b00e --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/d2c2088a.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/e835d36d.svg b/v0.8.7/tutorials/scalar_linear_advection_1d/e835d36d.svg new file mode 100644 index 0000000000..5326002dc5 --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/e835d36d.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/eec42797.svg b/v0.8.7/tutorials/scalar_linear_advection_1d/eec42797.svg new file mode 100644 index 0000000000..03783517ca --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/eec42797.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/f1380281.svg b/v0.8.7/tutorials/scalar_linear_advection_1d/f1380281.svg new file mode 100644 index 0000000000..50350fcbe3 --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/f1380281.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/f80a867a.svg b/v0.8.7/tutorials/scalar_linear_advection_1d/f80a867a.svg new file mode 100644 index 0000000000..ee595869a2 --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/f80a867a.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/scalar_linear_advection_1d/index.html b/v0.8.7/tutorials/scalar_linear_advection_1d/index.html new file mode 100644 index 0000000000..b31bace18a --- /dev/null +++ b/v0.8.7/tutorials/scalar_linear_advection_1d/index.html @@ -0,0 +1,295 @@ + +3 Introduction to DG methods · Trixi.jl

    3: Introduction to DG methods

    This tutorial is about how to set up a simple way to approximate the solution of a hyperbolic partial differential equation. First, we will implement a basic and naive algorithm. Then, we will use predefined features from Trixi.jl to show how you can use Trixi.jl on your own.

    We will implement the scalar linear advection equation in 1D with the advection velocity $1$.

    \[u_t + u_x = 0,\; \text{for} \;t\in \mathbb{R}^+, x\in\Omega=[-1,1]\]

    We define the domain $\Omega$ by setting the boundaries.

    coordinates_min = -1.0 # minimum coordinate
    +coordinates_max = 1.0  # maximum coordinate
    1.0

    We assume periodic boundaries and the following initial condition.

    initial_condition_sine_wave(x) = 1.0 + 0.5 * sin(pi * x)
    initial_condition_sine_wave (generic function with 1 method)

    The discontinuous Galerkin collocation spectral element method (DGSEM)

    i. Discretization of the physical domain

    To improve precision we want to approximate the solution on small parts of the physical domain. So, we split the domain $\Omega=[-1, 1]$ into elements $Q_l$ of length $dx$.

    n_elements = 16 # number of elements
    +
    +dx = (coordinates_max - coordinates_min) / n_elements # length of one element
    0.125

    To make the calculation more efficient and storing less information, we transform each element $Q_l$ with center point $x_l$ to a reference element $E=[-1, 1]$

    \[Q_l=\Big[x_l-\frac{dx}{2}, x_l+\frac{dx}{2}\Big] \underset{x(\xi)}{\overset{\xi(x)}{\rightleftarrows}} [-1, 1].\]

    So, for every element the transformation from the reference domain to the physical domain is defined by

    \[x(\xi) = x_l + \frac{dx}{2} \xi,\; \xi\in[-1, 1]\]

    Therefore,

    \[\begin{align*} +u &= u(x(\xi), t) \\ +u_x &= u_\xi \frac{d\xi}{dx} \\[3pt] +\frac{d\xi}{dx} &= (x_\xi)^{-1} = \frac{2}{dx} =: J^{-1}. \\ +\end{align*}\]

    Here, $J$ is the Jacobian determinant of the transformation.

    Using this transformation, we can transform our equation for each element $Q_l$.

    \[\frac{dx}{2} u_t^{Q_l} + u_\xi^{Q_l} = 0 \text{, for }t\in\mathbb{R}^+,\; \xi\in[-1, 1]\]

    Here, $u_t^{Q_l}$ and $u_\xi^{Q_l}$ denote the time and spatial derivatives of the solution on the element $Q_l$.

    ii. Polynomial approach

    Now, we want to approximate the solution in each element $Q_l$ by a polynomial of degree $N$. Since we transformed the equation, we can use the same polynomial approach for the reference coordinate $\xi\in[-1, 1]$ in every physical element $Q_l$. This saves a lot of resources by reducing the amount of calculations needed and storing less information.

    For DGSEM we choose Lagrange basis functions $\{l_j\}_{j=0}^N$ as our polynomial basis of degree $N$ in $[-1, 1]$. The solution in element $Q_l$ can be approximated by

    \[u(x(\xi), t)\big|_{Q_l} \approx u^{Q_l}(\xi, t) = \sum_{j=0}^N u_j^{Q_l}(t) l_j(\xi)\]

    with $N+1$ coefficients $\{u_j^{Q_l}\}_{j=0}^N$. By construction the Lagrange basis has some useful advantages. This basis is defined by $N+1$ nodes, which fulfill a Kronecker property at the exact same nodes. Let $\{\xi_i\}_{i=0}^N$ be these nodes.

    \[l_j(\xi_i) = \delta_{i,j} = +\begin{cases} +1, & \text{if } i=j \\ +0, & \text{else.} +\end{cases}\]

    Because of this property, the polynomial coefficients are exact the values of $u^{Q_l}$ at the nodes

    \[u^{Q_l}(\xi_i, t) = \sum_{j=0}^N u_j^{Q_l}(t) \underbrace{l_j(\xi_i)}_{=\delta_{ij}} = u_i^{Q_l}(t).\]

    Next, we want to select the nodes $\{\xi_i\}_{i=0}^N$, which we use for the construction of the Lagrange polynomials. We choose the $N+1$ Gauss-Lobatto nodes, which are used for the Gaussian-Lobatto quadrature. These always contain the boundary points at $-1$ and $+1$ and are well suited as interpolation nodes. The corresponding weights will be referred to as $\{w_j\}_{j=0}^N$. In Trixi.jl the basis with Lagrange polynomials on Gauss-Lobatto nodes is already defined.

    using Trixi
    +polydeg = 3 #= polynomial degree = N =#
    +basis = LobattoLegendreBasis(polydeg)
    LobattoLegendreBasis{Float64} with polynomials of degree 3

    The Gauss-Lobatto nodes are

    nodes = basis.nodes
    4-element SVector{4, Float64} with indices SOneTo(4):
    + -1.0
    + -0.4472135954999579
    +  0.4472135954999579
    +  1.0

    with the corresponding weights

    weights = basis.weights
    4-element SVector{4, Float64} with indices SOneTo(4):
    + 0.16666666666666666
    + 0.8333333333333334
    + 0.8333333333333334
    + 0.16666666666666666

    To illustrate how you can integrate using numerical quadrature with this Legendre-Gauss-Lobatto nodes, we give an example for $f(x)=x^3$. Since $f$ is of degree $3$, a polynomial interpolation with $N=3$ is exact. Therefore, the integral on $[-1, 1]$ can be calculated by

    \[\begin{align*} +\int_{-1}^1 f(x) dx &= \int_{-1}^1 \Big( \sum_{j=0}^3 f(\xi_j)l_j(x) \Big) dx += \sum_{j=0}^3 f(\xi_j) \int_{-1}^1 l_j(x)dx \\ +&=: \sum_{j=0}^3 f(\xi_j) w_j += \sum_{j=0}^3 \xi_j^3 w_j +\end{align*}\]

    Let's use our nodes and weights for $N=3$ and plug in

    integral = sum(nodes.^3 .* weights)
    0.0

    Using this polynomial approach leads to the equation

    \[\frac{dx}{2} \dot{u}^{Q_l}(\xi, t) + u^{Q_l}(\xi, t)' = 0\]

    with $\dot{u}=\frac{\partial}{\partial t}u$ and $u'=\frac{\partial}{\partial x}u$. To approximate the solution, we need to get the polynomial coefficients $\{u_j^{Q_l}\}_{j=0}^N$ for every element $Q_l$.

    After defining all nodes, we can implement the spatial coordinate $x$ and its initial value $u0 = u(t_0)$ for every node.

    x = Matrix{Float64}(undef, length(nodes), n_elements)
    +for element in 1:n_elements
    +    x_l = coordinates_min + (element - 1) * dx + dx/2
    +    for i in eachindex(nodes)
    +        ξ = nodes[i] # nodes in [-1, 1]
    +        x[i, element] = x_l + dx/2 * ξ
    +    end
    +end
    +
    +u0 = initial_condition_sine_wave.(x)
    4×16 Matrix{Float64}:
    + 1.0       0.808658  0.646447  …  1.5      1.46194  1.35355  1.19134
    + 0.945837  0.759744  0.610228     1.49706  1.43849  1.31317  1.14018
    + 0.859825  0.686826  0.561506     1.47995  1.38977  1.24026  1.05416
    + 0.808658  0.646447  0.53806      1.46194  1.35355  1.19134  1.0

    To have a look at the initial sinus curve, we plot it.

    using Plots
    +plot(vec(x), vec(u0), label="initial condition", legend=:topleft)
    Example block output

    iii. Variational formulation

    After defining the equation and initial condition, we want to implement an algorithm to approximate the solution.

    From now on, we only write $u$ instead of $u^{Q_l}$ for simplicity, but consider that all the following calculation only concern one element. Multiplying the new equation with the smooth Lagrange polynomials $\{l_i\}_{i=0}^N$ (test functions) and integrating over the reference element $E=[-1,1]$, we get the variational formulation of our transformed partial differential equation for $i=0,...,N$:

    \[\begin{align*} +\int_{-1}^1 \Big( \frac{dx}{2} \dot{u}(\xi, t) + u'(\xi, t) \Big) l_i(\xi)d\xi + &= \underbrace{\frac{dx}{2} \int_{-1}^1 \dot{u}(\xi, t) l_i(\xi)d\xi}_{\text{Term I}} + \underbrace{\int_{-1}^1 u'(\xi, t) l_i(\xi)d\xi}_{\text{Term II}} = 0 +\end{align*}\]

    We deal with the two terms separately. We write $\int_{-1, N}^1 \;\cdot\; d\xi$ for the approximation of the integral using numerical quadrature with $N+1$ basis points. We use the Gauss-Lobatto nodes again. The numerical scalar product $\langle\cdot, \cdot\rangle_N$ is defined by $\langle f, g\rangle_N := \int_{-1, N}^1 f(\xi) g(\xi) d\xi$.

    Term I:

    In the following calculation we approximate the integral numerically with quadrature on the Gauss-Lobatto nodes $\{\xi_i\}_{i=0}^N$ and then use the Kronecker property of the Lagrange polynomials. This approach of using the same nodes for the interpolation and quadrature is called collocation.

    \[\begin{align*} +\frac{dx}{2} \int_{-1}^1 \dot{u}(\xi, t) l_i(\xi)d\xi +&\approx \frac{dx}{2} \int_{-1, N}^1 \dot{u}(\xi, t) l_i(\xi)d\xi \\ +&= \frac{dx}{2} \sum_{k=0}^N \underbrace{\dot{u}(\xi_k, t)}_{=\dot{u}_k(t)} \underbrace{l_i(\xi_k)}_{=\delta_{k,i}}w_k \\ +&= \frac{dx}{2} \dot{u}_i(t) w_i +\end{align*}\]

    We define the Legendre-Gauss-Lobatto (LGL) mass matrix $M$ and by the Kronecker property follows:

    \[M_{ij} = \langle l_j, l_i\rangle_N = \delta_{ij} w_j,\; i,j=0,...,N.\]

    using LinearAlgebra
    +M = diagm(weights)
    4×4 StaticArraysCore.SMatrix{4, 4, Float64, 16} with indices SOneTo(4)×SOneTo(4):
    + 0.166667  0.0       0.0       0.0
    + 0.0       0.833333  0.0       0.0
    + 0.0       0.0       0.833333  0.0
    + 0.0       0.0       0.0       0.166667

    Now, we can write the integral with this new matrix.

    \[\frac{dx}{2} \int_{-1, N}^1 \dot{u}(\xi, t) \underline{l}(\xi)d\xi = \frac{dx}{2} M \underline{\dot{u}}(t),\]

    where $\underline{\dot{u}} = (\dot{u}_0, ..., \dot{u}_N)^T$ and $\underline{l}$ respectively.

    Note: Since the LGL quadrature with $N+1$ nodes is exact up to functions of degree $2N-1$ and $\dot{u}(\xi, t) l_i(\xi)$ is of degree $2N$, in general the following holds

    \[\int_{-1}^1 \dot{u}(\xi, t) l_i(\xi) d\xi \neq \int_{-1, N}^1 \dot{u}(\xi, t) l_i(\xi) d\xi.\]

    With an exact integration the mass matrix would be dense. Choosing numerical integrating and quadrature with the exact same nodes (collocation) leads to the sparse and diagonal mass matrix $M$. This is called mass lumping and has the big advantage of an easy inversion of the matrix.

    Term II:

    We use spatial partial integration for the second term:

    \[\int_{-1}^1 u'(\xi, t) l_i(\xi) d\xi = [u l_i]_{-1}^1 - \int_{-1}^1 u l_i'd\xi\]

    The resulting integral can be solved exactly with LGL quadrature since the polynomial is now of degree $2N-1$.

    Again, we split the calculation in two steps.

    Surface term

    As mentioned before, we approximate the solution with a polynomial in every element. Therefore, in general the value of this approximation at the interfaces between two elements is not unique. To solve this problem we introduce the idea of the numerical flux $u^*$, which will give an exact value at the interfaces. One of many different approaches and definitions for the calculation of the numerical flux we will deal with in 4. Numerical flux.

    \[[u l_i]_{-1}^1 = u^*\big|^1 l_i(+1) - u^*\big|_{-1} l_i(-1)\]

    Since the Gauss-Lobatto nodes contain the element boundaries $-1$ and $+1$, we can use the Kronecker property of $l_i$ for the calculation of $l_i(-1)$ and $l_i(+1)$.

    \[[u \underline{l}]_{-1}^1 = u^*\big|^1 \left(\begin{array}{c} 0 \\ \vdots \\ 0 \\ 1 \end{array}\right) +- u^*\big|_{-1} \left(\begin{array}{c} 1 \\ 0 \\ \vdots \\ 0\end{array}\right) += B \underline{u}^*(t)\]

    with the boundary matrix

    \[B = \begin{pmatrix} +-1 & 0 & \cdots & 0\\ +0 & 0 & \cdots & 0\\ +\vdots & \vdots & 0 & 0\\ +0 & \cdots & 0 & 1 +\end{pmatrix} +\qquad\text{and}\qquad +\underline{u}^*(t) = \left(\begin{array}{c} u^*\big|_{-1} \\ 0 \\ \vdots \\ 0 \\ u^*\big|^1\end{array}\right).\]

    B = diagm([-1; zeros(polydeg - 1); 1])
    4×4 Matrix{Float64}:
    + -1.0  0.0  0.0  0.0
    +  0.0  0.0  0.0  0.0
    +  0.0  0.0  0.0  0.0
    +  0.0  0.0  0.0  1.0

    Volume term

    As mentioned before, the new integral can be solved exact since the function inside is of degree $2N-1$.

    \[- \int_{-1}^1 u l_i'd\xi = - \int_{-1, N}^1 u l_i' d\xi += - \sum_{k=0}^N u(\xi_k, t) l_i'(\xi_k) w_k += - \sum_{k=0}^N u_k(t) D_{ki} w_k\]

    where $D$ is the derivative matrix defined by $D_{ki} = l_i'(\xi_k)$ for $i,k=0,...,N$.

    D = basis.derivative_matrix
    4×4 Matrix{Float64}:
    + -3.0        4.04508  -1.54508   0.5
    + -0.809017   0.0       1.11803  -0.309017
    +  0.309017  -1.11803   0.0       0.809017
    + -0.5        1.54508  -4.04508   3.0

    To show why this matrix is called the derivative matrix, we go back to our example $f(x)=x^3$. We calculate the derivation of $f$ at the Gauss-Lobatto nodes $\{\xi_k\}_{k=0}^N$ with $N=8$.

    \[f'|_{x=\xi_k} = \Big( \sum_{j=0}^8 f(\xi_j) l_j(x) \Big)'|_{x=\xi_k} = \sum_{j=0}^8 f(\xi_j) l_j'(\xi_k) += \sum_{j=0}^8 f(\xi_j) D_{kj}\]

    for $k=0,...,N$ and therefore, $\underline{f}' = D \underline{f}$.

    basis_N8 = LobattoLegendreBasis(8)
    +plot(vec(x), x -> 3 * x^2, label="f'", lw=2)
    +scatter!(basis_N8.nodes, basis_N8.derivative_matrix * basis_N8.nodes.^3, label="Df", lw=3)
    Example block output

    Combining the volume term for every $i=0,...,N$ results in

    \[\int_{-1}^1 u \underline{l'} d\xi = - D^T M \underline{u}(t)\]

    Putting all parts together we get the following equation for the element $Q_l$

    \[\frac{dx}{2} M \underline{\dot{u}}(t) = - B \underline{u}^*(t) + D^T M \underline{u}(t)\]

    or equivalent

    \[\underline{\dot{u}}^{Q_l}(t) = \frac{2}{dx} \Big[ - M^{-1} B \underline{u}^{{Q_l}^*}(t) + M^{-1} D^T M \underline{u}^{Q_l}(t)\Big].\]

    This is called the weak form of the DGSEM.

    Note: For every element $Q_l$ we get a system of $N+1$ ordinary differential equations to calculate $N+1$ coefficients. Since the numerical flux $u^*$ is depending on extern values at the interfaces, the equation systems of adjacent elements are weakly linked.

    iv. Numerical flux

    As mentioned above, we still have to handle the problem of different values at the same point at the interfaces. This happens with the ideas of the numerical flux $f^*(u)=u^*$. The role of $f^*$ might seem minor in this simple example, but is important for more complicated problems. There are two values at the same spatial coordinate. Let's say we are looking at the interface between the elements $Q_l$ and $Q_{l+1}$, while both elements got $N+1$ nodes as defined before. We call the first value of the right element $u_R=u_0^{Q_{l+1}}$ and the last one of the left element $u_L=u_N^{Q_l}$. So, for the value of the numerical flux on that interface the following holds

    \[u^* = u^*(u_L, u_R).\]

    These values are interpreted as start values of a so-called Riemann problem. There are many different (approximate) Riemann solvers available and useful for different problems. We will use the local Lax-Friedrichs flux.

    surface_flux = flux_lax_friedrichs
    FluxLaxFriedrichs(max_abs_speed_naive)

    The only missing ingredient is the flux calculation at the boundaries $-1$ and $+1$.

    \[u^{{Q_{first}}^*}\big|_{-1} = u^{{Q_{first}}^*}\big|_{-1}(u^{bound}(-1), u_R) +\quad\text{and}\quad +u^{{Q_{last}}^*}\big|^1 = u^{{Q_{last}}^*}\big|^1(u_L, u^{bound}(1))\]

    The boundaries are periodic, which means that the last value of the last element $u^{Q_{last}}_N$ is used as $u_L$ at the first interface and accordingly for the other boundary.

    Now, we implement a function, that calculates $\underline{\dot{u}}^{Q_l}$ for the given matrices, $\underline{u}$ and $\underline{u}^*$.

    function rhs!(du, u, x, t)
    +    # Reset du and flux matrix
    +    du .= zero(eltype(du))
    +    flux_numerical = copy(du)
    +
    +    # Calculate interface and boundary fluxes, $u^* = (u^*|_{-1}, 0, ..., 0, u^*|^1)^T$
    +    # Since we use the flux Lax-Friedrichs from Trixi.jl, we have to pass some extra arguments.
    +    # Trixi.jl needs the equation we are dealing with and an additional `1`, that indicates the
    +    # first coordinate direction.
    +    equations = LinearScalarAdvectionEquation1D(1.0)
    +    for element in 2:n_elements-1
    +        # left interface
    +        flux_numerical[1, element] = surface_flux(u[end, element-1], u[1, element], 1, equations)
    +        flux_numerical[end, element-1] = flux_numerical[1, element]
    +        # right interface
    +        flux_numerical[end, element] = surface_flux(u[end, element], u[1, element+1], 1, equations)
    +        flux_numerical[1, element+1] = flux_numerical[end, element]
    +    end
    +    # boundary flux
    +    flux_numerical[1, 1] = surface_flux(u[end, end], u[1, 1], 1, equations)
    +    flux_numerical[end, end] = flux_numerical[1, 1]
    +
    +    # Calculate surface integrals, $- M^{-1} * B * u^*$
    +    for element in 1:n_elements
    +        du[:, element] -= (M \ B) * flux_numerical[:, element]
    +    end
    +
    +    # Calculate volume integral, $+ M^{-1} * D^T * M * u$
    +    for element in 1:n_elements
    +        flux = u[:, element]
    +        du[:, element] += (M \ transpose(D)) * M * flux
    +    end
    +
    +    # Apply Jacobian from mapping to reference element
    +    for element in 1:n_elements
    +        du[:, element] *= 2 / dx
    +    end
    +
    +    return nothing
    +end
    rhs! (generic function with 1 method)

    Combining all definitions and the function that calculates the right-hand side, we define the ODE and solve it until t=2 with OrdinaryDiffEq's solve function and the Runge-Kutta method RDPK3SpFSAL49(), which is optimized for discontinuous Galerkin methods and hyperbolic PDEs. We set some common error tolerances abstol=1.0e-6, reltol=1.0e-6 and pass save_everystep=false to avoid saving intermediate solution vectors in memory.

    using OrdinaryDiffEq
    +tspan = (0.0, 2.0)
    +ode = ODEProblem(rhs!, u0, tspan, x)
    +
    +sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...)
    +
    +plot(vec(x), vec(sol.u[end]), label="solution at t=$(tspan[2])", legend=:topleft, lw=3)
    Example block output

    Alternative Implementation based on Trixi.jl

    Now, we implement the same example. But this time, we directly use the functionality that Trixi.jl provides.

    using Trixi, OrdinaryDiffEq, Plots

    First, define the equation with a advection_velocity of 1.

    advection_velocity = 1.0
    +equations = LinearScalarAdvectionEquation1D(advection_velocity)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ LinearScalarAdvectionEquation1D                                                                  │
    +│ ═══════════════════════════════                                                                  │
    +│ #variables: ………………………………………………… 1                                                                │
    +│ │ variable 1: …………………………………………… scalar                                                           │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    Then, create a DG solver with polynomial degree = 3 and (local) Lax-Friedrichs/Rusanov flux as surface flux. The implementation of the basis and the numerical flux is now already done.

    solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ DG{Float64}                                                                                      │
    +│ ═══════════                                                                                      │
    +│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
    +│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
    +│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
    +│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    We will now create a mesh with 16 elements for the physical domain [-1, 1] with periodic boundaries. We use Trixi.jl's standard mesh TreeMesh. Since it's limited to hypercube domains, we choose 2^4=16 elements. The mesh type supports AMR, that' why n_cells_max has to be set, even if we don't need AMR here.

    coordinates_min = -1.0 # minimum coordinate
    +coordinates_max = 1.0  # maximum coordinate
    +mesh = TreeMesh(coordinates_min, coordinates_max,
    +                initial_refinement_level=4, # number of elements = 2^4
    +                n_cells_max=30_000) # set maximum capacity of tree data structure (only needed for AMR)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ TreeMesh{1, Trixi.SerialTree{1}}                                                                 │
    +│ ════════════════════════════════                                                                 │
    +│ center: …………………………………………………………… [0.0]                                                            │
    +│ length: …………………………………………………………… 2.0                                                              │
    +│ periodicity: ……………………………………………… (true,)                                                          │
    +│ current #cells: ……………………………………… 31                                                               │
    +│ #leaf-cells: ……………………………………………… 16                                                               │
    +│ maximum #cells: ……………………………………… 30000                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    A semidiscretization collects data structures and functions for the spatial discretization. In Trixi.jl, an initial condition has the following parameter structure and is of the type SVector.

    initial_condition_sine_wave(x, t, equations) = SVector(1.0 + 0.5 * sin(pi * sum(x - equations.advection_velocity * t)))
    +
    +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sine_wave, solver)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ SemidiscretizationHyperbolic                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #spatial dimensions: ………………………… 1                                                                │
    +│ mesh: ………………………………………………………………… TreeMesh{1, Trixi.SerialTree{1}} with length 31                  │
    +│ equations: …………………………………………………… LinearScalarAdvectionEquation1D                                  │
    +│ initial condition: ……………………………… initial_condition_sine_wave                                      │
    +│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
    +│ source terms: …………………………………………… nothing                                                          │
    +│ solver: …………………………………………………………… DG                                                               │
    +│ total #DOFs per field: …………………… 64                                                               │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    Again, combining all definitions and the function that calculates the right-hand side, we define the ODE and solve it until t=2 with OrdinaryDiffEq's solve function and the Runge-Kutta method RDPK3SpFSAL49().

    tspan = (0.0, 2.0)
    +ode_trixi  = semidiscretize(semi, tspan)
    +
    +sol_trixi = solve(ode_trixi, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...);

    We add a plot of the new approximated solution to the one calculated before.

    plot!(sol_trixi, label="solution at t=$(tspan[2]) with Trixi.jl", legend=:topleft, linestyle=:dash, lw=2)
    Example block output

    Summary of the code

    To sum up, here is the complete code that we used.

    Raw implementation

    # basis: Legendre-Gauss-Lobatto
    +using Trixi, LinearAlgebra, OrdinaryDiffEq, Plots
    +polydeg = 3 #= polynomial degree =#
    +basis = LobattoLegendreBasis(polydeg)
    +nodes = basis.nodes # Gauss-Lobatto nodes in [-1, 1]
    +D = basis.derivative_matrix
    +M = diagm(basis.weights) # mass matrix
    +B = diagm([-1; zeros(polydeg - 1); 1])
    +
    +# mesh
    +coordinates_min = -1.0 # minimum coordinate
    +coordinates_max = 1.0  # maximum coordinate
    +n_elements      = 16   # number of elements
    +
    +dx = (coordinates_max - coordinates_min) / n_elements # length of one element
    +
    +x = Matrix{Float64}(undef, length(nodes), n_elements)
    +for element in 1:n_elements
    +    x_l = -1 + (element - 1) * dx + dx/2
    +    for i in eachindex(nodes) # basis points in [-1, 1]
    +        ξ = nodes[i]
    +        x[i, element] = x_l + dx/2 * ξ
    +    end
    +end
    +
    +# initial condition
    +initial_condition_sine_wave(x) = 1.0 + 0.5 * sin(pi * x)
    +u0 = initial_condition_sine_wave.(x)
    +
    +plot(vec(x), vec(u0), label="initial condition", legend=:topleft)
    +
    +# flux Lax-Friedrichs
    +surface_flux = flux_lax_friedrichs
    +
    +# rhs! method
    +function rhs!(du, u, x, t)
    +    # reset du
    +    du .= zero(eltype(du))
    +    flux_numerical = copy(du)
    +
    +    # calculate interface and boundary fluxes
    +    equations = LinearScalarAdvectionEquation1D(1.0)
    +    for element in 2:n_elements-1
    +        # left interface
    +        flux_numerical[1, element] = surface_flux(u[end, element-1], u[1, element], 1, equations)
    +        flux_numerical[end, element-1] = flux_numerical[1, element]
    +        # right interface
    +        flux_numerical[end, element] = surface_flux(u[end, element], u[1, element+1], 1, equations)
    +        flux_numerical[1, element+1] = flux_numerical[end, element]
    +    end
    +    # boundary flux
    +    flux_numerical[1, 1] = surface_flux(u[end, end], u[1, 1], 1, equations)
    +    flux_numerical[end, end] = flux_numerical[1, 1]
    +
    +    # calculate surface integrals
    +    for element in 1:n_elements
    +        du[:, element] -= (M \ B) * flux_numerical[:, element]
    +    end
    +
    +    # calculate volume integral
    +    for element in 1:n_elements
    +        flux = u[:, element]
    +        du[:, element] += (M \ transpose(D)) * M * flux
    +    end
    +
    +    # apply Jacobian from mapping to reference element
    +    for element in 1:n_elements
    +        du[:, element] *= 2 / dx
    +    end
    +
    +    return nothing
    +end
    +
    +# create ODE problem
    +tspan = (0.0, 2.0)
    +ode = ODEProblem(rhs!, u0, tspan, x)
    +
    +# solve
    +sol = solve(ode, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...)
    +
    +plot(vec(x), vec(sol.u[end]), label="solution at t=$(tspan[2])", legend=:topleft, lw=3)
    Example block output

    Alternative Implementation based on Trixi.jl

    using Trixi, OrdinaryDiffEq, Plots
    +
    +# equation with a advection_velocity of `1`.
    +advection_velocity = 1.0
    +equations = LinearScalarAdvectionEquation1D(advection_velocity)
    +
    +# create DG solver with flux lax friedrichs and LGL basis
    +solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
    +
    +# distretize domain with `TreeMesh`
    +coordinates_min = -1.0 # minimum coordinate
    +coordinates_max = 1.0 # maximum coordinate
    +mesh = TreeMesh(coordinates_min, coordinates_max,
    +                initial_refinement_level=4, # number of elements = 2^4
    +                n_cells_max=30_000)
    +
    +# create initial condition and semidiscretization
    +initial_condition_sine_wave(x, t, equations) = SVector(1.0 + 0.5 * sin(pi * sum(x - equations.advection_velocity * t)))
    +
    +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sine_wave, solver)
    +
    +# solve
    +tspan = (0.0, 2.0)
    +ode_trixi  = semidiscretize(semi, tspan)
    +sol_trixi  = solve(ode_trixi, RDPK3SpFSAL49(); abstol=1.0e-6, reltol=1.0e-6, ode_default_options()...);
    +
    +plot!(sol_trixi, label="solution at t=$(tspan[2]) with Trixi.jl", legend=:topleft, linestyle=:dash, lw=2)
    Example block output

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    + [1dea7af3] OrdinaryDiffEq v6.66.0
    +  [91a5bcdd] Plots v1.40.5
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
    +Info Packages marked with  have new versions available and may be upgradable.

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/tutorials/shock_capturing/b92ef147.svg b/v0.8.7/tutorials/shock_capturing/b92ef147.svg new file mode 100644 index 0000000000..cf359447e8 --- /dev/null +++ b/v0.8.7/tutorials/shock_capturing/b92ef147.svg @@ -0,0 +1,4448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/shock_capturing/index.html b/v0.8.7/tutorials/shock_capturing/index.html new file mode 100644 index 0000000000..ba2a04c2bd --- /dev/null +++ b/v0.8.7/tutorials/shock_capturing/index.html @@ -0,0 +1,114 @@ + +5 Shock capturing with flux differencing and stage limiter · Trixi.jl

    5: Shock capturing with flux differencing and stage limiter

    This tutorial contains a short summary of the idea of shock capturing for DGSEM with flux differencing and its implementation in Trixi.jl. In the second part, an implementation of a positivity preserving limiter is added to the simulation.

    Shock capturing with flux differencing

    The following rough explanation is on a very basic level. More information about an entropy stable shock-capturing strategy for DGSEM discretizations of advection dominated problems, such as the compressible Euler equations or the compressible Navier-Stokes equations, can be found in Hennemann et al. (2021). In Rueda-Ramírez et al. (2021) you find the extension to the systems with non-conservative terms, such as the compressible magnetohydrodynamics (MHD) equations.

    The strategy for a shock-capturing method presented by Hennemann et al. is based on a hybrid blending of a high-order DG method with a low-order variant. The low-order subcell finite volume (FV) method is created directly with the Legendre-Gauss-Lobatto (LGL) nodes already used for the high-order DGSEM. Then, the final method is a convex combination with regulating indicator $\alpha$ of these two methods.

    Since the surface integral is equal for both the DG and the subcell FV method, only the volume integral divides between the two methods.

    This strategy for the volume integral is implemented in Trixi.jl under the name of VolumeIntegralShockCapturingHG with the three parameters of the indicator and the volume fluxes for the DG and the subcell FV method.

    Note, that the DG method is based on the flux differencing formulation. Hence, you have to use a two-point flux, such as flux_ranocha, flux_shima_etal, flux_chandrashekar or flux_kennedy_gruber, for the DG volume flux. We would recommend to use the entropy conserving flux flux_ranocha by Ranocha (2018) for the compressible Euler equations.

    volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;
    +                                                 volume_flux_dg=volume_flux_dg,
    +                                                 volume_flux_fv=volume_flux_fv)

    We now focus on a choice of the shock capturing indicator indicator_sc. A possible indicator is $\alpha_{HG}$ presented by Hennemann et al. (p.10), which depends on the current approximation with modal coefficients $\{m_j\}_{j=0}^N$ of a given variable.

    The indicator is calculated for every DG element by itself. First, we calculate a smooth $\alpha$ by

    \[\alpha = \frac{1}{1+\exp(-\frac{-s}{\mathbb{T}}(\mathbb{E}-\mathbb{T}))}\]

    with the total energy $\mathbb{E}=\max\big(\frac{m_N^2}{\sum_{j=0}^N m_j^2}, \frac{m_{N-1}^2}{\sum_{j=0}^{N-1} m_j^2}\big)$, threshold $\mathbb{T}= 0.5 * 10^{-1.8*(N+1)^{1/4}}$ and parameter $s=ln\big(\frac{1-0.0001}{0.0001}\big)\approx 9.21024$.

    For computational efficiency, $\alpha_{min}$ is introduced and used for

    \[\tilde{\alpha} = \begin{cases} +0, & \text{if } \alpha<\alpha_{min}\\ +\alpha, & \text{if } \alpha_{min}\leq \alpha \leq 1- \alpha_{min}\\ +1, & \text{if } 1-\alpha_{min}<\alpha. +\end{cases}\]

    Moreover, the parameter $\alpha_{max}$ sets a maximal value for $\alpha$ by

    \[\alpha = \min\{\tilde{\alpha}, \alpha_{max}\}.\]

    This allows to control the maximal dissipation.

    To remove numerical artifact the final indicator is smoothed with all the neighboring elements' indicators. This is activated with alpha_smooth=true.

    \[\alpha_{HG} = \max_E \{ \alpha, 0.5 * \alpha_E\},\]

    where $E$ are all elements sharing a face with the current element.

    Furthermore, you can specify the variable used for the calculation. For instance you can choose density, pressure or both with density_pressure for the compressible Euler equations. For every equation there is also the option to use the first conservation variable with first.

    This indicator is implemented in Trixi.jl and called IndicatorHennemannGassner with the parameters equations, basis, alpha_max, alpha_min, alpha_smooth and variable.

    indicator_sc = IndicatorHennemannGassner(equations, basis,
    +                                         alpha_max=0.5,
    +                                         alpha_min=0.001,
    +                                         alpha_smooth=true,
    +                                         variable=variable)

    Positivity preserving limiter

    Some numerical solutions are physically meaningless, for instance negative values of pressure or density for the compressible Euler equations. This often results in crashed simulations since the calculation of numerical fluxes or stable time steps uses mathematical operations like roots or logarithms. One option to avoid these cases are a-posteriori positivity preserving limiters. Trixi.jl provides the fully-discrete positivity-preserving limiter of Zhang, Shu (2011).

    It works the following way. For every passed (scalar) variable and for every DG element we calculate the minimal value $value_{min}$. If this value falls below the given threshold $\varepsilon$, the approximation is slightly adapted such that the minimal value of the relevant variable lies now above the threshold.

    \[\underline{u}^{new} = \theta * \underline{u} + (1-\theta) * u_{mean}\]

    where $\underline{u}$ are the collected pointwise evaluation coefficients in element $e$ and $u_{mean}$ the integral mean of the quantity in $e$. The new coefficients are a convex combination of these two values with factor

    \[\theta = \frac{value_{mean} - \varepsilon}{value_{mean} - value_{min}},\]

    where $value_{mean}$ is the relevant variable evaluated for the mean value $u_{mean}$.

    The adapted approximation keeps the exact same mean value, but the relevant variable is now greater or equal the threshold $\varepsilon$ at every node in every element.

    We specify the variables the way we did before for the shock capturing variables. For the compressible Euler equations density, pressure or the combined variable density_pressure are a reasonable choice.

    You can implement the limiter in Trixi.jl using PositivityPreservingLimiterZhangShu with parameters threshold and variables.

    stage_limiter! = PositivityPreservingLimiterZhangShu(thresholds=thresholds,
    +                                                     variables=variables)

    Then, the limiter is added to the time integration method in the solve function. For instance, like

    CarpenterKennedy2N54(stage_limiter!, williamson_condition=false)

    or

    SSPRK43(stage_limiter!).

    Simulation with shock capturing and positivity preserving

    Now, we can run a simulation using the described methods of shock capturing and positivity preserving limiters. We want to give an example for the 2D compressible Euler equations.

    using OrdinaryDiffEq, Trixi
    +
    +equations = CompressibleEulerEquations2D(1.4)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ CompressibleEulerEquations2D                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #variables: ………………………………………………… 4                                                                │
    +│ │ variable 1: …………………………………………… rho                                                              │
    +│ │ variable 2: …………………………………………… rho_v1                                                           │
    +│ │ variable 3: …………………………………………… rho_v2                                                           │
    +│ │ variable 4: …………………………………………… rho_e                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    As our initial condition we use the Sedov blast wave setup.

    function initial_condition_sedov_blast_wave(x, t, equations::CompressibleEulerEquations2D)
    +  # Set up polar coordinates
    +  inicenter = SVector(0.0, 0.0)
    +  x_norm = x[1] - inicenter[1]
    +  y_norm = x[2] - inicenter[2]
    +  r = sqrt(x_norm^2 + y_norm^2)
    +
    +  r0 = 0.21875 # = 3.5 * smallest dx (for domain length=4 and max-ref=6)
    +  # r0 = 0.5 # = more reasonable setup
    +  E = 1.0
    +  p0_inner = 3 * (equations.gamma - 1) * E / (3 * pi * r0^2)
    +  p0_outer = 1.0e-5 # = true Sedov setup
    +  # p0_outer = 1.0e-3 # = more reasonable setup
    +
    +  # Calculate primitive variables
    +  rho = 1.0
    +  v1  = 0.0
    +  v2  = 0.0
    +  p   = r > r0 ? p0_outer : p0_inner
    +
    +  return prim2cons(SVector(rho, v1, v2, p), equations)
    +end
    +initial_condition = initial_condition_sedov_blast_wave
    initial_condition_sedov_blast_wave (generic function with 1 method)
    basis = LobattoLegendreBasis(3)
    LobattoLegendreBasis{Float64} with polynomials of degree 3

    We set the numerical fluxes and divide between the surface flux and the two volume fluxes for the DG and FV method. Here, we are using flux_lax_friedrichs and flux_ranocha.

    surface_flux = flux_lax_friedrichs
    +volume_flux  = flux_ranocha
    flux_ranocha (generic function with 9 methods)

    Now, we specify the shock capturing indicator $\alpha$.

    We implement the described indicator of Hennemann, Gassner as explained above with parameters equations, basis, alpha_max, alpha_min, alpha_smooth and variable. Since density and pressure are the critical variables in this example, we use density_pressure = density * pressure = rho * p as indicator variable.

    indicator_sc = IndicatorHennemannGassner(equations, basis,
    +                                         alpha_max=0.5,
    +                                         alpha_min=0.001,
    +                                         alpha_smooth=true,
    +                                         variable=density_pressure)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ IndicatorHennemannGassner                                                                        │
    +│ ═════════════════════════                                                                        │
    +│ indicator variable: …………………………… density_pressure                                                 │
    +│ max. α: …………………………………………………………… 0.5                                                              │
    +│ min. α: …………………………………………………………… 0.001                                                            │
    +│ smooth α: ……………………………………………………… yes                                                              │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    Now, we can use the defined fluxes and the indicator to implement the volume integral using shock capturing.

    volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;
    +                                                 volume_flux_dg=volume_flux,
    +                                                 volume_flux_fv=surface_flux)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ VolumeIntegralShockCapturingHG                                                                   │
    +│ ══════════════════════════════                                                                   │
    +│ volume flux DG: ……………………………………… flux_ranocha                                                     │
    +│ volume flux FV: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ indicator: …………………………………………………… IndicatorHennemannGassner                                        │
    +│ │ indicator variable: ……………………… density_pressure                                                 │
    +│ │ max. α: ……………………………………………………… 0.5                                                              │
    +│ │ min. α: ……………………………………………………… 0.001                                                            │
    +│ │ smooth α: ………………………………………………… yes                                                              │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    We finalize the discretization by implementing Trixi.jl's solver, mesh, semi and ode, while solver now has the extra parameter volume_integral.

    solver = DGSEM(basis, surface_flux, volume_integral)
    +
    +coordinates_min = (-2.0, -2.0)
    +coordinates_max = ( 2.0,  2.0)
    +mesh = TreeMesh(coordinates_min, coordinates_max,
    +                initial_refinement_level=6,
    +                n_cells_max=10_000)
    +
    +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)
    +
    +tspan = (0.0, 1.0)
    +ode = semidiscretize(semi, tspan);

    We add some callbacks to get an solution analysis and use a CFL-based time step size calculation.

    analysis_callback = AnalysisCallback(semi, interval=100)
    +
    +stepsize_callback = StepsizeCallback(cfl=0.8)
    +
    +callbacks = CallbackSet(analysis_callback, stepsize_callback);

    We now run the simulation using the positivity preserving limiter of Zhang and Shu for the variables density and pressure.

    stage_limiter! = PositivityPreservingLimiterZhangShu(thresholds=(5.0e-6, 5.0e-6),
    +                                                     variables=(Trixi.density, pressure))
    +
    +sol = solve(ode, CarpenterKennedy2N54(stage_limiter!, williamson_condition=false),
    +            dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
    +            save_everystep=false, callback=callbacks);
    +
    +using Plots
    +plot(sol)
    Example block output

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    + [1dea7af3] OrdinaryDiffEq v6.66.0
    +  [91a5bcdd] Plots v1.40.5
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
    +Info Packages marked with  have new versions available and may be upgradable.

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/tutorials/structured_mesh_mapping/19a5f301.svg b/v0.8.7/tutorials/structured_mesh_mapping/19a5f301.svg new file mode 100644 index 0000000000..2878c26310 --- /dev/null +++ b/v0.8.7/tutorials/structured_mesh_mapping/19a5f301.svg @@ -0,0 +1,9978 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/structured_mesh_mapping/445ea963.svg b/v0.8.7/tutorials/structured_mesh_mapping/445ea963.svg new file mode 100644 index 0000000000..e51670072b --- /dev/null +++ b/v0.8.7/tutorials/structured_mesh_mapping/445ea963.svg @@ -0,0 +1,5600 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/structured_mesh_mapping/60a87ef7.svg b/v0.8.7/tutorials/structured_mesh_mapping/60a87ef7.svg new file mode 100644 index 0000000000..cf7d51e9af --- /dev/null +++ b/v0.8.7/tutorials/structured_mesh_mapping/60a87ef7.svg @@ -0,0 +1,3800 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/structured_mesh_mapping/index.html b/v0.8.7/tutorials/structured_mesh_mapping/index.html new file mode 100644 index 0000000000..e870c89c17 --- /dev/null +++ b/v0.8.7/tutorials/structured_mesh_mapping/index.html @@ -0,0 +1,199 @@ + +16 Structured mesh with curvilinear mapping · Trixi.jl

    16: Structured mesh with curvilinear mapping

    Here, we want to introduce another mesh type of Trixi.jl. More precisely, this tutorial is about the curved mesh type StructuredMesh supporting curved meshes.

    Creating a curved mesh

    There are two basic options to define a curved StructuredMesh in Trixi.jl. You can implement curves for the domain boundaries, or alternatively, set up directly the complete transformation mapping. We now present one short example each.

    Mesh defined by domain boundary curves

    Both examples are based on a semdiscretization of the 2D compressible Euler equations.

    using OrdinaryDiffEq
    +using Trixi
    +
    +equations = CompressibleEulerEquations2D(1.4)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ CompressibleEulerEquations2D                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #variables: ………………………………………………… 4                                                                │
    +│ │ variable 1: …………………………………………… rho                                                              │
    +│ │ variable 2: …………………………………………… rho_v1                                                           │
    +│ │ variable 3: …………………………………………… rho_v2                                                           │
    +│ │ variable 4: …………………………………………… rho_e                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    We start with a pressure perturbation at (xs, 0.0) as initial condition.

    function initial_condition_pressure_perturbation(x, t, equations::CompressibleEulerEquations2D)
    +  xs = 1.5 # location of the initial disturbance on the x axis
    +  w = 1/8 # half width
    +  p = exp(-log(2) * ((x[1]-xs)^2 + x[2]^2)/w^2) + 1.0
    +  v1 = 0.0
    +  v2 = 0.0
    +  rho = 1.0
    +
    +  return prim2cons(SVector(rho, v1, v2, p), equations)
    +end
    +initial_condition = initial_condition_pressure_perturbation
    initial_condition_pressure_perturbation (generic function with 1 method)

    Initialize every boundary as a boundary_condition_slip_wall.

    boundary_conditions = boundary_condition_slip_wall
    boundary_condition_slip_wall (generic function with 11 methods)

    The approximation setup is an entropy-stable split-form DG method with polydeg=4. We are using the two fluxes flux_ranocha and flux_lax_friedrichs.

    solver = DGSEM(polydeg=4, surface_flux=flux_lax_friedrichs,
    +               volume_integral=VolumeIntegralFluxDifferencing(flux_ranocha))
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ DG{Float64}                                                                                      │
    +│ ═══════════                                                                                      │
    +│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=4)                         │
    +│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=4)                      │
    +│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
    +│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ volume integral: …………………………………… VolumeIntegralFluxDifferencing                                   │
    +│ │ volume flux: ………………………………………… flux_ranocha                                                     │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    We want to define a circular cylinder as physical domain. It contains an inner semicircle with radius r0 and an outer semicircle of radius r1.

    The domain boundary curves with curve parameter in $[-1,1]$ are sorted as shown in the sketch. They always are orientated from negative to positive coordinate, such that the corners have to fit like this $f_1(+1) = f_4(-1)$, $f_3(+1) = f_2(-1)$, etc.

    In our case we can define the domain boundary curves as follows:

    r0 = 0.5 # inner radius
    +r1 = 5.0 # outer radius
    +f1(xi)  = SVector( r0 + 0.5 * (r1 - r0) * (xi + 1), 0.0) # right line
    +f2(xi)  = SVector(-r0 - 0.5 * (r1 - r0) * (xi + 1), 0.0) # left line
    +f3(eta) = SVector(r0 * cos(0.5 * pi * (eta + 1)), r0 * sin(0.5 * pi * (eta + 1))) # inner circle
    +f4(eta) = SVector(r1 * cos(0.5 * pi * (eta + 1)), r1 * sin(0.5 * pi * (eta + 1))) # outer circle
    f4 (generic function with 1 method)

    We create a curved mesh with 16 x 16 elements. The defined domain boundary curves are passed as a tuple.

    cells_per_dimension = (16, 16)
    +mesh = StructuredMesh(cells_per_dimension, (f1, f2, f3, f4), periodicity=false)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ StructuredMesh{2, Float64}                                                                       │
    +│ ══════════════════════════                                                                       │
    +│ size: ………………………………………………………………… (16, 16)                                                         │
    +│ mapping: …………………………………………………………                                                                  │
    +│ │ line 1: ……………………………………………………… nothing
    +nothing
    +nothing
    +nothing
    +…ng = transfinite_mapping(faces) │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    Then, we define the simulation with endtime T=3 with semi, ode and callbacks.

    semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
    +                                    boundary_conditions=boundary_conditions)
    +
    +tspan = (0.0, 3.0)
    +ode = semidiscretize(semi, tspan)
    +
    +analysis_interval = 100
    +analysis_callback = AnalysisCallback(semi, interval=analysis_interval)
    +
    +alive_callback = AliveCallback(analysis_interval=analysis_interval)
    +
    +stepsize_callback = StepsizeCallback(cfl=0.9)
    +
    +callbacks = CallbackSet(analysis_callback,
    +                        alive_callback,
    +                        stepsize_callback);

    Running the simulation

    sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),
    +            dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
    +            save_everystep=false, callback=callbacks);
    +
    +using Plots
    +plot(sol)
    Example block output
    pd = PlotData2D(sol)
    +plot(pd["p"])
    +plot!(getmesh(pd))
    Example block output

    Mesh directly defined by the transformation mapping

    As mentioned before, you can also define the domain for a StructuredMesh by directly setting up a transformation mapping. Here, we want to present a nice mapping, which is often used to test free-stream preservation. Exact free-stream preservation is a crucial property of any numerical method on curvilinear grids. The mapping is a reduced 2D version of the mapping described in Rueda-Ramírez et al. (2021), p.18.

    using OrdinaryDiffEq
    +using Trixi
    +
    +equations = CompressibleEulerEquations2D(1.4)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ CompressibleEulerEquations2D                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #variables: ………………………………………………… 4                                                                │
    +│ │ variable 1: …………………………………………… rho                                                              │
    +│ │ variable 2: …………………………………………… rho_v1                                                           │
    +│ │ variable 3: …………………………………………… rho_v2                                                           │
    +│ │ variable 4: …………………………………………… rho_e                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    As mentioned, this mapping is used for testing free-stream preservation. So, we use a constant initial condition.

    initial_condition = initial_condition_constant
    +
    +solver = DGSEM(polydeg=3, surface_flux=flux_lax_friedrichs)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ DG{Float64}                                                                                      │
    +│ ═══════════                                                                                      │
    +│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
    +│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
    +│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
    +│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ volume integral: …………………………………… VolumeIntegralWeakForm                                           │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    We define the transformation mapping with variables in $[-1, 1]$ as described in Rueda-Ramírez et al. (2021), p.18 (reduced to 2D):

    function mapping(xi_, eta_)
    +  # Transform input variables between -1 and 1 onto [0,3]
    +  xi = 1.5 * xi_ + 1.5
    +  eta = 1.5 * eta_ + 1.5
    +
    +  y = eta + 3/8 * (cos(1.5 * pi * (2 * xi - 3)/3) *
    +                   cos(0.5 * pi * (2 * eta - 3)/3))
    +
    +  x = xi + 3/8 * (cos(0.5 * pi * (2 * xi - 3)/3) *
    +                  cos(2 * pi * (2 * y - 3)/3))
    +
    +  return SVector(x, y)
    +end
    mapping (generic function with 1 method)

    Instead of a tuple of boundary functions, the mesh now has the mapping as its parameter.

    cells_per_dimension = (16, 16)
    +mesh = StructuredMesh(cells_per_dimension, mapping)
    +
    +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)
    +
    +tspan = (0.0, 1.0)
    +ode = semidiscretize(semi, tspan)
    +
    +analysis_callback = AnalysisCallback(semi, interval=250)
    +
    +stepsize_callback = StepsizeCallback(cfl=0.8)
    +
    +callbacks = CallbackSet(analysis_callback,
    +                        stepsize_callback)
    +
    +sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false),
    +            dt=1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
    +            save_everystep=false, callback=callbacks);
    
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + #timesteps:                  0                run time:       9.01000000e-07 s
    + Δt:             1.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
    + sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
    +                                               PID:                   Inf s
    + #DOFs per field:          4096                alloc'd memory:        860.578 MiB
    + #elements:                 256
    +
    + Variable:       rho              rho_v1           rho_v2           rho_e
    + L2 error:       7.14879109e-17   1.26068516e-17   2.52137032e-17   1.28610275e-15
    + Linf error:     2.22044605e-16   2.77555756e-17   5.55111512e-17   3.55271368e-15
    + ∑∂S/∂U ⋅ Uₜ :   6.39244457e-17
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +
    +
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + #timesteps:                250                run time:       2.01441288e-01 s
    + Δt:             2.33008558e-03                └── GC time:    0.00000000e+00 s (0.000%)
    + sim. time:      5.82521395e-01 (58.252%)      time/DOF/rhs!:  3.50095065e-08 s
    +                                               PID:            3.91173356e-08 s
    + #DOFs per field:          4096                alloc'd memory:        865.210 MiB
    + #elements:                 256
    +
    + Variable:       rho              rho_v1           rho_v2           rho_e
    + L2 error:       2.46914189e-15   1.94336947e-14   2.20134956e-14   1.45208464e-14
    + Linf error:     2.16493490e-14   2.07611706e-13   2.74003042e-13   2.25597319e-13
    + ∑∂S/∂U ⋅ Uₜ :  -1.05103567e-17
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +
    +
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + #timesteps:                430                run time:       3.46512991e-01 s
    + Δt:             3.93286656e-04                └── GC time:    0.00000000e+00 s (0.000%)
    + sim. time:      1.00000000e+00 (100.000%)     time/DOF/rhs!:  3.49510854e-08 s
    +                                               PID:            3.90867350e-08 s
    + #DOFs per field:          4096                alloc'd memory:        869.914 MiB
    + #elements:                 256
    +
    + Variable:       rho              rho_v1           rho_v2           rho_e
    + L2 error:       3.23698099e-15   2.13754276e-14   2.82614161e-14   1.56475906e-14
    + Linf error:     2.34257058e-14   2.27595720e-13   3.36758399e-13   2.32702746e-13
    + ∑∂S/∂U ⋅ Uₜ :   5.15813726e-17
    +────────────────────────────────────────────────────────────────────────────────────────────────────

    Now, we want to verify the free-stream preservation property and plot the mesh. For the verification, we calculate the absolute difference of the first conservation variable density u[1] and 1.0. To plot this error and the mesh, we are using the visualization feature ScalarPlotData2D, explained in visualization.

    error_density = let u = Trixi.wrap_array(sol.u[end], semi)
    +  abs.(u[1, :, :, :] .- 1.0) # density, x, y, elements
    +end
    +pd = ScalarPlotData2D(error_density, semi)
    +
    +using Plots
    +plot(pd, title="Error in density")
    +plot!(getmesh(pd))
    Example block output

    We observe that the errors in the variable density are at the level of machine accuracy. Moreover, the plot shows the mesh structure resulting from our transformation mapping.

    Of course, you can also use other mappings as for instance shifts by $(x, y)$

    mapping(xi, eta) = SVector(xi + x, eta + y)

    or rotations with a rotation matrix $T$

    mapping(xi, eta) = T * SVector(xi, eta).

    For more curved mesh mappings, please have a look at some elixirs for StructuredMesh. For another curved mesh type, there is a tutorial about Trixi.jl's unstructured mesh type [UnstructuredMesh2D] and its use of the High-Order Hex-Quad Mesh (HOHQMesh) generator, created and developed by David Kopriva.

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    + [1dea7af3] OrdinaryDiffEq v6.66.0
    +  [91a5bcdd] Plots v1.40.5
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
    +Info Packages marked with  have new versions available and may be upgradable.

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/tutorials/subcell_shock_capturing/01e026df.svg b/v0.8.7/tutorials/subcell_shock_capturing/01e026df.svg new file mode 100644 index 0000000000..7c24ee497f --- /dev/null +++ b/v0.8.7/tutorials/subcell_shock_capturing/01e026df.svg @@ -0,0 +1,4754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.8.7/tutorials/subcell_shock_capturing/index.html b/v0.8.7/tutorials/subcell_shock_capturing/index.html new file mode 100644 index 0000000000..5c0011eb04 --- /dev/null +++ b/v0.8.7/tutorials/subcell_shock_capturing/index.html @@ -0,0 +1,321 @@ + +6 Subcell limiting with the IDP Limiter · Trixi.jl

    6: Subcell limiting with the IDP Limiter

    In the previous tutorial, the element-wise limiting with IndicatorHennemannGassner and VolumeIntegralShockCapturingHG was explained. This tutorial contains a short introduction to the idea and implementation of subcell shock capturing approaches in Trixi.jl, which is also based on the DGSEM scheme in flux differencing formulation. Trixi.jl contains the a-posteriori invariant domain-preserving (IDP) limiter which was introduced by Pazner (2020) and Rueda-Ramírez, Pazner, Gassner (2022). It is a flux-corrected transport-type (FCT) limiter and is implemented using SubcellLimiterIDP and VolumeIntegralSubcellLimiting. Since it is an a-posteriori limiter you have to apply a correction stage after each Runge-Kutta stage. This is done by passing the stage callback SubcellLimiterIDPCorrection to the time integration method.

    Time integration method

    As mentioned before, the IDP limiting is an a-posteriori limiter. Its limiting process guarantees the target bounds for an explicit (forward) Euler time step. To still achieve a high-order approximation, the implementation uses strong-stability preserving (SSP) Runge-Kutta methods, which can be written as convex combinations of forward Euler steps. As such, they preserve the convexity of convex functions and functionals, such as the TVD semi-norm and the maximum principle in 1D, for instance.

    Since IDP/FCT limiting procedure operates on independent forward Euler steps, its a-posteriori correction stage is implemented as a stage callback that is triggered after each forward Euler step in an SSP Runge-Kutta method. Unfortunately, the solve(...) routines in OrdinaryDiffEq.jl, typically employed for time integration in Trixi.jl, do not support this type of stage callback.

    Therefore, subcell limiting with the IDP limiter requires the use of a Trixi-intern time integration SSPRK method called with

    Trixi.solve(ode, method(stage_callbacks = stage_callbacks); ...)

    Right now, only the canonical three-stage, third-order SSPRK method (Shu-Osher) Trixi.SimpleSSPRK33 is implemented.

    IDP Limiting

    The implementation of the invariant domain preserving (IDP) limiting approach (SubcellLimiterIDP) is based on Pazner (2020) and Rueda-Ramírez, Pazner, Gassner (2022). It supports several types of limiting which are enabled by passing parameters individually.

    Global bounds

    If enabled, the global bounds enforce physical admissibility conditions, such as non-negativity of variables. This can be done for conservative variables, where the limiter is of a one-sided Zalesak-type (Zalesak, 1979), and general non-linear variables, where a Newton-bisection algorithm is used to enforce the bounds.

    The Newton-bisection algorithm is an iterative method and requires some parameters. It uses a fixed maximum number of iteration steps (max_iterations_newton = 10) and relative/absolute tolerances (newton_tolerances = (1.0e-12, 1.0e-14)). The given values are sufficient in most cases and therefore used as default. Additionally, there is the parameter gamma_constant_newton, which can be used to scale the antidiffusive flux for the computation of the blending coefficients of nonlinear variables. The default value is 2 * ndims(equations), as it was shown by Pazner (2020) [Section 4.2.2.] that this value guarantees the fulfillment of bounds for a forward-Euler increment.

    Very small non-negative values can be an issue as well. That's why we use an additional correction factor in the calculation of the global bounds,

    \[u^{new} \geq \beta * u^{FV}.\]

    By default, $\beta$ (named positivity_correction_factor) is set to 0.1 which works properly in most of the tested setups.

    Conservative variables

    The procedure to enforce global bounds for a conservative variables is as follows: If you want to guarantee non-negativity for the density of the compressible Euler equations, you pass the specific quantity name of the conservative variable.

    using Trixi
    +equations = CompressibleEulerEquations2D(1.4)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ CompressibleEulerEquations2D                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #variables: ………………………………………………… 4                                                                │
    +│ │ variable 1: …………………………………………… rho                                                              │
    +│ │ variable 2: …………………………………………… rho_v1                                                           │
    +│ │ variable 3: …………………………………………… rho_v2                                                           │
    +│ │ variable 4: …………………………………………… rho_e                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    The quantity name of the density is rho which is how we enable its limiting.

    positivity_variables_cons = ["rho"]
    1-element Vector{String}:
    + "rho"

    The quantity names are passed as a vector to allow several quantities. This is used, for instance, if you want to limit the density of two different components using the multicomponent compressible Euler equations.

    equations = CompressibleEulerMulticomponentEquations2D(gammas = (1.4, 1.648),
    +                                                       gas_constants = (0.287, 1.578))
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ CompressibleEulerMulticomponentEquations2D                                                       │
    +│ ══════════════════════════════════════════                                                       │
    +│ #variables: ………………………………………………… 5                                                                │
    +│ │ variable 1: …………………………………………… rho_v1                                                           │
    +│ │ variable 2: …………………………………………… rho_v2                                                           │
    +│ │ variable 3: …………………………………………… rho_e                                                            │
    +│ │ variable 4: …………………………………………… rho1                                                             │
    +│ │ variable 5: …………………………………………… rho2                                                             │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    Then, we just pass both quantity names.

    positivity_variables_cons = ["rho1", "rho2"]
    2-element Vector{String}:
    + "rho1"
    + "rho2"

    Alternatively, it is possible to all limit all density variables with a general command using

    positivity_variables_cons = ["rho" * string(i) for i in eachcomponent(equations)]
    2-element Vector{String}:
    + "rho1"
    + "rho2"

    Non-linear variables

    To allow limitation for all possible non-linear variables, including variables defined on-the-fly, you can directly pass the function that computes the quantity for which you want to enforce positivity. For instance, if you want to enforce non-negativity for the pressure, do as follows.

    positivity_variables_nonlinear = [pressure]
    1-element Vector{typeof(pressure)}:
    + pressure (generic function with 15 methods)

    Local bounds

    Second, Trixi.jl supports the limiting with local bounds for conservative variables using a two-sided Zalesak-type limiter (Zalesak, 1979) and for general non-linear variables using a one-sided Newton-bisection algorithm. They allow to avoid spurious oscillations within the global bounds and to improve the shock-capturing capabilities of the method. The corresponding numerical admissibility conditions are frequently formulated as local maximum or minimum principles. The local bounds are computed using the maximum and minimum values of all local neighboring nodes. Within this calculation we use the low-order FV solution values for each node.

    As for the limiting with global bounds you are passing the quantity names of the conservative variables you want to limit. So, to limit the density with lower and upper local bounds pass the following.

    local_twosided_variables_cons = ["rho"]
    1-element Vector{String}:
    + "rho"

    To limit non-linear variables locally, pass the variable function combined with the requested bound (min or max) as a tuple. For instance, to impose a lower local bound on the modified specific entropy Trixi.entropy_guermond_etal, use

    local_onesided_variables_nonlinear = [(Trixi.entropy_guermond_etal, min)]
    1-element Vector{Tuple{typeof(Trixi.entropy_guermond_etal), typeof(min)}}:
    + (Trixi.entropy_guermond_etal, min)

    Exemplary simulation

    How to set up a simulation using the IDP limiting becomes clearer when looking at an exemplary setup. This will be a simplified version of tree_2d_dgsem/elixir_euler_blast_wave_sc_subcell.jl. Since the setup is mostly very similar to a pure DGSEM setup as in tree_2d_dgsem/elixir_euler_blast_wave.jl, the equivalent parts are used without any explanation here.

    using OrdinaryDiffEq
    +using Trixi
    +
    +equations = CompressibleEulerEquations2D(1.4)
    +
    +function initial_condition_blast_wave(x, t, equations::CompressibleEulerEquations2D)
    +    # Modified From Hennemann & Gassner JCP paper 2020 (Sec. 6.3) -> "medium blast wave"
    +    # Set up polar coordinates
    +    inicenter = SVector(0.0, 0.0)
    +    x_norm = x[1] - inicenter[1]
    +    y_norm = x[2] - inicenter[2]
    +    r = sqrt(x_norm^2 + y_norm^2)
    +    phi = atan(y_norm, x_norm)
    +    sin_phi, cos_phi = sincos(phi)
    +
    +    # Calculate primitive variables
    +    rho = r > 0.5 ? 1.0 : 1.1691
    +    v1 = r > 0.5 ? 0.0 : 0.1882 * cos_phi
    +    v2 = r > 0.5 ? 0.0 : 0.1882 * sin_phi
    +    p = r > 0.5 ? 1.0E-3 : 1.245
    +
    +    return prim2cons(SVector(rho, v1, v2, p), equations)
    +end
    +initial_condition = initial_condition_blast_wave;

    Since the surface integral is equal for both the DG and the subcell FV method, the limiting is applied only in the volume integral.

    Note, that the DG method is based on the flux differencing formulation. Hence, you have to use a two-point flux, such as flux_ranocha, flux_shima_etal, flux_chandrashekar or flux_kennedy_gruber, for the DG volume flux.

    surface_flux = flux_lax_friedrichs
    +volume_flux = flux_ranocha
    flux_ranocha (generic function with 9 methods)

    The limiter is implemented within SubcellLimiterIDP. It always requires the parameters equations and basis. With additional parameters (described above or listed in the docstring) you can specify and enable additional limiting options. Here, the simulation should contain local limiting for the density using lower and upper bounds.

    basis = LobattoLegendreBasis(3)
    +limiter_idp = SubcellLimiterIDP(equations, basis;
    +                                local_twosided_variables_cons = ["rho"])
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ SubcellLimiterIDP                                                                                │
    +│ ═════════════════                                                                                │
    +│ Limiter: …………………………………………………………                                                                  │
    +│ : …………………………………………………………………………… Local two-sided limiting for conservative variables [1]          │
    +│ Local bounds: …………………………………………… FV solution                                                      │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    The initialized limiter is passed to VolumeIntegralSubcellLimiting in addition to the volume fluxes of the low-order and high-order scheme.

    volume_integral = VolumeIntegralSubcellLimiting(limiter_idp;
    +                                                volume_flux_dg = volume_flux,
    +                                                volume_flux_fv = surface_flux)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ VolumeIntegralSubcellLimiting                                                                    │
    +│ ═════════════════════════════                                                                    │
    +│ volume flux DG: ……………………………………… flux_ranocha                                                     │
    +│ volume flux FV: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ limiter: ………………………………………………………… SubcellLimiterIDP                                                │
    +│ │ Limiter: ……………………………………………………                                                                  │
    +│ │ : ……………………………………………………………………… Local two-sided limiting for conservative variables [1]          │
    +│ │ Local bounds: ……………………………………… FV solution                                                      │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘

    Then, the volume integral is passed to solver as it is done for the standard flux-differencing DG scheme or the element-wise limiting.

    solver = DGSEM(basis, surface_flux, volume_integral)
    ┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ DG{Float64}                                                                                      │
    +│ ═══════════                                                                                      │
    +│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
    +│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
    +│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
    +│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ volume integral: …………………………………… VolumeIntegralSubcellLimiting                                    │
    +│ │ volume flux DG: ………………………………… flux_ranocha                                                     │
    +│ │ volume flux FV: ………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ │ limiter: …………………………………………………… SubcellLimiterIDP                                                │
    +│ │ │ Limiter: ………………………………………………                                                                  │
    +│ │ │ : ………………………………………………………………… Local two-sided limiting for conservative variables [1]          │
    +│ │ │ Local bounds: ………………………………… FV solution                                                      │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    coordinates_min = (-2.0, -2.0)
    +coordinates_max = (2.0, 2.0)
    +mesh = TreeMesh(coordinates_min, coordinates_max,
    +                initial_refinement_level = 5,
    +                n_cells_max = 10_000)
    +
    +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)
    +
    +tspan = (0.0, 2.0)
    +ode = semidiscretize(semi, tspan)
    +
    +summary_callback = SummaryCallback()
    +
    +analysis_interval = 1000
    +analysis_callback = AnalysisCallback(semi, interval = analysis_interval)
    +
    +alive_callback = AliveCallback(analysis_interval = analysis_interval)
    +
    +save_solution = SaveSolutionCallback(interval = 1000,
    +                                     save_initial_solution = true,
    +                                     save_final_solution = true,
    +                                     solution_variables = cons2prim)
    +
    +stepsize_callback = StepsizeCallback(cfl = 0.3)
    +
    +callbacks = CallbackSet(summary_callback,
    +                        analysis_callback, alive_callback,
    +                        save_solution,
    +                        stepsize_callback);

    As explained above, the IDP limiter works a-posteriori and requires the additional use of a correction stage implemented with the stage callback SubcellLimiterIDPCorrection. This callback is passed within a tuple to the time integration method.

    stage_callbacks = (SubcellLimiterIDPCorrection(),)
    (SubcellLimiterIDPCorrection(),)

    Moreover, as mentioned before as well, simulations with subcell limiting require a Trixi-intern SSPRK time integration methods with passed stage callbacks and a Trixi-intern Trixi.solve(...) routine.

    sol = Trixi.solve(ode, Trixi.SimpleSSPRK33(stage_callbacks = stage_callbacks);
    +                  dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
    +                  callback = callbacks);
    +summary_callback() # print the timer summary
    
    +████████╗██████╗ ██╗██╗  ██╗██╗
    +╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
    +   ██║   ██████╔╝██║ ╚███╔╝ ██║
    +   ██║   ██╔══██╗██║ ██╔██╗ ██║
    +   ██║   ██║  ██║██║██╔╝ ██╗██║
    +   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝╚═╝
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ SemidiscretizationHyperbolic                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #spatial dimensions: ………………………… 2                                                                │
    +│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2}} with length 1365                │
    +│ equations: …………………………………………………… CompressibleEulerEquations2D                                     │
    +│ initial condition: ……………………………… initial_condition_blast_wave                                     │
    +│ boundary conditions: ………………………… Trixi.BoundaryConditionPeriodic                                  │
    +│ source terms: …………………………………………… nothing                                                          │
    +│ solver: …………………………………………………………… DG                                                               │
    +│ total #DOFs per field: …………………… 16384                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ TreeMesh{2, Trixi.SerialTree{2}}                                                                 │
    +│ ════════════════════════════════                                                                 │
    +│ center: …………………………………………………………… [0.0, 0.0]                                                       │
    +│ length: …………………………………………………………… 4.0                                                              │
    +│ periodicity: ……………………………………………… (true, true)                                                     │
    +│ current #cells: ……………………………………… 1365                                                             │
    +│ #leaf-cells: ……………………………………………… 1024                                                             │
    +│ maximum #cells: ……………………………………… 10000                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ CompressibleEulerEquations2D                                                                     │
    +│ ════════════════════════════                                                                     │
    +│ #variables: ………………………………………………… 4                                                                │
    +│ │ variable 1: …………………………………………… rho                                                              │
    +│ │ variable 2: …………………………………………… rho_v1                                                           │
    +│ │ variable 3: …………………………………………… rho_v2                                                           │
    +│ │ variable 4: …………………………………………… rho_e                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ DG{Float64}                                                                                      │
    +│ ═══════════                                                                                      │
    +│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3)                         │
    +│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3)                      │
    +│ surface integral: ………………………………… SurfaceIntegralWeakForm                                          │
    +│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ volume integral: …………………………………… VolumeIntegralSubcellLimiting                                    │
    +│ │ volume flux DG: ………………………………… flux_ranocha                                                     │
    +│ │ volume flux FV: ………………………………… FluxLaxFriedrichs(max_abs_speed_naive)                           │
    +│ │ limiter: …………………………………………………… SubcellLimiterIDP                                                │
    +│ │ │ Limiter: ………………………………………………                                                                  │
    +│ │ │ : ………………………………………………………………… Local two-sided limiting for conservative variables [1]          │
    +│ │ │ Local bounds: ………………………………… FV solution                                                      │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ AnalysisCallback                                                                                 │
    +│ ════════════════                                                                                 │
    +│ interval: ……………………………………………………… 1000                                                             │
    +│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6)                      │
    +│ │ error 1: …………………………………………………… l2_error                                                         │
    +│ │ error 2: …………………………………………………… linf_error                                                       │
    +│ │ integral 1: …………………………………………… entropy_timederivative                                           │
    +│ save analysis to file: …………………… no                                                               │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ AliveCallback                                                                                    │
    +│ ═════════════                                                                                    │
    +│ interval: ……………………………………………………… 100                                                              │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ SaveSolutionCallback                                                                             │
    +│ ════════════════════                                                                             │
    +│ interval: ……………………………………………………… 1000                                                             │
    +│ solution variables: …………………………… cons2prim                                                        │
    +│ save initial solution: …………………… yes                                                              │
    +│ save final solution: ………………………… yes                                                              │
    +│ output directory: ………………………………… /home/runner/work/Trixi.jl/Trixi.jl/docs/build/tutorials/out     │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ StepsizeCallback                                                                                 │
    +│ ════════════════                                                                                 │
    +│ CFL number: ………………………………………………… 0.3                                                              │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ Time integration                                                                                 │
    +│ ════════════════                                                                                 │
    +│ Start time: ………………………………………………… 0.0                                                              │
    +│ Final time: ………………………………………………… 2.0                                                              │
    +│ time integrator: …………………………………… SimpleSSPRK33                                                    │
    +│ adaptive: ……………………………………………………… false                                                            │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
    +│ Environment information                                                                          │
    +│ ═══════════════════════                                                                          │
    +│ #threads: ……………………………………………………… 1                                                                │
    +└──────────────────────────────────────────────────────────────────────────────────────────────────┘
    +
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + #timesteps:                  0                run time:       8.02000000e-07 s
    + Δt:             1.00000000e+00                └── GC time:    0.00000000e+00 s (0.000%)
    + sim. time:      0.00000000e+00 (0.000%)       time/DOF/rhs!:         NaN s
    +                                               PID:                   Inf s
    + #DOFs per field:         16384                alloc'd memory:       1014.097 MiB
    + #elements:                1024
    +
    + Variable:       rho              rho_v1           rho_v2           rho_e
    + L2 error:       6.25621384e-03   5.88786362e-03   5.81457821e-03   1.15827059e-01
    + Linf error:     1.06470791e-01   2.46283676e-01   1.37585923e-01   1.97119199e+00
    + ∑∂S/∂U ⋅ Uₜ :  -6.22526192e+02
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +
    +#timesteps:    100 │ Δt: 2.9061e-03 │ sim. time: 2.9394e-01 (14.697%)  │ run time: 1.5776e+00 s
    +#timesteps:    200 │ Δt: 3.2316e-03 │ sim. time: 6.0126e-01 (30.063%)  │ run time: 2.6766e+00 s
    +#timesteps:    300 │ Δt: 3.8243e-03 │ sim. time: 9.5591e-01 (47.795%)  │ run time: 3.8012e+00 s
    +#timesteps:    400 │ Δt: 4.3979e-03 │ sim. time: 1.3674e+00 (68.371%)  │ run time: 4.9503e+00 s
    +#timesteps:    500 │ Δt: 5.0302e-03 │ sim. time: 1.8395e+00 (91.977%)  │ run time: 6.1114e+00 s
    +
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + Simulation running 'CompressibleEulerEquations2D' with DGSEM(polydeg=3)
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    + #timesteps:                532                run time:       6.49290998e+00 s
    + Δt:             2.58201930e-03                └── GC time:    0.00000000e+00 s (0.000%)
    + sim. time:      2.00000000e+00 (100.000%)     time/DOF/rhs!:  1.87776339e-07 s
    +                                               PID:            2.48063022e-07 s
    + #DOFs per field:         16384                alloc'd memory:       1027.629 MiB
    + #elements:                1024
    +
    + Variable:       rho              rho_v1           rho_v2           rho_e
    + L2 error:       1.01030662e+00   3.05177209e-01   3.05188326e-01   6.85712113e-01
    + Linf error:     3.29436672e+00   1.45717455e+00   1.45659687e+00   2.92881060e+00
    + ∑∂S/∂U ⋅ Uₜ :  -2.91165098e+01
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +Trixi.jl simulation finished.  Final time: 2.0  Time steps: 532 (accepted), 532 (total)
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +
    + ────────────────────────────────────────────────────────────────────────────────
    +            Trixi.jl                    Time                    Allocations
    +                               ───────────────────────   ────────────────────────
    +       Tot / % measured:            6.50s / 100.0%           21.0MiB /  99.5%
    +
    + Section               ncalls     time    %tot     avg     alloc    %tot      avg
    + ────────────────────────────────────────────────────────────────────────────────
    + main loop                  1    6.00s   92.3%   6.00s   8.62MiB   41.2%  8.62MiB
    +   rhs!                 1.60k    4.91s   75.5%  3.08ms   9.33KiB    0.0%    5.98B
    +     volume integral    1.60k    4.37s   67.2%  2.74ms     0.00B    0.0%    0.00B
    +     interface flux     1.60k    285ms    4.4%   179μs     0.00B    0.0%    0.00B
    +     prolong2interf...  1.60k    116ms    1.8%  72.4μs     0.00B    0.0%    0.00B
    +     surface integral   1.60k    101ms    1.5%  63.1μs     0.00B    0.0%    0.00B
    +     reset ∂u/∂t        1.60k   17.3ms    0.3%  10.8μs     0.00B    0.0%    0.00B
    +     Jacobian           1.60k   16.7ms    0.3%  10.4μs     0.00B    0.0%    0.00B
    +     ~rhs!~             1.60k   2.69ms    0.0%  1.69μs   9.33KiB    0.0%    5.98B
    +     prolong2bounda...  1.60k    124μs    0.0%  77.4ns     0.00B    0.0%    0.00B
    +     prolong2mortars    1.60k    106μs    0.0%  66.2ns     0.00B    0.0%    0.00B
    +     mortar flux        1.60k   84.4μs    0.0%  52.9ns     0.00B    0.0%    0.00B
    +     boundary flux      1.60k   52.8μs    0.0%  33.1ns     0.00B    0.0%    0.00B
    +     source terms       1.60k   48.2μs    0.0%  30.2ns     0.00B    0.0%    0.00B
    +   a posteriori lim...  1.60k    947ms   14.6%   594μs    214KiB    1.0%     137B
    +     blending factors   1.60k    643ms    9.9%   403μs    213KiB    1.0%     137B
    +       local twosided   1.60k    575ms    8.8%   360μs    212KiB    1.0%     136B
    +       ~blending fa...  1.60k   63.4ms    1.0%  39.7μs   1.47KiB    0.0%    0.94B
    +       reset alpha      1.60k   4.46ms    0.1%  2.80μs     0.00B    0.0%    0.00B
    +     ~a posteriori ...  1.60k    305ms    4.7%   191μs      752B    0.0%    0.47B
    +   ~main loop~              1   84.7ms    1.3%  84.7ms   2.31MiB   11.0%  2.31MiB
    +   calculate dt           532   50.9ms    0.8%  95.8μs     0.00B    0.0%    0.00B
    +   analyze solution         1   6.51ms    0.1%  6.51ms   4.58MiB   21.9%  4.58MiB
    +   I/O                      1   1.99ms    0.0%  1.99ms   1.52MiB    7.2%  1.52MiB
    +     save solution          1   1.98ms    0.0%  1.98ms   1.51MiB    7.2%  1.51MiB
    +     ~I/O~                  1   5.59μs    0.0%  5.59μs   4.42KiB    0.0%  4.42KiB
    +     get node varia...      1    672ns    0.0%   672ns     0.00B    0.0%    0.00B
    +     get element va...      1    260ns    0.0%   260ns     0.00B    0.0%    0.00B
    +     save mesh              1   71.0ns    0.0%  71.0ns     0.00B    0.0%    0.00B
    + I/O                        2    494ms    7.6%   247ms   7.63MiB   36.4%  3.81MiB
    +   ~I/O~                    2    491ms    7.6%   246ms   6.12MiB   29.2%  3.06MiB
    +   save solution            1   2.71ms    0.0%  2.71ms   1.51MiB    7.2%  1.51MiB
    +   get element vari...      1   1.22μs    0.0%  1.22μs     0.00B    0.0%    0.00B
    +   get node variables       1   1.06μs    0.0%  1.06μs     0.00B    0.0%    0.00B
    +   save mesh                1   40.0ns    0.0%  40.0ns     0.00B    0.0%    0.00B
    + analyze solution           1   6.34ms    0.1%  6.34ms   4.69MiB   22.4%  4.69MiB
    + calculate dt               1   96.0μs    0.0%  96.0μs     0.00B    0.0%    0.00B
    + ────────────────────────────────────────────────────────────────────────────────

    Visualization

    As for a standard simulation in Trixi.jl, it is possible to visualize the solution using the plot routine from Plots.jl.

    using Plots
    +plot(sol)
    Example block output

    To get an additional look at the amount of limiting that is used, you can use the visualization approach using the SaveSolutionCallback, Trixi2Vtk and ParaView. More details about this procedure can be found in the visualization documentation. Unfortunately, the support for subcell limiting data is not yet merged into the main branch of Trixi2Vtk but lies in the branch bennibolm/node-variables.

    With that implementation and the standard procedure used for Trixi2Vtk you get the following dropdown menu in ParaView.

    ParaView_Dropdownmenu

    The resulting visualization of the density and the limiting parameter then looks like this. blast_wave_paraview

    You can see that the limiting coefficient does not lie in the interval [0,1] because Trixi2Vtk interpolates all quantities to regular nodes by default. You can disable this functionality with reinterpolate=false within the call of trixi2vtk(...) and get the following visualization. blast_wave_paraview_reinterpolate=false

    Bounds checking

    Subcell limiting is based on the fulfillment of target bounds - either global or local. Although the implementation works and has been thoroughly tested, there are some cases where these bounds are not met. For instance, the deviations could be in machine precision, which is not problematic. Larger deviations can be cause by too large time-step sizes (which can be easily fixed by reducing the CFL number), specific boundary conditions or source terms. Insufficient parameters for the Newton-bisection algorithm can also be a reason when limiting non-linear variables. There are described above.

    In many cases, it is reasonable to monitor the bounds deviations. Because of that, Trixi.jl supports a bounds checking routine implemented using the stage callback BoundsCheckCallback. It checks all target bounds for fulfillment in every RK stage. If added to the tuple of stage callbacks like

    stage_callbacks = (SubcellLimiterIDPCorrection(), BoundsCheckCallback())

    and passed to the time integration method, a summary is added to the final console output. For the given example, this summary shows that all bounds are met at all times.

    ────────────────────────────────────────────────────────────────────────────────────────────────────
    +Maximum deviation from bounds:
    +────────────────────────────────────────────────────────────────────────────────────────────────────
    +rho:
    +- lower bound: 0.0
    +- upper bound: 0.0
    +────────────────────────────────────────────────────────────────────────────────────────────────────

    Moreover, it is also possible to monitor the bounds deviations incurred during the simulations. To do that use the parameter save_errors = true, such that the instant deviations are written to deviations.txt in output_directory every interval time steps.

    BoundsCheckCallback(save_errors = true, output_directory = "out", interval = 100)

    Then, for the given example the deviations file contains all daviations for the current timestep and simulation time.

    iter, simu_time, rho_min, rho_max
    +100, 0.29103427131404924, 0.0, 0.0
    +200, 0.5980281923063808, 0.0, 0.0
    +300, 0.9520853560765293, 0.0, 0.0
    +400, 1.3630295622683186, 0.0, 0.0
    +500, 1.8344999624013498, 0.0, 0.0
    +532, 1.9974179806990118, 0.0, 0.0

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/tutorials/time_stepping/index.html b/v0.8.7/tutorials/time_stepping/index.html new file mode 100644 index 0000000000..38dc6b7d75 --- /dev/null +++ b/v0.8.7/tutorials/time_stepping/index.html @@ -0,0 +1,27 @@ + +19 Explicit time stepping · Trixi.jl

    19: Explicit time stepping

    For the time integration, Trixi.jl uses the package OrdinaryDiffEq.jl from the SciML ecosystem. The interface to this package is the solve(...) function. It always requires an ODE problem and a time integration algorithm as input parameters.

    solve(ode, alg; kwargs...)

    In Trixi.jl, the ODE problem is created by semidiscretize(semi, tspan) for a semidiscretization semi and the time span tspan. In particular, semidiscretize returns an ODEProblem used by OrdinaryDiffEq.jl.

    OrdinaryDiffEq.jl provides many integration algorithms, which are summarized in the documentation. Particularly interesting for Trixi.jl are their strong stability preserving (SSP) methods and low-storage methods. There are some differences regarding the choice of the used time step.

    Error-based adaptive step sizes

    First, we treat time integration algorithms with adaptive step sizes, such as SSPRK43. It is used in some elixirs, like elixir_euler_colliding_flow.jl or elixir_euler_astro_jet_amr.jl.

    Other error-based adaptive integration algorithms are for instance RDPK3SpFSAL35, RDPK3Sp35, RDPK3SpFSAL49, RDPK3Sp49, RDPK3SpFSAL510, RDPK3Sp510.

    They already contain an error-based adaptive step size control and heuristics to guess a starting step size. If this heuristic fails in your case, you can specify an appropriately small initial step size as keyword argument dt=... of solve.

    If you run Trixi in parallel with MPI you need to pass internalnorm=ode_norm and you should pass unstable_check=ode_unstable_check to enable MPI aware error-based adaptive step size control. These keyword arguments are also included in ode_default_options.

    CFL-based step size control

    The SciML ecosystem also provides time integration algorithms without adaptive time stepping on their own, such as CarpenterKennedy2N54. Moreover, you also can deactivate the automatic adaptivity of adaptive integration algorithms by passing adaptive=false in the solve function.

    These algorithms require another way of setting the step size. You have to pass dt=... in the solve function. Without other settings, the simulation uses this fixed time step.

    For hyperbolic PDEs, it is natural to use an adaptive CFL-based step size control. Here, the time step is proportional to a ratio of the local measure of mesh spacing $\Delta x_i$ for an element i and the maximum (local) wave speed $\lambda_{\max}$ related to the largest-magnitude eigenvalue of the flux Jacobian of the hyperbolic system.

    \[\Delta t_n = \text{CFL} * \min_i \frac{\Delta x_i}{\lambda_{\max}(u_i^n)}\]

    We compute $\Delta x_i$ by scaling the element size by a factor of $1/(N+1)$, cf. Gassner and Kopriva (2011), Section 5.

    Trixi.jl provides such a CFL-based step size control. It is implemented as the callback StepsizeCallback.

    stepsize_callback = StepsizeCallback(; cfl=1.0)

    A suitable CFL number depends on many parameters such as the chosen grid, the integration algorithm and the polynomial degree of the spatial DG discretization. So, the optimal number for an example is mostly determined experimentally.

    You can add this CFL-based step size control to your simulation like any other callback.

    callbacks = CallbackSet(stepsize_callback)
    +alg = CarpenterKennedy2N54(williamson_condition=false)
    +solve(ode, alg;
    +      dt=1.0 # solve needs some value here but it will be overwritten by the stepsize_callback
    +      callback=callbacks)

    You can find simple examples with a CFL-based step size control for instance in the elixirs elixir_advection_basic.jl or elixir_euler_source_terms.jl.

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "OrdinaryDiffEq"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    + [1dea7af3] OrdinaryDiffEq v6.66.0
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
    +Info Packages marked with  have new versions available and may be upgradable.

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/tutorials/upwind_fdsbp/index.html b/v0.8.7/tutorials/upwind_fdsbp/index.html new file mode 100644 index 0000000000..8e9415b943 --- /dev/null +++ b/v0.8.7/tutorials/upwind_fdsbp/index.html @@ -0,0 +1,65 @@ + +10 Upwind FD SBP schemes · Trixi.jl

    10: Upwind FD SBP schemes

    General tensor product SBP methods are supported via the DGMulti solver in a reasonably complete way, see the previous tutorial. Nevertheless, there is also experimental support for SBP methods with other solver and mesh types.

    The first step is to set up an SBP operator. A classical (central) SBP operator can be created as follows.

    using Trixi
    +D_SBP = derivative_operator(SummationByPartsOperators.MattssonNordström2004(),
    +                            derivative_order=1, accuracy_order=2,
    +                            xmin=0.0, xmax=1.0, N=11)
    SBP first-derivative operator of order 2 on a grid in [0.0, 1.0] using 11 nodes 
    +and coefficients of Mattsson, Nordström (2004) 
    +  Summation by parts operators for finite difference approximations of second 
    +    derivatives. 
    +  Journal of Computational Physics 199, pp. 503-540.

    Instead of prefixing the source of coefficients MattssonNordström2004(), you can also load the package SummationByPartsOperators.jl. Either way, this yields an object representing the operator efficiently. If you want to compare it to coefficients presented in the literature, you can convert it to a matrix.

    Matrix(D_SBP)
    11×11 Matrix{Float64}:
    + -10.0  10.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0    0.0   0.0
    +  -5.0   0.0   5.0   0.0   0.0   0.0   0.0   0.0   0.0    0.0   0.0
    +   0.0  -5.0   0.0   5.0   0.0   0.0   0.0   0.0   0.0    0.0   0.0
    +   0.0   0.0  -5.0   0.0   5.0   0.0   0.0   0.0   0.0    0.0   0.0
    +   0.0   0.0   0.0  -5.0   0.0   5.0   0.0   0.0   0.0    0.0   0.0
    +   0.0   0.0   0.0   0.0  -5.0   0.0   5.0   0.0   0.0    0.0   0.0
    +   0.0   0.0   0.0   0.0   0.0  -5.0   0.0   5.0   0.0    0.0   0.0
    +   0.0   0.0   0.0   0.0   0.0   0.0  -5.0   0.0   5.0    0.0   0.0
    +   0.0   0.0   0.0   0.0   0.0   0.0   0.0  -5.0   0.0    5.0   0.0
    +   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0  -5.0    0.0   5.0
    +   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0   0.0  -10.0  10.0

    Upwind SBP operators are a concept introduced in 2017 by Ken Mattsson. You can create them as follows.

    D_upw = upwind_operators(SummationByPartsOperators.Mattsson2017,
    +                         derivative_order=1, accuracy_order=2,
    +                         xmin=0.0, xmax=1.0, N=11)
    Upwind SBP first-derivative operators of order 2 on a grid in [0.0, 1.0] using 11 nodes 
    +and coefficients of Mattsson2017

    Upwind operators are derivative operators biased towards one direction. The "minus" variants has a bias towards the left side, i.e., it uses values from more nodes to the left than from the right to compute the discrete derivative approximation at a given node (in the interior of the domain). In matrix form, this means more non-zero entries are left from the diagonal.

    Matrix(D_upw.minus)
    11×11 Matrix{Float64}:
    + -10.0   10.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   0.0
    + -10.0   10.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   0.0
    +   5.0  -20.0   15.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    5.0  -20.0   15.0    0.0    0.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    5.0  -20.0   15.0    0.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    5.0  -20.0   15.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    5.0  -20.0   15.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    0.0    5.0  -20.0   15.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    5.0  -20.0   15.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    0.0    4.0  -16.0   10.0   2.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   20.0  -50.0  30.0

    Analogously, the "plus" variant has a bias towards the right side.

    Matrix(D_upw.plus)
    11×11 Matrix{Float64}:
    + -30.0   50.0  -20.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0   0.0
    +  -2.0  -10.0   16.0   -4.0    0.0    0.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    0.0  -15.0   20.0   -5.0    0.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    0.0  -15.0   20.0   -5.0    0.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    0.0  -15.0   20.0   -5.0    0.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    0.0  -15.0   20.0   -5.0    0.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    0.0    0.0  -15.0   20.0   -5.0    0.0   0.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    0.0  -15.0   20.0   -5.0   0.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0  -15.0   20.0  -5.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0  -10.0  10.0
    +   0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0    0.0  -10.0  10.0

    For more information on upwind SBP operators, please refer to the documentation of SummationByPartsOperators.jl and references cited there.

    The basic idea of upwind SBP schemes is to apply a flux vector splitting and use appropriate upwind operators for both parts of the flux. In 1D, this means to split the flux

    \[f(u) = f^-(u) + f^+(u)\]

    such that $f^-(u)$ is associated with left-going waves and $f^+(u)$ with right-going waves. Then, we apply upwind SBP operators $D^-, D^+$ with an appropriate upwind bias, resulting in

    \[\partial_x f(u) \approx D^+ f^-(u) + D^- f^+(u)\]

    Note that the established notations of upwind operators $D^\pm$ and flux splittings $f^\pm$ clash. The right-going waves from $f^+$ need an operator biased towards their upwind side, i.e., the left side. This upwind bias is provided by the operator $D^-$.

    Many classical flux vector splittings have been developed for finite volume methods and are described in the book "Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction" of Eleuterio F. Toro (2009), DOI: 10.1007/b79761. One such a well-known splitting provided by Trixi.jl is splitting_steger_warming.

    Trixi.jl comes with several example setups using upwind SBP methods with flux vector splitting, e.g.,

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "SummationByPartsOperators"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    +  [9f78cca6] SummationByPartsOperators v0.5.68
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`

    This page was generated using Literate.jl.

    diff --git a/v0.8.7/visualization/index.html b/v0.8.7/visualization/index.html new file mode 100644 index 0000000000..261dc68c4f --- /dev/null +++ b/v0.8.7/visualization/index.html @@ -0,0 +1,91 @@ + +Visualization · Trixi.jl

    Visualization

    There are two possible approaches to visualize results from Trixi.jl: either directly from the REPL using Plots.jl or with ParaView/VisIt by postprocessing Trixi.jl's output files with Trixi2Vtk.

    Plots.jl [experimental]

    By far the easiest and most convenient plotting approach is to use the powerful Plots.jl package to directly visualize Trixi.jl's results from the REPL. In the following, you will find more information on a number of topics for how to use Plots.jl together with Trixi.jl:

    1. Getting started
    2. Customizing plot results via a PlotData2D object
    3. Plotting a 3D solution as a 2D plot
    4. Creating a 1D plot
    5. Plotting a 2D or 3D solutions as a 1D plot
    6. Visualizing results during a simulation
    Note

    Plotting via Plots.jl is still considered an experimental feature and might change in any future releases.

    Getting started

    After running a simulation with Trixi.jl in the REPL, load the Plots package with

    julia> using Plots

    To visualize the solution, execute

    julia> plot(sol)

    Here we assume that sol holds the return value of the solve(...) method (with type SciMLBase.ODESolution), which is the default variable name when you use one of the example elixirs. This will generate a grid layout with one subplot for each solution variable, convenient for getting an overview of the current solution:

    plot-sol

    You can save the resulting file as a PNG image file by calling savefig(...) with an output file name that ends in .png, e.g.,

    julia> savefig("solution-overview.png")

    In Trixi.jl, two plot types are available: 2D heatmap plots and 1D line plots. If you use plot(sol), Trixi.jl will automatically choose the plot type that fits the dimensions of the sol input: 2D/3D data will be visualized as a heatmap, 1D data as a line plot. For more fine-grained control over what to plot, you can create such an object yourself, which can either be a PlotData2D or a PlotData1D object. For further details on both of these see below:

    Customizing plot results via a PlotData2D object

    For more fine-grained control over what to plot, first create a PlotData2D object by executing

    julia> pd = PlotData2D(sol)
    +julia> pd = PlotData2D(u, semi)

    where u is an array containing the solution and semi is the semidiscretization. For example, if PlotData2D(sol.u[2], semi) is specified, this will create a PlotData2D instance from the 2nd saved time-step. If PlotData2D(sol(0.5), semi) is specified, it will construct a PlotData2D instance using OrdinaryDiffEq.jl's interpolation to evaluate the solution at time t=0.5.

    This takes the results generated by Trixi.jl and stores them in a data format that can be understood by the Plots package, and pd holds all data relevant for plotting sol. You can pass variable names as strings to pd using a dictionary-like syntax, e.g.,

    julia> plot(pd["rho"])

    This will create a single 2D heatmap plot of the variable rho:

    plot-rho

    The default plot type and style can be overridden by passing any additional arguments that are understood by the Plots package. For example, to change the color scheme and add names to the axes, modify the previous command to

    julia> plot(pd["rho"], seriescolor = :heat, xguide="x", yguide="y")

    to yield

    plot-rho-modified

    For more details on the various format options for plot, please consult the Plots documentation.

    In addition, you can plot the mesh lines on top of the solution variables by calling the getmesh(...) function on the PlotData2D object

    julia> plot!(getmesh(pd)) # here we use `plot!` with an `!` to add to the previous plot

    which modifies the previous plot to

    plot-rho-modified-mesh

    By default, PlotData2D will convert the conserved variables to primitive variables, but this can be changed by passing an appropriate conversion function in the solution_variables keyword argument, similar to the behavior of the SaveSolutionCallback:

    julia> pd = PlotData2D(sol; solution_variables=cons2cons) # Plot conservative variables

    There are several other keyword arguments that influence how the solution data is processed for visualization with the Plots package. A detailed explanation can be found in the docstring of the PlotData2D constructor.

    Another way to change the appearance of a plot is to convert the solution to a uniformly refined mesh before plotting. This can be helpful, e.g., when trying different settings for a simulation with adaptive mesh refinement, where one would like to ignore the mesh changes when comparing solutions. This is achieved with adapt_to_mesh_level, which uses the mesh adaptation routines to adapt the solution to a uniform grid. For example, the AMR solution from above could be preprocessed with

    julia> pd = PlotData2D(adapt_to_mesh_level(sol, 4)...)

    When plotted together with the mesh, this will yield the following visualization:

    plot-rho-uniform-mesh

    Plotting a user-defined scalar field

    To plot a scalar quantity, one can call plot(ScalarPlotData2D(u, semi)), where u is an array of nodal values of the scalar field to plot. The layout of u should match the layout of the x and y nodal coordinates of the respective solver. For example, after running trixi_include(joinpath("examples", "unstructured_2d_dgsem", "elixir_euler_wall_bc.jl")), the following can be used to plot the function f(x, y) = x * y:

    x = view(semi.cache.elements.node_coordinates, 1, :, :, :)
    +y = view(semi.cache.elements.node_coordinates, 2, :, :, :)
    +plot(ScalarPlotData2D(x .* y, semi))

    This produces the following plot:

    scalar-plotting-example

    This routine can be used to visualize scalar quantities which depend on the solution, such as the norm of a velocity vector or two-dimensional vorticity. For example, we can visualize vorticity for a compressible version of the Brown-Minion vortex problem:

    julia> using Trixi, Plots
    +
    +julia> redirect_stdout(devnull) do
    +         # runs the elixir without any output from callbacks etc.
    +         trixi_include(@__MODULE__,
    +           joinpath(examples_dir(), "dgmulti_2d", "elixir_euler_brown_minion_vortex.jl"))
    +       end
    +[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.
    +
    +julia> function compute_vorticity(velocity, mesh, equations::CompressibleEulerEquations2D,
    +                                  dg::DGMulti, cache)
    +         rd = dg.basis
    +         md = mesh.md
    +         @unpack Dr, Ds = rd
    +         @unpack rxJ, sxJ, ryJ, syJ, J = md
    +         v1, v2 = velocity
    +         dv1dy = ryJ .* (Dr * v1) + syJ .* (Ds * v1)
    +         dv2dx = rxJ .* (Dr * v2) + sxJ .* (Ds * v2)
    +         return dv2dx - dv1dy
    +       end;
    +
    +julia> compute_vorticity(velocity, semi) =
    +         compute_vorticity(velocity, Trixi.mesh_equations_solver_cache(semi)...);
    +
    +julia> function get_velocity(sol)
    +         rho, rhou, rhov, E = StructArrays.components(sol.u[end])
    +         v1 = rhou ./ rho
    +         v2 = rhov ./ rho
    +         return v1, v2
    +       end;
    +
    +julia> vorticity = compute_vorticity(get_velocity(sol), semi);
    +
    +julia> plot(ScalarPlotData2D(vorticity, semi;
    +            variable_name = "Vorticity at t = $(sol.prob.tspan[end])"))
    +Plot{Plots.GRBackend() n=1}

    This produces the following plot of vorticity.

    vorticity-example

    Since the mesh is fairly coarse, we observe numerical artifacts due to the low resolution. These errors vanish under mesh refinement; for example, doubling the mesh resolution by running

    julia> trixi_include(joinpath(examples_dir(), "dgmulti_2d", "elixir_euler_BM_vortex.jl"), cells_per_dimension = 32)

    yields the following plot of vorticity:

    vorticity-example-refined

    Note

    When visualizing a scalar field, the plotted solution is reinterpolated using a high order polynomial approximation. Thus, small discrepancies may be observed when the underlying data is highly non-smooth or under-resolved.

    ScalarPlotData2D objects can also be used with Makie through iplot. For example, the following code plots two surfaces:

    julia> using Trixi, CairoMakie
    +
    +julia> redirect_stdout(devnull) do
    +         # runs the elixir without any output from callbacks etc.
    +         trixi_include(@__MODULE__,
    +           joinpath(examples_dir(), "unstructured_2d_dgsem", "elixir_euler_wall_bc.jl"))
    +       end
    +[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.
    +
    +julia> x = view(semi.cache.elements.node_coordinates, 1, :, :, :); # extracts the node x coordinates
    +
    +julia> y = view(semi.cache.elements.node_coordinates, 2, :, :, :); # extracts the node y coordinates
    +
    +julia> fig_ax_plt = iplot(ScalarPlotData2D((@. 1 - .25*(x^2 + y^2)), semi), plot_mesh=true, colormap=:viridis);
    +
    +julia> fig_ax_plt2 = iplot!(fig_ax_plt, ScalarPlotData2D((@. .125*(x+y)), semi), plot_mesh=true, colormap=:blues)
    +FigureAxisPlot()

    This creates the following plot:

    ScalarPlotData2D_example

    Plotting a 3D solution as a 2D plot

    It is possible to plot 2D slices from 3D simulation data using the TreeMesh with the same commands as above:

    julia> plot(sol) # `sol` is from a 3D simulation

    By default, plotting sol or creating a PlotData2D object from a 3D simulation will create a 2D slice of the solution in the xy-plane. You can customize this behavior by explicitly creating a PlotData2D object and passing appropriate keyword arguments:

    • slice specifies the plane which is being sliced and can be :xy, :xz, or :yz (default: :xy)
    • point specifies a three-dimensional point. The sliced plane is then created such that it lies on the point (default: (0.0, 0.0, 0.0)).

    All other attributes for PlotData2D objects apply here as well.

    For example, to plot the velocity field orthogonal to the yz-plane at different x-axis locations, you can execute

    julia> trixi_include(joinpath(examples_dir(), "tree_3d_dgsem", "elixir_euler_taylor_green_vortex.jl"), tspan=(0.0, 1.0))
    +[...]
    +
    +julia> plots = []
    +Any[]
    +
    +julia> for x in range(0, stop=pi/2, length=6)
    +         pd = PlotData2D(sol, slice=:yz, point=(x, 0.0, 0.0))
    +         push!(plots, plot(pd["v1"], clims=(-1,1), title="x = "*string(round(x, digits=2))))
    +       end
    +
    +julia> plot(plots..., layout=(2, 3), size=(750,350))

    which results in a 2x3 grid of slices of the yz-plane:

    plot-v1-0.0-to-0.5pi

    Creating a 1D plot

    When plotting a 1D solution with

    julia> plot(sol) # `sol` is from a 1D simulation

    Trixi.jl automatically creates a PlotData1D object and visualizes it as a line plot: 1d-plot

    To customize your 1D plot, you can create a PlotData1D object manually as follows:

    julia> pd = PlotData1D(sol)
    +julia> pd = PlotData1D(u, semi)

    The behavior is analogous to the PlotData2D behavior.

    In a very similar fashion to PlotData2D, you can customize your plot:

    • plot(pd) creates the same plot as in plot(sol).
    • plot(pd["rho", "p"]) only plots specific variables. In this case rho and p.
    • plot!(getmesh(pd)) adds mesh lines after creating a plot.
    • Any attributes from Plots can be used, e.g., plot(pd, yguide=:temperature).
    • pd = PlotData1D(adapt_to_mesh_level(sol, 4)...) adapts the mesh before plotting (in this example to a mesh with refinement level 4).

    You can also customize the PlotData1D object itself by passing attributes to the PlotData1D constructor:

    • solution_variables specifies the variables to be plotted.
    • nvisnodes sets the amount of nodes per element which the solution then is interpolated on.

    Plotting a 2D or 3D solutions as a 1D plot

    It is possible to extract a straight, axis-parallel line from a 2D or 3D solution and visualize it as a 1D plot. This is done by creating a PlotData1D object with a 2D/3D solution sol as input:

    julia> pd = PlotData1D(sol)

    The plot is then created with:

    julia> plot(pd)

    By default the x-axis is extracted, which can be changed with following attributes:

    • slice specifies the axis which is being extracted and can be :x, :y or :z (:z is only for 3D input and default is :x)
    • point specifies a two or three dimensional point. The sliced axis is then created in such a way, that it lies on the point. (default: (0.0, 0.0) or (0.0, 0.0, 0.0))

    All other attributes for PlotData1D objects apply here as well.

    In the following, is an example for a 2D simulation of the linear scalar advection equation. First, we have the regular 2D heatmap plot:

    2d-plot-for-slice

    From this, we can extract a line plot parallel to the y-axis going through the point (1.0, 0.0) with the following commands:

    julia> pd = PlotData1D(sol, slice=:y, point=(1.0, 0.0))
    +julia> plot(pd)

    1d-plot-for-slice

    This convenient method of slicing is limited to axis-parallel slices, but for 2D/3D solutions it is also possible to create a plot along any curve you want. To do so, you first need to create a list of 2D/3D points that define your curve. Then you can create a PlotData1D with the keyword argument curve set to your list.

    Let's give an example of this with the basic advection equation from above by creating a plot along the circle marked in green:

    2d-plot-along-circle

    We can write a function like this, that outputs a list of points on a circle:

    function circle(radius, center, n_points)
    +    coordinates = zeros(2, n_points)
    +    for i in 1:n_points
    +        coordinates[:,i] = radius*[cospi(2*i/n_points), sinpi(2*i/n_points)] .+ center
    +    end
    +    return coordinates
    +end

    Then create and plot a PlotData1D object along a circle with radius one, center at (1,1), and 100 points:

    pd = PlotData1D(sol, curve=circle(1.0, (1.0, 1.0), 100))
    +plot(pd)

    This gives you the following plot: 1d-plot-along-circle

    Creating a plot like this has its downsides. For one, it is unclear what to put on the abscissa of the plot. By default, the arc length of the given curve is used. Also, with this way of plotting you lose the ability to use a mesh plot from getmesh.

    Visualizing results during a simulation

    To visualize solutions while a simulation is still running (also known as in-situ visualization), you can use the VisualizationCallback. It is created as a regular callback and accepts upon creation a number of keyword arguments that allow, e.g., to control the visualization interval, to specify the variables to plot, or to customize the plotting style.

    During the simulation, the visualization callback creates and displays visualizations of the current solution in regular intervals. This can be useful to, e.g., monitor the validity of a long-running simulation or for illustrative purposes. An example for how to create a VisualizationCallback can be found in examples/tree_2d_dgsem/elixir_advection_amr_visualization.jl:

    [...]
    +
    +# Enable in-situ visualization with a new plot generated every 20 time steps
    +# and additional plotting options passed as keyword arguments
    +visualization = VisualizationCallback(interval=20; clims=(0,1))
    +
    +[...]

    The resulting output of the referenced elixir can be seen in the embedded video below:

    +

    Trixi2Vtk

    Trixi2Vtk converts Trixi.jl's .h5 output files to VTK files, which can be read by ParaView, VisIt, and other visualization tools. It automatically interpolates solution data from the original quadrature node locations to equidistant visualization nodes at a higher resolution, to make up for the loss of accuracy from going from a high-order polynomial representation to a piecewise constant representation in VTK.

    In the Julia REPL, first load the package Trixi2Vtk

    julia> using Trixi2Vtk

    To process an HDF5 file generated by Trixi.jl, execute

    julia> trixi2vtk(joinpath("out", "solution_000000000.h5"), output_directory="out")

    This will create two unstructured VTK files in the out subdirectory that can be opened with ParaView or VisIt: solution_000000000.vtu contains the discontinuous Galerkin solution data while solution_000000000_celldata.vtu holds any cell-based values such as the current AMR indicator or the cell refinement level.

    "solution_000000000_scalar_mesh"

    This allows you to generate VTK files for solution, restart and mesh files. By default, Trixi2Vtk generates .vtu (unstructured VTK) files for both cell/element data (e.g., cell ids, element ids) and node data (e.g., solution variables). This format visualizes each cell with the same number of nodes, independent of its size. Alternatively, you can provide format=:vti as a keyword argument to trixi2vtk, which causes Trixi2Vtk to generate .vti (image data VTK) files for the solution files, while still using .vtu files for cell-/element-based data. In .vti files, a uniform resolution is used throughout the entire domain, resulting in different number of visualization nodes for each element. This can be advantageous to create publication-quality images, but increases the file size.

    If you want to convert multiple solution/restart files at once, you can just supply multiple input files as the positional arguments to trixi2vtk, e.g.,

    julia> trixi2vtk("out/solution_000000000.h5", "out/solution_000000040.h5")

    You may also use file globbing to select a range of files based on filename patterns, e.g.,

    julia> trixi2vtk("out/solution_*.h5")

    to convert all solution files in the out/ directory or

    julia> trixi2vtk("out/restart_00[0-9]000.h5")

    to convert every one-thousandth restart file (out/restart_000000000.h5, out/restart_001000.h5 etc.).

    When multiple solution/restart files are provided, Trixi2Vtk will also generate a .pvd file, which allows ParaView to read all .vtu/.vti files at once and which uses the time attribute in solution/restart files to inform ParaView about the solution time. A comprehensive list of all possible arguments for trixi2vtk can be found in the Trixi2Vtk.jl API.

    Further information regarding the development of Trixi2Vtk can be found in the development section.

    Makie.jl [experimental]

    In addition to Plots.jl support, Trixi.jl includes visualization utilities through Makie.jl. Trixi.jl provides Makie-based visualization options both for heatmap-type plots (similar to the Plots.jl recipes) as well as for interactive surface plots. Support is currently limited to the UnstructuredMesh2D type.

    Note

    Plotting via Makie.jl is still considered an experimental feature and might change in any future releases.

    A Makie plot can be created as follows: after running a simulation with Trixi.jl in the REPL, load a Makie backend (for example, GLMakie or CairoMakie).

    julia> using GLMakie

    To visualize the solution and mesh with a heatmap-type plot, simply run

    julia> plot(sol)
    Note

    Both Makie.jl and Plots.jl export plot, so if you load both libraries, you will have to specify which plot function to call via Plots.plot or Makie.plot.

    As with Plots.jl recipes, one can view individual solution components by creating a PlotData2D object and indexing into it with the desired variable name

    julia> pd = PlotData2D(sol)
    +julia> plot(pd["rho"])

    Unlike the Plots.jl recipe, mesh plotting is controlled using the keyword argument plot_mesh = false, e.g.,

    julia> plot(sol; plot_mesh=false)

    The plot command also returns figure and axis handles, which can be used to edit plot titles or labels:

    julia> fig, axes = plot(sol)
    +julia> axes[1,1].title = "New title for subplot (1,1)"

    Trixi.jl also supports interactive surface plots using iplot. After executing

    julia> trixi_include(joinpath("examples", "unstructured_2d_dgsem", "elixir_euler_wall_bc.jl"))

    we can run

    julia> iplot(sol)

    This will open up an interactive visualization window:

    makie-example

    The plot can be rotated (click and hold), zoomed in and out (scroll up and down), and panned (hold right click and drag). Two toggle buttons control whether mesh lines are visible on top of and below the solution.

    Both plot and iplot use colormap = :inferno by default. A different colormap can be selected by providing an appropriate keyword argument. For example, plot(sol, colormap=:blues) and iplot(sol, colormap=:blues) produce the following figures:

    makie-plot-example makie-iplot-example

    diff --git a/versions.js b/versions.js index d9817c0e06..ad841dd173 100644 --- a/versions.js +++ b/versions.js @@ -10,5 +10,5 @@ var DOC_VERSIONS = [ "v0.1", "dev", ]; -var DOCUMENTER_NEWEST = "v0.8.6"; +var DOCUMENTER_NEWEST = "v0.8.7"; var DOCUMENTER_STABLE = "stable";

    18: P4est mesh from gmsh

    Trixi.jl supports numerical approximations from structured and unstructured quadrilateral meshes with the P4estMesh mesh type.

    The purpose of this tutorial is to demonstrate how to use the P4estMesh functionality of Trixi.jl for existing meshes with straight-sided (bilinear) elements/cells. This begins by running and visualizing an available unstructured quadrilateral mesh example. Then, the tutorial will cover how to use existing meshes generated by gmsh or any other meshing software that can export to the Abaqus input .inp format.

    Running the simulation of a near-field flow around an airfoil

    Trixi.jl supports solving hyperbolic-parabolic problems on several mesh types. A somewhat complex example that employs the P4estMesh is the near-field simulation of a Mach 2 flow around the NACA6412 airfoil.

    using Trixi
    +trixi_include(joinpath(examples_dir(), "p4est_2d_dgsem", "elixir_euler_NACA6412airfoil_mach2.jl"), tspan=(0.0, 0.5))
    [ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.

    Conveniently, we use the Plots package to have a first look at the results:

    using Plots
    +pd = PlotData2D(sol)
    +plot(pd["rho"])
    +plot!(getmesh(pd))

    Creating a mesh using gmsh

    The creation of an unstructured quadrilateral mesh using gmsh is driven by a geometry file. There are plenty of possibilities for the user, see the documentation and tutorials.

    To begin, we provide a complete geometry file for the NACA6412 airfoil bounded by a rectangular box. After this we give a breakdown of the most important parts required for successful mesh generation that can later be used by the p4est library and Trixi.jl. We emphasize that this near-field mesh should only be used for instructive purposes and not for actual production runs.

    The associated NACA6412.geo file is given below:

     // GMSH geometry script for a NACA 6412 airfoil with 11 degree angle of attack
    + // in a box (near-field mesh).
    + // see https://github.com/cfsengineering/GMSH-Airfoil-2D
    + // for software to generate gmsh `.geo` geometry files for NACA airfoils.
    +
    + // outer bounding box
    + Point(1) = {-1.25, -0.5, 0, 1.0};
    + Point(2) = {1.25, -0.5, 0, 1.0};
    + Point(3) = {1.25, 0.5, 0, 1.0};
    + Point(4) = {-1.25, 0.5, 0, 1.0};
    +
    + // lines of the bounding box
    + Line(1) = {1, 2};
    + Line(2) = {2, 3};
    + Line(3) = {3, 4};
    + Line(4) = {4, 1};
    + // outer box
    + Line Loop(8) = {1, 2, 3, 4};
    +
    + // Settings
    + // This value gives the global element size factor (lower -> finer mesh)
    + Mesh.CharacteristicLengthFactor = 1.0 * 2^(-3);
    + // Insist on quads instead of default triangles
    + Mesh.RecombineAll = 1;
    + // Violet instead of green base color for better visibility
    + Mesh.ColorCarousel = 0;
    +
    + // points of the airfoil contour
    + // Format: {x, y, z, DesiredCellSize}. See the documentation: https://gmsh.info/doc/texinfo/gmsh.html#Points
    + // These concrete points are generated using the tool from https://github.com/cfsengineering/GMSH-Airfoil-2D
    + Point(5) = {-0.4900332889206208, 0.09933466539753061, 0, 0.125};
    + Point(6) = {-0.4900274857651495, 0.1021542752054094, 0, 0.125};
    + Point(7) = {-0.4894921489729144, 0.1049830248247787, 0, 0.125};
    + Point(8) = {-0.4884253336670712, 0.1078191282319664, 0, 0.125};
    + Point(9) = {-0.4868257975566199, 0.1106599068424483, 0, 0.125};
    + Point(10) = {-0.4846930063965668, 0.1135018003016681, 0, 0.125};
    + Point(11) = {-0.4820271400142729, 0.1163403835785654, 0, 0.125};
    + Point(12) = {-0.4788290988083472, 0.1191703902233889, 0, 0.125};
    + Point(13) = {-0.4751005105908123, 0.1219857416089041, 0, 0.125};
    + Point(14) = {-0.4708437376101668, 0.1247795819332056, 0, 0.125};
    + Point(15) = {-0.4660618835629463, 0.1275443187232316, 0, 0.125};
    + Point(16) = {-0.4607588003749649, 0.1302716685409717, 0, 0.125};
    + Point(17) = {-0.4549390945110529, 0.132952707559475, 0, 0.125};
    + Point(18) = {-0.448608132554204, 0.1355779266432996, 0, 0.125};
    + Point(19) = {-0.4417720457819508, 0.138137290538182, 0, 0.125};
    + Point(20) = {-0.4344377334597768, 0.140620300747629, 0, 0.125};
    + Point(21) = {-0.4266128645686593, 0.1430160616500159, 0, 0.125};
    + Point(22) = {-0.4183058776865576, 0.1453133493887722, 0, 0.125};
    + Point(23) = {-0.4095259787518715, 0.147500683050503, 0, 0.125};
    + Point(24) = {-0.4002831364505879, 0.1495663976315875, 0, 0.125};
    + Point(25) = {-0.3905880749878933, 0.1514987182830453, 0, 0.125};
    + Point(26) = {-0.3804522640292948, 0.1532858353164163, 0, 0.125};
    + Point(27) = {-0.3698879056254708, 0.1549159794501833, 0, 0.125};
    + Point(28) = {-0.3589079179688306, 0.1563774967770029, 0, 0.125};
    + Point(29) = {-0.3475259158676376, 0.1576589229368209, 0, 0.125};
    + Point(30) = {-0.3357561878650377, 0.158749055989923, 0, 0.125};
    + Point(31) = {-0.3236136699747923, 0.1596370274972017, 0, 0.125};
    + Point(32) = {-0.3111139160522804, 0.1603123713324616, 0, 0.125};
    + Point(33) = {-0.298273064867608, 0.160765089773461, 0, 0.125};
    + Point(34) = {-0.2851078039966239, 0.1609857164445887, 0, 0.125};
    + Point(35) = {-0.2716353306943914, 0.160965375714529, 0, 0.125};
    + Point(36) = {-0.2578733099632437, 0.1606958381868515, 0, 0.125};
    + Point(37) = {-0.2438398300730194, 0.1601695719599709, 0, 0.125};
    + Point(38) = {-0.2295533558334121, 0.1593797893750759, 0, 0.125};
    + Point(39) = {-0.2150326799566391, 0.1583204890160489, 0, 0.125};
    + Point(40) = {-0.2002968728818922, 0.1569864927736143, 0, 0.125};
    + Point(41) = {-0.18536523146042, 0.1553734778363979, 0, 0.125};
    + Point(42) = {-0.1702572269208345, 0.1534780035235666, 0, 0.125};
    + Point(43) = {-0.1549924525477129, 0.1512975329264932, 0, 0.125};
    + Point(44) = {-0.1395905715122586, 0.1488304493795921, 0, 0.125};
    + Point(45) = {-0.1240712652914332, 0.1460760678321895, 0, 0.125};
    + Point(46) = {-0.1084541831014299, 0.1430346412430583, 0, 0.125};
    + Point(47) = {-0.09275889275279087, 0.1397073621660917, 0, 0.125};
    + Point(48) = {-0.07700483330818747, 0.1360963597385416, 0, 0.125};
    + Point(49) = {-0.06151286635366404, 0.1323050298149023, 0, 0.125};
    + Point(50) = {-0.04602933219022032, 0.1283521764905442, 0, 0.125};
    + Point(51) = {-0.03051345534800332, 0.1242331665904082, 0, 0.125};
    + Point(52) = {-0.01498163190522334, 0.1199540932779839, 0, 0.125};
    + Point(53) = {0.0005498526140696458, 0.1155214539466913, 0, 0.125};
    + Point(54) = {0.01606484191716884, 0.1109421303284033, 0, 0.125};
    + Point(55) = {0.03154732664394777, 0.106223368423828, 0, 0.125};
    + Point(56) = {0.0469814611314705, 0.1013727584299359, 0, 0.125};
    + Point(57) = {0.06235157928986135, 0.09639821481480275, 0, 0.125};
    + Point(58) = {0.07764220964363855, 0.09130795666388933, 0, 0.125};
    + Point(59) = {0.09283808959671735, 0.08611048839446452, 0, 0.125};
    + Point(60) = {0.1079241789809607, 0.08081458090718853, 0, 0.125};
    + Point(61) = {0.1228856729475325, 0.07542925321638272, 0, 0.125};
    + Point(62) = {0.1377080142575372, 0.06996375457378261, 0, 0.125};
    + Point(63) = {0.1523769050236616, 0.06442754707512513, 0, 0.125};
    + Point(64) = {0.1668783179480157, 0.05883028871526293, 0, 0.125};
    + Point(65) = {0.1811985070933818, 0.05318181683604975, 0, 0.125};
    + Point(66) = {0.1953240182159306, 0.04749213189240609, 0, 0.125};
    + Point(67) = {0.2092416986775084, 0.04177138144606024, 0, 0.125};
    + Point(68) = {0.2229387069452062, 0.03602984428372727, 0, 0.125};
    + Point(69) = {0.2364025216754475, 0.03027791454712048, 0, 0.125};
    + Point(70) = {0.2496209503696738, 0.02452608575629232, 0, 0.125};
    + Point(71) = {0.2625821375791982, 0.01878493460541621, 0, 0.125};
    + Point(72) = {0.2752745726282818, 0.01306510441121807, 0, 0.125};
    + Point(73) = {0.28768709681727, 0.007377288098728577, 0, 0.125};
    + Point(74) = {0.2998089100619555, 0.001732210616722449, 0, 0.125};
    + Point(75) = {0.3116295769214332, -0.003859389314124759, 0, 0.125};
    + Point(76) = {0.3231390319647309, -0.009386778203927332, 0, 0.125};
    + Point(77) = {0.3343275844265582, -0.01483924761490708, 0, 0.125};
    + Point(78) = {0.3451859221046181, -0.02020613485126957, 0, 0.125};
    + Point(79) = {0.3557051144551212, -0.02547684454806881, 0, 0.125};
    + Point(80) = {0.3658766148492779, -0.03064087116872238, 0, 0.125};
    + Point(81) = {0.3756922619615632, -0.0356878223992288, 0, 0.125};
    + Point(82) = {0.3851442802702071, -0.0406074434050937, 0, 0.125};
    + Point(83) = {0.394225279661484, -0.04538964189492445, 0, 0.125};
    + Point(84) = {0.4029282541416501, -0.05002451391298904, 0, 0.125};
    + Point(85) = {0.4112465796735204, -0.05450237026215737, 0, 0.125};
    + Point(86) = {0.4191740111683733, -0.05881376343890812, 0, 0.125};
    + Point(87) = {0.4267046786777481, -0.06294951494382847, 0, 0.125};
    + Point(88) = {0.4338330828434404, -0.06690074281456823, 0, 0.125};
    + Point(89) = {0.4405540896772232, -0.07065888921378868, 0, 0.125};
    + Point(90) = {0.4468629247542237, -0.07421574789251445, 0, 0.125};
    + Point(91) = {0.4527551669150955, -0.0775634913396257, 0, 0.125};
    + Point(92) = {0.4582267415819197, -0.08069469742118066, 0, 0.125};
    + Point(93) = {0.4632739138007936, -0.08360237530891265, 0, 0.125};
    + Point(94) = {0.4678932811302005, -0.08627999049569551, 0, 0.125};
    + Point(95) = {0.4720817664982195, -0.08872148869699745, 0, 0.125};
    + Point(96) = {0.4758366111533843, -0.09092131844134463, 0, 0.125};
    + Point(97) = {0.4791553678333992, -0.09287445215953141, 0, 0.125};
    + Point(98) = {0.4820358942729613, -0.09457640559161551, 0, 0.125};
    + Point(99) = {0.4844763471666588, -0.09602325534252773, 0, 0.125};
    + Point(100) = {0.4864751766953637, -0.09721165443119822, 0, 0.125};
    + Point(101) = {0.4880311217148797, -0.09813884569428721, 0, 0.125};
    + Point(102) = {0.4891432056939881, -0.09880267292366274, 0, 0.125};
    + Point(103) = {0.4898107334756874, -0.09920158963645126, 0, 0.125};
    + Point(104) = {0.4900332889206208, -0.09933466539753058, 0, 0.125};
    + Point(105) = {0.4897824225031319, -0.09926905587549506, 0, 0.125};
    + Point(106) = {0.4890301110661922, -0.09907236506934192, 0, 0.125};
    + Point(107) = {0.4877772173496635, -0.09874500608402761, 0, 0.125};
    + Point(108) = {0.48602517690576, -0.09828766683852558, 0, 0.125};
    + Point(109) = {0.4837759946062035, -0.09770130916007558, 0, 0.125};
    + Point(110) = {0.4810322398085871, -0.09698716747297723, 0, 0.125};
    + Point(111) = {0.4777970402368822, -0.09614674703990023, 0, 0.125};
    + Point(112) = {0.4740740746447117, -0.09518182170326678, 0, 0.125};
    + Point(113) = {0.4698675643422793, -0.09409443106501386, 0, 0.125};
    + Point(114) = {0.4651822636784212, -0.09288687703518478, 0, 0.125};
    + Point(115) = {0.460023449577924, -0.09156171967354482, 0, 0.125};
    + Point(116) = {0.4543969102408585, -0.09012177224394632, 0, 0.125};
    + Point(117) = {0.4483089331151018, -0.08857009539864649, 0, 0.125};
    + Point(118) = {0.4417662922553667, -0.08690999040934186, 0, 0.125};
    + Point(119) = {0.4347762351819332, -0.0851449913634191, 0, 0.125};
    + Point(120) = {0.4273464693498908, -0.08327885624791403, 0, 0.125};
    + Point(121) = {0.419485148335155, -0.08131555684993674, 0, 0.125};
    + Point(122) = {0.411200857836944, -0.07925926741086739, 0, 0.125};
    + Point(123) = {0.4025026015879757, -0.07711435198240155, 0, 0.125};
    + Point(124) = {0.3933997872536054, -0.07488535044544484, 0, 0.125};
    + Point(125) = {0.3839022123897198, -0.07257696316779733, 0, 0.125};
    + Point(126) = {0.3740200505167618, -0.07019403429336624, 0, 0.125};
    + Point(127) = {0.3637638373540689, -0.06774153367408606, 0, 0.125};
    + Point(128) = {0.3531444572451353, -0.06522453747557577, 0, 0.125};
    + Point(129) = {0.3421731297908021, -0.06264820750853495, 0, 0.125};
    + Point(130) = {0.3308613966940724, -0.06001776935966011, 0, 0.125};
    + Point(131) = {0.3192211088076166, -0.05733848941811218, 0, 0.125};
    + Point(132) = {0.3072644133633567, -0.05461565091590426, 0, 0.125};
    + Point(133) = {0.2950037413531683, -0.05185452912263369, 0, 0.125};
    + Point(134) = {0.2824517950208982, -0.04906036585632723, 0, 0.125};
    + Point(135) = {0.2696215354188702, -0.04623834349241404, 0, 0.125};
    + Point(136) = {0.2565261699769623, -0.04339355867155523, 0, 0.125};
    + Point(137) = {0.2431791400293651, -0.04053099592384862, 0, 0.125};
    + Point(138) = {0.2295941082432855, -0.03765550144139543, 0, 0.125};
    + Point(139) = {0.2157849458952252, -0.03477175724299444, 0, 0.125};
    + Point(140) = {0.2017657199439165, -0.03188425598348005, 0, 0.125};
    + Point(141) = {0.187550679854507, -0.02899727666564914, 0, 0.125};
    + Point(142) = {0.1731542441359161, -0.02611486151457043, 0, 0.125};
    + Point(143) = {0.1585909865622793, -0.02324079427214604, 0, 0.125};
    + Point(144) = {0.1438756220597465, -0.02037858016395433, 0, 0.125};
    + Point(145) = {0.129022992251319, -0.0175314277805827, 0, 0.125};
    + Point(146) = {0.1140480506645569, -0.01470223310184333, 0, 0.125};
    + Point(147) = {0.09896584761949168, -0.01189356587453844, 0, 0.125};
    + Point(148) = {0.08379151482656089, -0.009107658532933174, 0, 0.125};
    + Point(149) = {0.06854024973648176, -0.006346397826038436, 0, 0.125};
    + Point(150) = {0.05322729969528361, -0.003611319287478529, 0, 0.125};
    + Point(151) = {0.03786794596792287, -0.00090360465249055, 0, 0.125};
    + Point(152) = {0.0224774877026287, 0.00177591770710904, 0, 0.125};
    + Point(153) = {0.007071225915134205, 0.004426769294862437, 0, 0.125};
    + Point(154) = {-0.00833555242305456, 0.007048814950562587, 0, 0.125};
    + Point(155) = {-0.02372759010533726, 0.009642253300220296, 0, 0.125};
    + Point(156) = {-0.03908967513210498, 0.01220760427359278, 0, 0.125};
    + Point(157) = {-0.05440665578848514, 0.01474569380579989, 0, 0.125};
    + Point(158) = {-0.06966345527617318, 0.01725763587663899, 0, 0.125};
    + Point(159) = {-0.08484508582421563, 0.01974481207672138, 0, 0.125};
    + Point(160) = {-0.09987987792382108, 0.02219618763023203, 0, 0.125};
    + Point(161) = {-0.1145078729404739, 0.02450371976411331, 0, 0.125};
    + Point(162) = {-0.1290321771824579, 0.0267015185742735, 0, 0.125};
    + Point(163) = {-0.143440065923266, 0.02879471001709845, 0, 0.125};
    + Point(164) = {-0.1577189448447794, 0.03078883518202784, 0, 0.125};
    + Point(165) = {-0.1718563428491159, 0.03268980457290044, 0, 0.125};
    + Point(166) = {-0.1858399037768357, 0.03450385196323842, 0, 0.125};
    + Point(167) = {-0.1996573773370766, 0.03623748825421298, 0, 0.125};
    + Point(168) = {-0.2132966095779342, 0.03789745574015834, 0, 0.125};
    + Point(169) = {-0.2267455332406906, 0.0394906831577609, 0, 0.125};
    + Point(170) = {-0.2399921583489679, 0.04102424186233269, 0, 0.125};
    + Point(171) = {-0.2530245633834605, 0.04250530343879837, 0, 0.125};
    + Point(172) = {-0.2658308873846617, 0.04394109901707172, 0, 0.125};
    + Point(173) = {-0.2783993233102972, 0.04533888052223981, 0, 0.125};
    + Point(174) = {-0.2907181129514687, 0.04670588405019788, 0, 0.125};
    + Point(175) = {-0.3027755436824813, 0.0480492955198111, 0, 0.125};
    + Point(176) = {-0.3145599472847223, 0.04937621871394801, 0, 0.125};
    + Point(177) = {-0.3260597010456697, 0.05069364578437131, 0, 0.125};
    + Point(178) = {-0.337263231291058, 0.05200843025992359, 0, 0.125};
    + Point(179) = {-0.3481590194623916, 0.05332726256406103, 0, 0.125};
    + Point(180) = {-0.3587356108043638, 0.05465664801682354, 0, 0.125};
    + Point(181) = {-0.3689816256782782, 0.0560028872679817, 0, 0.125};
    + Point(182) = {-0.3788857734692287, 0.05737205908247899, 0, 0.125};
    + Point(183) = {-0.3884368690074614, 0.05877000537646382, 0, 0.125};
    + Point(184) = {-0.3976238513788748, 0.06020231838219783, 0, 0.125};
    + Point(185) = {-0.40643580495675, 0.06167432980291591, 0, 0.125};
    + Point(186) = {-0.4148619824472646, 0.06319110180426264, 0, 0.125};
    + Point(187) = {-0.4228918297057104, 0.06475741967717524, 0, 0.125};
    + Point(188) = {-0.43051501204915, 0.06637778599795482, 0, 0.125};
    + Point(189) = {-0.4377214417649294, 0.06805641610468524, 0, 0.125};
    + Point(190) = {-0.4445013064933708, 0.06979723470503821, 0, 0.125};
    + Point(191) = {-0.4508450981473512, 0.07160387342876083, 0, 0.125};
    + Point(192) = {-0.4567436420215075, 0.073479669138689, 0, 0.125};
    + Point(193) = {-0.4621881257395756, 0.07542766281688272, 0, 0.125};
    + Point(194) = {-0.4671701276898881, 0.07745059884734995, 0, 0.125};
    + Point(195) = {-0.471681644606229, 0.07955092452372269, 0, 0.125};
    + Point(196) = {-0.4757151179639407, 0.0817307896190848, 0, 0.125};
    + Point(197) = {-0.4792634588791559, 0.0839920458658267, 0, 0.125};
    + Point(198) = {-0.4823200712220043, 0.08633624620581726, 0, 0.125};
    + Point(199) = {-0.4848788726822436, 0.08876464368523246, 0, 0.125};
    + Point(200) = {-0.4869343135575803, 0.09127818988394577, 0, 0.125};
    + Point(201) = {-0.4884813930704814, 0.09387753278635144, 0, 0.125};
    + Point(202) = {-0.4895156730580155, 0.09656301401871749, 0, 0.125};
    +
    + // splines of the airfoil
    + Spline(5) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104};
    + Spline(6) = {104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,5};
    +
    + // airfoil
    + Line Loop(9) = {5, 6};
    + // complete domain
    + Plane Surface(1) = {8, 9};
    +
    + // labeling of the boundary parts
    + Physical Line(1) = {4};      // inflow
    + Physical Line(2) = {2};      // outflow
    + Physical Line(3) = {1, 3};   // airfoil
    + Physical Line(4) = {5, 6};   // upper/lower wall
    + Physical Surface(1) = {10};

    From which we can construct a mesh like this: mesh_screenshot

    The first four points define the bounding box = (near-field) domain:

      // outer bounding box
    +Point(1) = {-1.25, -0.5, 0, 1.0};
    +Point(2) = {1.25, -0.5, 0, 1.0};
    +Point(3) = {1.25, 0.5, 0, 1.0};
    +Point(4) = {-1.25, 0.5, 0, 1.0};

    which is constructed from connecting the points in lines:

    // outer box
    +Line(1) = {1, 2};
    +Line(2) = {2, 3};
    +Line(3) = {3, 4};
    +Line(4) = {4, 1};
    +// outer box
    +Line Loop(8) = {1, 2, 3, 4};

    This is followed by a couple (in principle optional) settings where the most important one is

    // Insist on quads instead of default triangles
    +Mesh.RecombineAll = 1;

    which forces gmsh to generate quadrilateral elements instead of the default triangles. This is strictly required to be able to use the mesh later with p4est, which supports only straight-sided quads, i.e., C2D4, CPS4, S4 in 2D and C3D in 3D. See for more details the (short) documentation on the interaction of p4est with .inp files. In principle, it should also be possible to use the recombine function of gmsh to convert the triangles to quads, but this is observed to be less robust than enforcing quads from the beginning.

    Then the airfoil is defined by a set of points:

    // points of the airfoil contour
    + Point(5) = {-0.4900332889206208, 0.09933466539753061, 0, 0.125};
    + Point(6) = {-0.4900274857651495, 0.1021542752054094, 0, 0.125};
    + ...

    which are connected by splines for the upper and lower part of the airfoil:

    // splines of the airfoil
    + Spline(5) = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
    +              ...
    +              96,97,98,99,100,101,102,103,104};
    + Spline(6) = {104,105,106,107,108,109,110,111,112,113,114,115,
    +              ...
    +              200,201,202,5};

    which are then connected to form a single line loop for easy physical group assignment:

    // airfoil
    + Line Loop(9) = {5, 6};

    At the end of the file the physical groups are defined:

    // labeling of the boundary parts
    + Physical Line(1) = {4};      // Inflow. Label in Abaqus .inp file: PhysicalLine1
    + Physical Line(2) = {2};      // Outflow. Label in Abaqus .inp file: PhysicalLine2
    + Physical Line(3) = {1, 3};   // Upper and lower wall/farfield/... Label in Abaqus .inp file: PhysicalLine3
    + Physical Line(4) = {5, 6};   // Airfoil. Label in Abaqus .inp file: PhysicalLine4

    which are crucial for the correct assignment of boundary conditions in Trixi.jl. In particular, it is the responsibility of a user to keep track on the physical boundary names between the mesh generation and assignment of boundary condition functions in an elixir.

    After opening this file in gmsh, meshing the geometry and exporting to Abaqus .inp format, we can have a look at the input file:

    *Heading
    + <something depending on gmsh>
    +*NODE
    +1, -1.25, -0.5, 0
    +2, 1.25, -0.5, 0
    +3, 1.25, 0.5, 0
    +4, -1.25, 0.5, 0
    +...
    +******* E L E M E N T S *************
    +*ELEMENT, type=T3D2, ELSET=Line1
    +1, 1, 7
    +...
    +*ELEMENT, type=CPS4, ELSET=Surface1
    +191, 272, 46, 263, 807
    +...
    +*NSET,NSET=PhysicalLine1
    +1, 4, 52, 53, 54, 55, 56, 57, 58,
    +*NSET,NSET=PhysicalLine2
    +2, 3, 26, 27, 28, 29, 30, 31, 32,
    +*NSET,NSET=PhysicalLine3
    +1, 2, 3, 4, 7, 8, 9, 10, 11, 12,
    +13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
    +23, 24, 25, 33, 34, 35, 36, 37, 38, 39,
    +40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
    +50, 51,
    +*NSET,NSET=PhysicalLine4
    +5, 6, 59, 60, 61, 62, 63, 64, 65, 66,
    +67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
    +77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
    +87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
    +97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
    +107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
    +117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
    +127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
    +137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
    +147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
    +157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
    +167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
    +177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
    +187, 188, 189, 190,

    First, the coordinates of the nodes are listed, followed by the elements. Note that gmsh exports also line elements of type T3D2 which are ignored by p4est. The relevant elements in 2D which form the gridcells are of type CPS4 which are defined by their four corner nodes. This is followed by the nodesets encoded via *NSET which are used to assign boundary conditions in Trixi.jl. Trixi.jl parses the .inp file and assigns the edges (in 2D, surfaces in 3D) of elements to the corresponding boundary condition based on the supplied boundary_symbols that have to be supplied to the P4estMesh constructor:

    # boundary symbols
    +boundary_symbols = [:PhysicalLine1, :PhysicalLine2, :PhysicalLine3, :PhysicalLine4]
    +mesh = P4estMesh{2}(mesh_file, polydeg = polydeg, boundary_symbols = boundary_symbols)

    The same boundary symbols have then also be supplied to the semidiscretization alongside the corresponding physical boundary conditions:

    # Supersonic inflow boundary condition.
    +# Calculate the boundary flux entirely from the external solution state, i.e., set
    +# external solution state values for everything entering the domain.
    +@inline function boundary_condition_supersonic_inflow(u_inner,
    +                                                      normal_direction::AbstractVector,
    +                                                      x, t, surface_flux_function,
    +                                                      equations::CompressibleEulerEquations2D)
    +    u_boundary = initial_condition_mach2_flow(x, t, equations)
    +    flux = Trixi.flux(u_boundary, normal_direction, equations)
    +
    +    return flux
    +end
    +
    +# Supersonic outflow boundary condition.
    +# Calculate the boundary flux entirely from the internal solution state. Analogous to supersonic inflow
    +# except all the solution state values are set from the internal solution as everything leaves the domain
    +@inline function boundary_condition_supersonic_outflow(u_inner,
    +                                                       normal_direction::AbstractVector, x,
    +                                                       t,
    +                                                       surface_flux_function,
    +                                                       equations::CompressibleEulerEquations2D)
    +flux = Trixi.flux(u_inner, normal_direction, equations)
    +
    +boundary_conditions = Dict(:PhysicalLine1 => boundary_condition_supersonic_inflow, # Left boundary
    +                           :PhysicalLine2 => boundary_condition_supersonic_outflow, # Right boundary
    +                           :PhysicalLine3 => boundary_condition_supersonic_outflow, # Top and bottom boundary
    +                           :PhysicalLine4 => boundary_condition_slip_wall) # Airfoil
    +
    +semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
    +                                    boundary_conditions = boundary_conditions)

    Note that you have to supply the boundary_symbols keyword to the P4estMesh constructor to select the boundaries from the available nodesets in the .inp file. If the boundary_symbols keyword is not supplied, all boundaries will be assigned to the default set :all.

    Package versions

    These results were obtained using the following versions.

    using InteractiveUtils
    +versioninfo()
    +
    +using Pkg
    +Pkg.status(["Trixi", "OrdinaryDiffEq", "Plots", "Download"],
    +           mode=PKGMODE_MANIFEST)
    Julia Version 1.10.4
    +Commit 48d4fd48430 (2024-06-04 10:41 UTC)
    +Build Info:
    +  Official https://julialang.org/ release
    +Platform Info:
    +  OS: Linux (x86_64-linux-gnu)
    +  CPU: 4 × AMD EPYC 7763 64-Core Processor
    +  WORD_SIZE: 64
    +  LIBM: libopenlibm
    +  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
    +Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
    +Environment:
    +  JULIA_PKG_SERVER_REGISTRY_PREFERENCE = eager
    +Status `~/work/Trixi.jl/Trixi.jl/docs/Manifest.toml`
    + [1dea7af3] OrdinaryDiffEq v6.66.0
    +  [91a5bcdd] Plots v1.40.5
    +  [a7f1ee26] Trixi v0.8.7 `~/work/Trixi.jl/Trixi.jl`
    +Info Packages marked with  have new versions available and may be upgradable.

    This page was generated using Literate.jl.

o+`}&I{HGqt+^*XKtL3qw~knF@9U< z`XFI(vQhnO?{bT0qfwp-Q>HPym zEu*QvwT%W!wBF9)PdKHMWz3lQ*Hr!MLOLInuG)Nz-uJHaE++5pap!8rAHRQ~8xBk0 zhwW(!^nDOq^MsGiYuyhg6;l26X6wsS{{5YmjNfQohAvazqHD!`_wYm37{))S|8Bx+ z+Rnw=g8+2sXW!5iYFB=8f637DuP?^IKqDSzAOnCBex%1@033*WU3%>)rBUZ37(IS= zIJ}_snM>v{cH+zVXZ*DO+_p^&o;aW+e2Uh49TsHlucE;UrvB{igWa@T`OY{vc99>* zN=k$BQflLw`uek#Fw7XA%cB^3nc-S$KGV>dMrW3P% zD4dLA`?!Adg~tqzHY(!bkLyd3P7vkl4J9bRx@Jx?gU4I0=`(gw)szA~*e~$~jGaH| zVh*4OyR4(d;N$wKQOxy`ZxxvOj;}ntY*jyw`R<2Q5B=~u{?9WqOn>>*Yctmg_VaLz ziNZLB@AA0KwDaaS?|QFfgq`3z*@?Ey{j1eWnEGF(F!Lxs#6~xRe)^4YB9vxnN z^=#htjS;+h-T&G{=P`02|50W;1nt3j%#-s)&8A{PN)vM#bb(YCzUVYALUioaGHCpe<+z|6Qt;Y4n|LOCT z4hQhf4jB;8YK#Nh{PyZg!KbgGp(EsZH_gszt^;abGK!^v#>YK{*dHrPC zaXrc#A4QEky(O;m#!0&(!kZv>mVVv`^zABM`C1L$c<5crTMuMw0G2|Z|NSpv3wiBV z`SJ8w!Ot6C2mc!%O?24{c}=E+F#hRqr2Jp1IMydL{XOpYa3!yuUnhC>4m)^!KfdNp z<>LOke&V7?hM$4imtMD0V;{r66AnW|*e8}3Vf+jyH)C0V>m;tyg)H#xOC^TyBnR+- zh+mrj3X0;KkS$%9!k@R7jzpYam`85}yEJ(P!ymr5ncI$)8E;)V)mDkA zKQYML_gkdTdw!#RJi7Qcub(p((~%E<^2D7COS>n{jT{ueRxm0>zUSi4INF?!MgGQcv+i)q-8?C=OHJ#-Bj(PUgZ@ gw zjY2_G4?XG34V15Yd2k!$|H&sGqW1YulRtwCC+Eh*Q$1`Aa!qOdaNZ6Kb8gBy5n;jQp)A}bmBFz4<(1g4w z$~RO=xzhSosk0VR9J*QfTOIXZ4*d4{UJJT*;p!2(&$L%*96lTdyZ`&~I*K3W?_c6b z^?kY^zLnw^|Eu4SXczvF-2E3R?ljr_dIGiQ^ZsV&(e~9QXNXhW;<#y8fcDSzhrg|9 zoG*VwQw^<;_;O|(eZJTenMw3IgDKygX@90)-FBDOyHwp~*1=a6Xa>{g+MRqyoyxD$ z9K-ahN5}InT7JMg*`MM#qwcFSKB9iQpOvX2=$CYD?e(CN<3dmE0CkSH5~1sdZQQ-# zqM*h#3P0$5KJ3hfJQ9S6^a{d*? zOY%KqAJXeDJXac~|IfhHrgn-CpIsRmNAdo(?9E>Ec|(%F-KBaS8!dUuJYTa8raJg_ zChQ+W+gH!oxt=~(mf!xiouHAWhqp$9>g+L1rt8Xk3AxI2{kH33&#lFvU)^2odr8aqU#>3t>~TV+LQcuVVZ`n;$5xd2#*N2@f0AL9~k!vXt^%&x7?pyNB??X@*@A62dIG-i0<|BqWA z(DxTziD3Ln`fpPoQ++O% zk4~cH|3v<3(RT7LJHTKeFF^p`Qc7Rc>mQ-@&gIWAVdMYy4+){PNb~k-di`OGdN_vB zk5}F^e*c#*Hy@|}ufoeFDSF-Eu!<}ypQv#M76^FHKynP#Gs*YQJvyFb{%imSfxlvi z8dSWGucWf6T&>r`C6wP=|7|;^zbu?!P=L=>GZ=r(kyI{&gU5ZcQl{n2*-u~*;crmn zz~W;b_J0Y78^+UEeC8hf#i6$_RM`I%+*nNMm~0&TLw)GWHOxHRV0w%hXNP=8C29Q< zL?%-DH>MJX3vpVn8h zXD|#V*4p!Cc;6M2tukcfS9RTl;m3Me+l{#{ z@UA3N?lO5ZLo>`M;J`lj8=l|WAK6Q({u*P_7@B5^?GV(@HK0fj_)(vS7aY5JxLo=X z@B4|FW|&rS-I**N{+?^d!#NFUJX~N`V9wO%Z^Pc;aAch&*|Fn!(KlEQalPd7{qTI8Nr}wi&9v{4pCue(;*N)qN`lW2) zm47wn(Q?}TxSsCrP`zILhnKnk;k$SDc=f7OUDUhM#|Cwz%NtyGe+iEw*&M@L;q9UI zNwhmr|G#|-)<=t=-Oq3?Z+~5>T0Mu%^BnBbU5xw@@(WL~g1O{V!QpFPH-Wz*>b>_Y zmqg^RlCm=4B9DUGg_HbTqETnESDeEklM)V|e*Td|xb}0*Pxf(0>KDm@_8bm*UAXr` zGvdYHKeVq5m*J4b*Y>p7YjVihS_M_XjT{m`WbtHc65=ncg1YKoBL7JGS;@FE*duat z{1g!mxzZE59-EEh_6e+P8*8>a^|;%cp2h#jdMN? zhuy=uU*iY9(~ws(^_%L%mFoRuPm=XVmGAu|O1x|GbYaBnH!jJCb)Dg@_`9Qm+GuIiaZimimWb`;QP>Km*b~r zut**WQIOxnBI{z$WL~c5BPqo)QjaF}lXnsZp1Hf&M89y^E+gc#`0CQ(rGR{y$EMDi z<@U3W>~4v>KjuLCgS0c`kh$BkIowAM-5P6`@ve{PPDt>IgWmSr`p0ii?Io-K z=E(Qe_K=wyuEizw_K~9vRzcQfxX+ZJ%iYLZwx#1`n-RW~5?auC%w4OOI9Mr1Y-{Ty zu^e%O;5_Kva_3%KTpxM+MA3P}1jq}$9TW~j-tv5pO`m-G$gArnJ2GPW$nTr`buB3&6UT`kmp_g&-&qQ$-U%*|I>gktv!VMZu|SE+CAj>r8qz3r9I@~ z@zw|YT0NxS(kqqwqle5%l^I>Ef$!w3(lxyn-;M9@E~y+i-c1hAp7g`}OgGUO8=^>^50*@YiM4tMo=O-18z5f^ea_O!? zL_{~q)*Vgb&+I00K4fC;NHt8ii>?sP8h<&4|*4T&0L>t7k9y@tL@{=Jpbk<$^!uKlGCEflvJRPVOa= z=K~LHBE4j?NSywSE4^gwj;*#47*~UyAG+#iV0;gI8XXAgAr*U8S-dOlA>&$XDZw3v~9{SKd)67wd^DDMtO(2Am`XQrCt_t0^5h17B^tL-02-vc1OGW8Nm>>E#U-&lUg8mC;$FrP!$(DGQU34t^LooSZ(Vt$@Zo6ImuWBE$j0))H zAis@J;c=A-$mciZ^dpr>KNk71&q?I!dlqS8uUY(SJe%COsZjF+dTzZXuH+`oBHR5R zJKs6UBL0e}U&gnxi0K*aDYaAB%Z1tG zRrTzPvB(3YcxO1p?FafH>1o=8MJ&QrSnTw4Ka04F-_mnLd#@eu1wX@ltL1id>_VMB zQej>5>yAYq`DeFiRm|=_a=7B>(y92qQ*Caljg>m`>NMI)%trpg?2Z0ywa8c4>fY4v z?#L$X+Y2@MkiRG+E8Y4Z@&pY#^F{s>WRs^Ra(Wi(Y|`7L7%PB$J)7p&+T1?OCWH1b zqzX^5$*vF6Rw+SG_85a5{VSmNRJqN9c4)uA_`VFj!|GW!YV+kd8}XHkei%xziO>hV z`UbQo{jK|k&}KGS*&veZkadpkWcYLMzQu@I~ECYe9B!8yO4AH z`Irk8EbIf#c(>;*i%1uVNERouNl|BWf$vG^r6puCXoP;)+_Aj`?PY$h2>ia6O&m51 zh7E8Pd9=fx&tO-$=llkgp| ztvABFx3bA;HNnSy=-(|`ZvIv$RqU(0q5RTD!(WOLeC{> z0VVSf#He4LNExv@}@JH#gQcSJvoUyAcMe{Zx{XZDkk>U1UhnaDeEvcC5Fh5_=h zjT2s!$0jaCDy$uS7?{^}z{$HgRm<)+c+1 zO|pK+bk?9BCH0-WTm1%zx%GvkA0H2pzsvV&ZrY6f^0M?J1b8wuRYx%mI7`KA!^FIe z1H|xYWazU*d>3P~lcuE-_8AVoJ-Qt6jka0yMI~{LC-_}i@OZufa?Pi`KY8f@nbmvo zn%#o|Qof)eeX%wCQ%{T^MW(`UT&4U$XCv}8Bp25AMfH=Uc<#Rwf&=8pw$j)I$j2U< z<(ECPdw}?gn!gIK!+4wb_^PT1@-S5Fk9>~vSPM;Fr*c04JsvI$496j-yVTFYhhbX3N{xGxTkh?mK-H|RF()aAW*CtyIF?;x6 zu=@%2`z3p;%o?$tke+MQI*CIr$3&R2kjLZQUtgthD#+^*-rN-8iuFjJ=0;(hCp`0d zR<~F_&iy+TQ#oWLUNfb?7WquVve(3Z;E+4sQ5_#Aaf!qwON+p5 z9CD-6y6W924oQqNUL}fpJF^omH$=HaET(Zw;Vdrck919m*Wi#HPd47S+`u6kNxr%# z(vc6vqRU)$fJ3USJ%)C5BOgjXOUr2jhxp{nUGtabkf1cTkT_2cnH#OO{?%O$>5BE? z?0t>=BpvBvx}ax?#DS(4x%i*bvW)9~V1MG$p8Z>w;ryoOq20gSFm701w@5DHk{mtl z$%doI!=lu$`o)Y(0up}qH5}uT1#LDLgME=VCit`UDXgzfk6&?m`W!APb-r_awmp}y zvpvjBgSaF+^-;^5Kzz3`c3-x4KZitI4@mev%pqH^>b!rd#wDLWWk+xIiDHtF^t#;r<6jPyz_83`bx>H)|*+*AFj4&NCV|9J4CxC4i{in~jV zPs90Fv!Kr^ZQ%7%9vnpbCoH0jy2fxx_lvqGD-I&R;8C-XV`%?QiBv(x8!kzn8|n22 z`2gSSnsIc08S>-!9jMg9b0s$KtE_{Zhne!vm*rgY)@7}jnHavCBxw*WxNwk&NxB9` zVcpmh88TTmg-cfCbRYB1Lw>+VC2ke(kq23N^jXC>E(uI<{8k=~Jc?|KD9@{05*uu! zGxP%eA}03bP!IAO&b6+PqrhPuBlRUaf# zOVX?+*n`iE=u_W6NOD#>RPG-^K1Hj{!?rSmq+5U4o^2Zk$s3Mj#csPn@+_e4;{8k}GvOoX&927x<4=0&X7M0doEtQD@bw^h)VV$<6ndIpnU->O!XWXm z|7fmnJV;Jd?XUCMg8QZ1SC_U$KFz2=K7}WPWJ%UgQNd^2XZw$sxy|@qYRTjITc&;| z9V-r{{2zO79!_QS{SA`}O+r*;h)gL>5|JIsOsS+ym9YVdNTo6~sbr``hC+r+QG`U4 zP=+|iRFMYJpdt!UJ!|dze4p#R-s|_*d%e%|*Vi9?T6?d(_uA9ipS|w;oYN>ZM0~kg zZ1%Un_gX(IzxMglAW`w^@Vzt@en-nMTA)jHh&=6+f3wMUh`f2)Hq9N{=b1m7m)$W) zBE0Kg7w`>{lY73b+y%c&b}~9!yLxCa|EN2j^Fdw-1ujpF^AYLH|+w(@Zb! zA+q7r)cQ_I`2DgU5gSBoV4Rd!x5&fyZ#oKJ98bf5wblSA;_ z#MsFE>>x?g4)p($Ge}M-?Rs*(WDxl6ynnwwKtH0|gllIEkqf89WY=2`5vjF%;>tsZ z$gy7;Qa++LE zaXUUlzL!5)ES5e*s*+Q}JPKgEW~^JGczcL&xAjUKFB&5Ghbl$}V4Oqi3a*vR9wL$J zb2gg_43VVFfQPXghDhp6(_}{&r;QW+u)s7br5wqVzAEkYUNOSg!cXxPT9z`20l2QgqZR~96P{_AlvQ+0s>Jafr-JL9N z59@SoYrDt~@E4Ef=kdLS{qacoaKG*liMn1~>#$^qC|{O-P?kPOCOqDhBYJL-v|P3` ze+2%{Pk~2m6YR%Jw=DbukHYV?s5H1ogI~e+ zG)rxV-*efaZherLE^J;#ZXSe z4|uM4=ZDuC_}!UME55~J1H@#u^HlTlK@zZ3N8DlOAkn>JB{v=XX3HawrpKKFWc8G1 ztsXz&`xrH*nC*M?gFHz~9rRHiBs*u`2=#_@nH{07waa9H46uL1b{2diGr4ABpph%! zIR&n@4E*nZCv)L@A6#7AGr6bw?(*8R%fZdrd&lyR@bHoTadYv)a~Jrd{~&PmF?@X`DU6DH6K_&D|PaF@q0HNL5&6?6U( z;?#n9C4!G#rg2Hr93EN|)a9|u-I+@mI*D;)rUou9Uw9Tv1G`lB|IdFWaO~yc!np1K z^N(ree;&^j()Ao8{_le;}_ z|1bP^1pYe${~dwQJ0m`XzWFrp#NB=+ds&Uf) zqbJXil{u)-!G#=L&cXQ{{6!Pk#DyaZaPR;Jlc}L>BFmBg)BXaEe3pY2)BrYF#F5u? z@IU>%z>x=+;D6X8nj>>_Fo1(Yv;dm~aoQE<$a^^T`*LK-)mVT{EVUWT&sJbCU!6g2PCe=zec3=JJ!~_BQxzF} zLnnq!>Nt8b1x&kfB@6~^VDviZ1h7ehC?f|>Lj%}EOOer=)WM|BInKy7HcY&qjy|1mHaYqQ4Plc;Isq^)oN-&l=}*Zk z>^PgKXc$mTy3fcZW;j7?Qfte|tJ%g>{xk^y(&GitKsL#j#DQd!VRfc_B$-WR5yLE) zNjChh4kIVO(V*!uOK}3(WT`Oj7|0jCLh)D-c9cz4PS>Sa_FIXf)mEmTneXSqf7s-% z^C>1h4F{G@gb(Xb{PK;d?`K>xZI?CNPVvJkKbp_K2zL(5+rHN@P;3&C#0v%3qYs<`|y?nE#?& zgQnYy=uy4?vxBtWC8Cywm@oQCqjEW5OSmPt0GO}Mc`&nVa-?cCOcPqybF7-hTTPqRAp>5zPN;V6q$WN@*UIUmJc& z#{7el&+JtJi{!+zF~2=nx*OB~2|R;|V-rnJ!NZvU*t%*6(?|WUeaH5P_0Pv*ex%V4 zAIyJO^kF~+u*Ob|C=YYd*ybbymzkuO*Oy;i`;oo?~u_8L$u?Z(zipHFO_eihwXfj z&Gc9TSa)N;2jl^U~6hC%KZ7twe<#qWZ%h{x2j>-{iZ?u2g^^1Um9d(DWABzHptM+f%%aypKZZ$PI`y+CuCQe}C^EN4q^!QZ=!ENu95CH38#F5~iVjDJ2WC z(GF9|Y_>n(pF>Y;tN?F~t-UV?7!%ARtpRv5Vp6LlI4aN7s`?P4hJ@=PzOmMzt z9x7FVSnt`Cq!jGO+a;R9*#A3AB)%dxSiEq+_V|26={{7k*OEi|#{fU=hem7=oJ?$T zDt!1f;%@yOx(_Svq)DMXB{Fs~;`5(jRL{`VEe!3Ettz4WaxrU&&NJI?4%Pc*nF>cQ zjCYc7G}@WSdX$6u8ZO%!5RDX01!KP8kQE)5WcI4>H3kdUPASC9UG{=Z-Nue zHxo>txaYZ(BS|kw*tXc7);qqXnWEs^78^{jO}tM1p<@45ie2L3)ZcDf zdxPpliO0i<$R<otCs2#`uoTB;;BkO3o2Y4OK{~!Uw0BDr-V-2D(?*NtM(jBS(O+#=mke*e@*x4Y% zw6Fb^DKF&=*^oad#^7yO{U|SRWcqVQhLLmTFepNaBdjY+Ms^uz>ir120n7b6#iXzQ z$H>3GF{qiz=$TA~+dQ+`eWGcH50 zsxf^Y0wA3Zz%Hy7unxNk=)avo4-U`5)r9G#SRG&?4j_ff+>>|W@a9Se5VMj3%0c1Md zfVgTz zH#=zu*<=OMN60q-?}m60-2$K+uqH&`acl_uC}$lHTQd1`r!r`UG!OE3XkbU-JfH&z z{`ne{pYVjq|Mr@Zrx-AL3$|kiVLtts{NzR^-++(7#6iZ7#TDTIut_G;U%;veM!#_r zg9jtP{XqKu$v80JcdGyZZTB7mok=I>z{cH>FHHHEoPu`woV$_I5Dod4bG0?cIq34*Madm)3LE^dpsfE;8k! z_N}Gz6=hM1+A}^=oMFt=6MtqKmCtWw%DcR7qO#(dCTIZWbMGP0V;V=9f{uqnCkBLAuPj5h@QBr-Q+8&djoc0c4Yxx-Veh zfY;u;PV?;--lq6HUK9ol@;8jb#IOlhRtZc9?DyMdG{3xXKW(>oyN)rY-`LlxhgdpK z4<;J!!*jV{tFg%@i*K;v*d)qIfS$XLX7ryy`P88BY(($7Q?(Io+hS;a`)^Hxixk`& zSp8y{zByh2Ry>_X8BzWWx9tX~Z>U(RUD^oLNzgd@6$_;)=4>;gyu%6=tu4gBH@o z`^_-_g`f08u6 zJnsDU>O|~U=hT@$kjLs(ZkCt>XnW4L`6uvh?~c=D8$cc!?mCC%^jz7U(*QfW-Hu@T zj3;Bdx~i}a-kPdLfc#5iZB;Ln+Y{WrQVQgz<9mEPA>YI6Kp6|Np9wyzJx;e!z$I z;Y0tRz0$sP{u3aN$d-zl1G+zT{(BkH2UnfpkpQ`Pim_BG*b)D?yY)Myi>9Uu|6ax> zbDYvA&xQ1_UnA#60e*LkO~!unx_^4dS_0>D(j9I?NUvU))I`()1B`mNEQRy_$hOl* zq23HnGbQBrLd!4uN(0tKMy|nrZE-#=hVwCD6<<5vZ-NcE2E+hOTW?*F0jyLS5ykXE zd3GVDf6C`QGa0b=AUAAqHt8F^plJ;#z3)^1Ho(gQL)q9b!8u2XH`p^Fd&`S*kXHyk zR^`vRnh?0PlSZ zIJ*VX7dy>Zi|calcIDr=E?8ZGYw_N+tE5*H*GFBFq~ayspQc(2??pQ&RLVY(1w0;b&j{D^qiX)Q>jB5=V*Ie)t|d2(P>;XO<|N*O zPIF(`jr|u(DJ-82IJY?SI^O>V9zNT9AIAH_=OCY}AnzY9lfr(d3nyBgfPS^)3SWN> zSo=)lBG%h`a>04rCw~X00^@}J8WX(_@sp0oRUFq{&a3C*eY7`DyIHg z$}Hp)%8CV7CLspfOq_-&RxAkz8}zp&9u6uvzn_`OV!z6kXf$KLM1-`dAI@8(z=!$# zr!|1OK-}eDP&%&P+l!9;#&s4x+3Fycrz;y-WpMh{a z13c|+K>g|XCL4;wmI?ISNR>TD_4p5Z)AU~h5)>yt7ovFgy%RkL+TtSUI7}G9gBI4g z6dVVDEBV7ICOk2t=g5J#ne=?B^c<({CRaL8jNdSkBK+3D3$$}pTPr;e&TTcM{`}wr zWSTG@O2HIEI+*&`oq=J8^l3)Sxqi8Z;UP=gz-+9?4~Y%%NfZI+KSN^6CJXl{Q_SP= zrZSZqR90Ay1RKr^MI=bzr|;-ebn1j-8f2|(43L6fyZDOAeao2fu(6*@1BZPc%-DO=9FjqHlmY;J=EYzk=iXyg%=Gg|HKV_2 z2czHb%jliVWl-EvmX?q0g65%~2e2y;jW7%d*maA+cWsBMtaO^m*OO$%Z~bb9cNLz6 z=?8sjlMsqNr+g^tsWCk3ZH5|^=e&gJ0lo8_d)ovKpD)5;hIA3E7VsxF1GvbO!Qz<= zR&wTLA$AY)8)26qDsXu1{R@oz3Y&%W?;QO}>lpd&52l}Lf=s_m;WS6Rlu<_hjMEA7 zif}E8s)GQzbAnx13;JG#?|C$AMoK5ny zn01%Jc^;7ptO?VjelhyPRoFq`F&fNz9%yFL59Z>4Kpf;EGu|=(n02+_{!yAZn3F+51Fzu-<_N01_ea!y*$caxZ z!f-d}3C0Uj43@!;g8v{4f4=fghsx8`frdgl3B5|u_4{@(9L_oWM^sj^t)TTsUZ|q- zg@%tX5fJbEWDYAG_)Y^8&)%zy3km#-0AqKnbRKjZ*1vEqI1m_zKWAzFjPFeUTN@$V z2kGJI?No1_%w@Q^fFEnbiG}m@C5z(2Z-;1m4+2zR0Ykr~D!_0yak}P9%U4X;OY_gk zLO2!DrOLVJx#YD*_z(Kg*o+QZ&-I%j&~b=g_sGCNLOi@`2qplYFBRAb_oY!u93Dg(*BCJf90np?0AUx4J?De9Na4& z2tY^z?CrS)D;{`&##@+3=wHM8VN5?HRt268_+Xr^1!COGoeqcx?yvcQ`Hin$XQIqK zF^$GOZH3!C(as1VnXQ;FCvdhC^PkmA!a)M@nX4c8@w~3K|Fjyd&UHgs)79>`Y}MEQblbs0=BoL76Z>3HZQ_}3!e?Ow9)z73#ln|>$q3zb`* zmROG|_p1r0f1LejC-Rz(1MzjrfYn!XXny#>ry}GTg+D4f@%+swKer3*YCf~==~O_w zg>}-X?{-EHLJ4g0(X<;PZxByz)!c0W_|L!EUIcig`}QCctmmosM>*v8u`2{hkRKf^ z3(rNK=Wed}Q5txQ!0VT;&LH<}Q9t_&RG5NS-Hq`T`LfpX<%st&qBf!^50+oRrLrZmelb2C5Bk49_G}7*^lLYE zSNKEya?_3W-qHp;LoT{jDnVRWW`*_Y9u_h6>{)yV^mlka)e8h(*}HKKzZ=xAxa3l( z@hY(Y(2?>{D1X4eJcmaG)`!`Kuq4Re89DT62joZ2>APEGXyoxg{@Y9Y7p;PRtl1Q{^pzsS5l1!iH%fxtz9rkIseykE zUTZmK2Jy}X3l2vvhI`QTi=(%jS;VkbPTdgt%ld(J5$iq5zYOucn_HJJ{Ui(7; z#+z^VDkCizhv%UlIr_jWS@w>)U|+o5wB%DzuHj6}trkG7l5KL~(BA5aT>^gqJGwK% zt)acrQ{iX+f-GT};)D0VARn^{_W`%%*AC!4^2eo4BX_{`pwZVNfL;BEO^$(nSX0@} zT_7Lc^R7q$>UmS*7TW{kVYt0JR~P1u|J?_nV$jPhnyaG;_SA=6EnElrMva@3X08Wb z@qOAU9T<<4$BH%E041M{#^ZCWc0b++e;2`enbtq?DU`RkP~e0226v^S-WvdeES2nW z-~CG%x0eSL*O=ou1bPL_+>UhtYON@nhWGh+TkDkdfWMmm>7&fPnBrj%cK#mSFO?56 z@9`~fa2(2sQU%_tc-ajK*#61t?G<;yUQY!}HN5{S_4h5G0Oi{2JzRf-{$r2&;E9mF z_S+4~FECF$0&OFDu&x7bJ;x+KZ?9ie@i^pf%WqsH2skU%)OG>j>XsQ5=-*6!4hW%t z*&8X$Mt}7E8EXV_Z*5N!V$#~pYUn?D8=AyX-lz5k4luYET1x>V0v_{s!WHb-Jx%j3 zI4)oJuja>eGsDPE)Q{Y{7MK{^Z)KML#CaWv|E7cYrqygAYaEBQ135qp!M<_*Tj&>O zOt6eV|8vYtatqpP+NeAU{hn8MmpkSwB|lz`{&Eeu`x5JaS#}5xXyCi=Fc1g#eU~yI z5^%q>{Z7x5=wChCQNA~|fu1u?f4)$=6~hwfIk-A|D-a5ZBixRs{yVN9f%gauXZns`xc$8Om4LxTyK128l^7S81rgDe17UdJ4 z!Y|PN72gV?=~5r_DGn{$O!ccA57F~8$L134pHwcs83OBY1_0pGFFWXXX>HwJjdu3O zKL)}B{W>7AHc)7S_Q*0>qF_)M^&%BPLGVGY7Hn z7Ysk3O_MdnEgDErq5p?r8UUBhWAdL&5TbU z-0vi91!=mUI!q_zZ!?-rar1S2AOP#>d^lFBu~TIWs6qKxI2?e7U^gN#n233w>@kRK%Xm2em%Y>0!bZ_Nf`=8({kPDkgq$(Ndr4d9BT)<#KPGhYrDeDc^()5uXR4K@d;B zv4G|eP5DCQr;E4Hc0FXQ#&Ewn`|X5{#U{zGWhif7UUgapIRhW9NGp83;1xJ-wniIw@toyPUIU0TA}>=uo|s*tNa)0cfEDZ{4o8>!@)V& zuKgaLc_{BW%1!SH_4CSMqhp*xWhSEQdNmdFhh`}*5SajeR($VgRR^u&*cgW=!Q@{sGuZ{8i)BUt04AWg-?6g4?x?84?_53-cT!?(- z)rO6+f`GBf4|K2{G4EBEkte@?DgEF**j1HPKO6=)dSjO3bHK)!rSrTXf9BmMReXS{ z<7#nbkiJOxmB>TjDWP*FreK`5P2X}Awl^?acop6|{=}Cp!23adm21j1;5qx9eH9%+ zUZHD!731Zz%;XD@w~V{^mzV(##H3if1-*sKTQt`~{VV#cr5qr=%TAkY23)}Qg^&-M zY%C9n@B}_3n-Rc{N90_Xey3|1ab*~;YDQ+TOdd7z*I5m^0?yFT7&u%7ZTua}- zD|<$cJ;+H2$fze=j>Z)&{VeiTC`9SPx@L0W%+W1vADT)3a}94vnBNHTj)}?AY?3Cr zOxIoW$@c+K+(jLxeCN8aqm2LW<-?H~YUgZIwDBX7Yes(iy z&^vm!D!GN!%rqE@9c&@?pN%!5J~or@C7L%{=R-d_=LbLh+)M%_%O!8#Y$FHuu5%oy zYbU#AF7I3j=?jX?6LclO-eo}%(Izmz=ifiv1^XrAiezFS^h+)-DlHJkdpsz2fh^q1 z_}&_31cIGERnH9Mzd(W$*f6)&tXtnw9MxvQyUatPTKLmI@`^JVlPAqbz(`-$w7K>bX zoHqaYH5S=%0e+zDD~oI%JeKA&1MZEdeznQ}Y9dz)0&90WG?Dq`iWhFPo5=T|KV46Cu}-yeg!n&toj}A<6}B{;%K*6tH_23*w3z!zYM;@eiE2+ zOo1Ev?f$-dSvcsa{F?W{3G_ZZKU5w9`*hFQd=VDpTQARH`GdYkmc0@9*YrK7^FZ%??8TWYVEj}CHk&%9HW3}ZS%*eWv&iL+@Lhez zz&D>v=nI2=yfJ5Xk{#R^ZR8d$$LDWHR?6wlg!%>Q*K02Zd^36;-eiFDV4?4I#A_L0 zHUWTpRD2*b3hnvMOh-TdcUGbg>I)PsPF@JewV_dOBG~N{y5#&dkZsm&a+L<0k~&_1 zepP<9)^Q!cexDmvNsHk9yvmLvejvxBryS1!6ctG*&H#J#N9wwiUL=ZRAJq)r%p1|hVgV*|HpJ4=(nV%eoUvPNvr6TqFZa%{ZsX8c>)BM$h7zyBxRH`KS>PhJD)eMCIE9qhbe z#I_p-`LxX>b-Y)4ka!O~hlZqdtLy`Gx0a?=GB2 zK9N*=6@+HrT4%}hY%p}&>x-klxOW+dWqJ*?Qn1}&f^og zi?cA_wMq>LEUX{@cp8_?$&jIX4#S(eQSaPn3ov5fuZgX(+5GP%J zN$tsO&ZQXUFq`7MD269%1Ofd6y@KSq)K1?mAcE}k*OH=KISd2H35kqe$b(+muSqBM zY5x_DF}!$tDVPa*=>ZTX1vEUPKoECLX{S7MHP3Tezrc+9R8Qwc8pW@ZrKX{t(AJNX zPfoYWq4k@MyC>W_d~RcC4)h$C z!|(#`JrBzSFwhxa9D;K+T#?EFbC`P6EMU1ox`ZV@Xn_3`s70|``X@!LP8=B6|IR`b z-D{>(TwdNq`?qO_7?t-}G53H^yYPV-@cB7F9{~;PLTNvwT~5*ZMECrqc;PdP=D)Im z*N8zc^4wI)Z!KI8(D6zuBZci}W6H$R~)lV?MQk>P=gs zK-ag%0 zPLao(0Vh7lqW&Xl)zRlz{)PCE4f6k2=YQs4d#YSXxs;w$ zVXWt_RP4(6fIYGI3ox$KdNf4{{m+5HC`XL9Em`uo9?y?iGh_QL0h12QGqr*9<)3-X zW90FfYKunDzR>tTvXX$ywwZ*!0bEzRrrQ|s(TyT_qYV6WZBVfYU~6LJF6Zu{#efPGxc|Gc1tJfb;UnskbLy zLcL~h`nalov*6y?DRLF!`I8cV*BS!9k}Lmgd;oZdWVT!RzG^KmN4jEq^8S+v7xNsMkFf(XYGVZ$1F`z*qG;7onX$)5`7jfd95nxYsi| zjYW2jtkLnwfca1{Ucarkon$V$`qf}sGr8Dw_EH7dpL){BQTi5(WUa}HP~vSNb5}KJ ze%#eeZfw#k*MRZ{+a$9s9f6N5zIP#H6RfYGFF)QGHINf?ZrxsomNDMX{1-0F7Jy|?!si5op{EOGHExt?>n zz(cKqOpUF18trYa)LMS-kl$nqq)@7 zT)z0mI%4dcyO~|M?}ZYND`!&mvKzl30$uJ8~?e34Sl|_r=PyEHW?N z#J3XoBs=TsMQ7mSnoBl>wgaC$Xqa)?9qfG?-k8&Ivx(es7rMeP1JA{NpO==kfp~0s zgZLU)mmj@(c8UC`BmHs1vwy;UO=aU6dx=RblEM>GxZpDIhpB#Y631b_X9m`7Z?A^& zNDvH3uO|BqE2esyKPUTpIvpE;7rJk78<^M%?^CJv8gCD%Bpdrx@A6EjBvP&J!f6ZY z2)QQbW@rt3Ieg1xkrcQmtzYjc2j$LqeUQg}x4X_G(hAmXkx`Je8|=T*YUz8EU_W<^ zdF==Uy|wS&l|F!bh;862n^4$y8hkOg$6)=}o^IP;59MRtl^r~G9{9ucY#YD%a8EDp zSQjh@>)#?;Wh?Bb+v@l7pTmBS4vG%EH?Ns&*==w4^eEVUvsJ@lG8^XW>+S$ecy1Bf zzc>YWyg<2_t?C=#zluwx|2&5Csdj2-p%C0J!ZTeJrNNJBcWAo8{b_01r>n=o&hIf7 z%JJS&k{td7{d}b6;?*+%wT0PRw*$(X)!n!P{;k<*w4)RBuaq5f!To!qSNu;a$jc2& zSa?r4aXr(0G4wxh(=pyBpl|we`>%RP54_8=jtA^N^L_g+&^Nr09Tczu{IBXsk64iN zpB(9Z2;XEafXoev4!YgXPa&3E!__BN_Vpt!-3pP)$hk5_EF7{nMjEC-v zIfu4^{>1g)*dCxCe{I<;4U}hmoeb9=NKcf*7i^%s#b+un_jv&yEr9dSMteS{{}>LX{PU8?S;~Lj zyoQexLHgEPK@Sl(shto)WUYkP76E4nNYdvb+Y*B*uMxPSEsu7K`gC2yeDkBp{D`h^ z%P2o;Q!S=EPQub;AEpneTT`BNmJHK)?!K=ow7vTWT=g-(Rf6G@Oqd|W7R|q2l=GaA1JNC}R2Pv@s zyE>>m{npuSD4&}AoR;HWAVKTbU(iDDKP7u6tf%ES$@w6%(|^)(`YwiaJXZya&~b@B z_Q?eECC>S8Lae{DosPTtBTxsK@UEogTwMRqadtYnmEO;V-RkIkHGfg0cFpmI>mcY` zACjTtF)8yn5MYRVxp`7MBdz}kVt&nJTPwsFcl2o-H!fOc6#3W9>u${q}xq$8uYY z&orT)Q$ZPh&%59)D-!R~1y=rpm@gpA?naz$uKWe{9*%qlq72VrF1H#Z53J03Mce0A zlI_I&oPwDI^)J*nx8eE}{&&*F0`QuG%W_ON7thN=y+K1M`rLA5;#bONH#(^OMqanb z(G%W;gZ1PRbqv?dd7m0xEVu1m$YxyMW;wghV10`V`OaheInGCQkWb!SJHuuHpo*O< z8~u&5dHv-X;E(>!xul5pE`BS%R0ps?T}lz}@jqtj9@qn@{?wbC0=?=f$s!oXu$6rx zHV3fJ#psANp!TsX@n~=LoBN&j!GHdncvKX5v~`c=Q;hHOcL&Y41+0ltU`2r+8A}=q z90EN7e|cT>PdU{o5$M-^pEj&&hWzvhGyNsdo_f&}q4#j^e9ua4n zgTl?AZ>)Cg^Fzp=X7MAg3HpSztcojwKp*R$TXVPDXHwLZ`3 zx)AVYIiBd#z$d*-w|Nyq`Q+BgIs@Rx$3hRRUkK-Q)t*l)di^1uuN5h{5z3t_>bZmO zLrm_oIQ|~WjdcykYk^;vj+!8~70zF!Da-ZkLH;t}tNdUg#0S*aJc)3wWu0Ci`qdKF zL-ZsEMc_fZf2AGM244H_Ys0a7z!zR?b7#)q32~g_sAC^5u*gJq5v$6miL_Q6{%~|U z@JyX!g-v=eU+cv$?t{41om=}aOS`g&hE%5US>QJzb1sraQ=7@md0TF;0zQ4eO=#Qn zHWqQZzfZb1qnTu!`((ru3;oL-NXuW-OhR~?HQoZRm33PG=Swl1=Tck9lU^2)?iZ83 zYFR**U)`~CBgB~(O35{%4ktcbnw;#t*}RGD zf75$;;ht7<$im%s)qxr!@chkAC&N=@ZWXW0q_9dNFW3L3L=xhpKPKxcN4LOp4tW{x z$>n6m(_KfO^<5@BJ8r(eKDC0}$}L&vH1j#}h&UsnYy5!p-|#hGA6!7@B=>i#&!{4G z2LJx$AE_We{t34C+T{}&OZ(`@+isH-@0r?t+{Gl)ICGZ5^GC$VV|u;TIDOy8vPUJp+T~tM! zmM2{v3#cXo-);mM@;xS%kL*NDeIAf`cZ+4Cc2vUnTmMQ@c}zTCHB6p){4p6D>oA#i zt&B+Ck{R4GaF3{PzaKvB_LzvsA1;}b`-qr+v93FlT|sUtOJ)xpx=%U|+iXerc?X`? zJUAj1T1nh9disa|J|-453j=cJ)sZV%zd!NrU=dgIfY)(wuSr}x+dQzLf_Riad%L9f zA?Y!7U41~ZhG%)px_J7OSr2aY7bYHlBXjdhk}dm!u#Djx+_!4$>#G9 zH(R*X6PMQlufx5Y$m^Lqp1z4KBJPjukG2bCl6+lHsgAt`r)oik~xEaUp;;g@243z zM=CvneVA%ENe1?RT$}t=UEr%1R%_?T0H0(Fv3JA*57yAuF|V$Ld))HHnf9=MJ;K#) zSxtraJMK!k^}~HJ?CSBx*Grm+%aO;0x?<>O1=bl~hWB>nMh!fLdYfI;x%y^8+@O%h zPCc}qSoqtS>+WbGn?^-r6i)*G&g|(ZhUYzf*I$jEng#pbMPf#J_cLPi+Hz)zMkATx zS=NYg<3($3xyhf0b3Eqg?=bL_9;#Xs(zn6=w8UL-Irtej8M7JqzF3=mpm7%XyN&lZ z|62ln?%utd(HG&K8qBLUDx(W_U(Sig&oj6$yL@;l_|1}HiT#^FPw>p}EDwITUu%Cb zD}weqI*Z0GK>v(3j(a@^KNz$p@S6|#PkYnI;PFXNPU@w)yfD1amELrq9rWh4x;xau zc%3aQjp+uzo5oZB^f1ix3df*HqXMul^1eQ90J~H*r|x$JeThpc3eHe(&$FsVVQAku zW`uA{U00>>+}ZhamESwib67n5z#nACpB-}sK%f6qZxj0c z>gls1kRRKvJFK1nb~gTQ*f;?4(s}Vc`v9j;(5w9p`pJ#cc=0?F|MYpajWV0)tnd(b z0R1Uqx4O50eL_cX$ku~iz3;1C$ZuKGn%BiaT)uGo3U6x|x3&jApKF8O;%kyx)1e;C zuJMo2pr;s-x!VOai``%A>{K_21QYbKQ{Fg z;5m8qA=d#!0dBQxsCVy7{sT+EisepIFWZR0*6<%Auwn4pxAuT+}SCcCQU!c9d zGIj@0Kf}{M9C@;P(OG+pAKlojnT~PkJ_7@(GoY7ar@2oLWcib$v+@2=G1cKOp8vH| z_PS$zbzPghvHtN>W6_8i9gP#(^9R!Ro6=+MD`WnoKMs^{$?D#s zd@SA(=n|wKcV4**>wT;v@fG`Z!esn4V!EAJ5awr{FPwpxJol0-@`D{RsJq5KWKWgwRs6l;q`50=4W@iB9 zlh%70DeuhwFhu#JWr>?5>WR)1p>fQgIk8mV$KVguyQ{3e8S{si_tAcwu3AmwdI5>> z^#+i>C1Ee+q19)8)A`Vz%!U`DAfxr}4}N zi{(nVzNY(C^+o(xyc+~xxEasGhqST6a*dL7($hI@ZzzKCC#v}RgLy&Aa8Xv zObYo2`y}bt@7L&O6k4zKegJv$iV>L`;0J0tVsz#~z0G@0)U<=&DE}TZ)(WzY4Zr+S zz)xSV4aUrZb7W)mM>&wk#kvH)zdNcH>L6JXb(K#wg&P+xx4 zoWpnL0?*C3uz3vl=#$GXL=*g)s=j9VX?TA6UC6?fAIkkSIXHL{{IT-Fv-?;NV0{T1 z)HlxnKfNONzRX&9e?#n(gD{*A8${h#mfEw(;D<8}ZIG^Q?C00W2mbo8xakQi;Hgp9 zN9`qG-de5{_+5dxX^?$|fOHFd-^_7tOYrj>jm4V;j={Ys#ZXHc-bV;Czwv(~TucGXLe-5Xu*t*OS)~At$RbncOs0WqC-8$b)D*tHPTzb_);`_I*nPuHf zK3~^f##7BA=0Pvj#9=)BToSm}>})1`^#;eSx~j=%sfEukK8AR6>lM+Q#uoD9XP&@= zV-HD}oTG(ZZzNHB@W*iM&0`X;bE$D8qlFwkeDKdTE_gmaH}8_mtwPe8zsxSCA%;9K zjK1l=w46L_vpMP%+fMd>zGNQ8TSwO9RZp$sPJ_73Cu!%LToM-Kc6aCgo8)lMu?hT} zn#gjIbJJ`~?vqt>_tlLoitw~kJ`MKX8K)c5=HHR#25fzWWg+hYGv7MosUTb4<$2pS){}x+LUv+2 z5GT-k4BHa?-i_a^eftWCNp=0DXI`a5v8&vKUHptVPfn;$R$vkL#RlOm=iof!Dd=f} z`&g*Qeo<4{C$m+}Qjt$ZY&p_(1NaMX(TuM@pdWoN6}pFw!9Q2+xL6FluOvU<*iT%qb@`y) z!H#pGtKoi>{yn{62E?JiXf8S*1$^tI!q2T2fq$;FHeGiU+T*b`(0&c?dDwMt%u*-; zzO=bzkQ@9!jphpvWoalkElsrC5T1j~JO6hI_^nR!;#UOh*m*G9))My7ZfBb#+%PY> zCHMA5g8ylpdp*_<^fCgSN?M^`-G$Ti+(0ksytsrW=&flG>M#dANiNHYdEj^Sz6mY1 z1AVQq!dbf@zi|J*6Nf;*XkBpL5coR_2ki%v7Vuo|w+gQ(l+zAkwS~dBw7F%!Lmn4V zs`$wU%58mm&}zsMp7WjBlQju=?B#u{I<`UkQpKU+AyD6f*Ls(ifxh6pu#VGE&(3+i zk{EADcwF#a2XK;O&MD+CDuwX+5@1Qv8bKM*OXD?$C%4cK{pM~n#N5v-@p+g+SadA% zi>tSIQ}n@3Ae%iH_pRj7_H&2ygZFZFivq@X7LH=Q5sw|xJRpDU_rIAt0e|QuT4LOS zJ==8*>v!;;XfYLV!8wmBqG0E%=<+8up!fO6+ndN^@9q98ZVza^FraEKpsV79T^M&c z@}Yk^@*>9o+ZsHNCK@N*$8-JOFAW+WOcu{viF!s_?efUyRtuKUxTK5f)>zcLGdV#8 z&&j@>S0a%IOqucYu@>M{w{CGfkM}=(9*M~9p{IrYH9UQ}njcWm%yJ^yy>{lrHcUUx z|L6vmzwKQ58tV%wtjR?^OEJ$t)}OJ;Gt)&D1ULWXs7&T zZ*n{3N7rQD()T3x-4h-{eaUHlG;X$gsTJi_y(URiHg~h5{79|s4?Ky-IIcW>pF?!% zx_Q_?oh4h$5c!O{X*&fg94xRtIb|Qpqnt#Jf5CD^P0w;s?}daMeQ)7rh|vz@IjOZe z(=a_|c@%wrQ+Vs#dX%q69sP^_O~}|2iF)G;k11e1N4!1@V)w&;UPe)Q)*UkU_CYp zmVS5#`!zU%wF>J`m%qcB1^945X0HceOUqeXUC^7sx7EoDj|>JoBa_F%gn+*sborx% z?{8%^A86MCUURqX#L(+|zg|OaEs_m=*|EN{%9$5Pk z_->dhcM^em?RnqKgXg-*^LIC`0l)0EP|vK*1nwn+Q))KYut@d(*+ReI`Bsar?7(@b zCwN6B?@{ner^I7xQ?gk^?A-wGGI-C;A$!ii>e+DLJ~p<%5#n!Lr=MG>15fI=-RtrY z-j~}nd*`w-@V`fuJf9RmeC@ypU+7)nF9Nb>?+k(+p#nXpWS2G*8=+0dEo!UD&3&^L z2Z=Y6@!Ek4i?vx~&$pGjD-403Xm1z%yt|QXpQ36WD|i9E|EY7O<0!<}3PnZ}b^y;> za3=8w*w+y1<>{PUM3&3UTCt(%61l`*dTzD=yobrHlqUf1Cq9Yp`}uR=88I?Wcbi<3 zN?yLcdFMRD#Uz^cebBuO{{Qd_pE(O#2>qi(7Pd)cG!XH7=1o-!_}vYTeY9*q2ETR|>sbxi^z^*`K}lUNMWj4cnIQ zH7l1$?~m$C`<6vk`&_kDRlZFw7j#&DIiF9Ow|ri;sx+JYC^2`8T6>%H9#MYy;6o1i zdZ*N||7{lWmAm{-c>QgXKhJzj1eVvAHB+lh(4H8+l}Ji5&hMa!V&?g$I8*InmnZA%C}yIDI~s^L0@ZVOch8Xp_U(6byx z(E%1|SC+eI83E^EKNqOh+85^pXRgy($ini1aK_2fql*T+ZW?bf+-zlJVoNbM0%%6^FZDL;M=atd9qV27&i9$PITa@rAgSu&YET@IzMM zj)`Bkz`e@Ys5AilL8xvpIRpMK;_P+Zli;81#{>fefES#I^%Du!0l$2Z=thIT(D<>? z!xZ?(zT<(x5sINZh;`x1nq{N}hs2Yrr2=s`W*KX|4(fgQK^&iF~YJy0)eqgd{5XwNHi%d2N#&!y$Z#stA%_xm56is#HO zXRUEDK;@01-VdRE?+QW&!?1w#mXa){^{wHgXSQw(6MWD1%Ll)ce?m5=vRw&_I)MLPj%it+5md9(ppw_ z0qO>e^z?#W^3^5LmB3?Dz9f#|eY;n>O?NWXGj`G4I0N*G^di~F$J|DX*5P?;yR#a; z84%8Q=RZgA9JOUXOvH2h?j+tLcn;^PPUc1)z>dj&j^}#zgoVctKk#moM?D|$<6n^9 zCh>W5tpnV;OTq)s?O$pJ2l0IW6EReWJjzZi>+?5gKdqh>hy66Gw7!q+{>m}=h&<|e z>)=9+!^K6atHp!fntxZtu)cM63zn?~l=(7ck33+JY57Uy9R;K5f@nu@!avG$_NoaVtdL4duYcU!Ss!W}z!0TAL~Q;c-6pDqDY?qI$_ zgEb%KtNMy`BB~AYd0||pzW35F>i;#(_{(ZHSM#P30h3cqh+$ZIRa@4@q zbExOi4PTQ4*cIGIdFw&l207GAD?3cTmnH2FFT8jO=XKJht;k@Ex(&HN5+#0lzDbs>Sg;+TJb6Ix+k&3*_GaTguniB5#yOU6aE)V*BuYk7sZo|lvN0klA@AI%8HvPl9XMxWR%DVg;F9aB9Rf1 zB(nD`dv6(`GD;CDqok7GInVE}@8{fm-hJoZckemhJKlSoLvWv5BRNi9SSNO`^G($T zJ2%$n9f0f3Iy&ZkgMG(?Hjf;l1-i&%Glyz#;8*5x{anBGq2Ksh?OO!@#a>c$*$38_ z>g#D!+H$)HO-5(_9q|9JUzWeRWDMsTL`Sld7CK0*m*mFXuum#~=s`o$Y!{JQ=ST{j zz@LtO{VSv1MSjv4ROqEu6T2Nuu{l>>5OuMtgEra~#CmwX1`!$20ETXF|%A^~gN&X%1 zzaLL>$fks}M|n@Gh))UcnUVNL5+fKtrX-O?UW`|+d)<^pCdQw?yf2zVM0DT%vR+n6 zT3l{bx;>~T>?5>{n=3L&Kv(uk9;F=8cv#FU{c?$!|LT><-2 zH)j*+J1eT)nevE2Ki$D^SMy2qZlg{i$ucsk7}LeW9KNF(f4{Y;PqD2@X$A!uutj{v~4OcVQpLO5rEQJ7w;($ti&~ z@ZNN1dYDWT*{9*XP7%f4b~;)>ILTl#WJ5p$1Y*|6niw zt9HV@<<_Ol2M~uDqkg_~f%OobY8h|YDl%vOJ+#`jo^V?vXGH|IlO5u8KMR8(UR-&b z=;;aT6Ac&3S3ZbxEIBq6Nzr$Vz3#IWG2O6 zx`L{o8uG1CqZ&nakcCBt_Gtl{_TP!ZxD>ni?FiZ-&sJ(l3wm!_$0?ka^In%!8P7^%eG)mVJ*WYXL`$R9_tdv~a%( z8;Gzzn;EHrasP)(u3!$}CXVEf0f4L4UM|LX|NV@#Aofe=`ax#YTjQ{;C+pTnTa8Cn+JRoTOQw4T=<#~Id6p0B2@38yMaC>} z4j}1yw;t#XyIJ211wHvVW!o~)TT^E$_y)$i=l62q<80tp&P=M|e(kC6fmb6yuQ=?t zk^$)X>L;K13ea3689T;gqeD9_+A(B*^>|zGL zA~N1r599x8n)iJ(h?f$tGQ3kDUJmlC%1?lJ`9x^@S`mnssTZb99>RW7%J2K5s^B+O zEA9oQ&vy`kD`QHvP+$7cOgUPPZZf|xs67YuVm-7e^?)hxrOEK5>>nK@E`G)BAK*s@ z&#QKw+1yR?hQ}ZGgP(jnD!SIu0QMuvHh)vt&w9OVuI$|+yl-je9#xmxMK%SVe%A(k zV_ls%%W_>!06J+>CsYx}EDruKCZj)JD)47o0H?rEpc_lPdCD86=cEyT;OJ8wRX z-BCuYy&@VW#k0w)o;H57f5pVci)Ulc%P#UXG3EJlI5+P6Jg!H@v6L*j>;GW>l0$T+ z`L4WBEh4;abYkzyfKOcH`>6E3ogB~Al4xWoBMrPeV%q!iNQU7NPF0>_GLV>Ox<90g z1gzToT)hzN=_}CBbS@|T{(53c`UPYYd*U3=igF^5CE@(hri<8=Y!0{%`(%1s79@7E zRFaG-l@F5_3d!}g=jrD>%1Qp2=Gg?99CCk>FEzq9pNP3TNrt{GARnHe%U9 zhWs{Gk&1w+rl(Umg!BBtO@}uWl2x_$GFH?V68OvNpzu&Bp;!5HV_9^l_1<;w-*t4Z?B7zwM#jpW;gBKucT9b~P^O}&a3h+6~yxb4rv z_~>+NN9bLLxrf1xs_oP&5 zUkT_XxAE*#dI0faQ;SX$ls7q$+SCVn;{1{I{~(?_dp$G133~0S3@hdxfERd{{Co`j zxM0wG1v~H`j#%mG6QCC(Z#TpaKz|0t#mLQ#tO=apU#El1Ss-p-HY;zhgZ&V3 z?w4zZ!CzczWpT0qKOrWTr9BGc-)hJELpTrpc29c&<7H>_-fWDQuN0RV8^U_Xt)|`_ zdWh#|>OC(ofgb%x{aazsGhC#5dlmFj*JwE(1iidR6I-}Iub1_8FFokhM8Dt>0li{} z@DtvkM^`3X+6%b)h=TtH(7Q@^$`t*v%|f?fHK0z7>k2o>zxmgFOcDHpQvOWnWzbu3 zU43&enl0nU@t_qM5GTy>}IE5UeadiPrj&d=pHoGeFPL?rE1alN9I zXZ|uj;Gg#9F*CpyDsk>Upm&2Wf(?1XJ}$Ldw8MJnuNdC%p=3UM0u6ZCfxmEo2b`9w2I{puygYC}-Eli)dklT*wg&U`95EDu=w;~Tn zG&F9<_OmUR*=h{SsZ3-7+zGIzY*)KPz!P>SNvLi(}(*<-eE|0d* zJd1(&|E$Wo<=hG2IVY-$df~eOTEDI^?SOp^H?dl$pWx>V1eMi1#e98_AGBM*zYODQ;4O+Yb>9QkVLmP_>-PCR@T7gI zZzmOC|KYNH0^?CwmkCIV2zM))u&zq|&i!(7$2y1p?X6Ct*sd*2Z_`PR zv2j#0%hwRACVplGuY8i1y0dQU@frd@1-|pAAI^hT4L;ME?j*b4rBn^xYb9b`IeVNh z6%r}=$0xrw)Q}F@%8^GA9fYm0FU%O`m5xVQ=*Pdqd}dcHvwdhC{1>Z#x+x)-d}{4T zTowrZXY(J$YqvW{u-SRtGm7Mnj-0O{;_idDwk21SysH;WKg70?rz|x+4fk8f^ZM`^ zxpR$#?n_#r#=|-yR#3U#_EQb{+jNA)wBY@` zp5vBu617AsN_T6nbQ$^Jwn^5~wSuhFn`BK=0lwsAefv0^J1+9_Ox`M2OSX3C6kK<& zAm$|XqoZ0Sd2}#(UuSM9oEtoK{E<&3d0KK={POO4^6E)-XvT0g@%#DSZs8}KkB;_t zsw^uf4gz1MD$MK1os=DC?3$WMvpE0#l_j-A=Ecj~%ulO`MD*C&8`?D_TX282v|$U0 zwfONVO{1MmaCvsn)zy;gU+TLn=xPY-rTx|!b@e3m{k`M5@ohx5v~|*1r-LkCcRI?4 z9^T{ID=V`T_>0_w{gLm3I|$c5T0NIY;5iJO>~CQ_IdL9jRU5A(sk>wy?@hOmQRhIh z6c~qcF-5-=@4>mMbw3_c@4r?g?B~~OCi(o!Xure0#$e1T!BepAVtwbi_IBVw6Z?jp zC0Jn`>sYMv+td!<{d36|h3}#W8=aid2i|4k#+2X24ePc(>`8Y33mVt*%N^+;^wAe2 zOo4B0HsFpE0-i6haXeFr9rkA}=G3%c+^;xq6=D=g5Z<2{NK*9Cy zU5(%ey(QfpXYsxPf4C|@ruRSP!XyuTqruYWJosJlTdJ$Mz~44|b@60@U7KjVq%`6F zeyni`0idtckzU#bdS9mED?I@Hn?G#E_v1FLwB@yh^%AiNCua%JKYdYo$0oS`-}X#H z3D^FiT%XNtGIu$$1XAp=leXqiEJkUQ;+7FV0;f?vVdPcg8h3J&*8kiOMZSe#=pxe zzu(4qZFzD1AB=O#eyQh;dtwO#seZL;vBMm&dr>pjAPA*H*^DFbesC&G?FS zSngQsm=N-YDswmL{O;Zra};u<2~zq^UdID4KQItK7yJQXVZkP{(%2M15OxUR^y-au-|-87VJXQ)o!EC zTh*U`deQ;ph^C2U-GEy)`pa>i^Ic)w3GJxaCt`{9cOBuYKs#ha_si=5(hbb6!t}K4 zlsK%HyN2^^EccMTl_HL#zqZ{Icn&5@RQR&?(WA@CuGJ4g139)^Cn zkU|$(2K+YPH&1<2Gnw3(Avq26*-r(^SqD$T`mCy>>hLO<_xL`LXHWvWncCMH!8%PT z?UWrCtVx0V&fPx^WJKc6`yZb5WZ-^$uZn6F*}E$8!O$q2i`6Oo7i`o(6x2)vSe$DKt!h4J zmTec&b^g#6oz+IR)h98$(61q@1+HE?{=S}ADo-0vj5d+5%q=Sk2Rw&o+v}L%{7qp% z;Twm^HX{CKFjP0Qj+kgF>~oH2CRqg)IfC##g{{?%C&eP*y!ZQ@Nd;S&=S`RKWSTdV zfs;XEjN8xUyQ|CC%$b!ts84(S&6)aqFJ-=7Mt&#ijI};`DX7SsTevi(mW|xn`2{<4mgaw>ENJx3m0T8GL6T^)rpIWGAssxf~`} z(GC9>4HtSo&_#IvO$191Lw{iqR-F6YP9oY3-4o>7iJ>O{=Sy5YWVaW;-s_#+WbO40 z#!7mfhkA?D1+Rxg`Jz?Ih@klkEe!9&%iUNu^M=n@r^%nq|D*N%jYwDJ!Y#ASXX3O~$}Fo_DaJP|m6z zlBX6pUc0`VsJ#$W)V1#=)K#CX_K$wj?b+`Hm|8` zuTc}pOYj?ZQmiK|`$l}Zx7QNm9#$^Xn0At+HIU_UvyEIm=R~8K)=UV0(Zato9T8EqC%&&mXmc-BT* zCw?X?Xux}-p9_Y<_Scb^S8hMH6a!Com$?$Wy_s04^&Vd}+fIA}%C}vDb*la+wb91u zjbx(!W@yEuW)gqUZL@4tJ286Q@QV8c>}xc}c#6Bg{7!UT;mnOT;77Joe=6IF@-lm2 zR`5gBqsNp@^kM&GSK=RD@PpoJf#TvYe;hdC{`GS&oI5)kszhS}^T?p?$`QzqaAp7G zD**bEX;vceUAZn_pAKy^h|hIT&*&P#dUSB#T?;l?m(z6k+6{i#Fz9ZT5Uh{g{+a5_ z<^$_#Mk~w1pd4|Tjk~YHx?TNeReDR{l~R!^$5!5l{V#@0xnS@=|C;8cc)>44mL>eW z1oKm6_j_OFVBXD1Cpd9k2>9XS1K%#gz8cr5uL5J>XE)@#Rk{M!KH(U+3VzICzm)G~ z@CS)kj6?2$-!_}ykb~bD4^0{4K%Tf=?a`FI>~ z%vd|$+Y9B>E6t`PLOZXIKPvna^hBRom}A_s`8ay86Yl%{`!anwkcZy&xHLolvFC*k zk>`GKIQ9kCOI)@My%d3R>SmJVk#DXYFxzGUs5c>U3eTr_9X@|_?MaasoQw?lisaRA!(ik{U3+^%AL zObD>by202Vu2*FDYxoOz!uJ-J3Z$2uqglXnI1e5>_aomEJmsLr3P`4tKj8jcQrHz+ zZGck=>*$fUT&R6gg5^5uO20-vV4-oz5BI5dZ@s31>wFbIA5!O_*WGUWj(lmG z>G4pCSL`Z0h<03BcWw;tQdv6Uwv0L#SfJlvkg(tl>RVvzDM{Oygml<`uDKB1sE5j zB!L+A6h4Cr=)ZpBX2i!w&rv*c%vpfKtetWcitU-Buz5z2DnDv$BPEMQ!LlG+SJc5z zp`Mlsg`D2r6d&fk4#$%rf9nyr4AAK@9ODN3+{#JejVWo$o)7>3-+UZauP{G=RfZX0FaNcl25|@LrFV#4;k#GkbNfzr3Wzhz3%1~o2Z7I2 zf1>QB>yV@Pr=TfcA*P=#Jw&Zva!(e3q41pa6eu}r(|wAkKOT5Py-z6l_BwTcPj@Y< z-A=8%O69|A?$rE1zIO05USG2Sp8)}6ky=UV*{0rFx-LYXO7GKIN%7#nC+~>k^Y;)M zpuVfJ>EHKO+{X;N!=}0k@Q?aXQZ@8*D~A+e)C-h(k%P~-&ZciQmfw0p-yQph(uT*1 z*xzI#|Ab)vdig2p{J!(yGSk$Mx4JJ-wrNegDJ4m56le{7#5w*2`a` z{^>ocF*^aR+bTRTUHrGlI>cW}^h$_^mMyV}O0TWfAj)5E7%2lg$JRL;SAzU=UlNTY z$dMUbn1$7lq@x_}_-sDjcW!x;93*o_b}IsLVmoXSrG_LjZZW0*nts zx}89x0_vG=ORq+r?Rx&fHC@2=Rp-}V1id4{!Jjdoxu0_dw%Zu1&OFLTpPskJ=RdrB z=h{}l$&WKOINo08YR+Q)_8pVGiTRIWF09x9I2CTWnGR5DQ~VumIH&YMU)*#S_EEaB zG!JhDe#w&mNv8++=@GjOvrlk-X=m*D?IGY#U$BdmW`N&1q0csR1pFpT_{BA6;d+ma z@mHf^J%fKE+W~w}_}#e0)(cSnJ%0JopMXCUzOFh6^Y#SysY&!JHo_OXqXA0~?p*N+ z>h+%YVhHX-J4|kfa|Zu;?MME^WzY}m{`H_3(iw8!8|nkKe;e&_rae8+^I1P){Z*QY;yOH}~;8 zxwUc@zU$k%5Z>YkcBJ+H{8S9@)mhv(Eun8ESA%9(=NrR*Pxq=rI&fb*CON-1FyDx} zZl}`W1ncgqG4q0Np*=M3UQXqLeV*E`&JN(;J=ywNxZj;kzqe6fIqY}6zbhQijNf}q zUYLjZPJV=gw?@Kc@zLY9?3B zf-Obo;eGWK;%)B@`=}>V{|JKI-ve!jV|yy zl}Z17unsk2=J$&3E!LmfL0(*Ga^AhAosb{uT3qLVZ++n$RvG zeqM@N0ni_fXI1W51J4NbvwIBdxUvSbPYo}_`-JrOGP_@O5Qfux0yI}boD`j{8oCYf z=gt?;tm_aL^VD~Q!2IUyRqyhfX|NCG{-9g)WhbFI&hT|cs+;JhuMQjH?;&os8soKI zJtUm|w*a3G^oR9FtzYixBt6$up0Bd(BKjd+ZH6k{$vBhA^&d?z3IG3x4&MtXnnH!;ogTovKhP4+}Adtu+u zO>R6Eq?7*z`~EX|X_}GU-(!08eiIg$L}*kB$eYe1vr}oxGv;U2v{_ zZ_l-*-3im9!NZRC9GfbDDG_v*jn1~Mkw zN&NY&%?e@dgho*0*nxj-WP*GQ?%UB$=ITRrBH=r2xsTg7Ux4|bT3q9rfAD^Yh3xtJ zdo(-9E+Jj{UF4vgP!Sz!Hw)kD2hi8*+N%H|8WBkBG5AP{YondaZItkBltl6Ct z{H+70M($@J;Q3*?KYs&{mvgeYH)jHVWVMh)3HWcn*uBNH(0@~Z-T68$0sUpLmc|b3 z@ESEz(*i#4mYq|48SE(D9U<@$@@q`|t)c;=HXJ^N?-|-jq*d}j`OGnlt#XjgI>@a5 z8m{N{y?o*px@qI0wW+xAn?uF<20m8bp(mxK4d+4 zLTd*;d{FkHf^0PpinKxtK+Hxbb)17xz74?#`*r@zZiOJOY z`hE#cN6gomILV55t8C9fEN6$I^Aye_eAc^D-xuRL+oy&3H^Mqcv3$|sCJ)SC*v&nL z@~($lDE^-&$;Xd+9z7it4`uK$w4=)X9jJ{MZwH^L1^nZiL-Ezwd@dl~P>%i5ci_U# zoZ5==IjtYm^_^vVsCs@B&Y}3U8GFYgfErz z0A_h86PG3ZnL?;G$ZpVDh*vC^@L|Ff!r%#Cv`1eeBOo!^2~k9!0M$h;qnflM|@FVwVgp`irif zzcBFyKYeeC`tHmI(S;n8-C2bmVfhC(IK}o^lH9p7Qm*fa?}~FW6R~Uq0#`X^7YPrb-)XgMON; z=Rfqb!4^6`IM3SRuCx;MUtPCP#d0O{KH4+^vT=&dqW_yq{&W%TkBR+akNVoIq3#@j zo-1Q4aGmJu!qg-O*ty^0Qo$FPM_uXhh)x9FVqt#1cu@h)<=&2J4{Pcmvqv(I*aI)i zDzlFZgzFyDX7@!w9J?AcJ@^6i$Bs*vYy|$G8R(#*0r7}IFKpXqxQ}zif!zzB-)H!V z)g0pea!U=PJJ3GY=l9o^L;hBK!#_A5y)8()Hwk2!IE8!Gkl!ueIwuMGivlZVMj`!R ztWmidVBvRzm&KsJA!_iqG3W)Um0j8l{7n1(i6`D^9Yp)6S&*HE1d>DH9N#ZB z*?Pd$UH8vkhW7^dM24Jw3H93eb6-yII+)+-x|THqUx`y+5xnyZw3o2QXpcVZQ(T&V zSOa{(EYtjmKeW$@x{Q7!;H#MyC4Kmv*)Pnc>X*QteBBY=G~g>c93WC$uxO>c&FgKkH3jmxKdvqPxH=vklt)_vG}q z68!`CpY-s`o*?o*!MY33!$$Pp^O`*fT%5+RzjD zQ3{)EA-*4|e9T1ZC+yct@s0h`2U#n|d{+ascjC$SrgYHW@1K3~aRhs#nYS&&|5GmC z*T&-q`K86{)-QwS&RX%{*>9+y@ZE>=>!6&(s2&3@Siij>2JAHd8yKtx zcDN|au(`o~`6f(!ar{Yj?vj*&`q|&Q>!u6&+Yg@D_yXiTH{X@(!F6?h_jTw%ew6y# z1;<;k=m&?DVDBrJz4fVJ@233|mI5GaT`9;J0t{lEn!)$8-i64A;JNJUX3D+m_(5+x z#~}&&%O4&7h2_wX#DbVlxM+c2o9@u^g!&G3t2pBOiwV+;Db~pHQAf+Od^OfndAuLLCw65q zM41QdOim2U$^&~?V|~u>Kt99xFAqG2_Q2gToCWZ+yMmb?l;4<{`6vVG>tXy?zZ1~3 z&d2zuI`Eog?Sk#6p?+m|V!y(Ddk5rp4#9lIZygusJsAJH^{3?C0Z$J|7m(qB>*f~R z_G5pGqg}uK9NhoZ)zx3O!*w5(J#;6ap3hZ#ce#MQx5Jw*tOR@1=M}!=dU~(L6MI}w z5((_#69zP#sjXWF*ICL01O|YfO?8UnFQ~_h>>T|AV0XSTN{ z^4kt%{fvP8$F6KXp-_&&t4sa|VIEMlLqO;Z+{ZYx*bdLFnyTFkn+5ww{4)JDp#Sxd zsLdAW->X-jw0RHZUhJ%0mk;T0hgy8mfB1gBC>0Oo?HB7>wF2%Z#pHk70n$?ze&54= zX#=y8zb=q}|N6Pd==ZYErU-tPS2-veeaL**5 z`oSCb(Z8KPeDK0n!1pSLbTI$w^@IjoM{@brT%iE>aTL=TLqEA#wa-``@PMGs{W(Za zuQu~Te|M5SHyiEK-O|Ni3$l#AkiZ(in|Jxo;`(4#%CU!7-c(OQ+y=m${!o2h!0hR{ z3m7M2g)NKsVSby@HRQ|9-Ru{(0D8(@hd)-pd~6-xBdp(%{5I;GD)DoTLV1jRpZ5vC z^IYLKaNY7t=$@Z={gcX(Hq6i5%2$o}gndTH8qj(pcP#Su&X@l2xGwK-M8*W~`)RxL zON`@@q3rBv=ON3PUl{ivi0IK^yvzQ_mW}1ynP+uDx#5zylPF-bl#4COTTFk!LN=VQ zD7sdL@@9h=UX*=~EC^t^%kKwo!s{z8Sps2(_OmF~#C&TKZ-DqH+W02sKfiP|1M}+w z&Qs@UqxFs&VZJMSFBhWGsVhIxUK{;mCa4#rh)u;Mvvm%Z%TO8 zQ9eI9L0uQPmX*ra|JnnD7tR4)I7;y|yVm8)Q4U;|u??|{Lx|#Q1{ass!HsB-QP)lX zH2i>exqU6B%4@o50E80uYfmksc$iMi4~oad{*|NnS=oy;svPmJIn?!;7rH2Pd1yoN zxPrK)?PQt008OO=!O?h_?XpI!Q{^~!2kmIl3slh>$xTNhdiH7Az% z?~$=oN;dHtrEpmiELVemygXDB@Z+c+g{e=W7?7o|0{}L@S&~CDmyq+u()?l;X)@$b z^DLp_|MP)e_m=cts4SIRiP@mX3Tzf}FFXyz$MEzJjV+dNH>!i&jsQqy18xDfjq(dL z5AciR68?c!MHxsLg#$a5Q0f19i}ox$UdSJL4zwMRRa=fiwF^t>-*e%&A&}lq-4Ocs zT{IB-_lzioe4ma|C~Fo%;a-lVdZkY-p}jafCeUx;!wSK;#Lw>l{$9S6&d3fT$QIC> z5s&3Sw*tIuwKVT)D*C@YQmgYSTR*($o z3+`Viv{LZ_1HkV|tf1tNQ3ol!7PDlx`fdF2C&c> zO5y{8xV%1uve$oAcQVTDp7)?-U>)SdSt^~75p(nt;^%aJ;`rWhqnaP{gC8BF#_`zK z&nzh4Z_O< zy^f>k8o=cS+E-9dhlM2)(P!BeZS*6z3U&^nUh9^fF*v`_e3LPY>EB%m)gDeRkupiXyRIH7zWC+)sEz<)(U`JW*@{KS^a)1aR-kw5wX%U%QoQr^!YCB@K!*_(|65<03{<|YMuv-N!lrZad=#ttDzC}6)!yhc^u@A zqw(ML!Om$T7O8K*t6EsMJ=BDJ*~=3-DNwJowCR5Me{ar#E&H#7{iQ1&RW1N(>YT2O z03708be4f~w2e0%#B;tA3zGGF0f)n~HSoM_3&)rw@}+u)geS;n(zo9)a0k4cS!7iT zSXDHz9@8(iSvq3BZ1@zSi~V`Mi{X`#6-M^X z;rj5Jkqt_|fGc{v-uD4EGrwPT4a)ufnU6LUQ18j|`2axHP};S2fX3&ldCvg~?n=42 z7En97JrM0(Gq*`w0Fb;IXTyGU?92xAc=VwgWFA{zEmlD36VWe}0bPBC|LFow8~i@S1h@@;7TN~aU)ty|^A(VL zR>l;^xvG@e86H4OZ`XDaz|kMGAqIeP1rO)W0ve0nZNz%?W*eQu=lT?f8 zDFF%;8Vn=mcsE_t)5jy1eb9(Jf4WK7m`_IJ;FobKp zfGMO0EqZvOANzfdq2Mv38!>c<;J7^X=R)x-NMGx;zZm@pZ?^M$Z2tr6z1HFLXP)=) zM!QRy**19qp5xm2^aP-f;R|g{ze&3$7S~OFu^(!{@$UNY5FC_%e1_0=e10$YNHkzS zD=xU5g!Q;OH+^--|@N|MFJ5!BPXdUGA%vTOC`n*pmE${ke!eYH#Wp+Az# zt{Xsma^Btx!+s$3EaeRH_SyCC*^r+{_*7EsL+7?!aP!ZdOU(Da^hy)@uwo*Py>0i75QQ0H8@eG?eaFaB9R_5-hDPM>SR z@*HEvskp`PRB{^2`80a=5#FC>IO8DRCyni-4W|G4ME?NME9Tn}=KnlNN5%7H(iS_g zT-ua%j+mdj+-(B$Pkd=Sh4RPSUz8C2qKpzSJ=;M%8&S6X)(K3Pt~w%%*w?fN7$20o zJx3nx+qEdXHULj&H|?KZxp|O*Junx#2Vr2H zVcP@Hy@pK}QS^8c758h`KBxFiMd1?PJpVPDisRYIuP8h=aF62I2_1P{HMW~vj6_@2Wh-c$n+!? zH%n{=sQ913B}o|qF z>dz>>>HsMUy`z6q<+=Vc+8+L^HqY%FSCN?0C`*+mYo5!&Mxsd25)Evkawoh4o;@o~wXr)AJAkp5yL0AM@Jo)NX@fJOn1!QV;{4@$#r05|I_p;;VsFOU_z zfo1_Z{y$HcG+fHxaRHha((!MRh!;@}un}(y2$Ne1L!N_KAY<(iYY_mq{V!)pEy<^` zI*^XLC5Tk9fT}10>iwTi18fgvdjvqi{}DPNC13p?&9GXK51o=i7z`9*Yhk+M|Je0E zisQ5p(w7fm0{AWSC7J!_lI(GGi6?VySd!o1F*49QXtsnrr+znwvv(ohntXF6kx01x^9d3}b}29)hKt5GPh#*xCx)TRDW z-T@-y<5$-a_v2?t0hh($1B7|ZnWcUKB!QAYx&T1><|=$(uy6WCgu=FOOX(aB2pk;u!|Ly<-VP3WF78nF^SE|(-@#Z#qsvMc4OXuix zD*3<==x^JbDShw8?Qmm=Hy*x}UhncP6lTdUjT;`F8A|3ITpBm4;4hP?f0XGcmA?Qvcd2+>)y#EGO&T4M$8<@W^Y{-i!zIB)j zQI7s_HTq+p^oC)SWheEap`aXEZbigzAyyoSVtc$T5W7Z1vrvD%349g|u=IR5h2bS5 zFjRmSJ$tzhal-v5I6&ZaDx;L0x2AB!!8pG4n`)08Tk~LG!??&~(L@v$URr+;(VC?6 zer>3y`bU-A3Ce!KuUgg8)9Z4U2KM`1rcDuP)h59}xS!xNYM<;k->f^PzmDmKjt_p)`Vlx#Xm`2y zR6Q4URvbtD4H9!tm;pWV&u(x9tl@K_{`Y*Cf$2s%@T8L3%iAg5Kp(IX`HIv7YZ{E_ zrtLYUhXE~>x^j`fG~H~STLCzv%5VkwPEd6^^}V(|Pd}%lzD<)s6PBY<{4@{q|DM*q zfN}r+sER+vb<=boA*`qB-}k=ACmI4*bfSHyWp0WfU#a$+)a2_K{J8{AiaQQJQz3YHuiMeUWYuoG0XOI`Ooh{U00o*=+k^%MSo&?F_ zbGuP`m--Hksp6qDiq}oPh6y?N^Yq78@xBYbW{PN+-ibKa7>4I_N)S92tn0BTfM*1r z?2|}+57&Cvc4y>gtskOuvAy^8#>->=t?HpdwDVHeFNhRSuGDI9&A@wit>eP_Wb-tA zMA;^dB@FrHHR09^9Dwxo>%y>I2X=W1aRK(t*i+{~L#@k&(9Ys3uac1$UQlRxhH|Nw zQ5@bM4hzA7SXhUWR|SUz{vts{0`C)jY;7>M_mO%#Zp3H32Gsb=db0;yGn`X+8c)@) zct`6-tY@o667?S4j|XFJnE!T60|pS(=QjO3V&%70FA@0$1uYThx$B}3N3<2%aePSI zo!W`dy+2&Y8s}Zxa;F-O0M56cwa0!#xAnnmEO&3Ah9}y)E|Ja;?UaaEXNkO4;-+~H zmSg#CJ`&S+`S<2x`)!Z7qKoY*EaL=@3GUOz#f{H#)0=<$vAi0M@k^M_9-cmm^$eF3 zqIhh|U!Q!;ufOTVfcb(SoLUg+e!U4s>^>-?gZVAzSBW4t?o@t^_fNh2qmc=4boCop zkb>t{ppbkNknQcNo7nCS^+UAC(=8*O)M7s|Rs8FQ{pTvrtr{%1O5cg%!5RlXDB<(@ zrEb)Q_Ofo>2pjdlcdza$$9fsKX>Zp+pZW#7$#k)ODwKAE*5OsweE!bE{U$ru(zdvJr0Ah{uCNoSAN|U1E;+`X2tSGNLbO|Ca#FhTP zlpp`|W-SCH;PDBcg%NA3&QSi`V70j}$~WAf00Dq;eSH&U&(ovZsr%NHz%YUInb+ST zAi_RP-F?aqv4J~O`VFp+R5_=1)lzZdU)N7yFz|dPkcojGb5fz&?W3OorKga+6hD{m zbfVh(Z8bZk7x~bXdR_@M->A6s{1Jo|xc-pPZYn)V{2^68ix)Ska<;laH6VXGT^EJM zflkzYdbNV6{EKCqsPw5!Lkgv&m?>oYUP;+`#2%^**H?^dQ5d4PmO>3tSXP8|zJVJQ zKDp*ZAt_$6+a2Csze}3)^b^jq3c>JJe*Q`OIb8g!bQUneB zO!$)ha!g1JA#U<6@u!am7O3lO_aG4je~Io3uoq^Dh&;;y04Gb1Q~2p2gnN)(PA}y% z+JYG%Yb{&C{Iw9SLH=-M$!-~Z3?P>;0s!{>&&RE;pnHJKuJr$X@v(sHZ?#m8|Kw8n z<)SbQA^qGoXhy(to~8V=|MNV1ybRI{E-$4UPA$m_j7#|Mz!JVtTS9fL9_Tl=E!nk* z=7JmoPo2X5`L(C-QocVvM#$d=tOe0}`x55EQ$X2!+0O&t5J7msdFO*}a{a*XW1o(65`WV$FBP6{Qq(GO^W)+NqL!5P z!tKIaGF3mVdHC%c@-Fc5i7OvFNu!7Qt=2<5gu7?Kvg+zb;&tQxGHJJdawPp3)3L=j zBv;{M-WY!uoRd&|HuSlZnD0Eq7DYEovK&>Tmu(v)S5E}x=-2d+=fjhJI#WHwbbYAR zZKgg_$awN$__hyZFK^(+jx%ow&0!yoH9S4UI{wsi^5qTLmSTEmUa^}z3Nu`u*3d(G z`<(>gM~sBM+tz1~QV)3&y@$~)yOW$^eZZ_Y0DOF9g8!*2;5YTMnPV@)`-rl`HoP0V z2}8s4Nc+(avhs9GLY`wMG3>ckz1ysv>|tq*kK0vCu7x>#-m|`v1U>Y!%qp%VH(9=| zs8|O7$4hltm@!e)ly>xx0d_l6BNC3MeN!fy3!{y^6?$-=$a{n_?a2eqg)EX|& zEhF_Jxsk7V%L&JuUpC8lN{GD6jc+m9d1U1ag=?Y(rKCMwwOL2`6vQjO9-Pe~^|x0R(VZwDrJhslxA}@l%m=IYNecNS-dKM;_e3uFy?&!ty+bxR&A9W3 zB>dOrc+jQN5UcrX6F#&ZMs zF1+f=U;JEoL@R;Q^2qxv^5a!qbFO+CDcZ8iYy4I!5l&LHnKw%#nIm21p_g)rNKp!K$#=}8({+mLmhk2Z~5S$M@3V+;1xtG9CQPa{|Dvs?YIr4c!?ty{$hQwfK< zx!R`w6!JzJN9L3OD8|+q!Q+{eP4O)UyvN@Z#?m|Nkrs);F$*HG@`Z3_CR29 z8nKDybl|?2LMHSkeyny)Bm=yhQ5#gBli7f+e=eU+BkF6mS!M>L5#PkL)RvND@`2-X z{f_D9q}h1+ROzATHu-JeLzg=e~2 z#1l#1h+xi&_UA-lChjB4p+wU9%W9jhTq4;ZsTQ7`n?R0o9jb?;N5sg*ps9f8DJc#t zR}Q3)gLPoq?(1f8kns<%R<75RUTQS>(-`wEkoI4!P$s*&Bk1EpqIh&o^d*fbx@IG zWJ)I%I$P3&nKFn(&HnFB{h8#JK$hYT(QLBya=PyL&P2j)=sIMwFOl5VSdjw3=nqrxWzpO6X0*sWTVk4T_BBddLII7#NMXI7UA zCk)df2X^KJld^nSjV&AfiMX_MYwdA&a^w0|rk|XSr3X@9bKZDzt+Z9-k(TMETtfH9 zgYk!H9{Hy9tZM#OA(>qa$lwSsB`ThUGcw=HiPvu+U{cvcqwPuKJ^37Rx-&aouOy#% zp5Xg;RN^Iha??}tic1;k^9{2SYDgwW7p;!x-bf|#DuXfKVzP+jW8pc|u6*)}Z#v=Q zND;}u#OAy~HJs4WOYJ*-J%Vft@8}9od(cL} zd-m5UWAZdB%0bZ0m-JWvT$AS+O=v!rOFS}oM&zX;R$iJbCyzNUJbj{AK@oiQf<>jj2Z&DO)46cy_#uSn{rOW4TvB*d9IjBt2V2TxYtD zuF$O^0<$gFqu+~&;l&|?Y&3pEwQq{zrq!>EdIi`?jPD9VEO zi-az6{>dRM%-0PKnhMF+V9Tztucf4KEzP3qP&s*|tGh~D{uyar+r^?NnM~}T&=|?` z_#H5fvmpWu`_u9(oor)CvP2ukskleZhO`5ZVa4=r~`90D>h=rK{C)+d#du5K; zEZ-f1W+G%)%czIp+}NyHjPfwN9QmWU5gUf@wB4un+=e0hHi@vV@(4V`ReinBbQDsn zy@@qv8-vGUa<@6P#^9W&b()dK2>i3Ez*g@v3eSKh((7|$kP5TcDET!G5AvjVoS#lW zK{(UFW72drssf)OZC6{vCjd?1xPwBShcV*mbEmj{!Jf6|u8I{5<%k?2T^E zK^WjU_k@OO2>$ZY<|>>Wgp6Lt_$pryLWA33i-R)5P*Qwtf4*}Vs$bXT3%x%A!!3Vb zWs@F(yr)(ozV!{m>YI`0jqZ-Y6MQR_F=z}bZk#Yb{$L!=`MVvHcsdRfT)XDOX~!Xr zMy6E7vk79IUlgJ`J^@$9N20h?C!t!>0QFO?N%*R=Ol3-N64IMa%7%Cjz>-%Mdq{8q z7W|?pQB~@PCy#3PO%i=)Atcv?2KtEl`f2W=32~j~qh}5KE)2qB{FmNpXb!;WJ?aY3 z^c_m~a!p4>_Cdkpb0rUlh`;+Tq&po>yo!ckkt-qJu!MP0wV3dbPj7~yGg*(f|EUL&1zc?8DDtj|ty48usRIz|yV)Pl;LkyH-x@<5t(kNmLMZI=S_Kr-{6k zTOYeBTQ3lOQ`Hxi9f|qd998NIC!+gc{}H;XNV7h;8au=FD1@k&qPQ*hlZd{`n6GcH z&h^8X63@i^ihfu!bcL&ouOEumYnB*p^}!O;nV8x=qMr7QT4_H$3}uF7VuJ&R;KRrN zCA*sq!g#uyM;=V|!}rRksziv-XJa?L9l8A|F?a39Nbb84c(IA8<-za}jC|EpeChHa zd=n1skJAni&v~UXScvO9?|;c!n4ufe6xyHQBXUU?>E*-{X}`k5=A5zY=~l=YQS{NE zgXo7VRM+1~?}nF;r+$*$>x9uEdU6i!U!mn>R2|<+E2KEfEU-vM{9it}tmYE=A{FPp zDaeL*!7bc^>elQxnCX6li~dO))Ymb8NkzSXDf_+b z2R;a1`RPBA@esjMC)>&%vudIbSfbK1qZV$d{yf#dMSxnd_g6}*h@9j{3vWMHR6&K! zxQJIZRWM%I$>ZNS0#vrONesJN13h<1_ncWOV5KsHY->{~+*D5`V8NxZFeF$wRjL{u zGK~t32bV*>2E%ek_!$-~-{e|Q&VxMXk_tZJ+0Y9|Bwq{4VT)((B_Y!i=wy0wrNS;3 zCLdgs8Kg~ym*QZ>+Sge4k%H^bhq)@)W3p}IG*t;)vdr)S$j8tdRz*J?TR)JdT6! zbJ+EzEl9|pe=#v>m%*+W*HijxN-w+Kc_TrI<` zO0btjBJj6C2@KiD?Jl`n0z2z^&*ra`Kz5q%eE)3{dD6kxXxl%O!H%agF>FUlpgq-Y zyt)%nSFtLQY2Nz`smQMJPagjaYh$?eEN^~>2NQnH1ut{pc>emg<@hXUcICgN{r4HL zwe;2dd*vCBAwBV2=0ql(%)RT(^*sV+2xL{rOUFXX3%c?ZPmOureumMP?4< zlA1O7O04%af}1Q(cV)x*vtD;Bwlm=oQ*G7}hD^A~{7+=@3$gBnVe%GES+JHpE~xHd zHk>W|mL5To20Ob5EEI8YpRH&-kTu1$1Us}7~YXK}|3Z9*fUyR#LY zR@es^!@LR@brRtDpQT-mQ%Nw&caoFaI|X){(Fz?qnGJ78o2`=&_0r?JUta36=0o+_ zuA9kZMBSwlE<2c*595P4E|6&Cz{+dC8`Cs%A$c{l)c4MTLKL3CVW0D05jhQOp<*G7 zI>ADDD4z{|ER4=%rx5ewDUA(DgY@%)VC|eA3I5=^dL1Yme_1 z2#;sMMe_cb>vhES8zSpB)_Jhun-Zhyw?fE6am)9CY&!InHy3O?TMUy!DtvfT${^H> z(a&Ec=6?)01##Ue(I@{5W$_bq(H6Pz?)qb+tgoWD z61-Rr&lEd!0q-JMmvhWkYq$_D8owBj6t5uO*OCsc9#yb}r+RT?`7<=^NlP8^%7a(6 zT^m3CE`l7dLK~hwAm-Ap^v1ikRYDa%$`yDd3!bbH$?&iu=GV%I@7=5W40j!>y)RRi z!K7R5e-2Mp!raSzi-x1bTsQ^wHgvBD?)ut?3Syt(PIJdf)}2!LS--;FpScvK>!#bd ztP}IwUMvd*hvdQ0sP9UP1%=SaMjC|{l|ZXs8{>~YmccI>QAZo%tDs%rby4>$oXDxz z7;SE>g-r2e^co&St|>#g=2536NbYKJ#*DoRl4g5Q>uTUoB(GOeJFXsOL8?D4P~LOQ9-*kCQ>kIfRbnjmu3*D}}&h3YHT69g6h-{`mhYQ@Es7JFRr8OyS3GiW{#?6BMF4G+WoRKGj$p z`%>tF1{E%BnwGwM9j6d@#{B-?>2?K+lUoP+OjQb(8w`)WJy)f$ckc^BYSXg9kkO&O zpKWQ)Ddp3G$6fLj#>Lld>jpn7)DeVlhk`+ck&z7djaRER8cscILzRsRB>ftnRp?7< zYEBn?@XP(8u*hZdJ0_>E=I_!GueSkI*eVyV+soV^3Q^(?O`i#UHPej~*G<&A6o!Wb zZ@B$lsZorVoC^CYf*t4%`+3?PD%4%Pf0@a%r)J56R3r7jUWH#{R2q$yzZGOFn`DGC zl(BxYyVfdUvkK+p)~APjvuk1_lXhdr#}qs|H^O$t2Wo(mN;PY;0Dk86fShILPEGyG zrD?_A>k0>wJ9@E1CjEG&z$wdw!Ww>>gZP>YTQxnq%7I-nT-e;X%CjJy2B)Qax{)kS zjb$mZjc_Vj^{(_xDBcxH`#k%M6V{^ZTzQY*7RN~i4+)%3Sky1I#O*a-TsiTh z$>>BjhRjkebxDJ@$saay`#nsK&?Bs#=i`sCk zqxvS>PXSw8oYHepD%b&+89K0f7n_YORo5^SRE=Qgq_i72D%J3Sm}dDS-yY+|j}w!# z^Il@d0_INGtG~y8pU9e=@@U7!e6Rm(whh8b{K%ay-+6;Iu+g1-ksgfu9rPw~lKSE; z35&x5(rsAYzIX^*kJ0F4!mSdMh-=^V^^N=Fu}ey{3te8@wkkO6@e}R-W(KTY{abn(rVQMl&>VUFRSwYy zxmcvIVBj$h--evMfjB5ONR}+^k!Kr+X?^NwiCflX|?z2ZX}9MOpGO@_yFtiijM-WPAI{GIl$~@CSYi&lMraGM9nLr=D1Db~Z7sBi5VCcA8Sx$Zp zs(GHGSp4J~2$`?_x?)%hBKDXZ-+l7{d@DmXZ59>iRWvKdk*)?HcHjJH!;yNB-*i4= z`bH^Yp%n^SzFvYd@C`Ltxem}*=Cqddp%|?{)};T{yMQ`F`L5p<8b&q8|NHiX>Jz|{ z2%01Be*vm389_Nu5`trw9Z7i85@Jg=9arSt2gSKezy5XABZN0lYnc|I?J$~^tH&cz zVKLcB!#oSHk@S9uFDDMDlDJ-CzFrHaEoAGiH#Gp5$T@L@tpWsRT}XB@tGpWMFqc&HAXE}*~4Y?cJj zpEu&k`Wfg<*Y43mnndK2Cd{k$+z2VSWAa7UY6KIMZNCke~`l;0)zwaL2A`*2o|fgq(ccve_7cB#cHC7*vE2kA!>c z7aRjC?}UsK%Zd=F+y>Y|icXJp~;?o88or9}DK)NVFYCsHScAax)-Z_CDA_uN5vk!=SK5%ra z$`>h;k!`Z|JOX*2_+9~8Qotrt$@@t48d}kf)Q#k#0mlsGmRrCgCTMe-A;q8_Pu8uN zOjgdu0$B*@UUVO^g6y~bo~2aCdMEvtAV(pd;k#h(??v3@o{fZMG*;r93xsD1GSL{r zxTig5F)jEazkA(Za1b{d*khUB>cKgVavT#IXvB8ze2BVLTYzhSJH^m|Q=^_bAFVop zqky{2C)rnI2rGt}k1v!DIq78*W>SNbb#(jh1mH5OU&0 zUU1tsZg9IguI213-rFKpy>dw%6L?noJ&E}WPVwx4rmlz;9#AV8e&YE>+?s)0hiTdZ zTb5pXLBf!TiKT~&h@`y0&PnI4;!}^YBWZgCV&0q7NB%!Uq#HyA{CeG>?zmp0vYog!S@-8qqn|V@e4;@6mcCzTptCY@8I1 zx6CDV&ILPRA9ksgtG@B$xv|e@rNZTLwv~H7$b>Ir&aBZ7zSoN2S+%|an?8^68RmCF z<=?b0|KuEpS8@#ajtuwB0rRss@9-^8)|WDvV40ratt}($i`@k>C4Un<&v|0r2Len| zwMdz6jsg36lCEIEObNF+)P22-g<)MQq6Ae-R}2tZ7|QIP;J&-n)pQPe*pZDdYb!t0 zFu#kxMttwR#vfL+G8hY|VCe$#=jPhnan&;G_i@zsaE0Lvvf2;cm|#$Gb&9+^{#k|n zMG_|)?r5j>W9K|2cK1AK-k|zH4QV^wx^w+h4P8XjY4W=m#`t~yGTlV8!c3>tG2z#H zH6I)!zcDKBE7-|AwV|Q!sgbfGf6Gpxf*YM3^p@md!ThgH)XVH_D_q@O@XcNRSCbNU zgU|lsZv`<|@5AzYa##YHf2LF96`Um~FW|-^8^+pbqfhPKuP~PH7nvr>h7)QNUssd7 z!dl*Z$~Fnmz=ID&O8PAo@K=u_{eKuLVp*CE*&&(Y_?%Y+)6?}>g;uGb(ckhtnn4Q}PZ8rnRkz#Y=n6jMA~BS(EhwmEI$v1ZIMxux$C4#udf%t@rNjAdP^v`QVUS>r4+nR$YJ@e(Are|#LL`PuJml6V<^ zbHqkO7HMN`>1ItEM?GN>VrAdaGV#~e~nw~ewQ~-{eWFuHtW9?*M~o>Dq!wmw0Tg6EVr%Zt?ZG0$kaB^!h{7G0gr}Z*g&d0Zz_6Dy8OLh>6BL`gC`%9QSo= zE56|O4LkemXW9IxK|Fwqw3#}#7tfTf)yAHD!!Fb={90h|!PnI8$o@Ayi_J}`f4JPv zhQ6=pFyDTYj1MRa+`3mu6sl;Q*U?d|ZTMStS{ zTs6ZeVD$&n9n^K?y!hI zW)bxFuXRMMCLgk$>i)qP$pW5GRKI-L&xAHVaMXLr2_l5nl%LX%<2T2{`mLM<5zE!r zV>h872rKK>6D<@X+C|&F;=gErOF-n`J%1NAh5J1FT1ntMiJu4rP4s;yNV zQZJc;oN}`eE~jTmKvac7`Li=fbl~-FvPwV+^(%$jOxMs;R&G(XU+idE%ZRj`9|Nm| zww$~LFVuhe7iC>lGGZm~_(Yj~~ zFkpHJjx*Q;uIDjyos;Is?GtBV_xNKVxW)UC&cO>EoT`0vmLvliiId3wD|1Ev2A>c0 zJhuRr2jO#fjLcEJnTOg*4tG?OtH5`~x)g|VaEk}JW+JV;z8ck(1Q7H>7b>}ZL?YV} z3HmNgAfuz&VMuxi@Ny>H`#JO(IsYk5@JOr&Y0U{f_dm9wR4W@PC3S>Or^H{R8=3)Y zCKdCN!){dOi~VRcl1;R)V;bcNqU{kAb`MRxfWRC8CoIV~Ixwl0oMl&+0yF zAPP&PNgmSg17j*@pBA;wAr5J|uakO{sO(!F`kANRB^^AZAf*@b{(P zXtb^X)06%M)W7~cpR7j-i+0=6q#i7SudxmcR<&d3Ct1C*+|V`%|4@JCitP;W9@|Z( zn_?!22Y%9ojhZcqfT=)o2^26Xj z|I5R5Y;clB7g5DX5`@DChfL_E(KUXDZqgui*p>d8f5A=>3g0;OFPn}GhG&Qek1>`HTJ(DFZ>;M}5=#4i$k-a*eAzX#){zf*6axHh}M!`rf7Z4})VO z4F?x!&cJ^+MUU(E3&ZEs@`e#Cyih&M-(x>y3oN?%&G315gXE>Z!!mVO;HQWlNg-=V z7}eJ|G+1>4Vjnhl#Mw4M-Kp3e5;kT+?EYh3PMUT^?qOFid@&7CS;K4p{`CW|aMIaxpL-1lyXuwEX=R&298Q z8mIUIhGLlJl4(+rTykjZ24gX5uo_6R?g{}H-7R|Wu6+RC^KO(mEjFRQvPvh6w;F(i zR^u=0+!DZp|IOt4mxVeSG?dq{M08@qa)tZ&Aeyk_l$XnxLdgf(+&d~MfVb&q++VgP z5UnQuS4z|uTvKP^Rh&KmUaJ)?nJk;=ja*QZme4v{I_dd)zPJ}8c#`qhg$)2t<3|#X z(Lw0G&1Vx817EbNXR561a~t$({P`l-ehJLf+^>zu04O7*`0(|UIB@%^221I~=U|)W zza%ZvCy3wlgjL?43OLITjW=eL0Pk>}#Rf?dQjL`oay_Yt^zHBe$`Q5)UsIYDo?g;J zTiZOY6k%78>CT`@YSIf}*d3WMxF3sd(dzAP^SYr5^Xsu)f_A`ppAao^Ll!L79W*ce z8wAT@XR)6Vg}`9!*|`ALbTp=TCaI^;3+&iB@r)ny28_1RJ;y4pqJ5+7wuL`@sPS*g z^`_oqK;S#Ehs;ul&CfrQe-OHjYlpUVm?bKL+43i;Cg&NER}ne??`C?`RFAiAcpqSG zPZZ955tzif<2IEI&dDJIf>h|=>%su{{r7Y9I}^|}jj35nBV+QCeOeB0usmL^z4QJuz=a>U zvh?YrAo1F@DEX_P%(}YauwD_U-Qa(lBff>#D_RV{o$SJcp0lV*a&%(Jw>{i4j#uM( z%e8sT)MYq#;hFBj9}8H1A?5WvsV*G&5k1E;p39bZ1tfJG-2IIf*Nj?R1)4SM89hr*n4 zW0dTEVz(@U>=X-YuooIP-Pf7kq%#&0q6`1jc! zHwtm;m*IEo$#QVfR)ylK(on3!qTBs5l|5eIx?SNu>4R^En1(&*YR5>GC%@~yD#Fw` zEZj=VlJEe*&Tb*)5G?cZLiFEq5A2mvivClEHQe`_@O~0c0tS;^8MVScW970o<*eF; zIIqJG_VXPdvH60Pb>~;Kh))0bs9*FioIQNc{phK2>@qkfNfrMU_jI(2OqZ>|4}DHM zR4|5OF!+pFOSl;3do$=H7`uh{a;pk$t!QA!q?0af44%WQPvtLIU-H4->H79w-ZIDj z(+%HJHrY@}IlmX6n^i9@noyVk3{Sds}Wr#CNnqT(cjl%O^JzRAQ(7{B5gvQVF zn&HkOlq*p;?XXY21A2#+A^45-p4Y-bc6eov-C^{tcerO!cfqGy-k8RHx;G;?eQ~zw z+0(Hax3TJ5vpTm>EjF^Kvc{lfkMT91-l6WiisOPtF%Q*D@$-M)m{QYy!blbjGQ1B{ zaGsP`w(r=VW5?TdE(`5>;0yw-HX{+eS+~%)~te{O7*+mSC$|!|i%U8gaq! zuBfZx^Vm}RQNka&57@mzmvEao0^S?Z9=RQqj{Q7JXT2zvk4M`(QI75oV079p>t_0V z2#bg;V-)DbZb@b#=`dw+4a$Ok+^yEC}E6mHo5qy)cz>eWXot|`oJ z^O{alBqhqSBDK1ocmc(LKB_pNkA?UY^O4G5vi2RRc_Hs z1I0M+rt|g!D3!kYl-iy=#RBl_a6C>1Z}|zOx#m%QOIrk0oam=h(rhlql`A z-VUylY+sT3mb;FZWjR>V3&#(9hNv>hn)*Dc3+Of|G85+bg!=OFm+GRA0n6x08&TUJS;FJ2APQ%2CPnRT z$zw0{o^Y|pUm+6cis{PJvOPg1+{YGJvYkLo;Lo3RF&>C{u_L(0!54(BEGRh#K0+T4 zNI$Z$K12U%n1{PG4G{lH4mknid%)Y%x|cD?6-Y7F|FPQ0MK;sy#_eqxfcfW1kr#Uf zD9J~BKChz`Ty7k2aV#uDbB^lK=Qcm1k<@tYNb+R#B_mqXZ7&2Inp3g5r`n<7anJbY zoyEXW2s<(X#=(!F7s4AdAA#*mRJi|)ACe$zl`oHX28=E(#f{4GsM>Oz`SXowB;`j= zyDVyjUK@#D^wai7TQs_ABW!Phzs^Ucu8BO<-GI~feOv*aVRnX;-6<$SDUI(U3^I|$-9}W6EUyW|`01*k~tWlo}fLImF#jo3WpsV+??cC@A z+GTf=c)rF(c*r)PT6J;&e3d)-BN5*~al>C1ZvUP@4u03KzS8D`PYsk!i(8oB(^mRx za!ct*ES`CF`OG2;XYHb{bjx!%NFVUd&flO15V-J1`-7qtnm?Rn*AMP#Ad!N{fO z&(6ZS&4J{vab$#MU#)x9*O&->eE7c{4I0ATqU$6INs5F!4H5UV+*Js_-1gdx66FcB z3O$5qy%U774+G*mfShnmJeuG;Mn_QYn`itxh(Wud(8R(0%TW9E-C<1?PDo`W(>!;P z2dchB*{qwU@Jgf_Lw~3)JeKm0nbB7Xj&n>>X71dL>lnIEm~wVE6QI9HFk$lv=jEd#Tr<!$kCx>e-%E5 z?!25oK0%;@CyK4McTBdx*TvUYzN8%`{Pg%YuNTfh_&ME{*1vv|aJBC)-FL<#g!A8G zClOLO)qblBHM)NeacI(v+fv zZ|}ptJLg{}*pW9x3Qe)XU+;Fd^<<=BiNst4qp<+ollpz++7VttM9<#`7L}TW8dd90 zX1}xvgD0B;5rrW1Ofb74cu@`BKIvJ+{PzGbIb>k1P%aRjD`ots&Dj)0fDX`_$f6sqVoCPHr(c@;k# zdD6g0Ah})D|MztZAokjm*yUEhcFU6@^^I$gt1vv9l}#RUg3@2Kax4Ur($7bqkrA&- z)T@FGi)gqYEaJCW7ogs7ET3Bb42F~6lSocQA*ua#jnh^}NN9?tFJxypfDc7{>Mk6AbnckK^ z5{-UP(~s50hXB>HFOd(62M~QAY#y(&0ywYySN*Sf0Ep4=_u+RV(a}dbHj9*LXj0~l zIR7sfbcvgN{-*RClI!nQBDI?a+(O!q*$u~lUPhZ#Jl=>58#(7A?OG7w28Hc{kQ+Es z5^B39U;}oNp4jdW-$w;6s)CfB@&R1u`9u2|9dO)$R$|c96-Bjd2q)-X2P^?{PQo(! zz%}05w9xYwVwv@p-$586`(3E`L&z8Cn7Q2z zel{Ssqe_T>Erl#TW&ak=P(^XN>vxSF@dF>7R`C;qo0zK2q2Y&9{D@a^`=~gn8~Aw< zOCIvm2IS?95x_3@L-s%O55N97y;`eCz6ooNj z@pz>0I`j=5{@79BrmF#nd;hiAVTlFN9EgTddi=p}iiIw|@14c0nZlNsEPC*t4c8@F zIa_h@DT+iB`cnWYrq9ssPGSAzHobr3X7QR9>cM-IW7zOd+xg0ha(p!F-lSoqAetp; zW_CDFW67#-H@uYRF^aY+`E=Pi{Ce-Q*j?peOgyO3SMLcMNdCUkA63nZ*b^U=6{W3W z{OGKf*7He>Vt>Cc#Qjd-E{%<_U$_XgS5o4>J4!h}sKj(Y6A!#Ze4FWjj4ix+xGw&44pv6_zVimmkuEa|!lS>u&*e4&MG z(&0fO_T5b-DI$XlMX@w}x#PBlA9CE3QX`wi$fz%JrEw47dnfjpj-0E)v#(&%mUncq zE$YKlvpLqdh1~E|*L^o^{}OG7^ZO6@lj~CV%`{x_?~g?kGir3Py1hq9&&ylE;9B%TCRXS=V59_%Y>cbaSg97;P*i7p`4rdXR62Vks@N^#6T&Ip=TY<^firQwV;p=>AOJ%9X!7&qD+dG=sASsu{Mv|rY1& zFQUC{b?%-`1t4_HVq0}X4_z1h5ac)Q2i{J1xhMMF1gmt*mio_*fgvuTX@;|k=(X3$ z2sR;I;B|>Y*!4&BL;RlT z%W*Qy7?k!fTp$QrBDwc*jmPAj08e~SJ|%dC4j1SZzCTYy^TFvNCo9Q;+S2rY8Z1V@ z>|I>1Bbz0{DZ*y6ThwEpD$2ir1uY34m&Whlaq3@ zD-QhCtySVFDF+{3OId$m$pVY&0rb2g>1br&xj6UvT<|bPuK%DV89lvwBeLRG9ePDd za_z@vA((n;#b@)U1jT>+>J{*#8i>2!;Z+c=M79ri?j1f`M4Jz&YQ^2c&`3VHKs0>{ zkbks)eu_U0iR|D#*xCoQNH@GKqdX0oD1ULEI#UXCJ?^KRf0m7yI@c9HoJ#~LZ#31O z;x)ia>nduE`VLmOz9qbUKL}b)|CPOx8bUd)l4li8&w!u*CaI4eY@u-x`2eH9_aKD& z_w`bfF+kP)OFb}s08yPCm&$To1}4oz17VZ2gnj>SbOIW?Xwfh1xfkg&n$zKYedEzA zU@)$V;2-&c)IM+eb}*9=TK6mx)Qp&*5vfMiy8Zy5c7Eq5^Pv*?@bk8@v`iu4SCj;O z)@zt z)@uk#KT23~8s25U%?xP|?XP8Y@e&$F-pd}O@? zd_p*(%fg7n`@kivQ^NR+7gUthqF$eohq+t*)hI5MVEV3HHd{BC!0k7G*|x+A*0Pyr zah(h$-1Xm|TA|4%H1TLX8{f_()WM$b@KZWrZ%pdDYf&Mgm%KKS?npU7|66@eWpo8W zEbBD$f5wFb;ikIcG~Qf7$1tz*zr8v_kf^_LYE?Bsc!y8^luaq2sPwSVr8WfT(BJhd8u3WV( zI`2<-@0z|~pyx#7z#N;QA@hMlE7!#N=5q<*cJ(Lj4<`|xkal;RH?ttP(QPL2{EmVW zj~D&Uq<(@Ys&w4V9u*SaR>p~Z!P5xL4YSQxZu`Nrg}C8Za0YBNDof+Pmj#p6G%NVd z3c%%$ef#Yr8U&v?l;GBaKE!6vsQV@Y(9^SDej*<|v zbT@J(9}>^^CV1JKPiPR>%NWz7o@x`0%@mYt#qknOtqiY`4)R0gKWf2ko4?SK>hZ?j z*jF&?3W=fNKLdD#a(!@=piN-CFqQlGrV!LjnD(hz=Ywc$QZ-{X8V=7Ga0@>1hKFjT z2eDMT1Y?F#-*2M~aKhNr?JKSfi`_p~>Al=VAqpw&1ui{k_b+ztOu;0e_oi2P_kw`r zAF6{up&pb5%g@B9E}@uXmm_i0Y2=XI+fbj^jVjH}EXL`30L8Cq#h2;Lpd;?l9J3oa zfiyYnb!k@{Qs(Pp9Z&89I(mgp`vN~u&3$DxvBxE7R5-DyLhKBzA9&&_;mJbKU`Y^q z*3b{aPWG|q?QDa$Ahbdv_y9eOA$WJ_t3#bOX*N~^5kl~$xCSL72SGMju6pPP4=k$B zO7JVm0srS9GGi{cT&p zyO)zM;ty-lZgBIWaiAC={oCg*&6@=HA4IFnC?%o$ZL0~r3t?#DxACkkb2k`%xfx>> zmV>b0f9!-#MxhB=)|nE?BA|8VDKq<1GQ!WyD?EC-lj!8(7c)oIe$ZWWBbnB!5gi0p zJ)pI(LgHtluk8m@5IBX8*sYjT5sVPC`(v9$Fq2iU^^r3Z2q!6j-GZ}7{f<)0qG%}a zdVD%ti~BXeBWO7ms4bDf^_^*FHziQ*$0zBw{Qyk*r~f64q@mcobN|G8y;1oOP1Ap| z&%yWb4*g;UbJSv}G<&Ax7BVE0e^79t6x83>!+Q5DfY;cuv#&V3kn>`^rjwWp$k=bb zALexnbqGtY&DvHV`)Hrc3fVkxD#C~9?^`+49;fpTWAsI_wmpaRMQ=fqw$q=~q6Oqb zDjzM>84VV9qiUj~3ITtG3S)P04(hBi|9ws;91J+~bnM3VeTg``iFT_M>Yb)CM(yM#5Y9-qaH9n=wtaVbQ* z(by+}<~SdNv*4Pr^jTf+X}mDuQOf(VDg27#CplJ?DNMxjPt6g%PQ2>3_RPC8LMYrk zxL#KII4F?}2-2Fa#awRtE*KV05$Dm3{aGw$v9)2%j1L;}$n(bo&%b>lXaz)!r2R(= zwn)Cd8z*ey40NCB+XufIzh3l85oM)8KlC+$u`1l`;?G&HMp4f2^R1T$N zjM!0MwEy!5Zn2ngi8-bI7eB16ZKYZ6@q3(QW$*9ORtVM`TS0rXiyTa38vTlmEyBKO zK4$vzrWC((w&070LmB4Zf28l=zz2Wu?C9U)zlr)W@N5@vLp?T3X{}bV_YF@{3oZ{4 z`i|LMmAJN|yn#onx*fWv(tu8N`p2<`y;xDKezA>tH-5Oh>uB((4^s*~GVl~F;hryq zTsV2pg0I|-Yhy1*urSMu$9FG`;0qy<<{IJs7`vP5*Ez8(DMf zd}=VyQz+w5B93I)ti^7p-3M$}&Pk?!I0=5pa}2j)+xSK14ChoF=wzn&m66iUoZg-xR z?|6b#Q%=kj?O1~RxtGFd%^HcAWDJGsxq;{G%b~oK5$MD5s;Z+mJG@$B2~4D4oXlPgMM+IjM`LU1fKqX>z^5d45KocGsPfAQ7n-RC&>D6qIxn9{14iUMrD)6$+Q1JtKt0y;YeP)6HZ)gwdgC}TDH=2VOi`k$in zaL4+4m#oC|wcWB^b#Ef#G9Wy3mIJ>=g zj~7m+=0?v&DC0FT0o$5mS1}|JynjCJKX7NOwU2|I02&JXe%vMV4@3)=ol5M`!dAC* zHxza);m{?gbeeW?{6_j0ZP_e<0$Nw1MKqLg&DSdnX5F_TKX)0MzmX~AH~mg!G_nn* ztz!=!F^b^qs~y<{3(_#1+fS)`f)`Hp{MK62^2WtA*}g`?jCitBEtAAo7@sS2`M2S$ z3oG(7So0FSaO^;&`f8r{I9mouiT`IMNqDF^PbQhg5wQj}gUYQ=eLHAL~ z*Yi2N(|0x>a2R2-72!=@CQoR&WH1nK7mEM=>OXFO_!0^-KQ6QvzYRag-hKdet)M~t zTbp?gO`NB9@3FYR1E{aX!5?c}i9I>&;uic6jyWdJXEr8|N3It9I-7SB%g%PZxs7~r zxMiR!`x}h?Um10T^J6?y@agQo2e#OV%OG!_&*oxid3#Ftj zF_uwKKfZoG9^P7z_V-(SjblG-cPUNKt>0CY}9o3B3&<5eV@L1LOBlxrhR%uM^p$2Qhb5ce8GDaXFKc-kp%45n?ABQYpY;`?p1D-`gH(j? za;`C6;M|G+0K9OtihXOpJA!6qfFy{g4t_gt&E{EflqaUmi=!#`hHsQvrz%a{ak6yE z&+86KuRws*n5psYY8<~XEmKi`tQ9f@%M+JDQ zKL1%A6vNt!eFM?Wlu%(Tw7s!{2Yy?0pdtHWfoYYO3JYd+;GvK`uOWp9+-&BoE#;NN zAZGS^l{F1K81}v=(dmn0{O_(>em2BqU-cXG zQP6Pba}1z8YSQrN8g|HAD6tyb#0`_alFYS>9>bySCuZ+cFCZHfS|oII?rx-Xu3PE|Ks+O#OOEop=#~WW0^|O1 zX!WE2GLL*4XerZ($-4aknO?0TyUfx7uE~e7{}GBinv2W&lV!{w<$t~ssb_2f_pyC8 z*0pX#7|gw>qWA_~AADyy1m6SBm#2*tf3o0_s?@OXSMz}CJeRl~?|0xmEX{FCa26FU ze|U3!;vJy!o%lg2lm-UWO~2&E`vS#=?ilKm4v2T_(f2h@q0zq%A5K5D^oqfAf3_!j%;zW1MKg z1UK0H5+Q@~UoW5=UR0oB^Kh@^c(-iaM9Iz1MyC;t=1ND;bvKX}dAI5P$7|p@XY~pD zaB;NWC#Bzbi4PEonwN##A_Ad<#ILya?j!fdmx%17G{HzQhFVT%@Tu?xXkDfK1@c$~yC%5s^FKMJX;em-) z;juwkn3!KRTKTGZ|FB0nD?k`DpW1(aZ+cnQ?j=5E{p3%xX`QRFoB|=ZF4`8otaKKg zQi&M*D9;akjHr3K7x!eD#~)2ySD$GnU$_-G7=6T_-6w?%e2gfY(|e+7Q3o6=B-!tb zAqPd5p5Jnf>64|^tG?piw%06N*GU)ooE5~Ce05N6Gy|+JXGXNP7{F9TZ*sgEF^ZkD z&Mm&RE$cr1a_HOuJD~8r({L+N2h>uUn>ey60nhevqG>^haw#3k2Jb3^eif!uEXWXz z?Vq1r$<_jr+Fy*%S;+%MeP<<&&eMpNZtXsAIVU1$PhEePrVKvtw5xTW3L}bm{X%B28nEPMPfQxu0$%#kY?tcqp~<^9v@wAlpolK~8-K|b(QD9q zeOz`0A8S1-^Y{YL#N^43O0r?7gqBItY0M71{>1rsFU$^oBka4#%+mc9BZCE0*RT@5Z zW8gL5k=k{m_v=PwEG3EJ{=S+E$t7xUoM&Z&5Zr zU_EhT2Lzb?F`zUq1d@!aZ%iVd0y{o8(B}UJ5lak)Wbk!^1xm1S{38LZY?od9wl)qP zLkj!T%_AuN!L`ok$HsxlDheF#YyuWz4cS4PB)He-R4C7be(*4C=eamvKdKS?&7{jd z3yO;4cpp6{!9S+Pk`+IaVDyW&uoDh~&|(>rb2(FBi?Z6b%4Q4Qjn}3iEja^yzo(Ri zk#Ix$WftPIt~+4$qd-2R<^m$j74{B3AC9E`tA;-&vA~tJo~4y(c05$7m}KF190sy& z1=*?)VVQf2_OYszaPNfhcP?*w>>$UnBru_Y3C5HQf6%WZ=@jdSoor-)U6&wEl9*MbLV?_5WevC8pU@tc6hIS z=1ZTb0uI&b*Wot34R0|LlZRTl@y>|pVx zzM}N4B3rPrXi-asT{{lA;w*Y`t`i?mC-Od)-Hz*4=x^mIv|z5DgR3um6_y6>&6JRgL8h99>1Q6iipz_9$fqYZa_{x`!S(vC0uc{;8})dTZ(y(0pS zyhpW{eu$=ScffO+geOn&wn9e%Q3?${1Xmwgi+$o8fHvYOsz^*-`i5HMFaa&|!S1u3a<={7ia z<-Rh}NI&$SyUsjq)B|}bd>tQu?1CgBXQXJUIv|JK-&rlQR%q2ALV4>;AJjY9?~(`Zpkq@yN!SVv!*pu5teW7flLli6+{KW%E?=H;|0xV6_qO&{25>xh z>aw^>+tL3mzH~esLv^P2xkFE?p%3AFcNk+1d^-Hp$?i`a6m&^+Ht}kOdE-*9^E55c zq3zmi*Lnj)CcZlN$;%*rWZ;tv>e+D0J5Y_Oz6EAHyd&(egQ1Y7Cu9kWhW6kb{-3-?m?o?^Rn_ZXKqzUBVnxThix4H(7kS+_( zG*yBF6y2HwW*+z^k@L;r0C^lNe|7yvoB^~rH#o+jbQ)iCx#p`{8xNgkW!vbJji8&_ zRzVAe3l_~u^bpe0fM!Cbe3Cy6U>~QAH?L1Nv>3m7CCMcg=I9ewLpob*olP}Im1Kz1 zBRQX~mubUC=i-iKOyxnlgWoB9|DHp)_F)RgsOvEBB1^ZRs@V}U^;Koemk*0+Hfytr zXychhTNfG@QQV?2*H(U&8*Uo3^0io>!Y_%IRnn&^ajd(g()cbL{-To6>SUvUHGVgq zG(58l9{T=v;+>+0GsK^>x+!V!!E~&QnTH8{<2vo4>BI=TGB6Uh8!$O(GTkP23Q*-SHpz(H<|{ zP%#R0gI%fp@An8cJ&=o!7zVG~=X*cmmi5{^)5k z4I$#bV=uN(zeCdh5gy9k`~>Vx_7)a(KLV|kF}vV^YQR3KQ7cIJ3TX*I3A6WMU_$xD zMElQ2AVSFRtSa9S`poS^?s=^o_>|00j2=q_gLMrxYy8RR;%Ca_({|B7bN1Tb_TovD zs(9PwvE&g?RL;zCF}e(N%p2P4J&Zd7w!U8@GfY8piu@0?B!>ZcQ2wJ|{k;g9@LH-L z&AT^`L_9=0*&tgfmdZ3G4?VRPZ*w#I3Ya@0VpHT^1Eqi%C!hF2w5wn5u6vjXB)F%G zZ{9US?KcFD06b@){_R>@daxs^*b)nIQn&y-T0ZYp?h1gj#=!}EIuaMeIGn`AJA82wLpn?Lxkr?uY+v)s%4)C@?a|G%NZHj6cnPNRV&5j1w8bgXj+PB zgZo`_hR0!OLb zec<(=T&?1M9O5Q=%D7z=2_(k?Uku&63%D**^544WfPQd9QxS=HfbJQ>&aZ9ZC|a@T zf;4ylE+)rJhjY4tscE0<_S*N5n}T1YV2Uqj?HC1? zi?XclStaBY*gIK5D}+RptDClcA0s~P9{j$308lA4{ZuRS04-eYQwlBaAT?0+%d+JY zw5dJ9xj$A2Y$RwMD_(p83U-{!b}hx=UQ1d2shAkx#Lu#EX6X%5dnUrPait5GQ1oUJ zk{yCEZ7YJS8O7kaIpc(FkQXX>w`eUMa}UJH-1D!Pe2c;&SP6;$`~gm}|43|T8$hfU zd98ffGcfM7s1qvOh$KJU74*xW0Scx)f*qy%K<69f8kOS^P+oM)>Q(MVb>#o}R@eK1 zvsrRGBkl!;UONdnxrfM-eKUMsataKuQugP+`-UuB8V=cFe*l7+BoygFfHRep4t?D@ z@Z}pCdDxr)UXl2-8yavNQ%d+OmIskR-(92O2{uZca7W&H_@4@%ZiK?G(|-f+2bwy2 zw^q=PCvr)>88aZYSHYu0Wgk2$3rxjBqFC3RVRTQK7*0{ohrBPN#9Q?P)yOX3i_Er|`2?q-ozx1bCVM$Iun?%GXThB7U1Kopo$5Ft?5jBm2h%M``J6^;$h8I z_C0S~LHyFnLFQwG1r&~Xt;%HQhQ-Z8uDMPJL5b5WQ?Xj^_{yJwpG$;F_=(2X?gdW^ z=*vSl@0;O`A3yi6SSCt=8>&u^e_XG`jVFc%@4oeg&g+VsJKkaNvdYlJ0YeQgb$xfp zyxoFt4Ksa`dGr>a2&$6pF~5G~Y4cN^A@+mU-^GYH=QQE`4-}96?zG?=kDhMQZ`Wh4 z!fC+|{{o?ak;>TU*%VBWG4M;PpcPLR>feZ;X~O0srp-noEqLj+eb7Rp53JPAm8xB< z#~Q{;Dsnek@OoM&ktt6To;G&odZGCBoE3^8fA{TbULFMFZ#-=NFAKq+ zf6YE{9r=u>n0`vXRd0j>C*%D!6ssX&c~4RT0fv0sMNxyP&5(q7s?bNE1%`I7=;wYy z@ZFtdt}BU+kQD#RKf;ONpGwt$)%VSC%X{nor6mOMQ0x8WC=6#yE)1)byoIVlZ!w=v zKK!Mw)stnE46Q@1Jseu+gd^@lwM)I`_(FAQ0Z ze7Sb;jN=GRkJ24%6uH?gm_QC+Re znnuJfI8`imf)%rJeiSgiOagb4Z<6oHor9|8(^d>#*CD;J_U$+0bXYf|YijiY2maP| zf3nH{0(9195+mWW$Fgy^Ols~a!zZ40hxsXTP1kscp&efM zeIJWR6`2+OW|rsiNHMloOL-pr6LI@1Hg|}O zNhlR4x{kQ^9lINY!uj;)K5o7L52@19bPhe%#vf~bXQ$qg!=HGqlCL%Kz|-*oGu57dQ0N!$ znT2X5e1P>=a7VsdF{yPGu(b(d&|EHx*Fqic)-*Tr0o%>^VwWYKLkyRfb zV@vM^WU7PwgGV`)7AnpWi7yjCto&g=arQij%bfkd3}%t8`sh(OuN|!3e~f_g3nVf& zl2V-;fegdfzde?91(d59V%`NhC@o;dCxF--844IsJK9yF_#aA}qU+H|UaVsgQGEfR zF^B&Y{}VT)H_56M)@+Khxsct*sc;bUIjPP*EEkOs$=>Z)bO+^zeHq8oj`&6*IT7R4 z2Z(Yg^LJ|e5m$eL+?_u-0aRF+v<-r4k0WlAi~G+tP?G>e_zCe+s~k z5V6dDH$-va|5+wJ7Dvv}#rC?1!occ9`@esKEa>JtQqNGXb=eTsJ$H@@b`<&G^TL&& zAfPX)?!qxB4kWE-=$o3Ak^Z^g;*;(2KuaWZ+#ymMs9)Ot`TeT_`eiGw^7FY2*b@}U zb@*zAv=nSs%^hq2&kcM3q>TIM<)iHNVZvBsSkSq4>V?En&b~$7<)=CF)VuB}Np}}C zWqGvxA`C~JJ5TEsckZAi^-@1AHW#4FaB_!r&IW9kRh55w=8gE@{&~-&6bINndiKQV zKLJQBW~dqv1+HZ3J-nY9f&@z&KUvR4fNNXa%yf5y09W+2wR0B((fy$C{L|C1Ai4WY z>NxW=Og*g4!rc*>!Tv=_vq%Z1LL z2hq*0_Ql|T-+*i0DCaqSGHkV>z&2UkibB&WLv?CfK)YE2IiK|uc&LARf6V3=ib&Dz zSYm2&19UH=I#V~=fvtxNP&vjYF+yI)bBQ)XOjy-U zoLlJ9U-0mc*>3-(qx0kW%iPf2ldz?1Mm;!y4A);%FJ&=Qz>lUQ6hEypVhJTzffzPM zD00Rqtiqcbi|ZH=OT{SSC_)2Z!0!sLFt@dL86UmZJ}*>DBNKw0Oj2K*_!Tf~xy7^n zzh-d!$;rF{Vl5a=nH$eVPqVNf26ecxH|6QVU`G-YJLwFlXP$tdr9Nu8H<*x3~87_ zHhSUIGhv*Wnm9p>jdA(FrLonKAlTsG@b$ti0~i=QDdBWQ7m`udcRMwDVdYuEm3HNq zu&?TE>M`$X3}&B7LP86yO3g1z{?Z*^bf=}bU*re*Crm~&>{GCfHjCHUt!6BrbU)Fo z)De#X<9UihEo?UBnf2$&14wyQdt5i876&;WO}N{daKb#t^Y@>0aDRt~O0;4K{FqXE zf>k9AXN?P5_SDwlR~?$qbSaLu483a%fdU?o%J(V#1!p&?V9q}gNScfH_u1m3hbyq! zxhSfM{7P)x-BUthQ-ZTI6s}GUw_qL0bJ4L)jhKLUfc?>lCfriHYQ-1y7Ta(W3ZE53 zxc^+|=lb?$+>`N=FXwv$whuTA>3ZLYk1ams34dIVO&RrgX>~E?IF{p`G+B!;nFzmm z{iqhFw%@(!zEg)mXHNp@u{vD+c8SYts|d&PuqQv*ufRj*T}!`5D>1nzYpPaS4SqD3 z5$h0DhkuQKy_%F*j(^%IKAWT~!+tA!L5E$H_?qSX#)w-rR&v<3q6)0RpNEByFO?$L z<#O_o){ka*(fY$sAq|GpFHU4`4`NtFN@p40{}wK`#$HkrL6Gav+S$tyJFOx##n;?lwSN&Gt1Ss2-*#$#=-K)?bs2~`NV#iq2W zZeYCyu_(o>w$M>#maneS4O3QB|La%Lz+1+vJB2IyP}``iD^ze7$cqd%8__2~GE4L5 zt6%IO{p7k@pN0dzxjX*5=#45IV7cvkYD5=$+w(3C9o;vJBzYe9jzvSyf@d4*FO2a! z2T?=cL>;V8+3h$SuL)O9on^h&m<1`8;&v~M#KTc1#oaU@4?SMLl1QGqjmev%_eCCY z!X0f}F~!%K_-%iBaKMH*PR#sa^s?gu9MH(&UamQYW#3%*%*9TP=~JYtwkM9`bsx_N z%UwCl9rbYH-Od)MOrnq;Gopiq&q&?v)~IpWA?0D~qCO0x*l^kMC4%4IaR{GLxQbgQ zWZ2^-&OrettIIE3$f16mANTe6afL{Z^`qotm^mca+(rL9 zoRx}ks*vD<)ldJelb1u7<31rpPrZixFPxH4b7jIAmk&)t*-2r#m77RRJPr0>S0+Be zG!F(f)+#$bjDv=e@F0apW9Xu!@pVbYE>J+Hc8Xkp5qrI%YJQxwhXiK$ZQ`|-L6Nil z(rLv(ghvJFUC2KmpTpo@!cua0z?I%WZbpD_iEZCZ@EAq{?=6L2YtDkvXCvoL-i)AB zqmjh}a&E{gt++D5xecn8sN;ugjuLN6+yB&a7XcH4y`lBDL2zIjHp8Go1>HOww@cfP zL;21-F9KPYk2uP?$Ip23z)tK4)dBw$ILY>6J;`(sux@;j{wiAw7z7_471q5%{Mzq? zdp$#e1vYP2x*Z6bZ1sKQochrr;W=mPqAF0h)Ow^`2nVDz)`Dwf35cckk(Q}`5XiOp z=_xTffnwW2!^`vA5VM7j%$K}k;4%@ed-6j(VrV|`wUi+d`50O#e$40r@XyKWp71`@ z?EAW)fBG>nG2?y~p`HQo?eKzyTWKgix@&q!=o|RhRzSb^Edf1ty~arMt_Tr+=@{kc z&jakK(PNA=+CVM4Zmu>!8YE|JPEY7tAbt6+2E8ChK%%vC^SW#Z`svZu9}(w#;DEsSAMv+=pdQ(e<0PJF^7F)d8@o6V6MxdY z*e4E*9!ttuaD5JpV?JA4w9Q9SwadG^nYEx!lX!Y-=Qp_cNlA!LsA|Ut5TT>}~14LL`zr5|43ta1OJ4EqE9?k#8O#`n4fUgcwvU5f5 z;JU$a1*4AdKp=(LWGyxG$Zt6;tC<>#Sk~rhCFI>fesHq;#=%Pr*%YjT(;0$VvNbD6Whc`-_{Ao;EL!mII_n865|(pk{|Pgmu)T2Y zR^2q9c0pHIKFlI2o#oah1s@DNYTWtzsb(DyH6YV&(uSo5J~_2;%V zZZH!a`vC958d^@qZDtM}d|tx6V3`T_sF>Vl&Zmd7*~w1fTP8TNP5JV@d3Si{W6qXx z-!h7rePv>ImIY4Ewv2#GX52_R_xb`-z@FwsZ@uDN;H4bnk>bb!kTz9w{nSl*n6}ja zxWs|wi0?Oe(%E)7qUhQ^p+oefU0+5n*5M--3%XN^4?GfQJMO;56_%dvQKsgQ&Cm4ol{p>APuj$I zu%C&i>(-mi9CLB3Hu_0)BMrawDycDH(}$8Wtv^L&0G9L!(tS#thz$n|$tijhaKLG% zE;ha>+<5xxQp?K!pC`#sx#tp=VZQgp{P7d4)Esz6`=vMjagMPqL7C{C=va4I= zz2pQK=m52)4Ikq- ziW`sYLu`&b2sf0d)q>&8N6*7;UqwOPcOTn6EQLYmt{n4<^VyK`yp=U0$=<`YR^tN0YLYoEg48FysM(&q=c-s$_7+L}Q6 zPeUp9Ps!o3kw50ftm61lMf4BPLRmQ1w0S}BmJ*EPT*>`Ump9V52iScKH=M*8Jjhr{FsU41Y~W<3S*gr?}*J z3c>^-DUD!M{5&IsZ0+|QXwKqZf#u4ThMh6w1 z-dhi_q{P~e^N#m^ETT?h;?CDn()h|RGvA&!R8aTj>zLD5>7d}ISA@hn3LKq(OwhRd z2kLTsQ;h>a*ZtyW0;A^53BBIDL4j|1p@DbenmP>=ROD zz1k|c*p42_p8rD?H3rg@)x$Dm=TM?Nm-k7AO(2mGy=Z2ZfEp7i-5VC(qdJ-olF=eP z!0Y>@91HP`DHF zSlP`7&)2-Gw7HDYH(i3rrh>1aytg)?`b{Qy%Iq`m)|ZdIN6fK{Tzqx32a03$4)p>Y z;;jB!p9ev_#EUz=WX0e=Z1VoCXeQDtEWTP*9|M@F#`p{^g227MLcOXiLtwhtPhu;r z6sY+mP88;5A)T|ep?6*5fUH|@%EirKkg+j&iCPGP3iXza>QOaRq;jr#eMtvMvVQN0 zQguT=L_0l-IHEz;x)oXXWns`Y=A6WOSp{*>wp@FrpaZNvUMDKO=z+L9Z&gUoJpr*n z1~2P-M8MQo$oWupCPYza>ad;vPu8OJ;%1Q$CrF5~;XO%e4(=?y^@6c-prwVU-Bj`h z2&0bA6RI~u^TqF}t%L#rks%|~e-*YUT}9#?Q=}5eZ>Uu3chv;?AEY~yBdn2|s65fB zhA<#pU-EPBy$zx+TGabI_Z&QsdspDq?S@Dyqg3Afaz&KI#d88Gc|axHaO&HKcYxy4 z0l5)v9Jpbgskant4K$gU`=Lr4(sXWZvnj0w)?|ZoH--wqiOi(b(Kov2`71LA#nNl2 zphWzUuAB_$)!@qi!07`xsejZ?7q%hSWDSd1s zKQ@VBA(?MSIUeWZsnoMbVfq)fhvf#)y_-oW-nEYkm@Nz%lE|TF*Zm)#>8`-i#mRvA z3yUa2mrXJ_=FgFb((lGQj}v&x%cGMjgBD)A8!zX_Cl1Ysb2Fc=E^ zq#8iTh>tT6X?G+D;Z&u)SeftEko%#)z-BoCR_r`282OMLT3^#62j4GZum5H=Tj$T= zHv``ud^zg?b7W;Mj0_%eP#tH^Z@2aVJJ$761YgQgM>7RB*rmf@fTYhTiwe_ylc?vh z;)P-09Bar4Av{~G`GnO{7*3@xbsr2%LKf@fgDes^Y+J0*OZq?rehws4C)Jb2fMSzy zUtI=nYs&E0~Y%`JG>1y^({HKZ!Rw z_NU`F)9Sh#YqdDt^xxzCunJsv=6-C)-4YyuHMI==3osqUcM@HdY)n^rNcXKR4E|<6 z&q=uS82Ywv{JpAa1S|DDO6~?o;n}8lYyE|ScyjvLm$QyG(D}_u8uf?U@a~PaW%c$; zFtX}G#)|=NETFsI#wg8=!)(j%2^d9VcMl7%9iC9k@wM(%jC~>M~!u2_QV2MNny5OAx(MK9C&-f{@O1y6}Vh2 z#6Hd^gy|fnif$%zV9~qB#B=63p!dbq3uUdDz;<3DOzb~N_=bIt*G*Usi)DHAUXVEQ z#u^e+eA_<{dk;OCB!-XU_!n_W#A%<=6bt)Os>cuDxMCjaLXwSKYekfQ1+=4^y=#S% zEJu0M>7)niNk_TVXBEzkU;*?O(=cADP6wLQyTsy>ov1s_s#bosj<(5g&x@8k%y>Ab*dQ8WF za-;L*Q#!-odH-(WBc5+4y;k|faO!ES-Ywj!ok4;Zywe$G2^N8ltLj?G?Pf6Q>~g|C z;~O#wp;gq+>jnJGpBH@Ua)A+@;_CvImuMl0`hgnN6F~g4FG0@77r1AS2D<(32HXKY zWJsm}teLKM^P0UxPCkh%? z82^0{8iR`NcC77l-$%Faoev5xUO)pyJ6Zb=DiMA*6ldF51)|=X=1{U0pstTRM!(9V z(bcWx6#pZhlx3yceZn>wbwxawb>yf70Y9l)K64kMzmHY~s-y#uY57KB^G$Vdd6%0_ zWLFU=k<78gO_(Ek1KM&I%WwcFE7eWM5|AJNmN|*8DEK00EOfHe1k@8WT~{`@N6||z z%xq5r0h?&?rP=T-@N?ku_HQl*aIK{3XNrwHh*5Tm`xPaJa$nAV?{_mov5f{oRoX8A z#n^YA!Ltp`DOo#F#Qrj=~ZL zyH1@eQ$!-zRdYjAPU9{l_GTDxrSiq@zF~Lf^Qqt`;ulHU=SAUFYq1Yw^4Br>rklQe zo+bQ8(HERs>juyLrsm9^r-UUrN{C@}ANBD52rl}10V;78nhtLm;q>^^50&rxz`fv% z_&IY?NOHgOvCBDWZ0v2mRimT~BcH*3(`$x!`_blkY#dW(a!TBUfHLZy37{`Bc^uZWq#Je8)X_BFVt$G!}ceM z4O?e;b|6f5OWGbj9e+03M;3w&uM`{jI8;F4<8BoqLX9v(f-xT4r?OcX}cfwdU~`;RrsyH zg}I_*F1)`moM>-&;U`l7vyc0$k~>tx249~fhR}N0*ZuMNK6x`Fo*6TZl0M3*-Bb6G zAE|{`PMVUOLbXujrhn8bcLVGxE5!d{4AXd9+AzQtGb$@O%?3pIl^O9(U$*WaM zUG0s~fncFndbR}~zFFY&^>2kwD{=>1MVg^|pZ3d)s<)7a`B+acZ8OYG^AOW>ZGjRs zUEWN(2!5cQlPNgai5+Teo?c;V$0c3%VhhwQSYon~mX)#*n_dvolvuCDf3H~*@U3>@ zv&P3y%GI{x!<(&-Y`4KGHa4HBdi#{M$G)V2^$Z|e0})w9lmrba9Yo~6Q68_#-DTAa8?UPnzLjJK2-cZ zO`wMGzg*f+4!NCJZ*zXN!K(wW-43Q0YHG#t$7{5-0LJ`PsgI(HnlX()(qzYSE!F~` zDh!k=u-utZSpmlqymX@P*v9n&yd+ThFz#YD{`k%8s--|3KKH6&QbM^JJ2e}zjr&*P z>qOI^gK~?oO`i6XAE7yTZ1?eTrJqgMKe%3AWVR7+Xr>-nu4*w^D(PrjVG*W}x8itZ zk%<}qynQXMg0QKcQ)swGGj?2VGpIk}jOst$9X+(p!DqR5IKgrpz8J68eKn*RcN4LS zaNl{0U*%WlZyfEf2!i(A3_hgbjjny(@1Fj6POw-p=Ug@pbk*;_xtxe^ejs5XDYwCk zp)@bZo%CU+Wviu=ohZ~#jMsCs%)z!VHDcvylQ563SGJPwZ7ly&@X?s61$;q4%dsy< z4A~YfYZrVnv2isPp(l#O$Ngorj_+AOh9|zN`fpX?Nlva5!8vVg@3-VG>JyJUt~nYz zvs+-+kkB2%M>a6-jk1X*(8Ri`bB{o5*($J<((@fV$p!sMWt-qnCY)yYqVl<>9?nYsmhJmT z0pGrJj^)?&99j^lSE@NUDaSD$w*B_K`L`6a;djbzcSHH}CG!EP{{@lw9?E^0~UMQF^Orm}BBU2nL2R41Mbksvl zfw?pvblMT@0K>=yr8&osXrOxQ@@JAoL}tf3)91s9HAeI*h+cg}>_+OJ>PCM74c{p8 zwuMDhy1i(#!<>z73CoE;?5+bfOFFuSM?S_r($qNeutDVg(s%aP(*b0E#l!gc_yllm zpT4)F#t0LL++D^!e*<%^c;EEgMZ_y#c=l4$2-vNE$=o~H3Vv3YL}Vm=L&V2uik7m= zk=Hpk%0khKqt;rYYc>+O=x^P23SD|E8t!`Hdo_L;5x3L?Cirvv9WRuE=#U%= zL9%k>BT{Ex`X>UY#_OKc{Za-ruSz0S)C*>Yb+q0kW}+2RA9Kg{5L8TN^lL;o9Rv*P zYNt%h0D1=6r6J=ykUDpnGfK1&?UmcOHhp>pEEPoW#bkK`4XsnJ{P^p^$64J&VwnbH zs~>5`V&V?f*I}Gs{4eeUjnR5UH0>vvPYcewRH5_ z7RX#-oh@6tkIoK`ZVtYpM3nCw*%}!y19PWRK7%|_6saV2S*BSFn03^V8&z5XYe5)y zQ+l_Vjb}Vtzhy;Mk#p=~+Tw57r;M*illR4uF(u2?2_7A=%d!8eZ0Nt{J^R*eQp>ew zMb^*@q?guZH_n$-5%GjFPXhM;;?z8gEFFMzF=smD553zBi&&SVoRJIW=V za?F3H4GJ}$Yo_aYq8!W8vf9`XK*Ur@hHWy@T|n|X#-tM^rn4WYjH{tp(75&Cl`*K) zj*(EAaz)&JIUau;KyEU%0FA{haMmL3vb6ebB*pN)_trymz?>X#ut;u;E>SKw&AjKX z9SUto%iz=V-TGPJ_vb$&PL@qX8$@tom6#S@xrt5NY?z>|o9oJf|2uRTJzaiq{3CG6 z5Z?$Im_W*NJulX|)<99B#`gaxI?s46zdsI}nI&XIHrZq+zULq#E0QAlA(0V66sc^9 z?46`UQOMrkbL?b<$jr_xQe=hx{?G6GessTH=X1_^zprb8g9%c&D0@U7`0Ta^M&iE* z6rc&Nd3;p98JO5sS8$gvq9@tg*smL-&kGOCFPo=<7X-7;!!jWU{Z4vcp3GR3{Q5l@CIOz7Zhw!%d*I43 zqY;iYS?Jd2qiWYoz|8NSS+VBoLh&-|6IFgPC~-J(f!7%7O=pR_fS{&H;Vbgmv!BZ3PzYukeZ*6z^|O)f39=FP%y5? zVfy1fu;A0GZU4Q2TKg5;JM-3o)e(QSl?EE9R~Q~-8LWo{2l$^L>5ZI2 zf!LYs+v%9|xv+m(nGs1yK^=iD=c6MgST?Bhx)+@deDmDpir$nRCfU!*(&~GRQTS!+ z$AfY>E-`sTkHY|75!{y73$ehly(ezX?cRoC@$Dik|Jg#C5bqGiT6KJbAXO5ezzh3X zTrby8iNXD~+=r`a_6NMRv=cT0p75B3`0l&U^-#*hk?Y%T6?_(7voCg*2w#;>^cwzZ zfKHl4eKIQtbJXl7T9Ew;@(FaTOnpAcZ?5HXwdG@|KQ}coDnNv)KIIWrD~&LJnOd%1a9p)5PIR@R8>@veqaLBp2vjc{u@ir&Dy9#$0&?XM+b=-*NLpU9_r z7}>P$%r;UFg{xCJRu!V2hzdNtvFkDuPYdEc|`7 zYN5@E$!j-U>Y?}U*MR+l9Podc$|t?cYoV~{Hx7ZsTDVntD|GhctMKz zV5*`8-1M1*~V59YWln=I}8E=@S>o?PB{!DejD z%VB$wsu{oK9bIr7Yr-x11%v6bMEvr;-q+o)2-8flzw0-t$5z+4CvI5O&>& zo?56mp;wQeIhv7MpT)Q&X`+Z(ALAFZT^wZ6b@p(OlVvQkEQ`9H|ct-N&Um@8a<_;eLJ=Henh9V?@PR2*J$d3Hlr1n#)34K!@v1n+DCRcl%S+Jx)pzGRUN@mR zd_2-cu840kUg>_wpowo+D$anQ>TfM(L zaRrM%vtHdLrGcDh;^+g*CE-M`vDMC7LHxHW`Jad3HrnulK8@Zg_~MSLiD#oaT)#U1 z#g=meI2eta-#o;Pd6TWTCSS0^i07hbS2VPsk$~{4zXdW-Cm>wux(o*n4OZ9|z5NRe zJWNtHl%#>H;d_4`Im*FX<2R=)J6W*?t=N7S&mMx!OL>dbWbmly+zrL56*LQ^`P@xq zaG+dFKrSCG{>9{DvGe=@IKx)2ySil z{5HgWz{7y~M%-UID4E@BoijOr#=0t>(s+GFB%uNN3@;9H!e#eA_@1jn3Ly#S-adYtGA z0Yq>`Q8d@aA`7ptTvX-}sHOC9@7W+Hkl0?`b@rgoMsI4xyO?5zhSuQ6?rS^5!mY_) zinoq{UvC#m$rxEtB%Qw7dpBty;5GYctU(iWcCNI{Jsu!FjA?Ye-#2%_OD2`)F8F@n z<+NIp;Qm2Svd))u>}3KMzcR2!9uUcMMl$5(hB}EBH#WBwjtmjFRE`w0HvJ|lE`^CJ zY@I;UN_4ka<=zsnMg7o7yV*(D{7}HpvOho+dUPkBy>^{Yc6pz(?-My#U%rYLyx$Xt zS!wf=qKk+_`)*p7x!VZqQg7s=bAJ=x)i&9I?>~vH_ZQ@OU#S2S^L?2gLZ+x4_=JA< zu>~G-x7aFZ?xAMaD)N_iULm{V+85}B6BJQ>|imjXl!j8+E+p<|m_X}gHw(C3K+qkHG`bRnPcAKp{7S;$Vx_{d7 zrvCwBQGPp25oTytc4$+PO$V@whPbs+I)V~&YPJoFd~}$$cc9dv6WrIgICNi419Wz; z+inEjLN`w|UmpB$AFM_4UI`a_gsRDnAA}30)}#fs$-wFEuX#_8r_ydh8Y|bnj?;dgURAv$418R(_7S%y*ox z>ZT*BmNja<{#7s+;PdK}|2o>`>elY&-Ud`;E%xUrmH?BtgF~x@3O>%3L~VFK4Wx84 zma|hggT~hX{slyRMcHB^xiV#B@QkHS>Cy>u=gT%LpZ&8@YNfLc^Bpzw@P-U_Y-U3nH9_!%`;h0ME2 zQezIAyhq-1v1rq(ve@w+1`^A@f2Jfpp{p0FSa_=DftZ_3jz<_Ntk+}8lsLGbF=eAW zN(q_Zox8bVce41QeAVsh`XO8Fmfrfp&eRRYogFrkI3xjG(oUrcw4K6}{FhiV+Rs3H z&Ys8siwk(`=jF4ysfw8FS`)d&$QB4G;;OEZn?{!}d`v4HSx3*}V0c`REOe;2m=$28 zh;Q$yiqX$geVR|kFRvBq}=TQjT%Lr(vy8oqSsz%8G0 z-(ipupZnv|fAtOr{P&Gpq>@|&-w5#^yXSfy(`hspsq%PX%LvdrZ1otj$j`sc!f9AE z`g`U^dNo{0xL~$KY=Wy-_m$PVEwHkj+t{f)?(jkVvFvLz53m*aQkW=NG-U5D5BSzr z41dVndVlwYEbj@40K?B@eze*=BLTwCbrc79Lvt_hxL$`TzNG=@iMTK{MjUBX#$ zx3CzwIkpfBFrahufx<)~Kb7VtSWuQ5KzpqoI?g{^>{P9QQ=gs$hcec{Ac1_kX8kHi zy6H9XR=gN;-qaZSIadqS*|q%n4|3Eu>;5|5&#i%}mLZ~#B&y+tF8Q&&kPv*o+S}TM zBMk06sZ<3y#qep3cpOE2C5}cJ&^s6$lQ%@W0m& zKMke8t|H?XKgM3difC+EtnLAeyqW9Io%Dz78s({W$Aa*ZqKRn5nQ;89#H}YF>mqh+ zQkt|esD`SNC#kmIRKx2VLg_~ZN@1w-l`Y@h*H8@ne!Ttr8I&)*n>F*G8d`o=jsJA4 z0@68#Ow}?LK{C$|j0y{{;14|h$zSRzJp7#Q{MN-v*x|xF&s|y$DV&_%jieOAnVUPB z8X>u`hDXJ|-8u`}@7NcXv1dU!{;BPTwj4Oh9&C6u;x**`D=5OQn+0p=?CpdvWWdmu zPqV3j8TMqpRLrt^51tntR<>M-g<=oCi|l=mgE>Dc+r!Oe<@3i*1DHq%T)1=7S*TFjH>0nm0cJdpU`f&=^KY{^-?Py z|Coc7?CnYZTnY6M>Bn63&$1S)(XACs2k@n5pRc(UjvCUk%3f zB`fgcE$R0nM=P;^%5oG1bw0ktXdUqQbP=X5`uC50s1(l|sER$ibZ|a=jc(uPUpe+Y zO$#!H|F*7&UGHZcbhNE8p<(vi!~NU1qU#AC8^0wy z`RlC5oy$hhxo2~j{F5Gjpl5QJtX~j+>9~4PGx{b}J*n_`@P^UBk#E%%Dt8UcqjWAX zUz7#j$j$kp%Pk9ShCs^exQlq;mdDY;W5&3c^shQ-5`YIP$usN5TyTL+cosVeV0Bx^ zl*PRBSTj>pPl4|gtPGTT(+LIP3%QDxJIMlgKyWsOc~ zz!LSIVf&{j;ED3@tC>InrV2J(`UV$){So)-e0Lh0%A6`h`)3z$UJcy4W;hEJs3uoa zDMheC*59P*O$K~L3(!0mCxN+TioNp}C(*)0Rz)l4Dsl|stJ=_;Kz~NebAEnjfYR@%j(Yr3sG!ej3q*=6IYbtZ!REd zW(LuzbIX8%?ozZ)9xY7sIc=hr`v+9Bl$>$vpG5Ao`qg_j7~G^~yOxms3H;K(Qm?`_ z1DZwFT~DV@Baic{L3d+4L2l)7HiPhL07E}~Z*{Fh|5_UktyBI+O6`7^`~7TnVl*4r9sd%S$-D|kS@+f*I$FVX!GF$6^7Y85DTNMD7J;Jk z9Iwe%Q$SeTxxWv?4i+6ZlR?3AtswYJ#9lxKM#_bq^kxFZpgC>0G`J!Vkb8`X{YvZs z`3!t zV>D3v`Bmo80iWw=n7c$mrYZX2*_fXMi@<=v=EJhZr$C&9+i_Dd2=O#0^Ni2mIN((z zI$!g@2{N7qX&n6$31ULF7D$p3QQU(`s_UB8AiF3Him_M#Uf!5@eHQMBR9RlfY0L{H zsOj<8b|j!YW>JL~%s0UyGV;OGI;FB3+RbM@;KCq2=4 z;Tr;&+9OQJ%#c0xkp*HkCGJa?rO;we=Y59lBjCjO`{xW3JqVgVlSOIc-V-^tqW0zW z8wpCX7v;2XFA-0h63rNPe-cfrH4Av3UniWAlCBx#%Oqy*NqF<4Hw2Ghn9A=EoBp_gusZ+7FLSn@h_}v5 ze!l&cNXm77=Y2FcAg8sYK3;DJaCuF{ryLiQu_b*e?ZB%&#C|VKASDG=RQ4G(7sjF2 zcVEr@T$2D-KeMe(b*Q08FjMRH#R%NLJ?j2K<{IKyF`Ac}jX4}W%dZA29nLsJ3RKp8hljL-@}xefMRFtqio6vAjbHSGk8G&y?;VDPr)h&l#GR% zViQf#9@d;+xnl@AZW!BDHZXy-)Oeek*+XdSx4?ft2Q~<=MC?_w1=WEB=Z~nZVkguc ztfg+i`3#NxHObsPSq%chYKm5SKA^jBH1tW}6p&f?sQ3FH3EX#?=&*QciwuvL{pNEI z0~)W4K9nAKO;`h^BziTp5br1U56{3PpnfjIKiXu1@MC#({|FzH`(*#P>PQ6GmrVZh zG$k8-?Ak0HKGKFkG7pd+;g{2`9E_Oytj|sHWP!tHs~ktJmH-Ct zRMB`}ejrqH0LwXi6@@x{m_Fuuz*kAsQ;j;v6Qy71P8V%20cjThB^buh!3L&NC@t(3CWSv86uQleFDjh5{Or6YHjbt6J3=`L?7E2pRN4cGp=~fhlD88$r8rcr z)saH}ZxTIH2Yp<1SJK7M;vV!``IQrE(SZ*@Yt^e-aST0-)SU(XeSk~oZ9UQK5Tpsn za%}ri2TVOL{)!y?hzhR{{@!=}0**{;);0%Cql9gfH#Dx~IC{gWwNRuATyc5HD8l|4 zRLXqoX$omU@gKd){!9H1_FJanVy1OQ!Y2yk4NdlTVo~drBza z{kI7z*^ivlq1kR@$j(_24*a&47RqyIADUp-SZJm zqBwW1T(Yahd)$$Qyc0+@M6ZJ#I_&t_%t6a?MokTynata z{jI(c4jfxs)orwabFwm8opJUsZaB$xO3({ukLP)$klw?|tZRQeDNf;l26!a!?nNvw zPA)QbOBc#eLYH03>u|yGx|8spG3;g2GhORdfMX&(`>HfrP{ua!h+d!(HqSbL21#pU zo@1??fdQIOVyv}WQVw8yg7pjKR2KNJt0Aq(Ru?{3oLRT)(#J*r^*1fJUcwizcqsfb zzJoh+)$4P$T;MN~(M9%~u~3gZ!7_(70dm`srF}aa2fS6Ki_ON z^PhLXL#!W|RU8OVef)={l-4CkVkWs_T6h80cjXls@3BC(w}P*wcFpmy>6SF&w#MF{ z?#_l=TVkoH3fh9*voIqvY>U0X6uNzEW)wbh6*ll)C@%841Y<2y7n8vS=)wlad)hBy z(_QO=LUXL~d`1b!Oj2-27{br^%gMCYj~&iFhXFC!uO^^Ba=i6gUU#e%&-M)42c> z!v&q#2toBPJ+-^l4UYsQ>R9~=xB+(Mze)`zLYEGw_H``{AdpfBw-%tl~ zM>`(>YHa{*{=~d?laz;8cyuCcRs)+(UkJ*i*T)YwTI!Zk0TvvoN?pu4i={>aOa`uM z;w4+Fy{AU}SZmJ5d7@7kX06tF(RrW5okMy(n@9xTnQ$*WIV1?%E;ZS_JgAa4=%({} zB`83-nSA&EQ< znj<;54xTvZmj8;ph@UKM1h^F`;#2&U6`|LqVX?iba@%!1ob@yN$oDWE{J<}K?Tb1q zoW2tz$+Rp7tEq3il1}D@`Z7e0$rA!F{c%$noh1P_Nt^#$>^KR&ZBi%&`tk8julc7{PNrU#UF}0Xym9tqxdNqSQCCJ_hqXLycqLC=%Lte zMC#~I7F@cIWcx`|Kl+hDHoq;>uc!Fop&O4j(;rh~+qO|f+4fyznQCs*qVNX@9qPBK z`%(nPqX)>tX$7%PIFrI3p`R#s8T zCCUXyX<;3YN4R?I9CABvSm(b~h%|%elag0w0r$9TXvfcAXm4LL#4CacE~t3don-io z-b7z{6L*jYu`f_s5G?)S?k`#e$64l?9 z@?bsSb?J_%viEnq26M)*0xU91QM048VVvqK&@vXYas2!ec%aSvT+gHkaAqvMeRT;T zk~5FkC9BMl3q#B5} zo`~zHS6>4uSlZWE^%kH{I4w#Thy}mpsS*T-l90O_#*T}ZfX0%p*zE~>Kps{hag4$f zsre>_zcoq)ulHQP1yCj-v!vg@UeTI>LoP>SeeT+Vq|9@9BAg!RFbTQF09!cuC@Z!`a2!zR$54{^AdZb*je=BV9AwWvqa~7mPOBxUIV$|hy0f#g;Ab} zntDj62ugJs*s`Wo0osF88Iccff&Qy!RWCc8M{fr+FE4)(L@MgX9%?GcfGktm7o!HJ zkhR)=$ijp-;;l<}o+v+!91`+gaB~6h`^=KI_DOlvJa{(v6gmo07aAD3J8z@I_0Fu5 zulNu<$?4jMNCDh?-9J0Q&8neHMIA^IDJM;8Z5`okh6;Q5`8r{ z2A_@Z5gm`}f3$Zb13EV@uu}R%@HS|W%O<6rpr82X@~|=qI>yNv`^0*i@Cv^lmDubi zDyB_Kv@Ee}XAdKwF+~@xosM_X&>V@@K0=M5)idL()u?Rx$JJp%(xrPBsD* z#0-8LkL{-&A0IjN`zxWU%>JvG<`m&bySk2BraZytj>pTYzict+@ASwSR$N2w!787qjHZ>OP)pFxRp=T_^jet)Pe|2vMTjt2m2_S zYwt@}-|rAE>nVPXc$P!ZKc#IyV*Z}^@?5UhUtCQHtZognQ2#=_S$LS7YIc@*>i*|k zknKSazFo;#0C+ja(Rw-riBs3#U1)+SE31ZW4TsF zghZli1c%+TmSG|qPx77gU_?)()3WUAnE`iBid4%m+zXpaI-P=TJ- z*gYz8H2bkMXv~2UfIZQc0#hawG;H&+bx#s}J~$+q=%5C?%FKDb7E^?2+ft48XVb(J zgObO)WLF7Z@7@p41~Z{NrHxTP$rE7w^QiEUBPKSK{O}tKZzSBm!OtDK+)K1)F?dh? zkp#qiuO?U|u%pHJQJce?<3u|X>gnssV}#YNaeJGSB3lPY5 zXn}u^4(Y4rF4&f=5;>!`{XH&s5glVZI0=Gh0Xf5XFbTIW`p-tr@V&$<)T*@2vU0p0 zv<-&EV1^!)`E)?MM|}}E*s}UxA|;1(1p94|w3o<23RO^bB;FpDd4aAyKWvaF;thTSj;gx;qX+)O8%ZXsM{z}kTzLpDJB;RfnZz>2 zk7=jdUJ9qGVTqK+0Ij#ggMd@6!%^)Zur=ale5UU+sC--_#mGVmXMbn7*L*&Ln;hQF zBz);Y;m4ib!kjz7`pQME2iYp+K`~w)iMhIQfZbNQ; zlg0y@pTQB;z5BAE)9B%nZHjMa4V$x{j5eA2bY$c>NQ=D3;8^B0_uwmhxJK?c3< z+V}T8VZl@9RwE9l?}LntGRvPMywHYj>a=(3I@(ZE9yNaQ898|q8oqQ>L!F3d4aG8Q zd?vetTcw{FC&C~iiOmYYFKU*~$&g|_>dy+ty1EdHZB5t1xAgE%*qfJf@~yySiow~D z#vBKkxNSK;Gsjuc25I+WbZ|+)1O7ixw$Zmj`78J0d7*W=nojcE3GDJjgZBL&dCXs6 z!dI3H@KVf^e%52k*nXb*ke0YSUjKO`;}9($><*Jz)H>k)jj=!bc~pfR67-Z*z|l<* zPeN5wUE2X(GybC(ZJur(xMB? zQ^287L~Too9A`I1G*BJ%t#s|E4{sJLn@iKR0aPg^!P(qH$^vgqK|A z2y*W>z+J9I{hnzd+$M8Adj6OIF0M8GL?I}Tziv87bM1>`r=X(u-2)UD6kWXc!JiF= zSdRrVUF3(Xh8^j-*FFNikCkhOAAUmdUZbMbt$Er1(;v2hXoyfk%?xMbM*%jtZ}%!)-Q+-zjJO?k}4<1X4(&x zUz87{h8H9J)Jm&hBWa(JrF9cD?L4@5px(f6qx$oAecpqX2#ZrqqAV0;uIQkS1(4Nu zMYh3F5ptc7wvx`^hf*<}nhXKLFt75Yz@mZ}{JUoRPW1ax_|#CE)E{F*> zOru-#f}tFFn?Rh8|Nimkf5Fq$?;S}8bFhhrh8cgw9xy5r+l8Z~Fu;tdH!x`i;03+g zX2+({#g(OCvdq))A8+>5G9?u@Hsw1>uOf#Fethvd{QDmg(<+OCcARj0@YwTH_L~Q} z&dSj4-zTtYyxyy*18<~6Rc{$f=pi`mPi>>;N(${i^$s4pbKpr~6R)N4o&|TlIqW*= z?Sc01nv&rS2zin*i>IDgLbnf%xm}Rh15B@4RsXv)1sd$v{t51`B39!37n`&Jw8Hz0 zB+;u6@bPr&*YfUhZa@rQT<7Oj^Iv<}){( z)~!=nT$hZ_T{}^XA1lX|zSi{nu(-u9G$*wbWAPJ01ak>>dxl zc{>bw*a{jcd?-R8>72qd5}tsiC5X3iApi^*d#>hK`=W=rXXwwWu>p4Bbk9HHZ-Af9 zMdW_-4mjC(?!ix0Kcq|cy<0cN8F&{gkBJ>@&?y2p$~TV2qqtE2pa(h8NNbYy>6aOI za8%3w**WG@U?v&UkkC3K&rl|X!F!INm_pM+VJivw*G5{uBG?1^eb*}2{;S|ln#!do zYwqaSTA<=3<0y0ww+k11cSR3>4_@cGUoSk|RZ?ka)qKh@k_HgQ843}g2lc$h)-y-Qp~9|e#sVJIy~BZFSNG1d(! zVFEWt1l;GJ-9|mUpS`)mco8WJlSWnVX%PF%nx0Qt7Nw_8omL7u4pRPPgORo~NW9UG zdrIvTxF89yCX);jm!2HbV17!1vI{D8Zr`N^EnX|e-I23 zs-8NZY~LhsT6_M=x;sa-pWho7?2tigp#(`0xxYlM8J*#%!7YLw?Noa9(h89Zk$h^m zt0(k?OpLK+@c|bB)6i!JzMId^2IP{B>qHW93$BT@A;NWwm;|%OQ-pP|>_#bhA)tEg zI!~n9Q7~6+bm?{cI#K)6#ZxPvCkR~Lztx{`j}X|7xi&q1!vNGS#ctnqZzi}h6&0T4 z=q1`F3hzyZwh_9UXK$uahY?AH23jI+{33=M>AXHu&_|4H+vahhCKAHU-c3*s!7CMWVoY zDOqAcGWaBEAV!F&j=6uP>q}j`Y*gOxMxp8!L(j6P=fQgk{(WiP^n^Ns8nL8Zh4}bF z>Z8wZhgDe>K0%3);=0ah7sgjvX{y#dsLW<%rLLQ=aOPa5% zlSvA`EwKcIb_t<78hzGv^TovV5v%s;&qIWavn_{JyJm>m*(H7Q!!rbCnOoL5figh- zinCX;xicb-Hdi~9q;}wCpf{3Z@C2MrbUzyiFOg_|YLHY@G5R_j{w*Rw3&dIqH706b zLc24#bIS2LAbq9$xO)9IqGUIWPkES#`1{=6{l~=({uSqw|99%Zf3-F;DJH3g{O)?u zrkuGBA|#pS(!O|skt&-=es)3hOD^boYvvRoZc&G^g+%O_B00(ZyA11 zV9f>gx2Bl`fe^Ss>phcIx)wNbJ&J`A;0gi2lWiUE&nTekn`O(x_%M168oR=G1T!ODF~p1rAD;4urW6pvdX?#`G{qnp>z zbX^1gBPkwmwy4QwB0CLf{8i#kmDdDgK1(m=Mt=b>rHUuYNoz=NsP&Ui%U|T8&MmKY zU~|v5D(*6OBZVe{WV3mREkI5F)voo=0gzyn4MPB)2vmZ)0V^Rx{ z(ayh9+uaW{^nXyX$a+3|hQ%{r6*e5ha^6X5RY4jO~om>)#w@#j}QP5todZaY}6P zanA3*Ktju*KMx9if#&xgRMRPIKyxrlQW@hnbge~hJD7bA(d%&s4pM(YPb7oa)?4Dy zwFZUR_TwYqNwQlmC({9UkTIq49OVSad~@w)PxApkXn22F4PX>OQEIJ4-j9skJS{>d z`_TLzMf797UNq7?68bix0Z1A+kZCY>fQF9)7ou}2fl}nhyUO!9$nWJo^XK>i)cGGF z|D7f?)~ON+)F`FLhL-kHMT*nt+xa6g0pE8)x@EvoDSvWUD>EETuQZ3`erJ@sw@;xC z|4lDhi(=Gv=ly-A%`xy$gSt5B>l9cH(ZB1lIS#VE4~AgC{?Hmd@Hbf9}-m$&T0BT zY6^Id!j7q46|>JnZ^_p^ricIZ*=_C&9$6pAyFZWa5fQ0^NlG&%aH;F2w6B{bUOWGViiZy8Iq60KKawN1mWBhGG1qz9j(A)~p4MR)VOe zi@8=Dktkkk?D5^JB`ETdbCN05TXc8)0!r-qj^ZP_{!?vOLzUg&+|Sk#km&EBRa-s> z^l0bhGfNtP;`b}OZ}*0gIB({cJd!X(bGvBT_f8LR==*Zzw?j1ORpN{t8Lma_rpMW1 z-&cUO>+Hbsbs1p3(=)p=n2)0Dw_b=IQ4*z{83ASSn^s)K9Wit zt}{6m2_#ds>KIPE0#{!+1f6^L2oSRHYsni$h`}M`$_vdbP%EmLSjLtO;N@0V^NbW! zLUa^UJ)eorzW6qff50QpySY^p%+ZDLsV-j2ED(lyBroRT2`kINB%6 ziqS-)ltktHd(>uoL|ou@FrfdD_vY7~bD%-&B$Mp*2WSZTKWDn+10Zc>jnlIvV0ZFE zO*N@4z!c$xny%}}rtQ?H)0b_4=Rk+=g5qQFDN65AKuI84YNBcEbazIsQ__RoZ~g*g9@sqKQhho9LZCOMvmW-yLi6*NF{Z8ZMiK^P!|+2bnM3 zy2vGzue&%_3oJdIjZk(ECT{&ru2=NrLnq!b=)Yd)1L_}liN^HM@6g46zf$ zL}~vJ?dz0alKNEu>$DJfdRa#IFQP^AmU&^B7bl5cFq zPjHl^*dL-yAFGJ@k8cDn^}@7|$2tj#ziy1t6$k?Z4GJpRWg5Ua6!!SN{U4(Ip&x(f z8m9?YrK;NFow^DBx7$(84Qk-*bJg{jOAYa~Lc8m2j&>sc%f2!#*Gi!8kS`QJR7t$H zUg~%zX_a`eK|&^xABcTG739J1<~px2(5eV*;I_CHwyr8>{OF;^=>*%!t~+!LV$(bg=cQ*r@BN<+^d zhkP{&?YAFC?~bVvxWaeKxs@*xN$CPdW~H);d=Y8|`iBqF0H-+&1MgW8x+{q$lqao- zCU?5|{>wEa%xV_#UeE8uIcwiJ8*esaxm)Z~7q$_;=XUOm{GWR4`W^m_>_^yoUQ^bH z>;vAhv0pDe*NoHO+%pX~XuvIIIgh?IBCJ&yp!ED`9Zo8>`C6gaiI2N>%|8?G#EOcI zC(OKB@SF82-WuIHobaZ6XTrJ?FUuhFR{}%0CuJx6ghVgy=ClclOK!kAlN3+Dw<_Fa zUF1w6T!3@t)|9IGXRsCJ$+Ah2LHr?{>Cl{W71mDrryBpO0z(VaFJXjqJZO>ODKapG z8JbHq;;KgRqrMpOW0V-TuLe5#I#=M%`&V@Jj^};LNNA+FTr$=TKYA|fzwxMrLFOrmwR0|D#4k$(O@yf%DPcVJ-I7!x# zF1S3gl@Ptu1#fY(m-v0_giBXFC*2*tKt-B}?~~X1VgAe3n|YsmAa&M2s7OdB^zAvT zy7iy~J_-;@xHvQnNt&ZfEt*H+M~O7yudaPCL#VpYaHRtdMiu^pcRFCKN`1lC`h)`> z852cI&s%sY_ZuA4`vAKHjiTBr+u;kcl;V8Tc1W9g@A2-9KKwg}^@1JuFmBblo;o4& z0lLN{e1C7-0h1TzS$MSD;W7i=O5si?4EkM=+kM~xyqPiI_uBXa998}0n6_OrApop-EM}7zXMJGbTzA|!8K;q;D1Ft(BF1l4r}>u4Bsk8L!-Ki<19 zKNw+{FI?G}wm^hGPC8cBj3M|cY3~wwD}uT&GBVC_H$xGx)S!wZ4X~@5{hKh45?@V!UN zTj!4-ZGo{JE3xuijnM7koxs2Y{yKmCRzQ^>f_=R~;jI|KFTBj}&0Zj=DamOz?S&wz zAC<))DkAJAJ8{k1q8h#-p7RRWu7HiPbu7Ij2rhfXSvu_^_~1lxy(r58x88Pz<3({5 z6zAA7Jlt3T<7oI|nLIGOqu7(U^!LEe6ZJT@o2?EC(M;Aq@2P}-BTsC~<|?33Ipfbu zO$go`D`~mxkKiz;>vtc=S|}1`npygy5|*3@{`x|-5(&cnVOa*s&y8c;I~`%wR*sqZT1s%+TRGFvB7uqTyzo7_ixmh{vc+M;H z=Uy@Nx;^~GH!=@am>Jejk7q-z#NlQGoeCHfU7I+fR0bbk^@*Wgeh*0(4>8^v&xP`} z?EAr|av;T0ET~j2f?STF{qeT%U_*pQX8d+01U^wBuWRqZpdOh=M^_%=rwrWrYn!9vWdb;(jtmbNtUFAsI-u3NGW6~N>pTtERhnT z#TMC0MTkO_EnCPIubpful}h&ICToa__|D9GzrUW}nR905%)B#ao-_Bo_vW-uo3bEIyLyji7_d5^j?_2aW~ zSS)ImU%&WTZWL1Du+eTS_eV-?hfX*C@T4e4PTG<+NO zot}m8J)}RNE@^+>oq969z5Vxz$JEW&KNiJK-=KWzEmpNI4WZN>=c{n{BvP(?hn_18 zWl%#OTi5&I;LLN&)@D=k z@7Z<*{w<<*3g^GS8Cgp82)4Zwv3W&3u!*Wn(a5C|BiA@ho~5YOHVJ-dqVPTQ8=Xq* z^UJC0`;zS+)#Okj_8XNYUgcAN^_n@KtuCh6dyn+DhL=(5hyOg8y--1oT{?60CHN^K z*=p0d8UDW_bRzC`dMQ;hr=vvSKqV!5P4%uF{~L-+;I`8>uVQM4wCWy5(^4wJd9|Ti zZ3Q*S9(4S#LNz59p!;C0U@cY0qaG~i5A{`#FZ>7JFPC0k>&xF;MI8wk z4+y-jqfA?RhrFiCD5<+WT--m)DU&%D^FH`iQd}k<{@(pkK^fj!^JU)0a%$i24^I_6 zE2vd{Y&V96Dk#SF)}34Hs;CP}yWbsrSw)HE2!9HxsHE1OyChS3;tl1m!r`zXfCPq8cj9L2bb3aV_;VDY!nHy_V8R_8Rh4tEHlOdXD5itfRhlJ^Uuh-arXT2p%`> zZJ>7S{CnPWxPj^#Jy-72Sw~5hh`d$LeM?F2uoRp0en&Z}%-%Yh`<~Jfmo)y}_@1(2 zdARfYpK_``CVe-HR0VZsM!!q=SOvA^(bs&5ta9pSu=tU!?Pb)Zzb8HKy{V)Q)qNLk zX|ANkIyhb$j8syGKiSXvb5>G$POD-U@l{YA&l(>IE~uqaCPSZu|E{4T_&RG&U#_7z zlJr6nX5LUdf0rbjZ>*xuo1K=k9&MoNZ9^@nq6X@wSRq@?yawv?o8sfM(RI|57pjJR zKWnG~)(MZ}U*1!7#Wx%@0^UL?E|IM*3Mqp z@5%6gCHcX;jucaJEc`LMPE*u26*rZN zPj!^lX}gVR@O(~<^u#M|6uV5VT57a<&dNX} z);ir~WlK?93y!_p!<|Qc9sMq048N~#U-sm3$j?A(cXo!!iFy~rseWfuI{3NOLAz%B zO9AB=aOS?!R66xqzF9FtgkRsb5g% zOI-69ai802=x`f;7jEM*jh3bPC~7t@fom59@4fy}k6*YE`Int@+RYb+f;|)Uy+YH` zBJCSXqk{9{_dJq}--#BXQ!6(-y%CU$N`k-K?9t3e#hZqwFQykE7Ns@2ejO-5Ax}5S z+__nTa*L16L{H_R;x68{{m)(_Ej_WfZ={RSHJh$kUXD`KW!bH^=5#6Q``OOLI=tbLo!9*Z&4MR{I=z0 z;DR@Z)ybu*D4_&(7zNIQx0O)hKz90f_#WyB?#}}<%S(};@arr6Yl`9gHvgWMUy9D} z6>`7SUyADLGzg{4y98u|F{13NPAkNs2AEJCK zQ1hl8f1lfyqghj-*Da6BkQD1LyRL{z#C1|TVyvnPRlG%UA1=Q^I|HumV=aG!+D2@B z@1A&r=7@OPNO8VF)V^=+^(xhfefD@<(Tf_C)@if%)<598e)imIJhdo`N8h_=UlB4h zyJWYjs2DvE?RTEkD@Ntkn#Z_z6d}v^HiL_AQs}vekWY$B33C0lrmw7_1bI)I4s?sa z@3SoPS6i~b7-iS0a4+RAMl1n}iXuPDkihnL{^1hkD2Iv-oeU^LyvMpltXxY`)?xVr zl21#}`T6fnQcu4@)0)A4CP7um+G=RsKj7`%hMLzy+saW}&@Z+tC(96j66e?cjkSnn zb<;al!x~i3zP>9W{|(ypC1ueji%Mjv-g-u7tQ;L%pPD@VfI0pA}U&L__29wG1_-IZrQo{6cT%>c7Ek(4&vHSkvMxU12rE@ zol_W+hHL^|ev8MHAi3<7bqnEt$3?ZZ*ED!mse)FdcS*!w9L#T>YGu-+^i{r3a68{&Y6_3E!lDN9DH)u!itJq*7Wx&IrxVze8&XmUno(HRqJ)$tXN z{tRWH6&dmpjT_QYa#Y>5yLV&Ig^H{Ga*dlwCG51gjz?rt9V<#P|dKYl1VY)%yAxN3?+Vt+j4amFvGh9{j0 z|Fzz5Z?Oe6xJvxBt#AM(I^nIhDmsd?&KI{-lTD-+_Of=aKafU+WF7MhoHn9rm;Tf{ zX6!{-=gJ;;Dh#LiCCr6m<)2e;>wo(`=})Ap>^*w7+_9nZOzgJvC;L%XTEv7PSBoi~K?`m>$CpunHoNv3AuV0i( z)os%b91D~^nia~VwBvGvV&$@^?fEVXkAIA(-g|D3x$z{4dT`jtQgb+!D*tr)7faqt zDkF??@+``vcvQ0Z*St!i=7-m;O!7#kO4Ghu${b6jp0KqP6pg1-N1eC3skmiOd)5jV zYP4igiZNT3ZN8gLV?O0AO^)9w?eRT%hhX}>&jvUUUj6Ch+r9Qu+ zgag{l^Dbq>_xYPNeA05MAM;#Wt1rB!3N)k|M&W zO1BqLQ!z;m`-Kas@TEF%~l4L>lIQDSVT>20&=O+{Nxz1{Cw(?%QCAN9*R0}@6J}ir-hWvYQ4V1 z8TdV;lUown=I2v^HTlBZEAy!pA(=BjwiHskr!EzXI2KZ8t&Ua9*-%JXFIu4c0s2!J zl#+ST@|sf8;42Feq^LJf`5yZ0E282!w*6cCfT9)zd8hB1Dx`jPb6>l^xsVdC{Ml}5 zNKtRy=t?yC@M@y{1|UrA;r7cbgvnI5f%A7XTl?<;buB35xn3tl6$t$fDQ_vJ{wZH-if${Vz84+;b=I_;^3+jXeoCv5 z@*hqgFBPY#KgrTXYt9x^J@IzOZ@ZRKirh69R^2J5wmynX=~`GsEt45KzjkgBRe$Jt z-RV26@|YEE_kbyvF!BF> zA2Q{)7iqisHZ+Da%bS?ElvysrZ0{zse*tE>JJU{^si(~7c6Kx6+qSgK&y)q3{rxVb z%j3?|xZ@IyN#-=pI@0KVkjC@O{+=@XZ(z#9%>Gws(soZT(^z6bqZ(6wc9xbkUeXwO zfJTXXG>+||@$qLGS^U3}_0W8kmNgYonfKL*tX=FGSDy z&_u9w16|%2L1PR*jW3_mSSQg(?CSNu5rh|f32qpt^)k=s@@?yCNO}Khx?S&Abou{& znsB})`p5EZ1T)@!Bv?1yN$~QTdV==;BLv64FNUSmi;mjY61o3iKfzsA6$DM^jT3ww zV%V$`ii0T-Zq}8RMksB@0|G^fk{5 zV@%jqPZPk=@$xgcpSOz|ihTgZ{oX}h1^hDEFNyU+rx;f?04r?=db0pk(hm2#0xnfC zSh*2!#klNZ+@5&Z>fN}VVFA8dczz2mjqJq!TwfTu52KEs)nZFPhQfdc_UBWhUp$sS zZIV2P^`|DgiZC9sPPvNb&*rfwna?V&#wpys>-{BxxZQ(GDLss{epj|%2V^~(=Y;z$ zGMrh6=ZBk{eFa9}?AyAyeW?g7-#vipTTU+%0X!Vus1%sjSa~dU(22!#OQuvJ6TU%Rc}YI{9W#mGRDdCJS#Dtt#Ksld~qo2IF{w! z$IoDtw^=Js#`8<^g6tb-ZvMY#PiY@Hr9>(S+197kL!6G z&v}gN89FY0gy-P~+o@7hz~cEvd1nD_EpF_`daIg(`SyVReUW5e^e@f4i`%bQuqqwn zUjL~|j3e9o$UeN(bn7>kH(WYP#wB#DDiq6Z1>yUV`b)NPB zmMgi|lKm^9X;1cJ`0317*blYH^<-a(u8<(}*=@wmg3H;^lRjKedv%!<_VcV=LN^|t z9mjww9{;c&n-JE2(~8r;_O6S0h@UK<9*{V9^tmjFODs2!5k+N_4bO7w5QY1>WTe4`!bQlolTw=&#`{7+D_u{;yX9UdX_8AC+!9t zqX@1#OZ!#JOP^0mr$3YOg!3|_U0GGSe4$SxDc>Ya+q=%v=Y{5)U{cQAFieoWi9Ww9 z7trTS>+)7ozW5V8p7SZXL=JmSx7!y@+xvOa=ih4uUhuL}u@# z&nNbL+RrQ#`rLi+fW`qs8ox66jQvCUeD+&Qm(S?ac+82$?fx{%E7Sg1C(yFVV;Y;7 z{Kk;UN7(FWI~R7k-Pz@|ovu7xF1>@6Ipz%zzjc}C{|?VjM2=9W=R@sD3z1Ej{78+- zmzFU3m>-iz)iU)(o^-pe%<;M~?KPS9VwSYN(ul?vw`h!K@;5_fI|}x6xfpX^Y(;3f zJ&?xTXJ{;8^08(f+Rs4&db~Y%Y5gANd?zu-znYIhcA0X8oEgbU)qcG;%TL;V4tj%AB7B zCf`?M?w6bAXnQ}VUY6Ou8gsp6-(Lv^S(wLTobZI}j zHqdg^b$VY$JfZn=>^Qyd8HkQE5)$on{qr<0=jo&M_6~IXnsTG#-HZFQ-MN#r-KSTX zByKfcp!Ju1Xg}J@>PUM_OBNG7+o#6_J$na9xzqgj1j7sHcozUKtKfKEdsUC1gLOVF zcl8p~Po&$|)bkmaT@Z2>FEmJ;Hmd zRGrJPd^dtY&QUpG79v}n+(6Ec*z@O!U0Cq;-AvE-&uOc&%M0S5rhj9>nCOnc4#gg;cJaj398sK|}cvCT6++|ma`|JD6P5R%x z-NFR(5x!)TAl&}djbkgYy!)?MuNhz|--VPTfL2+>0k~e`CH0LKfM?9-Mq*yC$$jSy zuGeq5MdSqFS6M?Z+>gYi#t__2_S;rx%u}0umbV!I`W>HD#yl>JC2J7Z%Mq&>!R?wZ z8GmC0IH|%pbqla*vuSr2U|5ok9p-;+60chH0hc<5K70&lJCT=p4A8Hg>P-FGiyXDy zJZaSC@XtG+T5&IFhTyWYLu)lHt$vD8``pf}b zem}eZmlWX39g;Gbm#QBcK7redP8w&`1U#8^`pH5-%ZA@?uP-0Xmjx`B zjoNn<@XwFY*)`vQH*G8(9R=CZcEpbbZ~%qBPzOX-BdIN*S8lwpuN3_167w3Z`~u^V zXR8qf{VdwlBGd}Jif;)o8^~jsnTgXMpq_2i%=ynSAKbx@_d$8@d#h>@z|9V#g8KnS zpI;Qk^Um@2$u*n@DAe^NBS01fqkR0lTzzHN-T?GY$PdHwYPm+R(i!lq!GgDQz@IfL zIVVa$&hk>(dJk|Zi>@cmJ3#?V#Tl zdAZsVQ24ij{@NzUZ+UO*RRX)0j7iCQuwzU}y~X`Dt@v%$3i#G5vJOB0Q`LJ_@$)mb z%TdDEHKEas`LR;}=AU@|*o4cBWB&YRR4&p3P(kdsAr1BQ2UoyO1WS%GpI z&JUt_xu4_b@GEy^D)vA8O!*%?PWEfLtFWva=z0O?d)~Tl*>OLo`sUE}u~vu^oi*$f?-*uL8N|TeOK)HON?D}bKm2A!ExQm3H!O2r%@O`r{Sa0LfHQ2?{0CdXLp_+#rBQkN1x+) zDtN{H36Jl9gpU~ZbBXb{2e@AR-?(`?*=qAPARlD-a;@=X3L067TlM$Pv_ZWX;0u%&@#CaVl}J z@FBK0-7{H=@$K{ylJDG1$p*^Ri}(%p%)#T+($M;X^_yo^?qNJwaDc>Hi6^h+4M8^Z z5t@g`x$WKO6WG2c_@6VjQ+VE{gt4z%sV7c&WDRX>HDh;wqHcxto1Y=zVwo`EBl*1$F+9Q{J@QiwqK`6^ALea3F40wM=`NyO``Rwru02t z**ZEunlDgE^wmaJi2a2<1w>BupwIi7fO(|+$@{Iu-@`Yzka_-g(twm}P9S1`m3p<|RP~-7 z-%J{9Z@!+kODX0e{hK_Z%g?0H{Kd9}=3&|YXkPbtl+Kq^l^4+df1~s4;^Q=rGBl+5 zmozhvIcQ3^f03CFoMq-4>zKUSJc`!)Y10_M;;VsWZa>wGkHI3E;8S+xd=Kj z%XPhJxsJ)d4VeBYG5I^21Fh#`jst=Wsqetl!(|?ke=&J^Gt*B9j-*_T$@}e?eBZ>6 zF3(A)pQ8)2zTSVDV((a-+TJGB{0`dfdZ|+mPX?<78=)Wpy$EvBrOXw^Y)T3 zTBg+K`Dikr?V8uo<(HZF{{mUG{sn_xk2U=CK4ILWWuDWtALEYndh%F6?;oj~>13RS zFX{Rm%V}iWN3ZX%{Ut=dd)E{}n*h4K4@va+4zHs9*=6^G=no9y?KSKMV z8%5vKYwns)^zfrK#D0w+yp4NZji#V-UM1i|Bb1eX^dk^Ol2;#A}Uf;^dx5 zRiL*Sw|7X3mBibmcrC(nM~?p`ynmY}gX9x;Y_4v=cIUsoOUBs0RE+R{U)SYuWdJ;& z#QQkLK!b_P7(HfViGJPwU8LPB(+wofJ^X23jrHH>c)i0|d83fz1&cZUHeoq@UhHj* zho?78V9b9%7=ckS`sF8#7G*5gF}{)2$ zSXp9u0o!&mKecC)L@@8M{_F4y+bek9^1jkZ1?=n5eUAMIvFDtN^*_r6RRuF2K~VcxWP zfml}>pm@$8gcP`EzWr)r0r0Rp;&t8aAeT+uiNw5M)7Gn>@x8vuh0&1~&<`(lHk|~S zKU(uqdkgU1k?AO$-$>oxaby`_l6RJl3iKnzfAmrv$g}5Piz)(to%zi5?+M5~61QtL zLGNP8+KBJ}Du3BB4$I%Y=%G^OWs~{gxXpAWS1bS9U+t&wsdeP^XbHY(4 z?2BN_h%#uuR%oBhQK*;o?{5G75#ZmPm7|!S^Y>aiYUTr9ofuTet%ba5gx7831gz`O z?PB@UFy5g@vl@XguLbYUjOM^|3k-dv{sZQ(%PsIX^vmbDo;3;ld&l|Mzz?uX(&%C% z_|LeZV$}h%rh~+Z=r-_&E1--I{FO29&})UfW?9Sp&yg^`#jB-lZiAgfq{-zeK-=A2 zy6NcjDKdCQL_k)V|SZEiQgaCj~U;3Ji1^#nyE6{z_0M)qkAxaMpXtM ze8Hc47tRmh{3q$J+-FWewedSya{ze)gsS5Kn6B_LJbJOosHjS@6g2(9w1CLB1!NS@s(AhJI;l(o?Kw+8TO?cnxy-=Mp20xAV8L#*XGQ%`R>;T{)iNM2pfQAJID;)qk<^RN}f}b_| z8y?{CG1i}mUJLaO?8)yx4l?hdm|{i1{NCNAA7Q^p=a@crhv#L!bfFOs*!@B5f--=H z^^c2j+*q%Ed#({+)Af``*f06z;U93ES$y~)iT6W8BZu&K9%=MxVn2Nv`r`3^m&swv z#&M`Xxq2nG?^k#-j_uZe+UAJ;)M=Er#c}h&wq!o6zvZcX1nX}H9=E~xCspUzA;7@< zs~hnART|6P!0}V!&-FZPuVnvRALB2cktH|}t(mYC$KzWzr?A8TP^W)#1p5;t^3e|K z{fg^NaJv_yvdI05*Sv1xe_e?zIS2XWZjf{AfSB5M(!YB=J~YQ{iQUTLa|~=h zpm>&|jQK0y@!^6T{%qT^pqFGzGB%UBEOBK^`%$#5P$j(zmLNH zM{Qydy@1R`Vt+#E0hu575@ljHI8O7vHM}%W{rs8cNBgE|dCnFZpI6cEVHDcX{)$|r z?Mjny`=w=V0vEe{iX9pQ6)Ox2ok5~ zG5BN)v73KSjG%IC5oy0Em>$z5DF{>}5C``ymu|E|o>)!2n-JEy-iS}dUFBYY<1JZ2qNQRQ>XQgSLk`m)}-a_adaL~SfE7ap}+V8J{Y%* z9+Uh=)=%LtcOom<>67*k-CIm#f$>%39(?^q8FJq}wVYnJ*Y?xz`2=5~@A2m}y(abA zp3i@d*Jp8LEUCYC!kge>{y?HPD_BGC$INIFznW9$6TK-9gXn9XX%oM_`=^LsNmSP- z+}>(!aZ=tqoJq>FjaQKPaXBiN@a$`Lb4VOen!HUukLEtpNBI40$wm^_B5Q+h;dW-P zNjl*8RoeTD#L=W7JrX}ZfA~n+bNs?a?uWcMLdboTRd6bK&*t*@ZgP))dsOuvZs+Wh z)xR*Jt6aZv91Ky(Anys(onA>jqcb;q#@u>+T+`_pe{K4D;u>?3K@b01q5EPTtp9 zTI{cu_FN)Fdg>FQx&yC{%@X4#n@nORDtjH z-k-{0!~IMS-MWj*mwR0H!x+E5v=sA#My`Z+_&l(2>aoH1hU`l$mtO-6OEQ|T1E~0A zuTBEsQFG^pK0tR)(^~AmqM7U~d|zw%Oydpa=dAjyIgNnjZXbtKfS=e6zU{#GsSgUT zZ^z@?DlF52^9Yrq)TNl$>K!d|_yFgBQb+3P6c%3n&|ln{kYzRU%`iV)Q7(>!v4SAGZ@Yfaw%Um1N(8Z>#6e^ z;J>;L+v~mnzY1ITVtNJerblT#2X{dEp|N?tq=Cn%vRB+y1D@LTCjF=a@XO?V8YmWI z#_wn_w4wbqT#h&5!A_*8 zde0ZYM*s9B?32An(8y0p5cto@v5LlJ&>pM03coz)l_YNF1%2;DAJkuIsXv3yO~#h0 z-i(6$g=ahf4a2(XP@7B#{#W~T|ILpXaPJv?(YeQrfu?5lPQM!HL!&!(M<{_l#(iVi zUT9}^=Bhtw&cK5@Y_I$H{y@(}pWZLuISAi>DMQk87^q|aK!OGM9lE#C|7j@jz|S2k z{(@gtmjxIb24NnauZXXP@t103?QXpfpQl(0m)!+_g`!?BK5ouHVL>~49%(bs%cIT@ zoa*3t2@S}LI5Ci@7XNHi%y%@>d+e*s@$aan2H-u@ZLM}1{O3kP7osGW}Z2>yQm)~h*c z#6ZIf#`ilNXP~v0KNh}P!$3_sKJY_QknbKin{NQ?q%gMJ?(C}XXi04IOX~^-vXbL& z7D5c96uEJz?>*$H>xB>6J%>E=*M<(kKMdrkpmpX&1OvH<*!v2>a}96lUlnEmeCts7 z;F1l{UY_Xwh$IHOnRn59Seb$D{uH)ID23-g*!U)L3p}Tm=dY_fdeE+>pezI6_hxg> zI0(Z!l>PSSRR-iOGCAKlpTj!dk+{gt0-j6g%GF=bf}agHs?VtxXjK1*q*`|m>h~>+a)A8PaLrpEP4IVADV7Jvhs_3p9-F{#_DX>V z`16-u7R|ab=->INb?g_|Z{u#i&OHX4oQ=3$2Kp_A^IdR0rJ%d$u2Ki&Lw0{oyY|BS zX@8F%iGX&x7Kw>bV1H^vCifQD?K&rN@`V}XpG_~?r%T{o;9sb*S08*1I{0Yacd+~8 zq;OaU_G5F5_(9929yD;R_T?uVn8$G&;k#gGSQ>o#3#=3P+o+Tb$k&CxUnZZsR&(b zs5^RA6tHo_O%m_giY#uMHbA`EtDO`Dc4mcklGpJ(o8;5bsT)lq#Vl-nAyjN*1V zlXtJfad)!*5W;cwgxdf)R|f8ihT!=BXK4Qw?B`|C@9g+o;nex`4WCe!^bs zF2MFfX)S^G0gKk(slxNYEt9ez+qd^BFU0d+dEx-cbJ&NoBC&nPJ!^8m$*@r({A=t) z5aBSNC%<T_kSG0}D5UxQ++v!qe-Nkd<*meM|9E%glYZr_ z==@^CQ<~qmou%z{PSW|wq^B_H*M1pY?iWvwD{z$NG}D*hROeb z(D~eF_n)LcnLQ^6kA7lL^Zo-RbRKa*g0`D~IhWYoQkzG{BTyPb+_ zg9~?u$T|*re1ojFBta+APxq;P#Ba0ZnWQ{$b0FD=`c9@KUsr7ICZ7|e8tM{xQuGqp zk8TGB$$hh(lL@J3y1s_^G3B|Be4f0eQ`Z>#wX0-zB3_?e)*^)8ht#{0ag}ZeA>-a? z9q5GZV(p*a$NSTzrh&Bgr9QA7mph2`kUS#Y>R=((mtNO{e>#SEPKgjd#Rr#%VY_;* zelm_j%1aILes0%uQOEbh2XuE5Kl}fgsA9WFA9GXO&Z0;L;jKRG=7Og|9{S<;4*RL? zs`DDxmyDi1g5!ZZPo_SOdyUcEbMgBmuFiuhxc-M-v*f+sl^SP*as1r1;>QPk4`x+! z>I06KTGt;I;dXo{1fp@AUMs$J62D*3e)?MrzK5Gm%sg8Kao@Z;WDMs6|GphE!}eF# zwWZKYy#1-srElg-`G&$rC@^@o7(eSCg!yk;EkL4C$-#KBLEY8U&1P@hZrL<63;hOuo9 z5^z7wDEc6jmAM-&$*s;3iyJ8>!uda zFM2%rEEM?Ib+2*7?ZC6JU1<_hPZJ*&sT-d(pdEwPDnDHqg1?Ne_CKKb3tctOw0`B&D?JXb-Bn&FyqC zum?RkC(OOEzX#3zXb`{xc0tn9_a9sJpuOhLnr3FYk-g=kjW1bxkk(t(pbY&UG%f95 zHn*u8g`Z^!vdQj7QjL^+(#~$gz4B&iZgUsnZBbmdV{SLvU8pvtwo(AdB!?f&DP zXz`%;T11 ze(iyMVCNpe$IC!otNV%_=P?ks*pP4W>rPZsKXSl+pc6jdlFX4D?nYJyNUIO{?mpI* zcn3KK64n|HT(r0o$;!m_92V(B2A3oL?1lAK`8zgd5v-f~%Syf+{E)wJt<;c(eNZ28 zWl0pQ=RZ6b{Cr_w?Lh79D?vUYI&&`_(A?&ox*^y_*LfVThH<@oXtLJ@#(CD`WIT>% zi)`1*Y=ZuGl&A#cEM}m0UA2OqVDHE9+2M zf2jC*E(1wDw%S!#4DsY=%c5PdZ?1mlV{?UgaH2K2j~m7l_idN-<1GvnzTr-cdV@dbbL96|!26!3@kJ<(chdVeFZBm}BH6(f z2Jxt~U%U^;YnNPK`658I!W)S@0F4s{|6yLr9}>4{E3}7RT`p+=`~L0a*7#l{#&B2X zGeAR&GMypNm+dy!tcL!}*Z)xX12QX*k+%cPgX@YQ1@B}t||I%1D(T@8KOU%p1{QOAG zUafTSQy{OobrZ-(2c}(*1Hymxp12LT%h_kt5HLXOCi$EJnUs@zuNKXOPq?3#fhL3p z6wMKQfaP{y`+eBY<)e%Iuw3}8nE2C`pwy3Lw}bM8cWNhGIfU(yeu@G1XXg&NHCTT~ z<`uc0OO)3V!SfPVZz_QOT;etsisi_H_8E*0@`54wT(*-h)xz@FTwYOKKrfxJA$+bn zWHpcCb8|%udo{LuCB(fKx4*e?K``-S$tmJ@aEc+}LoD9w2>(*cUq$4YDKBqqry9^p z_{-vo<%FN)?0rS}g!VZp!l&5h^De~wcWQ8w&uz4B)8F&yvRzN?tNEh|KQb}m$-#Cy zI*DW+qV9M{;r7L!x)I*=_~s?juUiXS3NC-W(BLmd$~A-Vw8KJ*#J`(w6)0RTZB5_5 zQ;{^kj+3C@`|gq*C4M2qLhztAeIGp_PV@N=A)4P`y5mWBR``=EByZw8On*PKX^tML zx7omr=vA~Fi0ruM?^E0_m-<5@OaHk?{8?LJO86qHUK@E21AdX5%%n5n?Cl z98KC~Oh%FR{I{Dg#`AmrXbAayNX=_6xlg8&3G67@hp~YGB;9B7GZPU)owycknvi7PEI2 zm&atup2PTd^dZ9SFoL4?;PuDrD{PJT(Rt@o@}9QV$sm%?CJr1X&-3L)-@CZpd`A`& zypQ?jHhskPRSXoRaCz?WkmDG+Q}gRF?_4ffs)_lbs8Q{5?1%cdw;OO=i4iK3$9ieb zlM`6p^!(Ag-w-caeovG9Q#v9+81E0oZ?jpLUorOEp4S5WlyOG380-WF3qtWe@_4c1 ziwCyjK7Ql~pvz}p&0xUPZQBn1h4bX^%#SoY9+!hAFI@nw)>eh$xDjI(|DYD|R=0UT zB-r(u{#G~za-mx96O27A!%6Xg6XBC~)zF`?{Qa+f5I1GQKWMN)xydh`RT+ThXXZxZ zdx^Pz@p=8AU!?fPjstj{Z_v7Z{ZOxSa+AIs#I3ZGH50}l%jmrN^$6@U4riP`5BHt2 z^IdL8LI2wDzrB7Czg2mv^n^feEZhFY7x-V;*8nc-1kejU`;Z9dUUKYtR#V`miRsJM z|AlzYkubbG6nLD;={xRSp77j~;;IfqKfiPH70ke%)BnOJHSo(V;?43;@cx3_?VAs6 z#2D!7+8ZP9;k>)C)n4O0^kbQAHqcFhy!qn-4Fv{T`A@8Rc^v~u)O;ECf&0oYcNLnW z;r#u!>h^(i(0_J-nN=R#FJ?aZ;jSDC_s|j#_GrR=tY0~QLuxL3|1h}j3F9aOIR!5n zRJq!NIE=U3Tt2`+`yQ%BKgx#Bec8-8ELSm5azVzH8IV!-kas%Vw@DnIx1?8R7zOEE z4ZVGlfw&G{pw2E}p#IWxHS6TyJrtS4uKyH{q(H;h*`jyPBb(tU~`DO6B+MGGW6r!^2ZM3%&|ykLryzdEY~3JHQI*atG*AE&`A$bEwUcD-O1I$`I@ zzVm$#(k`*GH7|p8_a|0LdwvI6oG!T}bg~WpM|tqi8tV>pMSbh3oA%vEKD^_BBiu)C zDX(RJc(omcTkPq2m(q#?Y#Q#EZEZ*Mg6=mA&+9_)V!wa6V*6Hn^gbkLTxo6L+ zUIjjh0!6yc0`Jt9>B;#6JU#Nq>ubZ1w|%aCQH4JT+Sa_`*9lHz?XBj2*^1@-g2={I$m;L59$q;_n!nm1kNsgego`{v>t`y zd;hpo=YNb1fqyq^4|zcR3EgVQ`v~I8>fpWn%OK7vaILwQ0T{n5K-Uc7O3!i0?K*(l z!}~sqL0sw!yP}p0sJY_c&`S;cMID3-NGfc!!}9 z*e5wNnvTJEJTgWbD`0%#JjuF8z|Q1LmWd<8%k}-{-I3tOmkiI{p-@kECA+d#HJn4c z(}Dt_-ABh0&MAQX&Rw@hKZ5>oj29ce*XJDLGuR9I${xuy%-3Dk9eZ{Q@bYzC`06d3 zABoo`N5IZ~OFd5v$k~I3wkQKO&2!hl{P$+`0zu4|&x{|aFatleX0CR&fjm2RkS_o* zP4rB_AwYFSw|{ti26KWI7(x8py>r8e4cH&l-^{}X?N=YJaNZ623@@%hX+U!hZbAHg zo2H?=+T-AFF;}zF0F?e?PLw`$I~z$GP!2 zyu=_^7GqP9FyXyVw3|}!dD~Wb=qoO#B9G6(=l5)Jml~EMH$04T12lB~ZGz8Tvl5L+ z%Qzz9FBFBxmtsF^ZSw-KY_v-_h!-&U z$kRbQPo>kpUR(ieJj!|<-*4GUeSe1A3u`<^_*j&L6a)9e{#1kT*O`Tz2u93nCHJaV zP6rxc{hsZQ2`_35LFArW`uGRJE*b z;P`WFr<80=$_wsZA-walPz2$*m51p(;BskZG`8DgCQo>w7z-QWP4|y~A$*?WcRbJw-Sxl_u6L6EaSxU|yRVbagLw8XJ*^Eg-%H10+)nArRc|q$G}L{?=>!mG=?lkbYcFvFDIL|*^X6MEY_1Z0M$FM*7 zIr-vTV7Jb9Q#=Ld2YRzjYX!(>+5de#2X@bR) zK76&h?ZA8}zZGNi-Vx%B%Y=MP8r+w(^ZR+||Ajd2%l!<$zhL33cPdCb(JV&`}5d%dfM(wPCbFHJsvSh1i zH*(iCZoLBXwV>1POOxRKdSU-mBJ?MuxGyONK8LOy{u1!=F8s-l_{zJMMQ~r?c-4;; z{HmOcF}BzUpW8p>Guo61yujLIm_xE3y&UDV=z)7R^)el*8b06Ml2Q|*Ryc^PWz|-< z-1&)Gl6G3~$POZxNxig_zCB2`E^hQXe6DR3pR--5Xc#?<&b`0(-3TghusYTzIfNAU zN=y2O_8`la-m-tZeJEIbVXBboPo#ZegGTM*5#;>xi$lzz5hSfrdnCDufr|9*EexF+ zLRC%=l;3?ALD4%SXJ5&VAbDA#y+zJH(TXGS5u(}s=wGDE_qZP;XlulM*3yk5$jL-H z>fy2xw6HNkP9tRm`3%VZXk65eVs%|*(=A$&hGFC5Y`Zq3GB`6lU#SyGmL~>(>+M2E zd#j#n?`cC$+xA4dc($Ss$jri*w+)FXr%|t;bfDi|T-Ub(f4n_?d0+C{Hne5`xxkj` zRy5@F*LES;59+^DQFUua!k1+97k=n~_i{AWq%CMeJA)fkL=Lv0pPxO<4MJPdz|M(` z0@F4W)+K*Y?q)lhC>N8}V6-A}*41;lcC?`hnf&<%L!PMI1lOf%R ztL3MGbTr(T+q>%Cf_q6<=imC}{jlydw5@kG1Mj{3<>^VOE)*xvHC*wz2d#Cp%(^Jd zK)+wV{kTeyfpS$hDs6h)j#_$>ca6O0Kp)K>2{-w6BSX7%eQvlfT*Oz+Wg-iCjDqi~ zH3IF(KQCX*grx(SwoL9d&+0%}vm{?Mf< zm3kP5hw@sn9@tMYt9$>$>mn`!NRPNkRJ6V!+G%lWTm^ zLH;zc?A97d23l2Qk#gi6#0%ct)F;T(Yy@^s$icobW#8fU2ig^$5Hy<4V z110W_k_jw^_lYhXSkVH!NuaBwU;y@QUQIzYE9?hxxl3X?n;EFDG1>eF?9YhG4HsTO z9-6%LN9rc9JHl4~Iv#jV*j~mjE{Ic|&l0p}VgBuEeM2<>9j_iyUJEFvt*%%BcH18P zc(xz>ZQ2^|g5z83yg)r1*Y8gF%=ruTGs3mfR3Q$vI9_Uu1A9&*LDqYqUu!?si{H0e zTGgY1zmK80u%+Ay;)a5Q+Vc6JKUTg@)d1SHwK^x#3wDu7#!dM1B$YDDI=ZPE^OsLQ zXKt7PKhw=U>^1J`X+eBRw}3$1eoyqGt&3iHToR|*k6zeFoeAHh5^vi)Z}=ACPT z7kc5izeZ5z7QQDD_vhS++r6@}{igt+?VW>h_`QBVNpW@$kkvMMcjEqj&nm~^^UF_w zSNJjbIcXF(x)tP+u&{l&{CeRrXD>j@%6j1nT zD=mukZBD$v5W!Dg_5yMq8((;I0^11*|Hg9Hmy8{F9-jR5J%;PgOy9A?4wyL%v63j{c+R%Hz3uy08+mlnNoVSQ9Nm$~KjdB(fxwT`D0I`XLGtA#F;s zCS@-~ktHF?mTcL5$-a~ViIF~;?}vfUy4 zMdjl|!gH+i%t^YUDy9sVw>>NBGVPvaKKBJtG5rp|0!pEl18!l%r#S9Rd}f+TNV#)#5i>*MlWH+PWl zpLPqf6W*kL=qQm>KB`9g!(-oUFP1a6eLsu)m5-T&=-Ci$K%PTmL1`r}H=G&!i}^PF z)(CPxSvP#<(Jj~t_@yA_Samw zqP2<4D-Q5H#5_ixO?Kr;KpQJ=F1+rsZLh^GJa0N1|MmPWzzEe@W(3HjEUo<>@T>Bd zyM zZSzk7bo9P`xexB=8qIW41;+pVWg9Ip&yneL35^Cc*84Jy+p%u7x9Kq$?@@jA5B=c2 zBX8?_7$E=3u+c?&7$@;V{7HFG&*T5{Z8kx^&xw29$zVraqu3;PL7w;i+={JW2gV0n z{`!L5(=!te7KZB(I}ghu@Ru7NV}1%C=eaG&gdX&09y&xf0Q~00?)t)Du-Dq(R?@5c zKwR^~Rh}TICqQO)!X4`Qa4j(+1o+O9F#T3~;33JktuMdT9YAmCr@r+-`O%@y))!Du zSDeBmJJ|D&LO~JX+Xj%>CmT(1{{fWx@a;zt&~x6g{^Jg~Z>Oh>>NNO?#_WOHBU=a1 zjJMA12C(llf1Ibkz<$5XBgNq~;7e;)>^7qV{}*4;JY2&H^J=c|he}mOkpHlJ4}S%$ zW5n-&lOaEVA}4kz+&>H7?a+7DoHHCm-R}yH527E)ieZOb#D4>5E9?6NMyOwUfp)&& z5%g!dk<6mq1e_OtQa&2^N1&Ja+E;MjZ{AnypVIn~%OU>=j=CYFcxtQQq|zj6l*=iK zkr_jk=f97nA+T32_ABUEVBMqt4a3;w5i}LYJMbod0;vf(bwAlKhBl7N1#IOUML`cY zocriEiFPx7_4#ZyiB_-W{JyYy5-n!(8BRt{q8~9?%xnUas5NI(+q2Y3^xLS_;n;>r zRC@5_b$Z}U{n6d47q#eZGL1iI@eAhhlI z1iJ8Tl&G7Bk>4=UOb5+yCuG0%F%A{R(L4oMh&zH%DQ;A$DuC7w`u2 zposDnI$bC(q<`v!N;jH6ksQHT(~Fqo3%$c2KD)6D&08b^|2FBm-&WX#c;s(c^XPRU zRxR^h1LGc)IkRclM57N)rmD_qJnu&~j03dQY29c@a>lb_TQ|B=^VH|i({A)C_{aDq z4jN+X>&!Hb??c=V%<9+nbR)OS-8W)WyHQoec*6+rG9B~ED3K?qH$l*m0} zr4I4$1({LhPhtb8N}2Ns=0mP$+egG84yTNc-Lr>rmUl%y-|{us(aHy>8AV|nN_$-G z><9ly6SM7vI27&g%?T;6SA6@d;}T#$!L*mNNBm3RH%U@vs%r;OYm%t8(r2*e3g;|Z zU_38ry%;gN)rY?MsP)}|I5Y?6%JhS<`~Am_J3|luFJ8eppt0Rx%UHX##bR-NAlZ#w1^ehk83yuPFpV zzWcL$_>=~C1%DqG<^j)K8D#N3p=uCKh-0&>4rUFA!J^tQ&3vpB9c=vI?= z6)>7jgAMbtrk@Orsh}tG;b`G$NDI4k7vlKT=P%Z_M*;6G#!umSeRK9yY!}$kR~~wY z@IIg-)`X%7$Y(j^DT3p0yRZNB#D46ocrl$Rv}c{jD?uE;yg!!oXB6@snAwjR1O8C$ zk`n2w9I_Qc0e^=%^8C?I)OP#5>A9fU8 ztHJ$H`=u@t=j%PuHOBQ9O|ByQYwa$xzupMxfi{M#IQ~ZOYL|@rE2(aj1II-k%j&1& z>s~np6aHcqZ`F?VZSAqJ#aJ8@SBvkvWAq^%=C|{LYAraw_c&7%My12ymKbGM8<6$J zy`c~Jupf^ws{4iWRk~Y0W6YcyF~@jasqGQIpTp^eDqL?azZ*ICMeJq5dt5#d-*gUR zwbk$|EXU2A5slMtQ`O1&wevYqgvS}b@^HcVJx^D^!E$_iy&qv7b98N>BCa=}%95OW zV{xUr#TC-*^}g%zb4uRxEfufNwSHqE>+_r1>}zm8c%6&BgL%I5u{~3ofQrU!8@oVG z$skq<_x~m}YhNs9X}x_3$4{jD9`h&wKHzM7f%(6o!|7-E`RloR^J45+s^#(o^kNh^ zC4*5@?>U~&d=Iq#57%?5L5;jG0bk4taeY3sPil4n-b_oRUk&)(JR@QiV0B$y-VZ>w zq@j!!xZYu}U`!>TOY`veH879+qGi_43+3K*EX@)yPGn<(*Pn*+AE$RW9e{LKE8Xlj zh}W#<^_S5Dxg+U6<@6xGzrSj77{+1fYK^}FFfOCz7?MB2yhyC(&C5WL+i92aMhE1| zG%ejKL9W-zr%D9IJIDF;$}J$5m9@z*7Ub@7wJ{zCIsRi?R=ol_k$J}Sa*zwvXRC+= zId}ENjx4aBrQJ6ForQ9hx~7gs;1g5TKE*E~o^y|}y!G!a@HN9LTxby5)v{K6AFMad ze;i7@2=%fro2=QeWdKbJy80qN7#AOYe^P{bW|8F&KRSr>=d*F-jzarN3=4S!83$0W zl+P_R+z;oeExWM|?D=3?P-O$y;e^Z2YqBB!RqrA&5DELB9?Txfew)yb_VvW&xPX4k z562H{fqmaN{F}FY2G$Ld;$NFWzVFnS`+dKDq&a_S=ZfRNQ%_INxp!nd_ zDB9`rV{i1=e)wO_q<>mA*cW9NE{D&fD4(?>?n3D}Dhy31^vNAXiRR{!h9BYn3c=s& zVBIt?*!^w)&J1O_cQ?zd6kW#C+GqD?SIVO*cKki0Hf7ZNz64{Ghu5q}$VOt-P zJ(bLmN8f`Qo}X7}{n?FvJij;lzM>n22&K@E8uy}yJ3QO|R?v_VW8H=Inmx#Ue|*fC zc@NrJJY;udM-O_DB9(tZs27RODE)FcKtnPdlXjsmdQi4v+K60n587pZF3Rk74}7l@ zz#Fp())Ol$p4iUzB8BJf_GV2zC}y3wS~u)_TbNa@pMBSZPPO}bvBA3GoOw?1Zdxz$ z7XSH)#@&aCjtaWT!hXFGkMFl)!7pcWGRK(xg?&M_8_x}a{hq593V;3@*6l8p76dav zJZ@(Pw>|jxUZ;ulFs1=iyNsib6ZmrF_~|c;duYfj;;pi;BdqU5t#EFzhWXRgE{{UC z0W>U}Xxj+_6ZpM*56aF0A5bxHq{H9AyJWslz6|Y;n6N#l2mV?J zrS>@jX7BtN*#vUiT$$5PfgVmNyoEEk{jsB+y72wkl451YSs0%>Yi6#v0STcha~pv)6#Ogu^dx|T{q@61N(~3;(7J= zD9bfAfDA__JRGvZBXZ$}klJgh6xvp=({*tBKm&8pR z+Qz(ad&)Bv^Kd(FUSPk5^)p-7EQIB*XU-?!^5R(e5R5Xf?K804_b+#TWBvYn+DFcr zDQcq5$z<8(dlk#2jJ$Nia!Ol$E@3}iFz3>P^YiL2)?)OX6FradlBeK7EO*UlgFD8G z@2}i(zZY#ED#q=SWPbDk`^%Gs4oTQwn#$A#;pY}?AL5MTXTRyz7&IEVRxT=g9ZIY91dUsrCxgq6BiasT+*9%jSxvzEp@xIP!DCLI+(>zvQ4F+a#G z{_+I-OM2hE>eycf+;tJbaat{@;dOZYGKt-hy9fSKIc0J>ALO=sHNR2^If>&e{OKTP zC9XFu4D0Z@T%~s#$DkflkMhqTH{2e*Q3d2$?s}Yv0Xc5#-jnGdN0%I%lMC~Nha+ld zu7jM~TgRfqAeUf%GU+48iTJ-`xD5Aojt~6e0rhe63FRLEIdh-ToP!|utkvTk8|baG zp(CpU#!W)|Q~raX-+{K9?yle$C&TX?lmUMkp7D133h>{zl&jV_fE_K{bf!4S7xv?* zvkJb0G<^RNqw@juf1LNw>o<(YV+&o|puUur7cC-g{b+^6Hs!}KKjHfN_1b!vhs0DK zJkz-V>&oi}8T7$!t#|j1VReGIKI03i_i*2ICrzUZ;Llqcq)Q8b!MfY3AD0!upWom3 zMZ5*(ncR=Q_O^oG?;mZW^@5#blDsos0sNrg+Q#qafgiZdubz0*+mBdgZw1Vh_oFP{ zs_+D*0dywqg^TgJG4#@PWl8huanx3+RW1`YicV~PmQYa*>oe7N?&es*zG2^_e%GC2 z@ZF~Cx#W3=Aqi{zUXGwTe%DK}uzzMSf8B={Q{bj zeRFr|m3vW8=!wP)4||cs5BlK);GciF=b9aq=tVCE4E`(a>qTotCO8~nKhVk*-ikEv z+lm)*lMYJtqN7&2TVBZaB3Gd!`lIVNKzaHH^TFKvwQbkqn z<*W6gp8E>68)3iuEhW`b3GkO}(HWMB;4eo!7z_l!Uj`&S+4&#%OXoB}!JFVOy)9{c z!L6XDk~DuAtWOQEV_xgH65d(xO6W2^`WyDm6@)~R$HVY`lxVY z4guhIj3vuQ!A~N~AgIHK}825N6(A3)C(yzf@QeBSMZkS*&fSYJFH z$Lk9IvR2tQ+yeZiY-Y#lLGYLA&-G!;IiSDD!Xx;8JEHkU$V+(7lT&5uCxHjh>SinI zKrYa-c2W)e|0hkwy6>>ReL?bfOefUmSlC)12KC)b-udwz$f>wmUs41)PNSdO1!3Im ze7;ZYG_1#L+t;Zr2J%U}BmMkAt~sJJ-3P|C;qP3QQW(eix32n#K%62)_v+9~m=8Dp z_4`NzyYZegP5v<00kh+F9eCY1Eq@ukCfJKjEz2CS9dyfc`h)%Dm$<}7*zR^F4myQ` z+`SZ9uL;OCb9r4cg!}-uP=`UleR-9#oPcSkX6(X1uGDC;{tU=H&o?CVkz4yWI1E9# z_#9&+j_dwC=pkSPxQlyhjTy)dOpSki29+irckmcwPqKV~ZuiKhufe!}y@wOzoY>X!N;z15%AwxS98i)ujSrV! z45N3!@*-KTakyXQBJMxH>BX(5cLf8A%GoMlxv&c-$huG1=c;YE{PvXoFRZWI;HgKr z-X{;Q^L|N8th{$9nLq(taPr@&1jlL;c@HKyEhl z{u>WS&kesZE`#f**i6nyfuD|C`=$!>EZ?H{++aHvxT|C0d^YMo6h7s(~Dbe4zk|ceza&Vjg?I@Rkp*w;{W; z1fK^Myt`ow<}*bOHMNZ}?-p3MR=o5h@QS+L&orKQ|{6IiV%+>*fcQ+sp{zwB++qFXr~a&r#zOKe3ORx9N(5Um5>oMwo6(e_{A7{ zJYZ*f_3JR&$u?Cr@E7{INiA0&&#F8Wus^rmw(#K+A)-u zRlUmi(kS{JnYvY+V-$4;-n*?0>ntbA#SadrjG&D|RuSt;$Iv;SPZriJV@Rh_X6=8r zP>;ClvO=E`lyg3#Vb$C)+UR!V!SQROsQ9tC+F$)Kw9irL!e*CIRJLqf z(Vw+lUB9osp$~pO?$V1w%fGLGl@0TKlR!6K zQ5ss=(Dmi^=3X?Y@b?WX@Rz39O5sFZ8Y)*}k7Y6g zUojl9$d&^B5;8b%trkf`eBtfi4*l)}|NW+|`VH9E%?q7wT~Suo#-czPoO z_?d6yg;^co9}~{24#~qhff;{K&a459^Y=07dN7}Gz8JKI8^%k*@mbdduuD;FD!*O< zpV|3CRgVSi(?nLG_(oWV*qv@Engw>jX3>`O8Ss~FhnthJf3pi}RComTguYoks2}ur zb8GdDVX!wz$HqKjVcv6Q^5D~Xu&cvdd(R0L!?+Yxv0MY|Ko4`p*K$EU);Df>Yh$~! zqNHUS>}lS~+Ao3cAAPM@4(zXT#DqPL*H}KBWsiXCd$z9H@fPHinr^y30Q8Z( zkb~nOvORT;x8eTZ&o}?Z=a4`*1MqX+ zw&^q|=U}`mRtIUmEP42KASsGKioehx@uO(p zeS{xQExSR|GPMj5_9?*I5Pp1jImkL~+dy4?eEi1Gzze_@QzTh|qbKbb;F~EC572Bc! z>rFR$=fZfs6?v7MN29Q^E(*T~?D`dO)(AZR68||>KyS|1A9w+;rRSC5_HeI%avJM# zQKOIO6;fHDg!SPlksHAL)9mdfWO?mvC3cb5!eH@l|KBS=i@igA#O0v2dk{q zpFuj-<=L7q+yH7=cD&&9Z9TuGgdHOrvqw-+a!rre8tpc9L zn1A9KevS$BUSev1$L&|_#N$|=!RkRK$cM4-Mi*h+PC7~6^Mm|Q;Uluxjx4?Sad{rF zi=knoG?WK37&F*`-iNk{(ysx%Pei|o350V8)|pEAJhOr4vFgK09!uLQcjI8a3V-dI`#F=ce9Ff_*o< z&bj5@4De00peYZC7geZTk9-9FO>S{ADFp24ms__Q7s2nyC1s7rgWp(nLD=mfJ$#>i zCCjq|_Bo181&%U8yX0?ou5kprd%yCNCSwC!SFOJ;8qx~(jxypJ5N}bs*L>i?7-BqE zxA=bF7)psM+2W@-imI$NS{VP1AcGIiT9=*-BfeL;PF0md=*Ga=8}ZM_P?pP=p-|vY zuJ>lzTU|#`?B(`l{jgs1n6_fIE3}KxdF?lC;X$<0{oB1TLg1XTtddMu+og63cGua*M+MVtC>Mtm7U zXu4G75bF@?&I{#U0Dh=uYHT12 z>oObOWoW^<0_BE$h3~p)h$oEEmNlP-{^;p%wM(F(AQ_ty!DoF)DbY>Z0QgClqlm(CF6;meW*L-rE=E=;79CI$DfM#p$ndBd8(i< zFViiP+rV32Si9uV!FOm)N3*&1R`jA6H`Akb!4UUybgWSTJr8Xd=^MI8L-}bezYZGG z(4H}ewSO~vQDwezKm1q(A#tKH5%0A<-(_A0VFR{OI=Q zFY+{G@^Te()|x(aSjL5g5&CbC@8`_0Vk%37^DB5}TRJ{&??c~z ztLXC1(9pf6Q$eZ%educC3x&?@{Yd&M)1l*V4o2)ghtDgcdeMz6y(kwg;GHuw3ZKns z=<&DDJS-OdD2C13@7po($HL$K%J}r6kC}3dFM@iJw6&5DuMnJb@zZ$z!zP&jij9eQ z0iPOumar@v`XefCzxQ>B!!`eAH9ZUa<`Y_1);B=hcJCKUrkB7gyDzPbcsbRFtU6y- zKW~Eb-xiOo#CEgmlmPD(#CfxtI!qi{`XPkCXUb}L2r z!w#@pAGRp(!*O49&g%}HI*gxrWmd`GFrQ|3`D6$6bh-uDYeD>2rR!_7HSoz3>wPBi zxqZjybvTYdJkHNW?oR~psH9@q#17D(d46e39qg1Qn~|R+d~Z0e|3-!m>`9;g*YY%o z*JjPf0O%1uT*4R% z?c^S5ezOkbqK-Y{!RzFgqdS^+!hV1Yv1-4Dp`I8+#rbl${`Lo@`(;=q?!4eZ7_c|{4C6?2sp{ax8DcwiuBK>S-5|w zWm582NQYJ0=_>(_F@7z=>s-FkR+X6V)z!_kV*f6@IYj~U?;x{^7np}=${cUQa&_nD zuVP-ACXz6=3Q(&g`4@`#P$fSijf$vLEACulG5^^s*JdoZ8;W;#IjwL}#f=VIP) zSHt=?=2KRGc9H$Xnkm|MalQ7jkR9}y1i3uM`T<=@o zvk@$}&S4wjf!b0v@auDUjv=Pxd$y9n?sQ!KmxI0u;5^S&tqxooaDQEsdFK!9#H3^z2~9M zCyU>$PvpFph6(O&`%cbLI8}b90k<#imzg2K9jj;XbKd_rkjSxzQU4b*?7KyHe1-Ze z5}({M@2HREo#iZuo?(VYgio`#7ZW*8_Oqm&!HOHmcXv_^W~9FE1bU*ks;m-`SLa?L z^9G~fs#sj#4iTy!4E;Y5x!Q2*yyYO>^F)4HCx(3YN1tH39?M@`KfDURkI!nKKg91% z&2&Z|o+o9VXo`LbsI`Hg?8{;e7=D7~_wU=Qg5SITkR!ZU{_?Gz?=Jzy2=8jaEp095w{5Cw1 zwBPZV5b2N7LxW_$)?Dl!MSR^wPJ>@q{`$QGz9E2ie&wGfaeBE@L^&l|at zRrlcWHI{HY6_0D{;@vwI0qq*nWAJ;wl-J;j$5T~vq5_TsaIc+!Uj#uvHU%{>06wsp zCEs@n>)4R_NJ;AH7~F51+7S?n1|Gf2d+H3}tAm~as$l=De_eVK1pdLZaOZjaeeq+v zyL*pBSJ0FNssz)x1nh}8aYx`TI%sYZ^kC-cd-#mu4SRUNs0Dchyhg)8PpEKgSvf0!R z=GWEn*FK&cKp$_Uw`%_wLIywASQY>ee>+!wi5KEF^$w}mjxNA;Od`D15ilQW7XNB+ z8tmzKp!{LbLtavN{t4*I>3E~T3F5{k8Xv07AP)SZ?ZR{h@cor1A6$_K{W?~jzbpy$ z4%fUjz5#I^$4c?wO|Xv3WF}cP2j5Yh9*%OWhka9vyExdFo{S)`IPD7$I))I-hNe@o zE9Wh!zk_J~!>rwfw}y~-dj#`_(<3N)@$DJqO(V$0!KjP((-0CVljKp28bVj> z6=$;`{>A;Z{8lBb|1xl#ess}b2yL!wYGz;`Mm7B0&VyA$XjVR4`!LL>)~RjUtLP7Q zoH=CCHUZkZtew>)33&SN;J-;sgGgA`RJV64oJTwtZ#zA*4IIqUEk3r6&lzxh*sa+9X9+8zFSkTTW!SvdaC%HpgS;#eyYW2yQvK##qe7it#bp& zWNvELj$)|y%6A5D=y$84qiYACJ?&gK6TIvOkgJ`s6Ks%1D?B|5j7~uu&}oDVpYuVN zGPg_<);W$=@cOKkhw-&+^iEQIKe`pNZF87Dd^cy=KM@XkUTf^sp@;d}W!}H-$Iilh zsW4n1ey|_01}#mhr9ga;cbrbHZ2&nWcYNf$K7bC%L`>uZ-zle~ZKP9!_hx-%!j?HW zFSsRb$BQD^H&rt0q3jFiB_C#t9qni0`t<+OKA>c#sg?oKEF^l z?1yvE@BI4+_+JbAogET|FwflU$!n1U&&BK8-)`XdVwRU9w0A-r^XMMCGRA)7vvKF< z#VD8${8=Hg1pCs9-nGmwhy4XESNPd{Ag-F6{NOl(bI|s77sra8>qB1y>2wdM_aU)g zGr#qJ!T$Bju^l`)aK2n~|MTf1{b+d2oY85meq=kkrMvxRKMM5u(Gq?J>@{8B2a6-H zZsgplrv~WwCqU&}IE>?nFDaa*5TCnqS#ls1;#vkgqpzRBe$agjI=)~}{7)^DKM3#T z)}!hi#qeHbE_x3z9q&WR#o>E$>H3hfSk0jj_CDm2m?IU#3(sNU>~vgvKN^a@otXmj z8^6@$JlU#!h&d)N!2sgCMv}kgZVAD6BO-G95}v_+rv8W;_K<$meBCooyRjd21xAe) z+=g+$9J9d^#_hJ-UVL?MU*S&?dv_KAFN_HCk%#vn%-KUrV+rD>C9tm_>|n^G!yN?} z_p^IjPkxz&^`Hsm;0lNn)488@J>Cz`Dfz>69n9z5bkk<-z+U<^8fGv5)Q=Qf<=V>O zdG54|V`+!?rmH6JZ87lm)hTDp{)2ddOig$7DVP_hY?Nvjg!n>x$G2ZL-(h@RGrVO6 zyj;8`Lj4uk6|+ng=cYv%w=zrX*VDib9+^0C6Y7~h=E9W@_Oi#qQTI65--CC0UZewG zzdOepIRpCAN1YwbhVmSK$Jf}t#|^VQR|fmrQmr4+3;MeLH>DW>X%3SocXZ);$DQ%U z_}q7St!^nCHwm;7ELDg3JI`}=);X|)+%(=FLSP5|s$)5CLV85^t^O{MyRg@R^#!D* zo*tN54&@@z_P;KJJwLYV=!SGC|NEc3-w#MTgf*Ug3HON^@bTAybjtd?j(I4b4-OK^ zhxGh(cr}ib1sGb?HbZ?kj_LB_bK?)kO%`P0{CdBArvWd0bRX9Qv`};x7J>2t0V#$u zNH^=dh};Kc9{ZMn*EJ8Y?E8Y_u-EG6_02)Fsh80U-cx5sd>^+fKiA=M@2n$Ym_KkA z?hnWDV%s<=vOb@pqbZ2_O{a)h3cg?as`KRB0Xj*?M$Ah>45tYHu@87i{+m!GIc|aF zt3Mqgd~g4u;U-+~hFz7u_tXv=-W#VC7zBMV za<1tkeABjL58-L$&DZwfdKkxqh6xWch$3<4%Qvb2M*Fhw3CGv%GT%$~w>Lxy+{EcE zd@XetJp$55+*Q8AlFVBQ6?91aHND1?@Zi>~HDulUBwaP(xBg~d3GW-prOv-zikeQt z^`!03BkiNfQs*iEaHsw=#2o!F1ef1zD@(yx`dyC9XNHPsgg1&j{Y0M2k(pLOABFpQ!VfXa7*=G1r}-{!eHdP04@dq2>cSms9fq>F8)ukNr_4?}^jdag0@_%gF!s+Kg6rH|xCd2S(nkHDn&-bX1bG z>(5+0dEeYP*OBjVB@P}T=cbrwFc3ZU87>n2(XlX+Hn4k6kd>v3$Zc0%Sb@ifD2J5_ zo-g>mKBkZP{C6Lj4Y%Ny?%o5gxpnc8o{c&)EX^cLX7 zFSyMd? z(#QIY`>Z1E6M_TL@%_u~YDmAc&M*@@^Hi^UHMRr6SI>181AZP6O2qq;GWl*ho&@{) zsV4jnJ*1g7>PQcQpNj0;niLLlVkrjWI8LJK^oEA-^LfRT`7j`FLbrW6$dCAQ@mWB+ zXr3hm&$|LS1etJrV)5@6POL|fb>L+ls9)DmmId2e*LOW)xZn5_ABkdn*kfwH1ln^S-6HegB0XhF{V``BhDgn}Acj{_g_;<2F}X8a2VX=1z|lvcTsm zLRauRgMVhyw0WElepKk054|{imlwvXvK9ZgA@pLfzCHM_?80`BP2dk@Z+bp71YR%_ za!}Y9)?Wv2H<=bdy^r?({-z74I}tI4*DrQ`;P|2i{;^5w;w)Ydk>y--a}DH&y?+1k z1K>lhWnP1zxAfBD@K4--i)DAdfxKH`o+_SqxyT@{ImpjlwS7Vm^l+n7w|9qnu5fVO z8G(6J^2u|oUa%j~`^dBAmvAog$yxQJS`YBsKJ7)75NGt6I+rv9e68H3P)87W#Gh85 z^#(tH4;PwDoSue$+1;~R1Nf$V@l&&nv9KrhN+Rq8(s}5~l{siKRqGkGl zbCdA=FTFLI0lp%Y`7;2YXZWnZXfPZ2RMm|$Ovw;m?8&H2#5^YEy!ImwxK8){xXoIq zPpInSOh3q% zFfOzC(g6IwgTAxr%mCUIJ2A@;4?Ht+#feJboq0=DR^nyQKZmvIen7qDM#mM$fN#y- zX_ov2JkI+lw>6%x-|OwG*$vMtjm}#!6y}E+*?T1!U_K{na9Caso@a})@}`#{&uaM8 zfnx~XuU~Y*B2dqzA_H^&K6vl87DO%weYuvG7qdc~!0A%>!)Rz1N1fpb{2$8F`U`3F z@Z1ItYW=aa89;%N40&D$;eRXY5s5+2&+bQ+)9$>5_hfgOp!ExgkH&AdnrHJ zyQWU}EA(^m$M~ixcrLvUS2USGdWGE^-Dr4UDqLy=asLZnk9!;j^%hD6pBIJuu+Q97 ziUYmBY~OXI0{Tb&d!#4cS8aK^(zFufTO15dsKR@ZR8n}D4f?s_O`NoMIeZ7c{y~`1 zAK*vZk8BTz_;^_0&E4E^one2z8vf49%t*T@U=-%fji1_f!TX}Uv*qd#%m*R_jyT=~ zy=q6can8ed`+Dus#iO7{(Wv=HJs5}QIbOcq5B)mfs~zhDdP+-t)w~1w@V}N98h{$F zZXJ|^`{+;4v*GV9_i8FHj)I;ePRriE1spA1;NpaQz2gcUo>1=|FVSWy?Ibvd=f5X>gNe}I$?;mJyA`m{#B44+=T6k_7s$Yu_0g7{(#o_;&N^vJxe+GG0p%NR+ z$JJ|PJT3u-jD*UrhwBs0eN)2g$hHr=_p}3MEI%XV0{5FM2{vwn>$-wAzTOAz{JZO3uMsnD<+A_@`n2(C_fx!wxWo-*k-l+YNU~ye%a^&KuvS zEzWQ|=IwLL*U5i=)z23BVSOWF-Ot|#9Ed>`c-|rLu*(YbcJD2_p5XFQrm9Me_FXC8 zaCtdrD-XWU@sS&oxL*xF-^$1Ld&w2O75lmIz`A;TeW|UrJWen99wO)9DqUnG{yk=x ziSURr`t`}UUXdDR8+`r#x=_N~BQ_RQ;p;L26B{w6kL>frarVE8EPiYzaoPv0=Al@w$+x!(mnZRWbi?Vki3jx< zE!VXXKJ9$}7m4Sa9h51=`Cc7vH5j`%wh}%uc7fV=tMFWa@NT~!FKco6^_S-4Ix$}A zKiUb?>4bN!QEMbTEou7(qW3R8Tf*xc*S;dW%_B>T@E^U)xdb(17RbD$bmTONbFa;x zByyXkWk@}bms9b4yWST>AG1r(NcrB={)D$}cB1$?-vR3X+qRPHiJrlN!K8d|TRg!q z4i3WWo;wzj^rksgQh!xR6iK^0T1Cnelk-Wsb%^5STLtt|gVY4u~Udx?AX+sLdS}5GOyn~b*{`+q|)4%`H zFaG=QeCNOV;b+-I?(o0*JpajY{X_MC^)vtbZ@uBad^1Ptx`BV!)Bl^7L}pX@(g_s5 z_jpX{%`HqJyByVT<}0&FKXiVe@-sZC`Hh4&wGI(GM9mxY!eWVj&o5E+3b#|Z^njX2 ztx%=r59ceX_TD{6mD}1-7<`|?b@S9bs-c*YFMRi}oQc9lW=an!W~$z)0P20ANl@!d zUV+sAe!Nqu_c;EO?K}Mb$~r`n@6OVH zdFkI1MAb~BADVuPleEZNF@gyx)I5%EfjXx=!isuduFFyLwAr4QM9$Wsj^L9JYCWf_ zzm%juWK-|qpVw4Bt80gn_x{sk1~MOVEA|=3`d9hYUBlx#w{>?1wkPo}<77PDcos+I zIU(y-ka@f`v)2tQADbUd<`>e3f06q#&JcJj%rUYkP8+NWyJnruD~)D$BAS_)Q{8v`u@#jW(G{j3sl7Y zAiBf)qAQ@P#tl*I?<&s9wO~J1UB4`#3b1wUnOZ!Ldb{VRERGY&D^)S#`ce`V_hLUC zxccDx9e^G-qhD};Jr!0m#{E1iZJ~nwpc(g#U;cn{W6plqpU(#etG@@n_IWa5RS~q~ zL4^r@1@O?6UksP8gZ>eP?jmi#Ti&=xxA20zfxztPRA?WsBD3T;wAaSx?^zq*G0g#G zjopxc?O;k!8pw$$L{FCh@<_Cv!smjli_WEC-u7U>7WYfIZpHh|zxX@GWd{@6vHyRf z&@S5mXc0cb#Rixizx~f!xNbOkfSgwmcI3*pt&o4IXRkN*|JPgsF4Y0vHW6pX`$PLf zW7@NT?=^nBJY)@MV=P+T3i>Z8dUfIFXtCwdj!?L7=H0Yc7ogs7=LO*a;Dr+Gk23wB z{cYn8KTkl~V{$}z08st7#uoftQx>oC)3<=7O1B+$0w#4`T8DWc= z!rvp0`(LvsGYOBsdb%gonD@MopEj2TRhNnjp-1St8*`|WYi(|dK0*#W=+r{cQ1@Sa#tTwO2*KAn+V_!585664bd>j%J7 zuidF^2HgFQD_t9NHpL@0sV#qz)dzTIZ=Rr;*9RZ0~TFi z+4d4}z2zUxK){S-WRAxxo9fBgBG7ZTbzLKFC#zl45Bz@gefT590_po*8%FSVvJzq3 zAvkVee`_@O6zF4nQcjcy(%qulv)cg0;&K%~0Mc@=XktFUWkdE8d>`3`?F*@Zr*9S| z$cBgR~}~QR}f)_&MH9dwUI!`@mN*W!TP%R?Qiz z16D-nT41}dcH1Y#>wqj}k~=&A&-`iZw!{7DFDk?YI7n|Qq7V5k?!|PNUu)D?7Gt~M zp|aNGGax6;q6^y(&uDE9JU`$_e!UluJB`0s)<}YA9zkb;*hs$@i zs2Jh+i&Au>muEe4l>3TJn8)#xmLh&KEl6^B>0C(G`S8 z3Van;#`U$`=4r$Ewa4WMU;Xouo%jilCuc~!QsMJ1!YA%T4(`WtkFCc^T$1glCW*)C zw&;;~`=O>@^8c3P!i7=X-idnJdn|7scAmu3GZW4de|fCo@o!u{OHcXFgg;iqKbPt^ z5&y21n?n3{TW&O&KS=opSK@j$Fg+$bTB(nU$1bneAbgph--z&-Yk{tWk9)i`CH`IF zFB9?CJN^FTAAYYuezVz~wbHo{NJgGEVy zZ9TwEuB%sPC-tv**h$L&Q&l8-1fQj@mt?+0_yY6QU?O+8(U6oU?+7CKlE#SyU98rU z^3}JgIDXuzFj7AXr1l#bK42x~;wkw=erzMfL#-JlNPh3UHNhrMinl%e_y6?aY3jc* zv$0~N{SvvMMDEs)R8o%yGsVjSu2TOM_vn5?%J1%@c&Gkdiq~oVq2lEg+7u7=5Pwdt zFFi-`(5JsC-fGD~@z}=&|JD)asD1j89}sAQ^s-vH|R zGuNo{seCF8l~DKnHy=>=H-7*!NAl&rPzWz6Nniel@G~arx^oon{)f<5k`IH2;FEuN z?Vr519hDEAN6O*lAXxklUH+lOzj+J1w4@v!9zl5N37Y>yIJBFj)&I>yYJ{k?;AaXS z9HTJ$NDYx2{CAzVHGoJm=y+`NRM8@zbZ|-2Tlcy#D1w@PyP4 zAAu4KzD!{%2ZjIdSMh)HVgLFI4rwLw&S4a0w>6No+j;8!a8aZ5uH~YhC={IWL5L-aa2dtmICiMvayU+VqRQ*0Z)N_~kk9xl({=FYT0#vzZB!yM~ z-q+Fdl>8$ns(vvVRh}_T<)4$M`YUcZ^&YnUyS^x#S|@5N`AzibPtYc4dvk!yqkcpT zhhRIPQbx6J{*4+LC+-R>iQLt(3SvK8p1YBCo(ci#zn~X7K9KT_Nz^E)(-V8fy|KLH zQ62L9HowUs_@C-qvd($b>jJUIyNi2%WBFU*8br^Qx^&VWp_FJMUpznk0+;JQIT(X+ z|JBb#Ph0meB5x5gK;#;eCrG|nN+hxS_Lr~rV85rHe#Z{;&@`L;Aj}`uwqzP&9_Gri zjE4D6MFbDgGhASroIAVyp$`kzJ8XG1`Ci#s9gnf}k9wqF=kt36;y0ndqj*No+r8oidVpOnk+BK}TgVuH+{ ze3FOBK1vRkkV9Dh1;Zw9ET5bxFdqV#b!_tHKEO|IZYj!uPaWFQMgTKs1^qEUvq?C0 z67z>LdAZA2-#yuvA~1iMHF+n9`Ni2?Une2~w+<&4V4huREke!}-t=DRJMJIeZC?s) z0EeQRR$?>@x=p@sKY7ybE%yI*3qHp&x@4Am;(6eyqK5*w9a~l?bz*%z3N-RB0^VO8 zGK}R;J#W8?`^8?z-VgI0hOfrYQUSI0z5A>IXc;oLgyXqtumAkS^Qu(s^#{KKZWHrs zybI;^Q>7Jm0GT4*!Ocj^q_<8F7ndiax|AzQEFhBYv*|!1j zSH6+WrcdUThk8V@o;2;1Y54iry?Olz^TXzh`nMP_gh`9w_Nu=v*ogIPj4?9D{c%Rh zzyr6(`I1f^ZimZe6=sYQ#~B{sa}D?--*GMgPH2hh;(29}pAqLXK;MGib@_nbjSjBG zdWNvLk@N338Cc18LDzScr((VME+oJ40c<$!e+H-T|9pHs(5sgqb=J0965xP4o4 zM9x_Q@~PdE!FsyH(2OvDot8-}#rkNyHY&qiR3A}xE(Me|+a-$oF?)kG*(b8UZnG@zPrI5^ zt9=1CT5yEp`?ORf8e_hHY2e&ujJ3vJe6XHrxqQQxfZS&$U9i4g1}h0q4A*BNdb&Lf zSc~7E2#u}JFur1_R>%GAsF_RnDr@^?GQK2~mn~v_1+Sbi!0oHjD)7e7dBMD<2e*&s zki9c*pGlbU0`BJ`6%~zxfHNCD_u+Y2_Pzt5HvrdOyh?|8x!uye8;fmi64x@{s_lR#Zg!fq%+z$f@x0JE`MC*Jmo_C?4W;u|mg*E@HN2~5!?_ zg@O6Ei7S~8EIJO8_s7RNlgvw|Tz3Lxfpbhsc|K!QP!J<__||I^BKNqbwHde9A}wPN zE-$@%z7M0h5(DA44?~j)Z|-?>#{lOGB;P0gj?m>Q=dm~6a+XLc>o-$`lGjM&) zMeB&aRVlkd{6=K@0x56mqW&}9#&G!omZN9!Cvr^7tq3mY1rlBz*q=zQOa01E@?HFH z5;V*`M(&3Y#cQH7sd(wOivmO+o!3W6c~u6*d-EqKzQAozK=OOGJs^7grCUzwuPvtd zcS9z{bF5xcyuh~mA}Qa(%}-F|2gMV9+@*NSah85kA5*9&x$n+3jzmuI8^yaby~ap+ z!W@MkGN^e@yDz0z#8pav2~LVvM7C4$T3`BC;_bC$xc*+x$;IdNC^h?r$nT=pS$9`^RJT|MBIR$5i7tJ%<<+|X!22-6=5tl~L zkD`Sx*41$CL)+%&Gg%{O)z#$H*Wka)e82x!(V53nwY70PB&np58&YUA^AZ=O=bFlp zB11)?B#P8EW#&d?$W)}FQe7c3MKWY+5aDDDarPO)InIO-qW8If?a$|&wby?3n)cdz zt>5=2w9-s=0;-;`u_>NqLht5hyTiVs9NyiSipwUxBw z3jqey%iAv8;KOmoMSOm*6YA*ZXn}UPk2iTy+NuwAoFWnv`?BR3(8ekLwm}>@(ed%@ zluuM>W^nW-)6q}k$HV(Oalf)@dFk}SALEd+%GV+-q7Qy^m+wj;@A6jsiWVXn=Zgx@ zOcD$6yF%TH)0xQkD4ng6UuiJ{Nn3BFosObHj?Lq2IEH$(9vNe>!1;(1XL6OoN3#NKG72i z4NJnPbBp?1r0DVz`DYDb0Tm73;XcXy^2kFPtX%uRlRAVt!S|P@ob!)<;b%jrE3eIKS|anle5KsR1klpwV%E~0k|1uYa@g{%-^#ZJ4I7@8-5 zZhbJv3a`KH&c8vLpg^PTk&4bv3cRVMi(Pw50N>`{GDidmFx+$C=x>ZS>*IPJABh4+ zKf`ickz3YW!F@Np0{Nla^bZTW67cF*tu8;t{iphHL{bF>R=yO}FnvM+CDQArQfcIb z-YSgBeonxGeR#p1#}tTin&~<5hyvSe4jhj8hXO^i_B&sQQb23uP4bsK0^(0!pK<$_ z0&3Y)>j&;rpy{G%-l?m2J(z(AO!uy)IONMy0upXT*j^eXgKEVc^{wm4@Zy|u=Q8@< zO!FUnYi2-(BfqDQ)yR`Ud2n9sv9V=08QO=h-4s9{#K1zjeIK^# z(#(o`Px>D`Ai~r zK4`)sNI;nYC0@0LlnDWQjy95-1kvB8H1PV99hfi6Ib67a48w(kwMXUg{=7r3d_?~I z_KiDM4=_hy_V*u20)JpRRC#Mv<&xo(%`t<03Iw!<%t==P0gl8!#_4JVoIk50-E4^* z_}0IGvo3>0*;%PsyLh^peL1Rn~oyDMq-`+nMUN- zr@hWGAP86zIb8qKoPe3OhLy3{&eoKGCo7czgQxW6md^y#ZBzU-J4ryLQjx6_^7G{y z)=Un15TF=xwP&uL0Kq?>-f7-I0gW{|YMapC(kw8)CFmFdu{$Ceo?!$ue!c3&86-e} z8MN*o_NO0e2_gK-=$EOk2Ksdb+=$o+)m$96P8Fuyx2M3mqDf+BGX=E$#?q6J<5##T zPwE7jfcCI$%dNr`I2SwJlX4#W@AdoVG~ZL;gHh5^2TXUv) zjIm1)1$nRhGAqAQ(9h+kqX9NYu|b?aNOz2G~cudxk0sGB8@OV>Gj@^#MJTp zca3s?p{{zxS`J;anhJ+}yZud(WB82k#~b!fgo9!&ALuW7ae{t-17P3C8d!YEOFl^sp+WMCvHhW_55I3YAZl)j`t5UN8>U@p@HS8CiSIQUhy`1W1jW*z zr^KTCi6ISK9+di?!Su4tSJ)P(Y0#P?<^3GQzXGW8riYO8H1w_PKRr8**Y?>5>$fp@Jn#Ku8kAVi1Q_%n_en{NlsbxhOK;-4 z>~AWBruo+W$9)Rl6{WZNC=EnZPnek8rNRr34(p9isldO|z$^~AQ|I+h%~UX{=+Dfj zD~s)K-J3-r*#&GDp)$4C@VW1?G0dtBxdbOx2Av7p@*N}<>LvEsA&=T%*Va>HEKl76 zw=DFxU9B|kS`$ZyP`XUyt2sJU8$>96)BFw`{nOk%k7&^Ttv&Z~4-JNGW(O|n(!rnN zINtXZb@OXg&-4z{!Tj%RBWlv=ZEPx9=O`z^nrqi?lP?%@*O&Es%k=$`IPoX^TFM`Tug{0^>1#{!Rw;P(i^i({9E`%XRYY4O=1 z2XDqy>r6IsX&3sbMu(8|{wdghSK4>rS6E$Spp5J7gDd}8YQ^>0ZM0Duaz;h@l)a+V z8KCVL+T(GK0f7v`)`ltu_?})$*gnVr6IPCfbq@n<9UW6rmrw_ouCK9k2LqBS9uC-r zGoVYzI;-F%1I*+8tsKA0fYJ6n8>c zJIDaxFr7009NgC_W8U?k2Ym>eB+glyjYD}}fs%gXID9FVp?5IHVT`Yc_8$F+%RUvK zvN$yc$J}M_H%;L@|4H2EvNlO9_w^;JFd;WhT}|vM6LfMC z9>3)1yStnWP?oiiR-jw-sF zf7Laj4pV2JIlmpdy`PN0YWvxKYiIZQY z(udn94$5$dPihUeuXd*{cb4v`oPMm$G)M+gZTwd7NCh7ImvbQ;t416R^{y z@>sjZ1gz2v-=>Z}jYhY1Qu=>QfVJ9K`Zhc+32JI~BY!aEs+POh1QVEU=BGs&FUzDq{l`D-d-ediIlU9imOd6typ!EkCWu@{-;=d+7^n6(BdL>iEcDlyy<}9* zf|6y?K z1|1PPYiW!P8#9hP;6I1=b3yJ^Y!w?mB=%D1f$%a#Fcx%29VyZWIAC$l=Wb>e z2QuGHFL-z0|B?d1h0i(Q;o@QZTY>{mi#8@xF4(>aWtIO!-;C`+R6UPTI zUsH9VZaNznKfHs~m)XeKco`LM#sQb{t0&2iIq)}kGN-B)%Vkx*V$~WBywDo=Ex@>p z<%&Yrzr)|#B^uAFa>1tOjpuq}F8G~`d~Pbjg(wC6ovS{g6PJ6%P)6C|0?i$%PPcshZR#E@W6)iZfU8fUoReyFL1e zJPQ4?$7Kr-{&~AR>zc-ek*~vD?pc_wuhej+p9`cI-gNFi}y zx8+#T9!nmS4!hiqIf4GLsb?kW_jvFsIr~+t1P}DYtAxi-q7Uue=mSdCJQ#DS6EBJ3 z!HpkcR`NnTTn8Gx$==F?sp+~iRd;!ynI^8bE{_M4{d&xR1Re87{1t{NIA-IxZND%;cu| z^S~q}dcjnS2L>#oq}571uytbHXv6yUqx}(d5!=c8Ur&w{1@Ryk)*YJi;=$1m&NV@D zJfO!dT4rOqxLZ3Pil%ZP$L+WuNAev77>iRMKy+;-N08*I!1N3m07d)oyoj zVC>@2LCZ2MuhN4a8Sz-J9nB~FM0p@ReBMvo5bIs=OYq@B>{p+j77by)>L6BaPnG3> z|G7A?_gC2<*m%9;qdSflGkMvY@i`KG)*JGf9Pq9?ki_1>ftb#Qu)zatoX6Q-v94l) z>0@WtXU;6p{aB?IiQ_|@h11gTJR9;a?MlAU#Dav+590UY^VIc@vg5HKCfwPat}T(m zfhfysf)lfBkeF)IU5EVGr1AP*nKw*us{ELgKZ5*#(sUQKqg?2%Z;HIPgyY`ZTF2KX VSkM|4^W2Tb0MVgYZ5#Vh_&@qC>jnS- literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000060.vtu b/v0.8.7/tutorials/out/solution_000000060.vtu new file mode 100644 index 0000000000000000000000000000000000000000..699ab7b59ce00416f29d8b23cfdeff6befd1228d GIT binary patch literal 19133 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 FWj?xCIBoy{ literal 0 HcmV?d00001 diff --git a/v0.8.7/tutorials/out/solution_000000060_celldata.vtu b/v0.8.7/tutorials/out/solution_000000060_celldata.vtu new file mode 100644 index 0000000000000000000000000000000000000000..6a8c85b3c7bd5413ab345f28c765f58265ae5370 GIT binary patch literal 6748 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�}gOlue?9F8sm3a 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�vQI*( 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 o$ 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