├── docs ├── .gitignore ├── _static │ ├── styles.css │ └── iMOD-doc-logo.svg ├── figures │ ├── about │ │ ├── training-ireland.jfif │ │ ├── imod-timeline.png │ │ ├── training-delft.jpg │ │ ├── training-delft-2023.jpg │ │ ├── training-delft-2024.jpg │ │ ├── training-delft-2025.jpg │ │ └── training-singapore.jpg │ ├── qgis │ │ ├── 3d-viewer.png │ │ ├── ipf-reader.png │ │ ├── add-nhi-data.png │ │ ├── icons │ │ │ ├── 3d-viewer.png │ │ │ ├── NHI-portal.png │ │ │ ├── cross-section.png │ │ │ ├── ipf-reader.png │ │ │ ├── time-series.png │ │ │ ├── time-series.svg │ │ │ ├── cross-section.svg │ │ │ ├── 3d-viewer.svg │ │ │ ├── ipf-reader.svg │ │ │ └── NHI-portal.svg │ │ ├── imod-toolbar.png │ │ ├── cross-section.png │ │ ├── selection-toolbar.png │ │ ├── time-series-mesh.png │ │ ├── time-series-points.png │ │ ├── osgeo4w-select-packages.png │ │ ├── qgis-installed-plugins.png │ │ ├── qgis-language-settings.png │ │ └── temporal-controller.png │ ├── index │ │ ├── overview.png │ │ ├── NHI-zz_3d_viewer.png │ │ └── NHI-zz_cross-section.png │ ├── coupler │ │ └── MF6BMI_coupling.png │ ├── deltaforge │ │ ├── 2_license.png │ │ ├── 1_welcome_screen.png │ │ ├── 4_install_location.png │ │ ├── 3_installation_type.png │ │ ├── 5_installation_options.png │ │ ├── 6_deltaforge_start_menu.png │ │ └── 7_deltaforge_prompt.png │ ├── tutorial │ │ ├── viewer │ │ │ ├── mouse_plus.png │ │ │ ├── button_epg2157.png │ │ │ ├── button_select.png │ │ │ ├── button_3Dtool-Slider.png │ │ │ ├── button_iMOD-3D-tool.png │ │ │ ├── button_iMOD-Toolbar.png │ │ │ ├── button_valuetool.png │ │ │ ├── button_zoom-menu.png │ │ │ ├── button_zoomtoextent.png │ │ │ ├── button_zoomtolayer.png │ │ │ ├── button_3Dtool-TimeSlider.png │ │ │ ├── button_3Dtool-redrawlayer.png │ │ │ ├── button_3Dtool-switchon.png │ │ │ ├── button_SymbologyContours.png │ │ │ ├── button_SymbologyDataset.png │ │ │ ├── button_clockquestion.png │ │ │ ├── button_iMOD-Open-IPF.png │ │ │ ├── button_iMOD-TimeSeries.png │ │ │ ├── figure_DTM-in-QGIS.png │ │ │ ├── figure_iMODforge_prompt.png │ │ │ ├── button_3Dtool-TimeSlider-Start.png │ │ │ ├── button_3Dtool-TimeSlider-Stop.png │ │ │ ├── button_3Dtool-ToggleSlider.png │ │ │ ├── button_3Dtool-viewcontrolbar.png │ │ │ ├── button_CrossSection-ViewAll.png │ │ │ ├── button_TemporalControler-play.png │ │ │ ├── button_iMOD-Cross-section.png │ │ │ ├── figure_3DViewer_LegendEditor.png │ │ │ ├── figure_CrossSectionTool-legend.png │ │ │ ├── figure_ValueTool-in-QGIS.png │ │ │ ├── button_SymbologyDataset-selected.png │ │ │ ├── button_SymbologyDataset-unselected.png │ │ │ ├── button_TemporalControllerPanel.png │ │ │ ├── figure_CrossSectionTool-3layers.png │ │ │ ├── button_TemporalControllerPanel-menu.png │ │ │ ├── button_TemporalControllerPanel-turnoff.png │ │ │ ├── button_TemporalControllerPanel_plus.png │ │ │ ├── figure_3DViewer_headriveroverview.png │ │ │ ├── figure_Crosssection-with-borelogs.png │ │ │ ├── figure_Timeseries-Heads-in-3-points.png │ │ │ ├── figure_RCH-in-TemporalController-and-TimeSeriesPlot.png │ │ │ └── figure_topo-Abbeyfeale_simplified-Abbeyfeale-model.png │ │ ├── wq │ │ │ ├── 3d_viewer.png │ │ │ ├── load_mesh.png │ │ │ ├── cmd_run_output.png │ │ │ ├── cross-section.png │ │ │ ├── group_selection.png │ │ │ └── color_ramp_selection.png │ │ ├── unstructured_NL │ │ │ └── head.png │ │ └── hondsrug │ │ │ └── groundwater_decline.png │ ├── qgis_issues │ │ └── plot_axis_offset.png │ ├── practical │ │ └── look_cool │ │ │ ├── WT_NerdFont.png │ │ │ ├── cool_terminal.jpg │ │ │ ├── Available_Themes.png │ │ │ ├── Retro_Headache.png │ │ │ └── VSCode_NerdFont.png │ ├── viewer_installation │ │ ├── wizard_install.png │ │ ├── wizard_start.png │ │ ├── wizard_license.png │ │ ├── wizard_setup_type.png │ │ └── pdf_program_shortcut.png │ └── logo │ │ ├── iMOD-coupler.svg │ │ ├── iMOD.svg │ │ ├── iMOD-tutorial.svg │ │ ├── iMOD-Qgis.svg │ │ ├── iMOD-news.svg │ │ └── iMOD-python.svg ├── news_posts │ ├── images │ │ ├── 2025-03-27.jpg │ │ └── 2025-11-20.jpg │ ├── 2025-11-20_DSD.qmd │ ├── 2025-03-27_Hamburg.qmd │ └── 2025-11-11_imod_python_stable_release.qmd ├── python_install.qmd ├── _extensions │ └── quarto-ext │ │ └── fontawesome │ │ ├── assets │ │ ├── webfonts │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-solid-900.woff2 │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-v4compatibility.ttf │ │ │ └── fa-v4compatibility.woff2 │ │ └── css │ │ │ └── latex-fontsize.css │ │ ├── _extension.yml │ │ └── fontawesome.lua ├── python_getting_started.qmd ├── _quarto-install.yml ├── news.qmd ├── _quarto-tutorial.yml ├── viewer_instruction_videos.qmd ├── viewer.qmd ├── practical.qmd ├── _quarto.yml ├── roadmap.qmd ├── index.qmd ├── _quarto-manual.yml ├── practical_powershell.qmd ├── tutorial.qmd ├── viewer_known_issues.qmd ├── practical_parallel.qmd ├── practical_messy_data.qmd ├── coupler.qmd ├── practical_cookiecutter.qmd ├── coupler_release.qmd ├── _quarto-website.yml ├── viewer_install.qmd ├── coupler_architecture.qmd ├── practical_look_like_a_pro.qmd ├── about.qmd ├── coupler_ribamod_technical.qmd ├── introduction.qmd ├── coupler_ribamod_preprocessing.qmd ├── coupler_metamod_technical.qmd └── coupler_ribametamod_technical.qmd ├── .gitattributes ├── .pre-commit-config.yaml ├── .typos.toml ├── .github ├── dependabot.yml └── workflows │ ├── pre-commit_check.yml │ ├── pre-commit_auto_update.yml │ ├── pixi_auto_update.yml │ └── ci.yml ├── pixi.toml ├── README.md ├── CONTRIBUTING.md └── .gitignore /docs/.gitignore: -------------------------------------------------------------------------------- 1 | /.quarto/ 2 | -------------------------------------------------------------------------------- /docs/_static/styles.css: -------------------------------------------------------------------------------- 1 | /* css styles */ -------------------------------------------------------------------------------- /docs/figures/about/training-ireland.jfif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/figures/about/training-ireland.jfif -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.png filter=lfs diff=lfs merge=lfs -text 2 | *.jpg filter=lfs diff=lfs merge=lfs -text 3 | *.pdf filter=lfs diff=lfs merge=lfs -text 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/3d-viewer.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2e267dfc048f2c7d1903c95fbabacf38cd25011b57254e6f39495b5dd82b0714 3 | size 37825 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/ipf-reader.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:671a944a3472a728c44f3f089e024f91fa307ac5be539f092fae34777417687b 3 | size 4572 4 | -------------------------------------------------------------------------------- /docs/figures/about/imod-timeline.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:3a0cb8a40be719bd45945f011ef2a0b477b648994b0c364f5b73b90b3cd7e3ed 3 | size 48624 4 | -------------------------------------------------------------------------------- /docs/figures/index/overview.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5625a8775da1e8046b3cbf50d83d3d0c33b2363cd9efe3265573a38fc4cee9fe 3 | size 221382 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/add-nhi-data.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:40c18a0c6c1b1aae0e2890aa49ad0ab684ad0a2ba050bc22dd984265c7fc22d5 3 | size 57137 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/3d-viewer.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f3ee04ccbec5d205acc93777930b53d128c2fafad0f03ce5ea92670b969a6b0f 3 | size 1226 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/imod-toolbar.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:aa666ccc7d44f6ab48c597e1f38dbcad1a689273ec2e98c8055958bc4227bf42 3 | size 4476 4 | -------------------------------------------------------------------------------- /docs/figures/about/training-delft.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:30d004805eabce8042b39c4ffc266a24d1a9df74bb1635d032715a4ab777ace3 3 | size 6484885 4 | -------------------------------------------------------------------------------- /docs/figures/coupler/MF6BMI_coupling.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a18a70b16e7ef6c387d285108aaa2f73ab92b89097219304ed6047266d244084 3 | size 26534 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/2_license.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:48f741ccdf3d9e172ff4ea3efbfbb439f0ec5e3b289883ce3f11598b8d55209d 3 | size 23594 4 | -------------------------------------------------------------------------------- /docs/figures/index/NHI-zz_3d_viewer.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:bbfa6ab1688029f6e95f274f54fe362d313508b7a05b58b8d005d20d9f6d9636 3 | size 800991 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/cross-section.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c43978a4ea30e0bb0f495e9485d7d73cf32b2bef6fd28c9691d46f406b8e0a00 3 | size 1471883 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/NHI-portal.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:604551d2bcef123189d90cfeab9dd84f17c1d81b59572efe855cc71ce66fa348 3 | size 1911 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/cross-section.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0b79ad1cb04e63b7c27a651baafe65d7af3dfccfc731c6e1fc659e49b151b147 3 | size 2068 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/ipf-reader.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:f071046a6ea7e43d6a2e335948204f7cb547865f6e136e7c91e7a7e047247000 3 | size 1262 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/time-series.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a3898969e2fc706b9170abc2da063f2f4d368db2c8b968312ffed27ffaceab77 3 | size 1584 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/selection-toolbar.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:8c351fac35830c4ce3e0d65413e831a3945efb3b208333b87313ace60b8c809c 3 | size 2782 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/time-series-mesh.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:199e2c7fd9d874e40984a79208b5e177a9df700fcad561f29c5b6361659aae54 3 | size 1547276 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/time-series-points.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9591dd0751810254a4c2760b5d52c28fea26b04bdb031c367e39e17159138844 3 | size 780198 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/mouse_plus.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:52eb46a9be248f4b19ad455d499ca6c779308d2a0fc25ab6983822eb83b966c1 3 | size 245 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/wq/3d_viewer.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:aa7a38e09b2b44a15b6aae7d021d831d16d7640c87c246a8676b05c6b51c10bc 3 | size 101927 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/wq/load_mesh.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:41c850eecdb8bc1572a8722fe766f205e4ba6205b08bc03ce76df7e5060343b4 3 | size 109107 4 | -------------------------------------------------------------------------------- /docs/news_posts/images/2025-03-27.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e7c47f5d8f17a7b63070f2f09384c940735c5c70ecfebcf9603f76271506da4d 3 | size 611996 4 | -------------------------------------------------------------------------------- /docs/news_posts/images/2025-11-20.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:04d09ccb9bcb0319b782f392d1421e48a5b72a402211c3e88a643055d4f5caf2 3 | size 284753 4 | -------------------------------------------------------------------------------- /docs/figures/about/training-delft-2023.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:83ea2ad6c99893a6dd39c3cdfece4fc25b69f90d003739a8f3c38bcf65c7027b 3 | size 6768232 4 | -------------------------------------------------------------------------------- /docs/figures/about/training-delft-2024.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0d7d47196713532608e1978100bb65a02a118d198fb3d4e01cc5bbdc3110a2d7 3 | size 8945763 4 | -------------------------------------------------------------------------------- /docs/figures/about/training-delft-2025.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ac299fae68830840ef57c1395edf1d5646297b0bac65dfca2cf2d28fc48a880e 3 | size 1036654 4 | -------------------------------------------------------------------------------- /docs/figures/about/training-singapore.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:91b29d8a27b908ab8bf81ce82433f83a61ceca00dd531e89505d16870dbaabab 3 | size 5799936 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/1_welcome_screen.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:db4b09a48368da338a8669b92ff6839b66ca89d05518b7349cc43d50b91069aa 3 | size 43976 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/4_install_location.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d4d5fa8d410d3a866f2cf4ef8409eb11d2eaf55521d37adc1ae34a31d33daa38 3 | size 18616 4 | -------------------------------------------------------------------------------- /docs/figures/index/NHI-zz_cross-section.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ed338b7c3b8e8d27e0aca002e74c81ea57c1baf0745d9a25000f869b0edf4800 3 | size 1148064 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/osgeo4w-select-packages.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:cb3482013b782fe8dd7a5752f94880dcaf0e61d8ce0f84d19d644e6c3f7135d9 3 | size 31459 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/qgis-installed-plugins.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a8b4ae8d751e55b768c38a8375c717fae2ba880087bb37620420ed40d35438d9 3 | size 68077 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/qgis-language-settings.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:add69627a3178167b0c12d922e41a9e158dcff403f4136c6c88bedd202a85809 3 | size 91287 4 | -------------------------------------------------------------------------------- /docs/figures/qgis/temporal-controller.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ff4b4f32535e374e731100d2d831359b2846b8c91ac966ea2cec62bd2b14ac38 3 | size 1452196 4 | -------------------------------------------------------------------------------- /docs/figures/qgis_issues/plot_axis_offset.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1654c0f92740c05094858ec8d583e36688539cd2c42dd45eb9664ea8db1f2cfa 3 | size 75654 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_epg2157.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b30d12f2ecc928398d33ae94f5d949f7daf2b969d3759744c6f29ddd1cf09fcf 3 | size 3923 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_select.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:8c409389ab3bdff8497781bbbc3a8dfa1ace409bb2f18f271d0b5687daeef46d 3 | size 598 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/wq/cmd_run_output.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:298c33dc8770e88fe35d1d3c3b83da03bb7035a2c32fe8e67f6009808a18af63 3 | size 87668 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/wq/cross-section.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d8b718e55a94062c52737c48755df17f8e72b975990763ecfb0def2f629dc563 3 | size 135319 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/wq/group_selection.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:55130dbf071076864c8e5910cd1c2ebfa595da2ddfec192b086f8e921c05a5cb 3 | size 47266 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/3_installation_type.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:24c26173b8e8d2e7570e33d362bc83fc60cd982fff65e68b351c7af6094144b5 3 | size 15463 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/5_installation_options.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:314c48b4fe4197142a172844df4a758722d2f39fc091111de3ce94d159a4a507 3 | size 23561 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/6_deltaforge_start_menu.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c8fb410fe6136174586504b3271c2df4a0de6af134e0a2418fa046527ae53302 3 | size 41728 4 | -------------------------------------------------------------------------------- /docs/figures/deltaforge/7_deltaforge_prompt.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:54e4a4e5c33734ccbc4ccc7fe8b6e72c3a7132dd9200284411bf6915f3266c72 3 | size 349661 4 | -------------------------------------------------------------------------------- /docs/figures/practical/look_cool/WT_NerdFont.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:cb4ac033fdadbb254a80ff589edbfe3e4827f89606a0cb8abe677e416830f2e8 3 | size 246946 4 | -------------------------------------------------------------------------------- /docs/figures/practical/look_cool/cool_terminal.jpg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:8a39d4f120ab4138f8fd8755648f0e9a214d2d9e17859a7e0f466fbdd9e5468b 3 | size 54983 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/unstructured_NL/head.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4b6825a8224f6f244954a0e31409a2d4a98572c0cf1e13b31cdedb688700dc0c 3 | size 233714 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-Slider.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:652c5b75a9ef4e2cddf4a92da801c5a600d08b6a4b49293d022cbe16f466f695 3 | size 791 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_iMOD-3D-tool.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:fdb1b3c92a325f39344d5f8eb68a011d13a5229b4faaf4bbcba1660a5ca52dc7 3 | size 1052 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_iMOD-Toolbar.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7eff6dfdc3a8e8846b772b045feb46e908befed848e17fffce674e76bb3700c9 3 | size 4613 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_valuetool.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4c68cd6aed93bf2ceb15a2c1dfe9fe02e2c047305df7d2bb1315586a50f4e789 3 | size 1576 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_zoom-menu.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:58ed78a5310aa07c00780432f278394cf0df32e1ace6464a92788f3fba7172ce 3 | size 7862 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_zoomtoextent.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5d6c68dc78f176c11276bb7514098fe6b17bd6dc235be482d7795c507fc0eee7 3 | size 1164 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_zoomtolayer.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1a9ef4c0489c4713e1ae1617b09a412ca1ed1cbd0ad25ee798310662965ad8d1 3 | size 905 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/wq/color_ramp_selection.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:88768fecc665a263789e08229fca8f87e5477e76101b83767ee0881f6a8b6d2c 3 | size 51774 4 | -------------------------------------------------------------------------------- /docs/figures/viewer_installation/wizard_install.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c5005eb0eb43ffd8fa826e09df828cc38499d11d9cb4fa3291bbdb94c2738a3f 3 | size 60601 4 | -------------------------------------------------------------------------------- /docs/figures/viewer_installation/wizard_start.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:fac56667b6e6b6c519e924fdabbc05d3e3577d901589e2dcbaa3c9e662d95685 3 | size 41297 4 | -------------------------------------------------------------------------------- /docs/python_install.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install 3 | --- 4 | 5 | To install iMOD Python, [see its installation instructions.]( 6 | https://deltares.github.io/imod-python/installation.html) 7 | -------------------------------------------------------------------------------- /docs/figures/practical/look_cool/Available_Themes.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7b2751aa2ded767451f45c8356c0bea724ab6d327b99158a66474d73704b5a67 3 | size 72364 4 | -------------------------------------------------------------------------------- /docs/figures/practical/look_cool/Retro_Headache.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5a6bf29c159e39d3f40f99b4a50c0d04e9b685fb1f5b1274fd83ad58b98627ad 3 | size 145272 4 | -------------------------------------------------------------------------------- /docs/figures/practical/look_cool/VSCode_NerdFont.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:434660171ba8177bc92740edcfcebe0862fea5fada6fd6bfe4f7444e92f93534 3 | size 46374 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/hondsrug/groundwater_decline.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b0870be644f9dc80ec4282602f903f1d6aec444910a133f5d46b826a01877c84 3 | size 344483 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-TimeSlider.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:7b94b9c08f859365e94eba0958368befb261a3214f667df8b4a15532b2d109ae 3 | size 3235 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-redrawlayer.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1a0a5d62a77b1c4eb6fc0b952e3d9138d36eed269ca337635a5712ad9daaa5d2 3 | size 502 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-switchon.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:51657bb4f3e76db06607e96472e88e0daa1499f897c953221c8fbcddaf8a1868 3 | size 507 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_SymbologyContours.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:09e6659597314268506a7fdd102b61b21c316853ba2d3f9ae82864f793408565 3 | size 348 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_SymbologyDataset.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:831ae9d8bee3e1b5e7c10c2e0ecaf9fa2ba6c41dbcba4a21b3098ee7dd46cfd7 3 | size 1138 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_clockquestion.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ad3ec1cf10b6026aa4d24d34d2f1870c67b7cca331dece2fa431cc0cd2de8d1e 3 | size 1475 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_iMOD-Open-IPF.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:25afd8a32b4323ab2bb7af3e59d8ad295efd9223b6b0e38ad0e3372489d136d9 3 | size 1029 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_iMOD-TimeSeries.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e082010a6440914f50e5b8231ecacb8a250f471fc5f77a2c767995bfc454fcb0 3 | size 1115 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_DTM-in-QGIS.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1672e5c4543e1a9ee25099139164a0fafe8bd4b93fc442b5737500011dfab09d 3 | size 229976 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_iMODforge_prompt.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:972b12dc7990d940fd28ab0a5a22e76eab6c2b115325df35befa949876699a7b 3 | size 22612 4 | -------------------------------------------------------------------------------- /docs/figures/viewer_installation/wizard_license.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:10b7d831e2b6bff8972b90e7b1bcb4f69eeaf07d0486183cdeb1b16476534016 3 | size 154869 4 | -------------------------------------------------------------------------------- /docs/figures/viewer_installation/wizard_setup_type.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d1514956794b63d3e5424075fc4fd23a776a303baa84a18f60e50ffd97e3172e 3 | size 50533 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-TimeSlider-Start.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e0939c657b693eaa24ff58c9491facf1060013158affe2d53dee78324b73e99e 3 | size 486 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-TimeSlider-Stop.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e9efd16f7d1dc2b28461cc5ec412e8ed10d431cf5883e9c13a2abd5c3c5ba888 3 | size 516 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-ToggleSlider.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1fbe6cb2f392e5e6f8f0d24905150a34abfd8a3f8b146fcbf4b3800a3c24a24a 3 | size 667 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_3Dtool-viewcontrolbar.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5ea8bfb698e7668d6f8f3a783b46622e6eb04b57cf4a417bedbdf79e6b1cc227 3 | size 3340 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_CrossSection-ViewAll.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ce60c91c7076e26210accab21b9490da60e4643cbc52821a95278e55272bd638 3 | size 580 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_TemporalControler-play.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e9dc44e37720ca4c012b3d00e76ea111fae61fcae9a46d75027f31ba67e1c242 3 | size 565 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_iMOD-Cross-section.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9d0468cf503e6a6a402ac456a39aa11a050e463131eeff8d43ed2d86920707fb 3 | size 1217 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_3DViewer_LegendEditor.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:34dd9c67e76d9ff06f781402a4aba4650c87b18884287f3a0b39dbb1e84d7188 3 | size 20411 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_CrossSectionTool-legend.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9e38d330ea5e18e2ec9b5dfec7acf685c3570b80a8427d8c75e2c942dd81ee73 3 | size 592 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_ValueTool-in-QGIS.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:0e106e3358cdfb9755c6199958d108b7069cea40dad471e6c5b0600c436e4c5e 3 | size 10517 4 | -------------------------------------------------------------------------------- /docs/figures/viewer_installation/pdf_program_shortcut.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2733659b189f9fa4a74c288cae5e8615a58afc5bcb8ce166f848dabf79e8c23e 3 | size 395607 4 | -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_SymbologyDataset-selected.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:09e6659597314268506a7fdd102b61b21c316853ba2d3f9ae82864f793408565 3 | size 348 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_SymbologyDataset-unselected.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:21c04120eef45210e0bb3a77512dbbe45e04f1f74d457b999104e077bce379a7 3 | size 382 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_TemporalControllerPanel.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:851857971ac018a59a7558b6688d5b7aadab38baf6d3f50de24b25cd19a26a59 3 | size 1049 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_CrossSectionTool-3layers.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1997e63da20848e0238d1ceeb96caaac13f345392f92b6bf26b172763ee951b9 3 | size 26047 4 | -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_TemporalControllerPanel-menu.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c2a3f56a371970ff92a50571c6b6c553cb212c9d7c2d87711131ac288d01ca0e 3 | size 2369 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_TemporalControllerPanel-turnoff.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:6ac5f8ee3a509b0b84b21fddaffdafcec2be568b9708b3cf386828aa5a39cccd 3 | size 1137 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/button_TemporalControllerPanel_plus.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:07833274b1dbf4d7aa425f65d28993be858ce13b12de5f8b6676ce466119a83c 3 | size 3860 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_3DViewer_headriveroverview.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:720859e00a0d81e1a0f458268d723df1198d2e243497e993d277c548a2a7b7c2 3 | size 264570 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_Crosssection-with-borelogs.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2ae94ebbcb2208953a4b90bb029f4de8d3b821d5bed238afed9e7c20d2434de5 3 | size 708506 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_Timeseries-Heads-in-3-points.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:525a094e69754549b5d674c6b7fb3ca353617fa661845313cc456621d12e4f5a 3 | size 51330 4 | -------------------------------------------------------------------------------- /docs/python_getting_started.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Getting started 3 | --- 4 | 5 | [See the iMOD Python user 6 | guide](https://deltares.github.io/imod-python/user-guide/index.html) for 7 | examples on its use. 8 | -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-v4compatibility.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-v4compatibility.ttf -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deltares/iMOD-Documentation/main/docs/_extensions/quarto-ext/fontawesome/assets/webfonts/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_RCH-in-TemporalController-and-TimeSeriesPlot.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d01f90873c751a371b99daa337ca66356437b2c5bc3e1893911d52162a22edef 3 | size 65967 4 | -------------------------------------------------------------------------------- /docs/figures/tutorial/viewer/figure_topo-Abbeyfeale_simplified-Abbeyfeale-model.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:03b3545239402a9171f922fa02cc25a51208dd3d380fbb2e516202780ab7dc55 3 | size 313409 4 | -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/_extension.yml: -------------------------------------------------------------------------------- 1 | title: Font Awesome support 2 | author: Carlos Scheidegger 3 | version: 1.1.0 4 | quarto-required: ">=1.2.269" 5 | contributes: 6 | shortcodes: 7 | - fontawesome.lua 8 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/kynan/nbstripout 3 | rev: 0.7.1 4 | hooks: 5 | - id: nbstripout 6 | - repo: https://github.com/crate-ci/typos 7 | rev: v1.19.0 8 | hooks: 9 | - id: typos 10 | -------------------------------------------------------------------------------- /.typos.toml: -------------------------------------------------------------------------------- 1 | [files] 2 | extend-exclude = ["*.css", "*.png", "*.svg", "docs/tutorial_Hondsrug.ipynb", "docs/tutorial_Netherlands_mesh.ipynb"] 3 | 4 | [default.extend-words] 5 | # Ignore false-positives 6 | Stichting = "Stichting" 7 | wel = "wel" 8 | nam = "nam" 9 | -------------------------------------------------------------------------------- /docs/_quarto-install.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: book 3 | 4 | book: 5 | title: "iMOD Suite Installation Guide" 6 | chapters: 7 | - index.qmd 8 | - viewer_install_msi.qmd 9 | 10 | format: 11 | pdf: 12 | documentclass: scrreprt 13 | top-level-division: chapter 14 | -------------------------------------------------------------------------------- /docs/news.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid newspaper >}} iMOD News" 3 | listing: 4 | contents: news_posts 5 | sort: "date desc" 6 | type: default 7 | categories: true 8 | image: figures/logo/iMOD-news.svg 9 | index: "2" 10 | --- 11 | 12 | Read the latest iMOD news here! -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 2 | version: 2 3 | updates: 4 | - package-ecosystem: "github-actions" 5 | directory: "/" # Location of package manifests 6 | schedule: 7 | interval: "weekly" 8 | -------------------------------------------------------------------------------- /docs/_quarto-tutorial.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: book 3 | 4 | book: 5 | title: "iMOD Suite Tutorial" 6 | chapters: 7 | - index.qmd 8 | - tutorial.qmd 9 | - tutorial_Abbeyfeale.qmd 10 | 11 | format: 12 | pdf: 13 | documentclass: scrreprt 14 | top-level-division: chapter 15 | -------------------------------------------------------------------------------- /docs/viewer_instruction_videos.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Instruction videos 3 | number-sections: true 4 | --- 5 | 6 | ## Demonstration of the use of widgets on the iMOD QGIS plugin 7 | 8 | {{< video https://vimeo.com/837510722?share=copy >}} 9 | {{< video https://vimeo.com/837510303?share=copy >}} 10 | {{< video https://vimeo.com/837509898?share=copy >}} 11 | -------------------------------------------------------------------------------- /.github/workflows/pre-commit_check.yml: -------------------------------------------------------------------------------- 1 | name: Pre-commit check 2 | 3 | on: 4 | pull_request: 5 | merge_group: 6 | push: 7 | branches: [main, update/pre-commit-hooks] 8 | 9 | jobs: 10 | check: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: actions/setup-python@v5 15 | with: 16 | python-version: "3.12" 17 | - uses: pre-commit/action@v3.0.1 18 | -------------------------------------------------------------------------------- /docs/viewer.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid compass >}} iMOD QGIS plugin" 3 | image: figures/logo/iMOD-Qgis.svg 4 | description: 'Visualization of unstructured grids in GIS' 5 | index: "3" 6 | --- 7 | 8 | The iMOD QGIS plugin aids exploring 4D geospatial data in QGIS. Its primary 9 | components are visualization of timeseries, both at points as well as on an 10 | unstructured grid, cross-section visualization, including borelogs. 11 | 12 | ![](figures/index/NHI-zz_cross-section.png) -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/assets/css/latex-fontsize.css: -------------------------------------------------------------------------------- 1 | .fa-tiny { 2 | font-size: 0.5em; 3 | } 4 | .fa-scriptsize { 5 | font-size: 0.7em; 6 | } 7 | .fa-footnotesize { 8 | font-size: 0.8em; 9 | } 10 | .fa-small { 11 | font-size: 0.9em; 12 | } 13 | .fa-normalsize { 14 | font-size: 1em; 15 | } 16 | .fa-large { 17 | font-size: 1.2em; 18 | } 19 | .fa-Large { 20 | font-size: 1.5em; 21 | } 22 | .fa-LARGE { 23 | font-size: 1.75em; 24 | } 25 | .fa-huge { 26 | font-size: 2em; 27 | } 28 | .fa-Huge { 29 | font-size: 2.5em; 30 | } 31 | -------------------------------------------------------------------------------- /docs/practical.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid hammer >}} Practical Tips" 3 | listing: 4 | type: grid 5 | contents: 6 | - practical_git_dvc.qmd 7 | - practical_snakemake.qmd 8 | - practical_parallel.qmd 9 | - practical_powershell.qmd 10 | - practical_look_like_a_pro.qmd 11 | - practical_messy_data.qmd 12 | - practical_cookiecutter.qmd 13 | image-height: 200px 14 | sort: "index" 15 | image: figures/logo/iMOD.svg 16 | description: 'Useful tips to use the iMOD Suite with other tools.' 17 | index: "8" 18 | --- 19 | 20 | Listed here are practical tips how to use the iMOD Suite in combination with 21 | other tools for very performant workflows. 22 | -------------------------------------------------------------------------------- /docs/_quarto.yml: -------------------------------------------------------------------------------- 1 | project: 2 | output-dir: _build 3 | 4 | profile: 5 | group: 6 | - [website, manual, install, tutorial] 7 | 8 | 9 | quartodoc: 10 | style: pkgdown 11 | dir: primod_api 12 | title: Primod API Reference 13 | package: primod 14 | sections: 15 | - title: MetaMod 16 | desc: Couple MetaSWAP and MODFLOW 6. 17 | contents: 18 | - MetaMod 19 | - MetaModDriverCoupling 20 | - title: RibaMod 21 | desc: Couple Ribasim and MODFLOW 6. 22 | contents: 23 | - RibaMod 24 | - RibaModActiveDriverCoupling 25 | - RibaModPassiveDriverCoupling 26 | - title: RibaMetaMod 27 | desc: Couple Ribasim, MetaSWAP and MODFLOW 6. 28 | contents: 29 | - RibaMetaMod 30 | - RibaMetaDriverCoupling 31 | - RibaModActiveDriverCoupling 32 | - RibaModPassiveDriverCoupling 33 | - MetaModDriverCoupling 34 | -------------------------------------------------------------------------------- /.github/workflows/pre-commit_auto_update.yml: -------------------------------------------------------------------------------- 1 | name: Pre-commit auto update 2 | 3 | on: 4 | schedule: 5 | # At 03:00 on day 1 of the month 6 | - cron: "0 3 1 * *" 7 | # on demand 8 | workflow_dispatch: 9 | 10 | jobs: 11 | auto-update: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} 17 | - uses: actions/setup-python@v5 18 | with: 19 | python-version: "3.12" 20 | - uses: browniebroke/pre-commit-autoupdate-action@main 21 | - uses: peter-evans/create-pull-request@v6 22 | with: 23 | token: ${{ secrets.GITHUB_TOKEN }} 24 | branch: update/pre-commit-hooks 25 | title: Update pre-commit hooks 26 | commit-message: "Update pre-commit hooks" 27 | body: Update versions of pre-commit hooks to latest version. 28 | author: "GitHub " 29 | -------------------------------------------------------------------------------- /.github/workflows/pixi_auto_update.yml: -------------------------------------------------------------------------------- 1 | name: Pixi auto update 2 | 3 | on: 4 | schedule: 5 | # At 03:00 on day 1 of the month 6 | - cron: "0 3 1 * *" 7 | # on demand 8 | workflow_dispatch: 9 | 10 | jobs: 11 | auto-update: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} 17 | - uses: prefix-dev/setup-pixi@v0.8.1 18 | with: 19 | pixi-version: "latest" 20 | cache: false 21 | - name: Update pixi lock file 22 | run: | 23 | rm pixi.lock 24 | pixi install 25 | - uses: peter-evans/create-pull-request@v6 26 | with: 27 | token: ${{ secrets.GITHUB_TOKEN }} 28 | branch: update/pixi-lock 29 | title: Update pixi lock file 30 | commit-message: "Update `pixi.lock`" 31 | body: Update pixi dependencies to the latest version. 32 | author: "GitHub " 33 | -------------------------------------------------------------------------------- /docs/roadmap.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa regular map >}} Roadmap" 3 | image: figures/logo/iMOD-roadmap.svg 4 | description: Our plans for the iMOD Suite. 5 | index: "7" 6 | --- 7 | 8 | # Planned 9 | 10 | The following things are planned for 2026. 11 | 12 | | Component | Description | 13 | |--------------|-------------| 14 | | iMOD Coupler | Add parallel support | 15 | | iMOD Coupler | Unconfined coupling MODFLOW6 - Unsaturated Zone | 16 | | iMOD Suite | Finish successor of MetaSWAP for unsaturated zone | 17 | | iMOD Suite | Support Dutch community (NHI) transitioning from iMOD5 to iMOD Suite | 18 | 19 | # Wishlist 20 | 21 | These things are not planned yet, but are on our radar. These will be 22 | prioritized in consultation with iMOD Community (& MODFLOW development team for 23 | things in MODFLOW 6), and based on available funding. 24 | 25 | | Component | Description | 26 | |--------------|-------------| 27 | | iMOD Python | Readers and writers for iMOD5's ISG format | 28 | | MODFLOW 6 | Output control for output per layer | 29 | | MODFLOW 6 | XT3D by connection | 30 | | iMOD Python | Interface similar to iMOD Batch | 31 | | iMOD Python | Export data to VTK | -------------------------------------------------------------------------------- /docs/index.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "iMOD Suite Documentation" 3 | listing: 4 | type: grid 5 | image-height: 250px 6 | contents: 7 | - introduction.qmd 8 | - news.qmd 9 | - viewer.qmd 10 | - python.qmd 11 | - coupler.qmd 12 | - tutorial.qmd 13 | - roadmap.qmd 14 | - practical.qmd 15 | sort: "index" 16 | --- 17 | 18 | The iMOD Suite offers different modules which support modelling with 19 | MODFLOW 6 (including unstructured meshes): 20 | 21 | - iMOD QGIS plugin: The iMOD QGIS Plugin QGIS plugin allows visualisation of 22 | model input and output with tools for cross-sections, timeseries. It 23 | supports structured NetCDF, UGRID and IPF files. 24 | - iMOD Python: A Python package to create large groundwater 25 | models for MODFLOW 6. It makes it easy to go from your raw data to a fully 26 | defined MODFLOW model, with the aim to make this workflow 27 | reproducible. 28 | - iMOD Coupler: Software that couples MODFLOW 6 to other computational 29 | cores. It currently supports a coupling to MetaSWAP and RIBASIM, and additional 30 | computational cores might be added in the future. 31 | -------------------------------------------------------------------------------- /pixi.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | name = "iMOD-Documentation" 3 | version = "0.1.0" 4 | authors = [ 5 | "Joeri van Engelen ", 6 | "Hofer-Julian ", 7 | ] 8 | channels = ["conda-forge"] 9 | platforms = ["win-64", "linux-64", "osx-64"] 10 | 11 | [tasks] 12 | install-pre-commit = "pre-commit install" 13 | pre-commit = "pre-commit run --all-files" 14 | jupyter = "jupyter lab" 15 | quartodoc-build = { cmd = "quartodoc build && rm objects.json", cwd = "docs" } 16 | quarto-check = { cmd = "quarto check all", depends-on = ["quartodoc-build"] } 17 | quarto-render = { cmd = "export QUARTO_PYTHON=python && quarto render docs --to html --execute", depends-on = [ 18 | "quartodoc-build", 19 | ] } 20 | docs = { cmd = "export QUARTO_PYTHON=python && quarto preview docs", depends-on = [ 21 | "quartodoc-build", 22 | ] } 23 | 24 | [dependencies] 25 | imod = ">=0.17.1" 26 | numpy = "<2" 27 | jupyterlab = "*" 28 | pre-commit = "*" 29 | primod = "*" 30 | quarto = "*" 31 | quartodoc = "*" 32 | rioxarray = ">=0.15.5,<0.16" 33 | 34 | [target.linux-64.dependencies] 35 | # Install Modflow 6 on linux to render examples on CI. 36 | modflow6 = ">=6.4.4" 37 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # Based on: https://tarleb.com/posts/quarto-with-gh-pages/ 2 | name: Publish Website 3 | 4 | # Allow one concurrent deployment 5 | concurrency: 6 | group: "pages" 7 | cancel-in-progress: true 8 | 9 | on: 10 | push: 11 | branches: [main, update/pixi-lock] 12 | tags: ["*"] 13 | pull_request: 14 | 15 | 16 | jobs: 17 | quarto-html: 18 | name: HTML 19 | runs-on: ubuntu-latest 20 | steps: 21 | # Circumvent this problem: https://github.com/actions/checkout/issues/165 22 | - name: Checkout code with LFS cache 23 | uses: nschloe/action-checkout-with-lfs-cache@v1 24 | 25 | - uses: prefix-dev/setup-pixi@v0.8.1 26 | with: 27 | pixi-version: "latest" 28 | 29 | - name: Check Quarto installation and all engines 30 | run: pixi run quarto-check 31 | 32 | - name: Render Quarto Project 33 | run: pixi run quarto-render 34 | 35 | - name: Publish Quarto Project 36 | if: github.ref == 'refs/heads/main' 37 | uses: peaceiris/actions-gh-pages@v4 38 | with: 39 | github_token: ${{ secrets.GITHUB_TOKEN }} 40 | publish_dir: ./docs/_build 41 | env: 42 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # iMOD Suite Documentation 2 | 3 | [The iMOD Suite documentation is generated here.](https://deltares.github.io/iMOD-Documentation) 4 | 5 | The documentation is set up using [Quarto](https://quarto.org/). 6 | [Read here how to get started using Quarto.](https://quarto.org/docs/get-started/) 7 | 8 | If you want to contribute to the iMOD Suite documentation, 9 | please read the [contributing guidelines](CONTRIBUTING.md). 10 | 11 | ## Local Build 12 | 13 | 1. [Install Quarto](https://quarto.org/docs/get-started/) and [pixi](https://pixi.sh) 14 | 2. `git clone https://github.com/Deltares/iMOD-Documentation.git` 15 | 3. `cd iMOD-Documentation` 16 | 4. `pixi run install-pre-commit` 17 | 5. `pixi run docs` 18 | 6. To render PDF (deleting any previously build documentation): 19 | `quarto render docs --profile manual --to pdf` 20 | 21 | ## Project setup 22 | 23 | The Quarto project is set up using different profiles, specified in the 24 | `_quarto-.yml` files. These are: 25 | 26 | - `website`: The website, render as html 27 | - `manual`: The full user manual, render as pdf 28 | - `install`: The installation guide, render as pdf. Can be shipped with the release. 29 | - `tutorial`: The tutorial pages, render as pdf. Can be used during trainings. 30 | -------------------------------------------------------------------------------- /docs/_quarto-manual.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: book 3 | 4 | book: 5 | title: "iMOD Suite User Guide" 6 | chapters: 7 | - index.qmd 8 | - introduction.qmd 9 | - part: viewer.qmd 10 | chapters: 11 | - viewer_install.qmd 12 | - viewer_install_msi.qmd 13 | - qgis_user_manual.qmd 14 | - viewer_known_issues.qmd 15 | - part: python.qmd 16 | chapters: 17 | - python_install.qmd 18 | - python_getting_started.qmd 19 | - part: coupler.qmd 20 | chapters: 21 | - coupler_metamod_config.qmd 22 | - coupler_metamod_technical.qmd 23 | - coupler_metamod_example.ipynb 24 | - coupler_ribamod_config.qmd 25 | - coupler_ribamod_technical.qmd 26 | - coupler_ribamod_preprocessing.qmd 27 | - coupler_ribametamod_config.qmd 28 | - coupler_ribametamod_technical.qmd 29 | - coupler_ribametamod_preprocessing.qmd 30 | - primod_api/index.qmd 31 | - coupler_architecture.qmd 32 | - coupler_release.qmd 33 | - part: tutorial.qmd 34 | chapters: 35 | - tutorial_Abbeyfeale.qmd 36 | - tutorial_wq.qmd 37 | - tutorial_Hondsrug.ipynb 38 | - tutorial_Netherlands_mesh.ipynb 39 | 40 | format: 41 | pdf: 42 | documentclass: scrreprt 43 | top-level-division: chapter 44 | -------------------------------------------------------------------------------- /docs/practical_powershell.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid plug-circle-exclamation >}} Powershell profile error" 3 | description: "Learn how to fix the Powershell profile error which can hamper using Visual Studio Code" 4 | image: https://deow9bq0xqvbj.cloudfront.net/image-logo/1769310/powershell.png 5 | index: 6 6 | --- 7 | 8 | 12 | 13 | Your computer might throw you the following error in Windows PowerShell. 14 | This is annoying, because it prevents the Visual Studio Code terminal 15 | (which uses PowerShell) to use conda. 16 | 17 | ``` console 18 | File C:\Users\Herman\Documents\WindowsPowerShell\profile.ps1 cannot be loaded because the 19 | execution of scripts is disabled on this system. Please see "get-help about_signing" for 20 | more details. 21 | At line:1 char:2 22 | + . <<<< 'C:\Users\Herman\Documents\WindowsPowerShell\profile.ps1' 23 | + CategoryInfo : NotSpecified: (:) [], PSSecurityException 24 | + FullyQualifiedErrorId : RuntimeException 25 | ``` 26 | 27 | In order to solve this, it is recommended to run the following command: 28 | 29 | ``` console 30 | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 31 | ``` 32 | 33 | For more information, see [this 34 | link](https://stackoverflow.com/questions/4647429/powershell-on-windows-7-set-executionpolicy-for-regular-users/4732316). 35 | -------------------------------------------------------------------------------- /docs/tutorial.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid book >}} Tutorials" 3 | listing: 4 | type: grid 5 | contents: 6 | - tutorial_Abbeyfeale.qmd 7 | - tutorial_wq.qmd 8 | - path: tutorial_Hondsrug.ipynb 9 | title: "Modifying an existing Modflow 6 model in iMOD Python" 10 | image: figures/tutorial/hondsrug/groundwater_decline.png 11 | description: "In this tutorial, you will learn how to use iMOD Python for building, running and analysing your MODFLOW 6 model." 12 | - path: tutorial_Netherlands_mesh.ipynb 13 | title: "Unstructured grid model" 14 | image: figures/tutorial/unstructured_NL/head.png 15 | description: "In this example, we'll work with unstructured grid. We'll create a very simple unstructured model of the Netherlands from scratch." 16 | image: figures/logo/iMOD-tutorial.svg 17 | description: 'Learn how to use the iMOD Suite' 18 | index: "6" 19 | --- 20 | 21 | The iMOD-suite consists of several components, and combining these in different 22 | ways allows for different workflows. This "mix-and-match" capability benefits 23 | user flexibility, but it can be a bit daunting at start. 24 | 25 | Therefore, we have compiled a set of tutorials to help you get started and give 26 | you an overview of the Suite's capabilities. 27 | 28 | To download and install the iMOD Suite, [follow the instructions 29 | here](https://deltares.github.io/iMOD-Documentation/viewer_install.html). To 30 | download the tutorial material, you can [follow this 31 | link.](https://deltares.thegood.cloud/s/8JxcJK5jijijEQs) 32 | -------------------------------------------------------------------------------- /docs/viewer_known_issues.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Known Issues 3 | --- 4 | 5 | ## Introduction 6 | 7 | Known issues with the iMOD Viewer are listed over here. 8 | 9 | ## QGIS plugin 10 | 11 | ### Plot axis off 12 | 13 | In the QGIS plugin, a weird offset in the plot axis can occur when you 14 | use a multiple monitor setup. Both the Time series widget as well as the 15 | Cross-section widget can suffer from this. 16 | 17 | ![Notice the y-axis being moved too high and the x-axis being scaled 18 | weirdly.](figures/qgis_issues/plot_axis_offset.png) 19 | 20 | So far we haven\'t been able to fix it in the code, so you can fix this 21 | as a user by either: 22 | 23 | - Moving your QGIS application to the **main window** of your monitor 24 | setup 25 | - In Windows, navigate to *Settings \> Display* then under *Rearrange 26 | your displays* select the monitor you want to view QGIS on, and 27 | finally tick the box *Make this my main display* 28 | 29 | ### IPF reader does not support all IPF files 30 | 31 | Currently the IPF reader is not able to read every IPF file, as iMOD 5 supports 32 | quite a wide range of IPF files. For example, iMOD 5 supports both whitespace 33 | and comma separated files, whereas the QGIS plugin only supports comma 34 | separated IPF files. If the plugin is unable to read your IPF file, it is best 35 | to [read the file with iMOD 36 | Python](https://deltares.github.io/imod-python/api/generated/io/imod.formats.ipf.read.html) 37 | and consequently [write it 38 | again](https://deltares.github.io/imod-python/api/generated/io/imod.formats.ipf.write.htm). 39 | This can help, because the IPF reader in iMOD Python is a lot more flexible, 40 | but its writer always writes to a specific format. We plan to improve the 41 | flexibility of the plugin\'s IPF reader. 42 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | As mentioned in the [README](README.md), this documentation is set up using 4 | [Quarto](https://quarto.org/). 5 | [Read here how to get started using Quarto.](https://quarto.org/docs/get-started/) 6 | 7 | ## Where to push your changes 8 | 9 | Please commit changes to your own branch, push this branch to 10 | the repository, and file a pull request. 11 | 12 | ```batch 13 | git clone https://github.com/Deltares/iMOD-Documentation.git 14 | git checkout -b 15 | 16 | rem Change some files here 17 | 18 | git add 19 | git commit -m "" 20 | 21 | git push origin 22 | ``` 23 | 24 | (Everything inbetween <> should be adapted). 25 | 26 | See also this 27 | [tutorial](https://yangsu.github.io/pull-request-tutorial/) 28 | on how to creating a pull request. 29 | 30 | ## Testing locally 31 | 32 | We encourage contributors to test their commits locally before pushing. 33 | 34 | Follow the instructions in the README.md to build the documentation locally. 35 | 36 | Experience has shown that building the PDFs is usually more likely to fail than 37 | building HTML pages, so please test building the PDF as well before pushing to 38 | the Github repository. 39 | 40 | ## Project setup 41 | 42 | The Quarto project is set up using different profiles, specified in the 43 | `_quarto-.yml` files. These are: 44 | 45 | - `website`: The website, render as html 46 | - `manual`: The full user manual, render as pdf 47 | - `install`: The installation guide, render as pdf. Can be shipped with the release. 48 | - `tutorial`: The tutorial pages, render as pdf. Can be used during trainings. 49 | 50 | To include extra, or remove, pages in a specific document, you can alter the 51 | `_quarto-.yml` page in question. -------------------------------------------------------------------------------- /docs/news_posts/2025-11-20_DSD.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "MODFLOW6 and iMOD user day 2025" 3 | description: "Highlights from Delft 💡" 4 | author: "Frans Roelofsen" 5 | date: "2025-11-20" 6 | image: images/2025-11-20.jpg 7 | --- 8 | 9 | [Copied from LinkedIn](https://www.linkedin.com/posts/fjroelofsen_imod-modflow6-groundwater-activity-7401590833906360320-YcVV/) 10 | 11 | 🌍 The 11th edition of our User Day was a success! Nearly 100 participants from 12 | 11 countries gathered in Delft on 20 November for the Deltares International 13 | Hydrology Software Days. 14 | 15 | We thank our keynote speaker Chris Langevin for his insight in MODFLOW 6 16 | developments. Frans Roelofsen and Joeri van Engelen shared developments and the 17 | roadmap for iMOD Suite. 18 | 19 | 🎉 We are proud to announce that we released iMOD Python 1.0. 20 | 21 | Sessions on the main stage covered topics such as: 22 | - The National Hydrological Model of Denmark (Raphael Schneider & Simon Stisen) 23 | - MODFLOW 6 parallel capabilities (Joost Delsman) and Flexible quadtree sub 24 | modelling (Jarno Verkaik) 25 | - Land Subsidence (Joe Hughes) 26 | - Groundwater Energy (GWE) Model for MAR systems (Arjan van Wachtendonk) 27 | - MODFLOW 6 Solver settings (Huite Bootsma) 28 | 29 | In the afternoon, participants enjoyed short pitches on interesting topics 30 | related to our current developments and beyond, presented by Hendrik Kok, Robert 31 | Leander, Sunny Titus, Davíd Brakenhoff, Jesse Reusen and Mart Clanor. Meanwhile, 32 | others joined a parallel session for the iMOD Python hands-on training. 33 | 34 | 🤝 It was fantastic to see so many professionals engage, collaborate, and help 35 | strengthen the global hydrology community. We’re already looking forward to the 36 | next edition in 2026! 37 | 38 | ![DSD 2025](./images/2025-11-20.jpg) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # file based on github/gitignore 2 | 3 | # Byte-compiled / optimized / DLL files 4 | __pycache__/ 5 | *.py[cod] 6 | *$py.class 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | build/ 14 | develop-eggs/ 15 | dist/ 16 | downloads/ 17 | eggs/ 18 | .eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Translations 41 | *.mo 42 | *.pot 43 | 44 | # Django stuff: 45 | *.log 46 | .static_storage/ 47 | .media/ 48 | local_settings.py 49 | 50 | # Flask stuff: 51 | instance/ 52 | .webassets-cache 53 | 54 | # Scrapy stuff: 55 | .scrapy 56 | 57 | # PyBuilder 58 | target/ 59 | 60 | # Jupyter Notebook 61 | .ipynb_checkpoints 62 | 63 | # pyenv 64 | .python-version 65 | 66 | # celery beat schedule file 67 | celerybeat-schedule 68 | 69 | # SageMath parsed files 70 | *.sage.py 71 | 72 | # Environments 73 | .env 74 | .venv 75 | env/ 76 | venv/ 77 | ENV/ 78 | env.bak/ 79 | venv.bak/ 80 | 81 | # Spyder project settings 82 | .spyderproject 83 | .spyproject 84 | 85 | # VScode 86 | .vscode 87 | 88 | # PyCharm 89 | .idea 90 | 91 | # Rope project settings 92 | .ropeproject 93 | 94 | # mkdocs documentation 95 | /site 96 | 97 | # mypy 98 | .mypy_cache/ 99 | 100 | # iMOD 101 | *.idf 102 | *.ipf 103 | *.run 104 | 105 | # Quarto 106 | /.quarto/ 107 | _build/ 108 | /.luarc.json 109 | .pixi 110 | docs/primod_api 111 | -------------------------------------------------------------------------------- /docs/practical_parallel.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid arrows-turn-right >}} Parallel MODFLOW" 3 | description: "Fix common issues when running iMODFLOW & iMOD-WQ codes with MPI." 4 | image: figures/logo/iMOD.svg 5 | index: 5 6 | --- 7 | 8 | ## SMPD errors 9 | 10 | Especially if you\'re running on Windows, you might get (rather cryptic) 11 | errors in the vein off: 12 | 13 | ``` console 14 | Unable to start the local smpd manager 15 | ``` 16 | 17 | ``` console 18 | Error while connecting to host, No connection could be made because the 19 | target machine actively refused it. 20 | ``` 21 | 22 | A possible cause is that the path to the `smpd.exe`, which is a parallel 23 | process manager, isn\'t the right one for the MPI version you\'re using. 24 | The MODFLOW models are generally running with a version of MPICHI2 25 | (). It\'s not uncommon, however, to have 26 | multiple implementations of MPI installed. 27 | 28 | To check, run: 29 | 30 | ``` console 31 | where smpd 32 | ``` 33 | 34 | Which e.g. returns: 35 | 36 | ``` console 37 | C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\ia32_win\mpirt\smpd.exe c:\Program 38 | Files\MPICH2\bin\smpd.exe 39 | ``` 40 | 41 | Here, there\'s two versions installed: the Intel version, and the MPICH2 42 | version. In this case, the Intel version is on top, and which generally 43 | be called first. Then, when trying to run the model, it\'s expecting the 44 | MPICH2 version instead, and it won\'t run. 45 | 46 | To address this, you can run: 47 | 48 | ``` console 49 | c:\Program Files\MPICH2\bin\smpd.exe -install 50 | ``` 51 | 52 | This should promote it to the top of the list when you run `where` 53 | again. 54 | 55 | Or, just remove it from your PATH if possible. Now, if you run 56 | `mpiexec.exe`, it\'ll use the right version of `smpd.exe`. 57 | -------------------------------------------------------------------------------- /docs/news_posts/2025-03-27_Hamburg.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "iMOD User Day - Germany" 3 | description: "Experiences from Germany 💡" 4 | author: "Frans Roelofsen" 5 | date: "2025-03-27" 6 | image: images/2025-03-27.jpg 7 | --- 8 | 9 | [Copied from LinkedIn](https://www.linkedin.com/posts/deltares_enablingdeltalife-imod-userdays-activity-7313860624826978304-zv7I?utm_source=share&utm_medium=member_desktop&rcm=ACoAABl9x2wBH4filRw5jvtn-vDRT_6YVckd4Lk) 10 | 11 | First iMOD User Day in Germany: A Huge Success! 🎉 12 | 13 | On Thursday, March 27th, the very first iMOD User Day in Germany was organized 14 | by the Geological Survey of Schleswig-Holstein (Klaas Stoepker) and Hamburger 15 | Wasser (Björn Stiller) and hosted in Hamburg. This event brought together 16 | over 40 participants, including iMOD users from governments and consultants 17 | across Schleswig-Holstein, Niedersachsen, Hessen, Hamburg and Bremen. What an 18 | inspiring day it was! 🙌 19 | 20 | The packed agenda included: 21 | ✅ Engaging iMOD cases from different Bundesländer focusing on groundwater modelling for research and policymaking 22 | ✅ A deep dive into iMOD5's advanced functions 23 | ✅ Insights into iMOD Suite's new developments and live demos 24 | ✅ Lessons learned from the Dutch National Groundwater Program 25 | ✅ A look ahead at future iMOD developments and user requirements 26 | 27 | Our Deltares delegation (Timo Kroon, Frans Roelofsen, Peter Vermeulen, Joeri 28 | van Engelen and Bernhard Becker) shared insights, gave support, gave technical 29 | demonstrations, and explained the developments in iMOD5 and iMOD Suite. 30 | 31 | 💡 The take-home message from the event? MODFLOW6 is the foundation of all 32 | models and the 3D viewer of iMOD5 is still widely used by the community. 33 | Agreements for maintenance and support contracts were also established. The 34 | overwhelming feedback from attendees? They voted unanimously for a two-day event 35 | for the next iMOD User Day! 36 | 37 | Thank you to everyone who joined us and made this event so special. For 38 | questions or follow-up, feel free to reach out to us at . 39 | 40 | Looking forward to more great events in the future! 🌱 -------------------------------------------------------------------------------- /docs/practical_messy_data.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid dumpster >}} Handling messy data" 3 | description: "Some tips in dealing with messy data, or -- God forbid -- to avoid producing it yourself." 4 | image: https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/International_tidyman.svg/800px-International_tidyman.svg.png 5 | index: 4 6 | --- 7 | 8 | ## Don\'t use Excel files 9 | 10 | Generally, you want to do cleanup, analysis, etc. in (Python) scripts 11 | \-- reason being that it\'s reproducible: 12 | 13 | - There\'s something that describes step by step how something was 14 | done; 15 | - You can easily redo something when you find a mistake, get a new 16 | version of the data, etc. 17 | 18 | A general source of messy data is Excel \-- after all, many people can 19 | work with Excel, in their own (perfidious) ways. Treat this as your 20 | immutable external data. However, convert the individual spreadsheets to 21 | CSV (or TSV if you like). 22 | 23 | This has multiple benefits: 24 | 25 | - Data becomes more explicitly visible: separated tables, instead of 26 | somewhat hidden spreadsheets; 27 | - Data is much faster to read by most software: Excel files are a 28 | complicated format of zipped XML files. This is useful to store 29 | equations, formatting, etc., but not to just store the data; 30 | - Excel file reader are not required: most software can easily read 31 | plain text like CSV, xsls files (zipped XML) not so much. 32 | 33 | It\'s okay to make this a manual step: open the data with Excel, Save 34 | As, and store in your external data. 35 | 36 | ## Avoid alphabetical or numeric codes 37 | 38 | The following labels are obviously require a lot of additional 39 | information to become meaningful: 40 | 41 | - A, B, C \... 42 | - A1, B1, B2, \... 43 | - 1.1, 1.2, 1.3, 2.1, \... 44 | 45 | Try to avoid using such labels to describe data sources, scenario names, 46 | filenames, etc. Not only do they require (more) description to make 47 | sense, they\'re much harder to memorize compared to (more) verbose 48 | labels: 49 | 50 | - national_dataset, provincial_dataset, local_dataset 51 | - low_recharge, high_recharge 52 | 53 | And harder to memorize means: more mix-ups, more mistakes, time lost. 54 | 55 | Just like in scripting or programming: readability beats ease of 56 | writing. 57 | -------------------------------------------------------------------------------- /docs/_extensions/quarto-ext/fontawesome/fontawesome.lua: -------------------------------------------------------------------------------- 1 | local function ensureLatexDeps() 2 | quarto.doc.use_latex_package("fontawesome5") 3 | end 4 | 5 | local function ensureHtmlDeps() 6 | quarto.doc.add_html_dependency({ 7 | name = 'fontawesome6', 8 | version = '0.1.0', 9 | stylesheets = {'assets/css/all.css', 'assets/css/latex-fontsize.css'} 10 | }) 11 | end 12 | 13 | local function isEmpty(s) 14 | return s == nil or s == '' 15 | end 16 | 17 | local function isValidSize(size) 18 | local validSizes = { 19 | "tiny", 20 | "scriptsize", 21 | "footnotesize", 22 | "small", 23 | "normalsize", 24 | "large", 25 | "Large", 26 | "LARGE", 27 | "huge", 28 | "Huge" 29 | } 30 | for _, v in ipairs(validSizes) do 31 | if v == size then 32 | return size 33 | end 34 | end 35 | return "" 36 | end 37 | 38 | return { 39 | ["fa"] = function(args, kwargs) 40 | 41 | local group = "solid" 42 | local icon = pandoc.utils.stringify(args[1]) 43 | if #args > 1 then 44 | group = icon 45 | icon = pandoc.utils.stringify(args[2]) 46 | end 47 | 48 | local title = pandoc.utils.stringify(kwargs["title"]) 49 | if not isEmpty(title) then 50 | title = " title=\"" .. title .. "\"" 51 | end 52 | 53 | local label = pandoc.utils.stringify(kwargs["label"]) 54 | if isEmpty(label) then 55 | label = " aria-label=\"" .. icon .. "\"" 56 | else 57 | label = " aria-label=\"" .. label .. "\"" 58 | end 59 | 60 | local size = pandoc.utils.stringify(kwargs["size"]) 61 | 62 | -- detect html (excluding epub which won't handle fa) 63 | if quarto.doc.is_format("html:js") then 64 | ensureHtmlDeps() 65 | if not isEmpty(size) then 66 | size = " fa-" .. size 67 | end 68 | return pandoc.RawInline( 69 | 'html', 70 | "" 71 | ) 72 | -- detect pdf / beamer / latex / etc 73 | elseif quarto.doc.is_format("pdf") then 74 | ensureLatexDeps() 75 | if isEmpty(isValidSize(size)) then 76 | return pandoc.RawInline('tex', "\\faIcon{" .. icon .. "}") 77 | else 78 | return pandoc.RawInline('tex', "{\\" .. size .. "\\faIcon{" .. icon .. "}}") 79 | end 80 | else 81 | return pandoc.Null() 82 | end 83 | end 84 | } 85 | -------------------------------------------------------------------------------- /docs/coupler.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid plug >}} iMOD Coupler" 3 | image: figures/logo/iMOD-coupler.svg 4 | description: 'Application for coupling hydrological kernels.' 5 | index: "5" 6 | --- 7 | 8 | ## Coupling to MODFLOW 6 9 | 10 | Deltares have worked together with the USGS to create the [MODFLOW 11 | API](https://www.sciencedirect.com/science/article/pii/S1364815221002991), 12 | based on the [Basic Model Interface 13 | (BMI)](https://bmi-spec.readthedocs.io/en/latest/) with some extensions. The 14 | first version of this functionality became available with the release of MODFLOW 15 | 6.2.0. BMI is a set of standard control and query functions that, when added to 16 | a model code, make that model both easier to learn and easier to couple with 17 | other software elements. Furthermore, the BMI makes it possible to control 18 | MODFLOW 6 execution from scripting languages using bindings for the BMI. 19 | 20 | We have also developed [xmipy](https://github.com/Deltares/xmipy), a 21 | Python package with bindings for the API, which allow you to run and 22 | update (at runtime) a MODFLOW 6 model from Python. This allows coupling 23 | MODFLOW 6 to other computational cores. One of its first applications is 24 | a coupling of MODFLOW 6 to MetaSWAP, as part of the [iMOD 25 | Coupler](https://github.com/Deltares/imod_coupler) package. Other 26 | applications can be found in [this 27 | paper.](https://www.sciencedirect.com/science/article/pii/S1364815221002991) 28 | 29 | ## Links 30 | 31 | The iMOD Coupler can be found on: 32 | 33 | 34 | The latest release together with the binaries can be found on: 35 | 36 | 37 | The `xmipy` library can be found on: 38 | 39 | 40 | 41 | ## Known Issues 42 | 43 | ### iMOD v5.2 release 44 | 45 | The MetaSWAP and Modflow6 libraries provided with iMOD 5.2 for 46 | `imod_coupler` were not statically linked. This could result in the 47 | following error: 48 | 49 | ``` python 50 | FileNotFoundError: '''Could not find module "\path\to\MetaSWAP.dll" (or one 51 | of its dependencies). Try using the full path with constructor syntax.''' 52 | ``` 53 | 54 | This is caused by not having the Intel redistrutable libraries on the 55 | system. [These can be downloaded from this 56 | page](https://software.intel.com/content/www/us/en/develop/articles/intel-compilers-redistributable-libraries-by-version.html). 57 | Make sure to choose the correct platform and the version for \'Parallel 58 | Studio XE 2020\'. 59 | -------------------------------------------------------------------------------- /docs/practical_cookiecutter.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid stroopwafel >}} Consistent folder structures with Cookiecutter" 3 | description: Kickstart your projects with Cookiecutter 4 | image: https://assets.website-files.com/6189495a8f80ad3e20ebcf60/618e86f4d53488d751cb2fc9_logo%20(29).svg 5 | index: 1 6 | --- 7 | 8 | [Cookiecutter](https://www.cookiecutter.io/) enables creating templated folder 9 | structures and files to kickstart your projects. At Deltares, [we created such a 10 | template](https://gitlab.com/deltares/imod/cookiecutter-reproducible-project). 11 | 12 | Using the same project template in an organization has the following 13 | advantages: 14 | 15 | - No time wasted thinking about file orgization 16 | - Consistency between work of colleagues and projects 17 | - Scripts more easily transferrable between projects 18 | - Less time wasted searching for files 19 | 20 | [The iMOD Gitlab group](https://gitlab.com/deltares/imod/) contains multiple 21 | applications of the Deltares Project template. 22 | 23 | ## Install 24 | To install Cookiecutter, run the following command: 25 | 26 | ```shell 27 | pip install cookiecutter 28 | ``` 29 | 30 | ## Kickstart project 31 | Then to create a new project: 32 | 33 | ```shell 34 | cookiecutter gl:deltares/imod/cookiecutter-reproducible-project 35 | ``` 36 | 37 | This will create the following folder and file structure: 38 | 39 | ``` 40 | . 41 | ├── AUTHORS.md 42 | ├── LICENSE 43 | ├── README.md 44 | ├── bin <- Your compiled model code can be stored here (not tracked by git) 45 | ├── config <- Configuration files, e.g., for doxygen or for your model if needed 46 | ├── data 47 | │ ├── 1-external <- Data external to the project. 48 | │ ├── 2-interim <- Intermediate data that has been altered. 49 | │ ├── 3-input <- The processed data sets, ready for modeling. 50 | │ ├── 4-output <- Data dump from the model. 51 | │ └── 5-visualization <- Post-processed data, ready for visualisation. 52 | ├── docs <- Documentation, e.g., doxygen or scientific papers (not tracked by git) 53 | ├── notebooks <- Jupyter notebooks 54 | ├── reports <- For a manuscript source, e.g., LaTeX, Markdown, etc., or any project reports 55 | │   └── figures <- Figures for the manuscript or reports 56 | └── src <- Source code for this project 57 | ├── 0-setup <- Install necessary software, dependencies, pull other git projects, etc. 58 | ├── 1-prepare <- Scripts and programs to process data, from 1-external to 2-interim. 59 | ├── 2-build <- Scripts to create model specific input from 2-interim to 3-input. 60 | ├── 3-model <- Scripts to run model and convert or compress model results, from 3-input to 4-output. 61 | ├── 4-analyze <- Scripts to post-process model results, from 4-output to 5-visualization. 62 | └── 5-visualize <- Scripts for visualisation of your results, from 5-visualization to ./report/figures. 63 | 64 | ``` 65 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/time-series.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 73 | 74 | -------------------------------------------------------------------------------- /docs/coupler_release.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Release process" 3 | --- 4 | 5 | # What is a release 6 | 7 | The [imod_coupler repository](https://github.com/Deltares/imod_coupler) contains multiple components, at the time of this writing the pre-processing package `primod` and `imod_coupler` itself. 8 | The components are currently only guaranteed to work together if they are built at the same time. 9 | Therefore we release iMOD Coupler as a collection of all the components at once. 10 | For maximum interoperability it is suggested to only release all components together, and not individually. 11 | 12 | For these releases we use [Calender Versioning](https://calver.org/), which makes it clear in which month the release was made. 13 | 14 | # Release steps 15 | 16 | This section provides a guide for developers to follow when preparing a new release. 17 | 18 | ## Pre-release checks 19 | 20 | Before starting the release process, ensure that all tests are passing and that all features intended for the release are complete and merged into the main branch. 21 | 22 | ## Update version numbers of the components as needed 23 | 24 | Determine the new version number like `2023.1.0`, filling in the current year, a bumped `MINOR` number for normal releases and a bumped `MICRO` number for non-breaking, hotfix releases. 25 | This follows `YYYY.MINOR.MICRO` from [calver](https://calver.org/). 26 | 27 | The components are only guaranteed to work together if they are built at the same time. 28 | To clearly communicate this, component versions need to have synchronized version numbers. 29 | This means that both version numbers should be updated even if only one component has been changed. 30 | 31 | Update the version numbers in the repository to the new version number. 32 | Update the following two locations: 33 | 34 | - `imod_coupler/__init__.py` 35 | - `pre-processing/primod/__init__.py` 36 | 37 | Now submit a pull request which updates the version numbers of the components as needed. 38 | 39 | - Create a new branch and switch to it, for example: `git switch --create new-release`. 40 | - Create a new commit with the updated version number 41 | - Push to remote 42 | - Create a Pull Request 43 | - Merge the Pull Request into main 44 | 45 | ## Create a new release 46 | 47 | Create a new tag like `v2023.1.0` by prepending `v` to the calver version number. 48 | 49 | This can be done by executing: 50 | ```bash 51 | git tag 52 | ``` 53 | Then push the tags: 54 | ```bash 55 | git push --tags 56 | ``` 57 | 58 | This will trigger a workflow on TeamCity that will publish a new release on GitHub as soon as it is finished. 59 | You can follow the progress [here](https://dpcbuild.deltares.nl/buildConfiguration/iMOD6_Coupler_MakeGitHubRelease). 60 | It also auto-generates a changelog. 61 | You'll probably want to curate that by rearranging the most important changes for users to the top in the form of [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). 62 | The possibly long list of generated release notes can put below an "All changes" collapsed item as such: 63 | 64 | ``` 65 |
66 | 67 | All changes 68 | 69 | 70 | # Put Github flavored markdown here 71 | 72 |
73 | 74 | ``` 75 | 76 | ## Release primod on PyPI 77 | 78 | To be able to do `pip install primod` , `primod` needs to be released on the Python Package Index. 79 | First, make sure that you have a [PyPI](https://pypi.org/) account. 80 | Then create a new API token and store it in a secure location. 81 | 82 | Run the following to start the process: 83 | ``` 84 | pixi run publish-primod 85 | ``` 86 | ## Announce release 87 | 88 | Announce the release in appropriate channels. 89 | -------------------------------------------------------------------------------- /docs/news_posts/2025-11-11_imod_python_stable_release.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "iMOD Python 1.0.0" 3 | description: "iMOD Python has reached its first stable release 🎂" 4 | author: "Joeri van Engelen" 5 | date: "2025-11-11" 6 | image: ../figures/logo/iMOD-python.svg 7 | --- 8 | 9 | After 7 release candidates in 2025, we are happy to announce the first stable 10 | release of iMOD Python 1.0.0 🎉. The Deltares definition of a stable release is 11 | _"Fully validated functionality with proven and reliable functionality for 12 | specific use cases and/or regions."_ . The specific use cases in question here 13 | are the dutch national hydologic model (LHM) and a large solute transport model 14 | made for Flanders (Belgium). For iMOD Python, this means the 15 | following specifically: 16 | 17 | - The API will be kept stable, and users will be warned in advance if we are 18 | going to break something. 19 | - The software is tried and tested on 2 large, complex example models, for which 20 | we had to fix some additional bugs which we missed in small tests. 21 | - Better stability when it comes to handling large models. We have now run weekly 22 | tests with large models. With this we can better avoid problems like 23 | performance degradation or exploding memory when working with large models. 24 | - You can get a support contract with Deltares by contacting 25 | 26 | 27 | The main goal of the iMOD Python 1.0.0 release was to be able to work with the 28 | dutch national hydrologic model (LHM). If you are not an LHM user, this might 29 | not sound so exciting, but you also benefit from this. The development team has 30 | worked a lot on reimplementing key features of iMOD5 and have backwards 31 | compatibility with existing iMOD5 models. To get a full overview of the current 32 | backwards compatibility with iMOD5, see [this overview](https://deltares.github.io/imod-python/faq/imod5_backwards_compatibility.html). The second goal of this 33 | release was to support recently added MODFLOW 6 features that can be used to 34 | achieve full feature parity with iMOD-WQ. These are parallel computation and 35 | adaptive time stepping based on the advection package. 36 | 37 | Important highlights of features we worked on for the 1.0 release are: 38 | 39 | - Performant regridding of entire MODFLOW 6 simulations, including regridding 40 | from structured to unstructured grids. [See this user guide on all things 41 | considering regridding.](https://deltares.github.io/imod-python/user-guide/08-regridding.html) 42 | - Clip, mask, and split entire large MODFLOW 6 simulations. The latter is 43 | required to conduct parallel computations. [See this example on how to split 44 | a regional 45 | model.](https://deltares.github.io/imod-python/examples/mf6/hondsrug_partitioning.html) 46 | - [Check and clean common mistakes in model 47 | input.](https://deltares.github.io/imod-python/user-guide/10-cleanup.html) 48 | - [Allocate topsystem packages to model 49 | layers.](https://deltares.github.io/imod-python/user-guide/09-topsystem.html) 50 | - Import existing iMOD5 database and convert them to MODFLOW 6 simulations. 51 | [See this example of importing an iMOD5 model and regridding it to an 52 | unstructured grid refined around the rivers](https://deltares.github.io/imod-python/user-guide/12-imod5-model-to-modflow6.html) 53 | - Import MetaSWAP models from iMOD5 database. MetaSWAP is a model kernel to 54 | solve problems in the unsaturated zone, mostly used in the Netherlands. 55 | - Write, edit and regrid MetaSWAP models on structured grids. 56 | - Support for the AdaptiveTimeStepping (ATS) package and the ``ats_percel`` 57 | option in the Advection (ADV) package. This allows to restrict timesteps 58 | based on the Courant number in solute transport models, like was done in 59 | SEAWAT and iMOD-WQ. 60 | -------------------------------------------------------------------------------- /docs/_quarto-website.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: website 3 | 4 | website: 5 | title: "iMOD Suite" 6 | page-navigation: true 7 | favicon: _static/iMOD-doc-logo.svg 8 | open-graph: true 9 | navbar: 10 | background: "#080c80" 11 | logo: _static/iMOD-doc-logo.svg 12 | left: 13 | - text: Introduction 14 | href: introduction.qmd 15 | - text: Components 16 | menu: 17 | - text: iMOD QGIS plugin 🧭 18 | href: viewer.qmd 19 | - text: iMOD Python 🐍 20 | href: python.qmd 21 | - text: iMOD Coupler 🔌 22 | href: coupler.qmd 23 | - text: "News" 24 | href: news.qmd 25 | - text: "Tutorials" 26 | href: tutorial.qmd 27 | - text: "Roadmap" 28 | href: roadmap.qmd 29 | - text: "About" 30 | href: about.qmd 31 | - text: "Practical tips" 32 | href: practical.qmd 33 | right: 34 | - icon: github 35 | href: https://github.com/Deltares/iMOD-Documentation 36 | aria-label: GitHub 37 | 38 | announcement: 39 | icon: megaphone 40 | dismissible: true 41 | # news_posts/2025-11-11_imod_python_stable_release.qmd does not work here 42 | # for all pages, as qmd files within news_posts do need a folder upward and 43 | # globpath with ** does not work. So we hardcode the link here. 44 | content: "🎂 [iMOD Python 1.0.0 is released.](https://deltares.github.io/iMOD-Documentation/news_posts/2025-11-11_imod_python_stable_release.html) 🎂" 45 | type: primary 46 | position: below-navbar 47 | 48 | sidebar: 49 | - id: viewer 50 | title: "iMOD QGIS Plugin" 51 | style: "floating" 52 | collapse-level: 2 53 | align: left 54 | contents: 55 | - href: viewer.qmd 56 | - href: viewer_install.qmd 57 | - href: viewer_install_msi.qmd 58 | - href: qgis_user_manual.qmd 59 | - href: viewer_known_issues.qmd 60 | - href: viewer_instruction_videos.qmd 61 | 62 | - id: python 63 | title: "iMOD Python" 64 | align: left 65 | contents: 66 | - href: python.qmd 67 | - href: python_install.qmd 68 | - href: python_getting_started.qmd 69 | 70 | - id: coupler 71 | title: "iMOD Coupler" 72 | align: left 73 | contents: 74 | - href: coupler.qmd 75 | - section: "MetaSWAP - MODFLOW 6" 76 | contents: 77 | - href: coupler_metamod_config.qmd 78 | - href: coupler_metamod_technical.qmd 79 | - href: coupler_metamod_example.ipynb 80 | - section: "Ribasim - MODFLOW 6" 81 | contents: 82 | - href: coupler_ribamod_config.qmd 83 | - href: coupler_ribamod_technical.qmd 84 | - href: coupler_ribamod_preprocessing.qmd 85 | - section: "Ribasim - MetaSWAP - MODFLOW 6" 86 | contents: 87 | - href: coupler_ribametamod_config.qmd 88 | - href: coupler_ribametamod_technical.qmd 89 | - href: coupler_ribametamod_preprocessing.qmd 90 | - href: primod_api/index.qmd 91 | - href: coupler_architecture.qmd 92 | - href: coupler_release.qmd 93 | 94 | - id: tutorial 95 | title: "Tutorials" 96 | align: left 97 | contents: 98 | - href: tutorial.qmd 99 | - href: tutorial_Abbeyfeale.qmd 100 | - href: tutorial_wq.qmd 101 | - href: tutorial_Hondsrug.ipynb 102 | - href: tutorial_Netherlands_mesh.ipynb 103 | 104 | - id: further_links 105 | title: "Further links" 106 | align: left 107 | contents: 108 | - href: further_links.qmd 109 | 110 | format: 111 | html: 112 | theme: cosmo 113 | css: _static/styles.css 114 | toc: true 115 | code-fold: false 116 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/cross-section.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 58 | 61 | 62 | 68 | 73 | 74 | 79 | 84 | 89 | 94 | 95 | -------------------------------------------------------------------------------- /docs/viewer_install.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Install iMOD QGIS Plugin 3 | number-sections: true 4 | --- 5 | 6 | ## Description 7 | The different ways to install the QGIS plugin are described in 8 | @sec-plugin_repository and @sec-manual_install. Each of 9 | these, however, require the user to install QGIS. 10 | 11 | ## Installing QGIS {#sec-install_QGIS} 12 | 13 | You can download the standalone QGIS setup [on the QGIS website] 14 | (https://qgis.org/en/site/forusers/download.html). We recommend downloading a 15 | QGIS version >= 3.28 here. After downloading the QGIS setup, run it. 16 | 17 | This installs a user installation of QGIS, which is sufficient in most cases. 18 | For a system wide installation, see @sec-system-wide. 19 | 20 | ## Installing the iMOD QGIS plugin 21 | 22 | The different options to install the iMOD QGIS plugin are listed below.. 23 | 24 | ### (Option 1) Installing from the QGIS plugin repository (Recommended) {#sec-plugin_repository} 25 | 26 | In QGIS, navigate to *Plugins > Manage and Install Plugins > All*. In the 27 | search bar, type: "*iMOD*". Select the iMOD plugin, and click *"Install"*. 28 | 29 | ### (Option 2) Manually download and copy the iMOD QGIS plugin {#sec-manual_install} 30 | 31 | Download the iMOD QGIS plugin code from the [Github 32 | page](https://github.com/Deltares/imod-qgis] 33 | 34 | Unpack the zip files, and copy the ``imodqgis`` folder to your QGIS plugin 35 | directory. This is probably located in your Appdata folder. In windows it is 36 | something such as: 37 | ``c:\Users\%USER%\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins`` 38 | 39 | If you cannot find the folder, follow [these instructions] 40 | (https://gis.stackexchange.com/a/274312>). 41 | 42 | In QGIS, make sure under *Plugins > Manage and Install Plugins > Installed* 43 | that the checkbox *iMOD* is checked. 44 | 45 | ## Advanced: Installing the QGIS plugin system-wide {#sec-system-wide} 46 | 47 | There are cases where a system-wide QGIS installation is required, for example 48 | on computational servers, where multiple users need to use the software. 49 | Requiring each user to install the plugin themselves can be a burden. 50 | 51 | This requires the following steps: 52 | 53 | 1. Installing the OSGeo4W QGIS installation 54 | 2. Putting the plugin files in the right folder. 55 | 56 | ### Installing the OSGeo4W QGIS installation 57 | 58 | - Download the OSGeo4W installer from the 59 | `QGIS website `_ 60 | 61 | - Right-click ``osgeo4w-setup.exe`` and click *Run as administrator* 62 | 63 | - At the starting screen, choose *Advanced Install* 64 | 65 | - In the *Choose Installation Type* screen, 66 | choose *Install from Internet* if you have access to the internet, 67 | this will download the files to a folder called something like: 68 | ``%APPDATA%\Local\Temp\http%3a%2f%2fdownload.osgeo.org%2fosgeo4w%2fv2%2f\`` 69 | 70 | You can use this folder to *Install from Local Directory* later (for example 71 | on a restricted server) 72 | 73 | - In *Choose Installation Directory* check *All Users* 74 | 75 | - In "Select Local Package Directory", you can leave the default options 76 | 77 | - If you previously checked "Install from Internet": 78 | - in the *Select Connection Type*, choose *Direct Connection* 79 | - in *Choose Download Sites*, choose http://download.osgeo.org 80 | 81 | - In the *Select Packages* screen, make sure the following components are installed: 82 | - under *Desktop*, *qgis: QGIS Desktop*. 83 | - under *Libs*, *python3-pandas* 84 | 85 | A component will be installed if there is a version number in the "New" column 86 | (If *Skip* change this by clicking the cell with *Skip* in it). 87 | 88 | - After downloading an installing, check *Finish* 89 | 90 | ::: {.callout-tip} 91 | Maximize the screen to see the package names 92 | ::: 93 | 94 | ![The *Select packages* screen enlarged. If you click *Skip*, 95 | a version number should appear in the column *New*.](figures/qgis/osgeo4w-select-packages.png) 96 | 97 | ### Putting the plugin files in the right folder 98 | 99 | Download the iMOD QGIS plugin code from the [Github 100 | page](https://github.com/Deltares/imod-qgis) 101 | 102 | Unpack the zip files, and copy the ``imodqgis`` folder to your QGIS plugin 103 | directory. This is probably located in your Appdata folder. In windows it is 104 | something such as: ``c:\OSGeo4W\apps\qgis\python\plugins\imodqgis`` 105 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/3d-viewer.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 42 | 43 | 65 | 68 | 74 | 79 | 80 | 84 | 88 | 92 | 96 | 100 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /docs/coupler_architecture.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Architecture" 3 | --- 4 | 5 | The purpose of iMOD Coupler is to couple hydrological kernels. iMOD Coupler 6 | itself is written in Python, but the kernels are written in either Julia or 7 | Fortran. The most common way of interacting with libraries written in different 8 | languages is by letting them expose a C interface and compiling them as shared 9 | libraries. 10 | 11 | While not technically required, these libraries are expected to follow a 12 | variation of the Basic Model Interface or 13 | [BMI](https://bmi-spec.readthedocs.io/en/latest/). This describes a standardized 14 | way of controlling a modelling framework. It also allows to utilize the 15 | [`xmipy`](https://github.com/Deltares/xmipy) package, which wraps the C API into 16 | a Python API. On top of that, it is often convenient to add functions specific 17 | to the kernels. This is why Ribasim and MODFLOW 6 get a 18 | [`XmiWrapper`](https://deltares.github.io/xmipy/xmipy.html#XmiWrapper) subclass, 19 | that is called `ribasim_api` and `modflow_api` respectively. 20 | 21 | ```{mermaid} 22 | flowchart BT 23 | libribasim.dll--> xmipy_r[xmipy] 24 | libmf6.dll --> xmipy_m[xmipy] 25 | xmipy_r --> ribasim_api 26 | xmipy_m --> modflow_api 27 | ribasim_api --> imodc[iMOD Coupler] 28 | modflow_api --> imodc 29 | ``` 30 | 31 | 32 | Most input data needs to be pre-processed in order to be suitable for the hydrological kernels. 33 | In the case of Ribasim this is handled by Ribasim Python, in the case of MODFLOW 6 it is handled by iMOD Python. 34 | However, the input data for the iMOD Coupler needs to be pre-processed as well. 35 | Coupling tables describe how the coupling takes place. In order to generate them, input data from all kernels are needed. 36 | The `primod` package wraps the functionality of the kernel pre-processors and generates the coupling data for iMOD Coupler. 37 | 38 | ```{mermaid} 39 | flowchart BT 40 | ribasim_python[Ribasim Python] --> primod 41 | imod-python[iMOD Python] --> primod 42 | primod --> ribasim[Ribasim] 43 | primod --> |couple tables|imodc 44 | primod --> MetaSWAP 45 | primod --> modflow6[MODFLOW 6] 46 | ribasim --> imodc["iMOD Coupler"] 47 | MetaSWAP --> imodc["iMOD Coupler"] 48 | modflow6 --> imodc 49 | ``` 50 | 51 | ## Drivers 52 | 53 | Coupling Ribasim and MODFLOW 6 is only one of multiple coupling configurations. 54 | Each configuration is handled by an iMOD Coupler driver. A driver is a Python 55 | module under `imod_coupler/drivers`. At the minimum, it includes a subclass of 56 | the abstract class `Driver` as well as its own config under the 57 | `[[driver.coupling]]` namespace. A driver itself also includes a BMI interface, 58 | executing it then looks like this: 59 | 60 | ```python 61 | self.initialize() 62 | 63 | while self.get_current_time() < self.get_end_time(): 64 | self.update() 65 | 66 | self.finalize() 67 | ``` 68 | ### Logging of exchanged values 69 | 70 | An integral task of an iMOD Coupler driver is to support the exchange of values between hydrological kernels. 71 | Values exchanged by the coupler for a specific variable can optionally be written to file during the simulation for inspection. 72 | These values are written as timeseries to separate files per variable. 73 | In the initialization stage of the simulation a dictionary-like structure (ExchangeCollector class) is created which holds 74 | a collection of labelled ExchangeLogger instances. 75 | The initialization of an ExchangeLogger creates a netcdf file with dimensions `time` and `id`, a variable `time` with dimension (`time`) 76 | and a variable `xchg` with dimensions (`time`, `id`). The time dimension is the unlimited dimension. 77 | 78 | ## Continuous Integration 79 | 80 | We took great care to set up a pipeline to ensure that iMOD Coupler continues to 81 | work with the newest version of its dependencies. This is especially important 82 | since we access internal state of the kernels when coupling them. It can happen 83 | very easily that kernel developers change something that break assumptions of 84 | the coupler. 85 | 86 | At the time of this writing, there are three kernels handled by iMOD Coupler: 87 | 88 | - Ribasim, 89 | - MODFLOW 6, and 90 | - MetaSWAP. 91 | 92 | On [TeamCity](https://dpcbuild.deltares.nl/project/iMOD6_Coupler), the three 93 | kernels will be compiled to shared libraries and iMOD Coupler will be compiled 94 | to an executable. These binaries are then collected in a zip file, called the 95 | iMOD Collector. The iMOD Collector is checked on our testbench and can be 96 | downloaded by users. 97 | 98 | ```{mermaid} 99 | flowchart BT 100 | ribasim[Ribasim] --> imod_collector[iMOD Collector] 101 | modflow[MODFLOW 6] --> imod_collector 102 | metaswap[MetaSWAP] --> imod_collector 103 | imodc[iMOD Coupler] --> imod_collector 104 | imod_collector --> testbench[Testbench Coupler] 105 | ``` -------------------------------------------------------------------------------- /docs/practical_look_like_a_pro.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid fire-flame-curved >}} How to look like a pro" 3 | description: "Some general tips and tricks to make your editors and terminals look cool." 4 | image: https://raw.githubusercontent.com/ryanoasis/nerd-fonts/38f76ec69fa3546784dd8beab3caf9c2ede9b92d/images/nerd-fonts-logo.svg 5 | index: 7 6 | --- 7 | 8 | These are some general tips and tricks to make your editors and 9 | terminals look cool. They are not going to greatly improve your 10 | workflow, but they will make things look cool and thus make your working 11 | more enjoyful. Please do this in your own time. 12 | 13 | ## Powershell themes 14 | 15 | There are themes available for Powershell which you can use to make your 16 | boring terminal look cooler. These will also be used by Windows Terminal 17 | and VSCode after some extra configuration. 18 | 19 | ![Figure 1: Look at all the colors on top! It contains the current git 20 | branch, as well as which Spotify song I\'m currently listening to. 21 | Remember to only listen to cool music if you want to look 22 | cool!](figures/practical/look_cool/cool_terminal.jpg) 23 | 24 | ### Step 1: Installing new fonts 25 | 26 | All these cool extra icons like the play button and the folder symbol in 27 | Figure 1 require extra icons not contained in your standard monotype 28 | font. To unlock them, you have to install [\"Nerd 29 | fonts\".](https://github.com/ryanoasis/nerd-fonts) 30 | 31 | ![Figure 2: It is cool to be a nerd these 32 | days.](https://raw.githubusercontent.com/ryanoasis/nerd-fonts/38f76ec69fa3546784dd8beab3caf9c2ede9b92d/images/nerd-fonts-logo.svg) 33 | 34 | In the following examples, I will use CascadiaCode NerdFont, which you 35 | can download zipped [via this 36 | link](https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/CascadiaCode.zip) 37 | 38 | Unzip its\' contents, and install [Caskaydia Cove Nerd Font Complete 39 | Mono Windows Compatible.ttf]{.title-ref}, by right-clicking the file and 40 | install for all users. You know it has to be good with such a long 41 | filename! 42 | 43 | ### Step 2: Configure software to use Nerd Font 44 | 45 | We first have to configure your editor/terminal to use the Nerd Font, 46 | otherwise all the icons will be shown as ￿, which spoils the fun. 47 | 48 | In Windows Terminal, press `CTRL+,` , which opens the Settings window. 49 | Next, navigate to [Windows Powershell \> Appearance]{.title-ref}. And 50 | under [Fonts]{.title-ref}, select [CaskaydiaCove NF]{.title-ref}, if you 51 | installed the font I suggested. 52 | 53 | ![image](figures/practical/look_cool/WT_NerdFont.png) 54 | 55 | In VSCode, also press `CTRL+,` to open the Settings window. Navigate to 56 | [Text Editor \> Font]{.title-ref} and under [Font Family]{.title-ref} 57 | type `CaskaydiaCove NF` in front. 58 | 59 | ![image](figures/practical/look_cool/VSCode_NerdFont.png) 60 | 61 | In Powershell, you can right click window bar and navigate to 62 | [Properties \> Font]{.title-ref} and under [Font]{.title-ref}, you can 63 | select [CaskaydiaCove NF]{.title-ref}. 64 | 65 | ### Step 3: Install Git for Windows 66 | 67 | If you want your themes to integrate with Git, you can install [Git for 68 | Windows](https://git-scm.com/downloads) . 69 | 70 | I have not tested if the themes worked without Git for Windows, so I 71 | recommend installing it. 72 | 73 | [I also wrote a guide on how to use Git by the way.](practical_git_dvc.qmd) 74 | 75 | ### Step 4: Install themes for Powershell 76 | 77 | Now open up a Powershell instance as administrator, and run the 78 | following lines of code: 79 | 80 | ``` 81 | Install-Module posh-git -Scope CurrentUser 82 | Install-Module oh-my-posh -Scope CurrentUser -RequiredVersion 2.0.412 83 | Update-Module -Name oh-my-posh -AllowPrerelease -Scope CurrentUser 84 | Install-Module -Name PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck 85 | ``` 86 | 87 | This will probably throw you some warnings if you really want to install 88 | this stuff, but let\'s [trust the good people at 89 | Microsoft](https://docs.microsoft.com/en-us/windows/terminal/tutorials/powerline-setup). 90 | 91 | ### Step 5: Configure Powershell 92 | 93 | Because we want Powershell to automatically use new cool themes, we will 94 | configure our Powershell profile. Call `notepad $PROFILE` and paste the 95 | following lines of text: 96 | 97 | ``` 98 | Import-Module posh-git 99 | Import-Module oh-my-posh 100 | Set-PoshPrompt -Theme cinnamon 101 | ``` 102 | 103 | If everything worked, if you open up a new Powershell terminal, it will 104 | look like Figure 1. If you see any squares as `￿`, you have to check if 105 | Step 2 went OK. 106 | 107 | ### Step 6: Being a unique individual 108 | 109 | A cool person decides what is cool him/herself of course. To get a list 110 | of all available themes, you can call `Get-PoshThemes`. 111 | 112 | ![Wowzers!](figures/practical/look_cool/Available_Themes.png) 113 | 114 | This provide a nice demo reel of available themes. 115 | 116 | If you find something you like, you can set it as your default theme by 117 | repeating Step 5, and changing the last line, e.g.: 118 | `Set-PoshPrompt -Theme powerline`. 119 | 120 | ### Bonus: Get a headache with retro effects 121 | 122 | Windows Terminal has retro effects available. Again press `CTRL+,`, go 123 | to [Windows Powershell \> Appearance]{.title-ref}. And click [Retro 124 | terminal effects]{.title-ref}. 125 | 126 | This will make your terminal more headache inducing: 127 | 128 | ![Argh!](figures/practical/look_cool/Retro_Headache.png) 129 | -------------------------------------------------------------------------------- /docs/_static/iMOD-doc-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 39 | 41 | 42 | 44 | image/svg+xml 45 | 47 | 48 | 49 | 50 | 51 | 55 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/ipf-reader.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 58 | 64 | 69 | 70 | 83 | 96 | 109 | 122 | 135 | 136 | -------------------------------------------------------------------------------- /docs/about.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | format: 4 | html: 5 | mermaid: 6 | theme: neutral 7 | bibliography: references/scientific_papers.bib 8 | nocite: | 9 | @* 10 | --- 11 | 12 | ## Get involved 13 | 14 | ### Questions and help 15 | 16 | If you have questions on using iMOD Suite or want to report a bug, you can send 17 | an email to `imod.support@deltares.nl`. 18 | 19 | ### Bugs, source code 20 | 21 | Below is the list of repositories that contain the source code of the 22 | individual components. You can raise issues, or suggest changes, here. 23 | 24 | - [iMOD Documentation 25 | Github](https://github.com/Deltares/iMOD-Documentation) 26 | - [iMOD QGIS plugin Github](https://github.com/Deltares/imod-qgis) 27 | - [iMOD Python Github](https://github.com/Deltares/imod-python) 28 | 29 | 30 | ## History 31 | 32 | Developments on iMOD started in 2006, with the aim to make groundwater 33 | modelling with MODFLOW easier. iMOD developed into a full fletched GUI, which 34 | could be used to build and analyse groundwater models from start to finish. 35 | Focus of the software always has been on large groundwater models, for which 36 | the software was so successful that most regional groundwater models owned by 37 | water boards in Netherlands, plus the Dutch National model (LHM), run on iMOD. 38 | In 2014, in Deltares' move to make their software open source, the Fortran code 39 | of iMOD was shared and in 2015 the compiled executables became freely 40 | available. In many international projects (for example in India, New Orleans, 41 | Colombia, Germany, and Switzerland) this was one of the reasons to adopt iMOD 42 | as the modelling software. iMOD's capabilities of simulating large groundwater 43 | models were pushed further in 2017 when iMOD and its custom computational 44 | kernels iMODFLOW and iMOD-WQ, could be run in parallel. Developments on the GUI 45 | continued up to 2020, when it became apparent that the approach up to that 46 | point had a few drawbacks: 47 | 48 | - With the release of Modflow 6, computations on unstructured grids were 49 | possible. This created a demand for supporting all types of unstructured grids. 50 | iMOD, however, could not support these grids (except multi-model structured 51 | subgrids). 52 | 53 | - It was difficult to connect iMOD to the ever changing software and data 54 | science ecosystem, because of the use of Fortran and iMOD's custom data formats. 55 | For example, Python has a larger ecosystem, allowing users to easily 56 | incorporate all kinds of packages into their workflows. 57 | 58 | Therefore, in 2021, the **iMOD Suite** was released. This suite consists of a 59 | Python package, a QGIS plugin, and a 3D viewer. (The latter which was 60 | discontinued in 2025, as the team's resources were too scarce to maintain it.) 61 | It therefore supports reproducible workflows for unstructured groundwater models 62 | and relies more on standard filetypes such as NetCDF, UGRID, and shapefiles. 63 | 64 | The classic iMOD GUI and its batch functionality is consolidated under the name 65 | **iMOD 5**, and will be maintained for the coming years. During this transition 66 | period it is easy to use iMOD 5 in combination with iMOD Suite. New 67 | developments will land in iMOD Suite. 68 | 69 | 74 | 75 | ```{mermaid} 76 | flowchart TB 77 | subgraph 2006 78 | A{iMOD 1.0} 79 | X{{Start development}} 80 | end 81 | A --> B{iMOD 2.0} 82 | subgraph 2014 83 | B 84 | Y{{Fortran code
available as open source}} 85 | end 86 | B --> C{iMOD 3.0} 87 | subgraph 2015 88 | C 89 | Z{{Executables freely
available}} 90 | end 91 | C --> D{iMOD 4.0} 92 | subgraph 2017 93 | D 94 | XX{{parallel Solver Pks}} 95 | end 96 | D --> E{iMOD 5.0} 97 | subgraph 2019 98 | E 99 | XY{{iMOD Water Quality
and MODFLOW6}} 100 | end 101 | E --> F{iMOD 5.2} 102 | subgraph 2020 103 | F 104 | XZ{{BMI coupling
Modflow6-MetaSWAP}} 105 | end 106 | F --> G{iMOD Suite} 107 | F --> H{iMOD 5.3} 108 | subgraph 2021 109 | G 110 | YX{{Tooling in Python, QGIS
C++. Unstructured grids}} 111 | end 112 | subgraph 2021 113 | H 114 | end 115 | H --> I{iMOD 5.5} 116 | G --> J{iMOD Suite} 117 | subgraph 2023 118 | I 119 | end 120 | subgraph 2023 121 | J 122 | YY{{Model input validation,
CPT plotting in QGIS,
Backwards
compatibility iMOD 5}} 123 | end 124 | I --> K{iMOD 5.6} 125 | J --> L{iMOD Suite} 126 | subgraph 2024 127 | K 128 | end 129 | subgraph 2024 130 | L 131 | YZ{{iMOD Python 1.0 Beta version released.
iMOD Coupler supports coupling to Ribasim}} 132 | end 133 | L --> M{iMOD Suite} 134 | subgraph 2025 135 | M 136 | ZX{{iMOD Python 1.0.0 stable release.}} 137 | end 138 | 139 | ``` 140 | 141 | ## Trainings 142 | 143 | ### Delft Software Days 144 | 145 | Twice a year, there is an iMOD day, where users can hear the latest iMOD 146 | developments and get training in the latest features. These are a great 147 | opportunity to get to know fellow users and the developers. Trainings will be 148 | announced on the [Delft Software Days 149 | website](https://softwaredays.deltares.nl/) and via the iMOD mailing list, so 150 | keep an eye out on those. 151 | 152 | ### Past trainings iMOD Suite 153 | 154 | 2025-11: Deltares Campus, Delft 155 | 156 | ![](figures/about/training-delft-2025.jpg) 157 | 158 | 2025-03: Hamburg Wasser, Hamburg 159 | 160 | ![](news_posts/images/2025-03-27.jpg) 161 | 162 | 2024-11: Deltares Campus, Delft 163 | 164 | ![](figures/about/training-delft-2024.jpg) 165 | 166 | 2023-11: Deltares Campus, Delft 167 | 168 | ![](figures/about/training-delft-2023.jpg) 169 | 170 | 2023-02: National University of Singapore, Singapore 171 | 172 | ![](figures/about/training-singapore.jpg) 173 | 174 | 2022-11: Deltares Campus, Delft 175 | 176 | ![](figures/about/training-delft.jpg) 177 | 178 | 2022-06: Trinity college, Dublin 179 | 180 | ![](figures/about/training-ireland.jfif) 181 | 182 | 183 | ## Publications using iMOD Suite 184 | 185 | ::: {#refs} 186 | ::: -------------------------------------------------------------------------------- /docs/coupler_ribamod_technical.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Technical Reference 3 | --- 4 | 5 | This document describes how Ribasim and MODFLOW6 are coupled. It is intended 6 | for groundwater modellers, who need to know which variables are exchanged 7 | between computational kernels and at which moment. For details of the inner 8 | workings of the code, we refer to the docstrings in the code. 9 | 10 | The following sequence diagram show the current sequential coupling scheme for 11 | a single MODFLOW 6 stress period. 12 | 13 | ```{mermaid} 14 | sequenceDiagram 15 | autonumber 16 | Ribasim ->> MODFLOW6: exchange stage [T-1] 17 | Note over MODFLOW6: solve T 18 | MODFLOW6 ->> Ribasim: RIV flux [T-1] 19 | Note over Ribasim: solve T 20 | ``` 21 | 22 | # Requirements 23 | 24 | * Ribasim only couples to the River (RIV) and Drainage (DRN) packages of 25 | MODFLOW6. 26 | * One or more River and Drainage boundaries can be connected with one Ribasim 27 | basin. 28 | * The MODFLOW6 River and Drainage entity is the smallest entity: coupling 29 | multiple Ribasim basins to a single MODFLOW6 boundary is not supported. 30 | * The active coupling, in which MODFLOW6 boundary levels are changed, always 31 | requires a "subgrid" table in Ribasim. 32 | 33 | # Data exchanges 34 | 35 | ## MODFLOW6 to Ribasim 36 | 37 | ### Flows 38 | 39 | The computed drainage and infiltration flows to and from River and Drainage 40 | packages are aggregated on basin level and set as: 41 | 42 | * infiltration: a flow from the surface water to the groundwater (positive). 43 | * drainage: a flow from the groundwater to the surface (positive). 44 | 45 | These are set as the infiltration and drainage forcing on the Ribasim basins. 46 | 47 | ## Ribasim to MODFLOW 6 48 | 49 | ### Levels 50 | 51 | Ribasim sets the stage of River packages, and the drainage elevation of Drainage 52 | packages in MODFLOW6. 53 | 54 | The levels of the basins are not set directly in MODFLOW6. The levels are 55 | interpolated using the "subgrid" functionality of Ribasim, which can be used to 56 | e.g. create sloping water levels within a single basin. 57 | 58 | For simplicity of the coupling, the subgrid functionality is also used in 59 | case of a 1:1 basin-boundary coupling. 60 | 61 | # Files 62 | 63 | The following files are required to couple the two model codes. 64 | 65 | ## MODFLOW6 66 | 67 | No specific files are required. The MODFLOW6 model must contain River or 68 | Drainage packages which represent the surface water. 69 | 70 | ## Ribasim 71 | 72 | No specific files are required. The Basin / Subgrid table must be defined. For 73 | preprocessing with `primod`, the metadata columns `meta_x`, `meta_y` must be 74 | included in this table to indicate the spatial location of each subgrid 75 | element. 76 | 77 | ## Coupler 78 | 79 | These files provide the mappings from the MODFLOW boundary indices to the 80 | Ribasim basin indices. For actively coupled system (see below), it also 81 | includes subgrid indices. 82 | 83 | The files are identified by the MODFLOW6 package name. 84 | 85 | Note that the exchange files are **tab-separated** and use 0-based indices. 86 | They also include a header. 87 | 88 | ### Passive coupling 89 | 90 | #### [package-name].tsv 91 | 92 | 93 | ``` 94 | basin_index bound_index 95 | {basin_index0} {bound_index0} 96 | {basin_index1} {bound_index1} 97 | ... 98 | ``` 99 | 100 | ### Active coupling 101 | 102 | #### [package-name].tsv 103 | 104 | ``` 105 | basin_index bound_index subgrid_index 106 | {basin_index0} {bound_index0} {subgrid_index0} 107 | {basin_index1} {bound_index1} {subgrid_index1} 108 | ... 109 | ``` 110 | 111 | # MODFLOW 6 surface water representation 112 | 113 | Ribasim is linked to the surface water representation of the MODFLOW 6 models. 114 | Specifically, Ribasim is linked to either River (RIV) or Drainage (DRN) 115 | packages. In a coupled simulation, Ribasim computes a surface water mass 116 | balance and sets the water levels for the MODFLOW 6 boundaries, and MODFLOW 6 117 | provides the drainage and infiltration flows. These flows are collected in the 118 | Ribasim basins. 119 | 120 | The RibaMod coupling only exchanges between Ribasim basins and MODFLOW 6 River 121 | and Drainage packages. This means that for a successful coupling with Ribasim, 122 | the surface water should **only** be represented by either River or Drainage 123 | boundaries. 124 | 125 | More advanced surface water boundaries such as the Streamflow-Routing (SFR) 126 | package or the Lake (LAK) package compute their own surface water mass balance, 127 | and cannot be coupled to Ribasim. Such packages may be used freely in the parts 128 | of the model domain that are **not** coupled with Ribasim, but should not be 129 | used in the part of the model domain that is coupled to Ribasim. 130 | 131 | ## Active versus passive coupling 132 | 133 | In coupling Ribasim to MODFLOW 6, we make a distinction between active and 134 | passive coupling. 135 | 136 | In passive coupling, MODFLOW 6 computes drainage and infiltration flows. These 137 | are added to the water balance of the Ribasim basins. The water levels computed 138 | by Ribasim are **not** set back into MODFLOW 6. This type of coupling is 139 | convenient for boundaries that show little variation in terms of drainage 140 | elevation over time (e.g. surface runoff, or ditches with negligible water 141 | depth). A passive coupling requires little in terms of parametrization of the 142 | Ribasim model: all flows are simply added as a sort of "lateral" flow into the 143 | basin. 144 | 145 | In the active coupling, Ribasim does set the water levels of the MODFLOW 6 146 | model. 147 | 148 | The passive coupling should generally only be applied to coupling to Drainage 149 | packages, not River packages: in case of "over-infiltration", the water levels 150 | in Ribasim will drop, potentially resulting in a dry basin. However, since the 151 | water levels are not set in MODFLOW 6, no feedback can occur, and the MODFLOW 6 152 | model will keep infiltrating water that is not available. This creates a 153 | discrepancy between the water balances of both models. 154 | 155 | In the active coupling, large infiltration flows would result in lower water 156 | levels, and infiltration stops when the basin dries up and the River stage 157 | reaches the bed elevation. -------------------------------------------------------------------------------- /docs/figures/logo/iMOD-coupler.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 72 | 77 | 82 | 83 | -------------------------------------------------------------------------------- /docs/figures/logo/iMOD.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 71 | 75 | 79 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /docs/introduction.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{< fa solid hourglass-start >}} Introduction" 3 | image: figures/logo/iMOD.svg 4 | description: Learn what's included. 5 | index: "1" 6 | --- 7 | 8 | ## What's included 9 | 10 | The iMOD Suite provides tools to efficiently build and visualize 11 | groundwater models. 12 | 13 | Deltares is working to integrate and improve our groundwater software. 14 | Therefore iMOD is extended with a new iMOD Suite to link to the latest 15 | developments on the MODFLOW and on the changing requirements in the field 16 | of groundwatermodelling, most pressing currently the support 17 | of unstructured grids. 18 | 19 | We created the new iMOD Suite to aid pre- and post-processing 20 | unstructured groundwater models. 21 | Furthermore, a second goal of this suite was to better connect to 22 | the latest developments in the data science ecosystem, by utilizing: 23 | 24 | - Existing data format conventions (NetCDF, UGRID) instead of 25 | developing new ones, allowing more user flexibility to find the right 26 | tools for the right job. 27 | - Widely used and tested software (QGIS) to which we add our extension, 28 | instead of creating complete programs ourselves. 29 | - Modern programming languages (C++ and Python) that 30 | allow connecting to a big and lively software ecoystem. 31 | 32 | The iMOD Suite offers different modules which support 33 | modelling with MODFLOW 6 (including unstructured meshes): 34 | 35 | 1. **iMOD QGIS plugin**: The [iMOD QGIS Plugin](qgis_user_manual.qmd) allows visualisation 36 | of model input and output with tools for cross-sections, timeseries. It supports 37 | structured NetCDF, UGRID and IPF files. 38 | 39 | 1. **iMOD Python**: A Python package to support MODFLOW groundwater 40 | modeling. It makes it easy to go from your raw data to a fully defined MODFLOW 41 | model, with the aim to make this workflow reproducible. 42 | 43 | 1. **iMOD Coupler**: Software that couples MODFLOW 6 to other computational 44 | cores. It currently supports a coupling to MetaSWAP, but additional 45 | computational cores are planned in the future. 46 | 47 | ![Easy plotting of 4 dimensional [t, z, y, x] data in the iMOD QGIS plugin. The 48 | example shows the chlorine concentrations computed by the [NHI fresh-salt 49 | model.](https://gitlab.com/deltares/imod/nhi-fresh-salt) 50 | ](figures/index/NHI-zz_cross-section.png) 51 | 52 | ![The chlorine concentrations computed by the NHI-fresh-salt model for the 53 | province of Zeeland, plotted in a prototype iMOD 3D viewer. The top layer is made 54 | partly transparent, creating the pretty mist effect in the creek ridges. 55 | ](figures/index/NHI-zz_3d_viewer.png) 56 | 57 | ## Comparison with iMOD 5 58 | 59 | The proven technology and expertise of iMOD is consolidated within iMOD 5. iMOD 60 | 5 supports structured calculations with MODFLOW2005 and structured MODFLOW 6 61 | and can be coupled to the unsaturated zone model MetaSWAP. The model input and 62 | output can be visualised in its fast interactive viewer. [The documentation of 63 | iMOD 5 can be found here](https://oss.deltares.nl/web/imod) . 64 | 65 | Important technological innovations will be developed in the new iMOD Suite, 66 | whereas iMOD 5 will be maintained the coming years, but will see no big new 67 | feature developments. @tbl-iMOD-comparison and @tbl-iMOD-comparison-2 68 | respectively provide comparisons between iMOD Suite and iMOD 5 for the 69 | components and supported MODFLOW6 packages. 70 | 71 | | | iMOD Suite | iMOD 5 | 72 | |----------------------------|---------------------------------------------------|---------------------------------------------------| 73 | | computational kernels | MODFLOW 2005, MODFLOW 6, SEAWAT, MT3DMS, MetaSWAP | MODFLOW 2005, MODFLOW 6, SEAWAT, MT3DMS, MetaSWAP | 74 | | file types | NetCDF, UGRID, shp, tiff, idf, ipf, gen | idf, ipf, isg, gen | 75 | | grid types | structured & unstructured | structured & nested structured | 76 | | scripted pre-processing | iMOD Python | iMOD Batch | 77 | | interactive pre-processing | (QGIS) | iMOD GUI | 78 | | scripted 2D plot | iMOD Python | iMOD Batch | 79 | | interactive 2D plot | iMOD QGIS plugin (& QGIS) | iMOD GUI | 80 | | scripted 3D plot | iMOD Python | | 81 | | interactive 3D plot | iMOD 3D Viewer (discontinued) | iMOD GUI | 82 | 83 | : Comparison between iMOD Suite & iMOD 5 {#tbl-iMOD-comparison} 84 | 85 | | Package | Description | iMOD Suite | iMOD 5 | 86 | |---------|------------------------------------------------|------------|--------| 87 | | DIS | Structured Discretization | x | x | 88 | | DISV | Discretization by Vertices | x | | 89 | | DISU | Structured Discretization | | | 90 | | IC | Initial Conditions | x | x | 91 | | OC | Output Control | x | x | 92 | | NPF | Node Property Flow | x | x | 93 | | HFB | Horizontal Flow Barrier | x | x | 94 | | STO | Storage | x | x | 95 | | CSUB | Skeletal Storage, Compaction, and Subsidence | | | 96 | | BUY | Buoyancy | x | | 97 | | CHD | Constant-Head | x | x | 98 | | WEL | Well | x | x | 99 | | DRN | Drain | x | x | 100 | | RIV | River | x | x | 101 | | GHB | General-Head Boundary | x | x | 102 | | RCH | Recharge | x | x | 103 | | EVT | Evapotranspiration | x | x | 104 | | MAW | Multi-Aquifer Well | | | 105 | | SFR | Streamflow Routing | | x | 106 | | LAK | Lake | | | 107 | | UZF | Unsaturated Zone Flow | x | | 108 | | MVR | Water Mover | | | 109 | 110 | : Supported MODFLOW6 flow packages in iMOD Suite & iMOD 5 {#tbl-iMOD-comparison-2} 111 | -------------------------------------------------------------------------------- /docs/coupler_ribamod_preprocessing.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pre-processing 3 | --- 4 | 5 | This document describes how to setup coupled Ribasim-MODFLOW 6 simulations. 6 | 7 | ## The primod Python package 8 | 9 | To aid in setting up coupled models, we have created the `primod` Python 10 | package. It takes both models, derives the exchange relationships between 11 | both, and writes: 12 | 13 | * the Ribasim model 14 | * the MODFLOW 6 simulation 15 | * the exchange files 16 | * the iMOD coupler configuration file 17 | 18 | The derivation of exchange connections between the models is automatic, and 19 | based on the spatial information provided for both models. 20 | 21 | As `primod` is a Python package, both models must be represented in Python: 22 | 23 | * The MODFLOW 6 simulation is represented by the 24 | [Modflow6Simulation](https://deltares.github.io/imod-python/api/generated/mf6/imod.mf6.Modflow6Simulation.html) 25 | class of the `imod` Python package. 26 | * The Ribasim model is represented by the 27 | [Model](https://deltares.github.io/Ribasim/python/reference/#model) class of 28 | the `ribasim` Python package. 29 | * The combination of both models is represented by the `primod` 30 | [RibaMod](primod_api/RibaMod.html#primod.RibaMod) 31 | class. 32 | 33 | Both Python packages support reading a model from a TOML file and associated 34 | files. 35 | 36 | ## Abbreviated example 37 | 38 | The following abbreviated example: 39 | 40 | * Reads a Ribasim model 41 | * Reads a MODFLOW 6 simulation 42 | * Reads a basin definition associated with the Ribasim model 43 | * Defines a driver coupling: which river and drainage packages are coupled 44 | * Sets up a coupled model 45 | * Writes the coupled model 46 | 47 | 48 | ``` python 49 | import ribasim 50 | import geopandas as gpd 51 | import imod 52 | import primod 53 | 54 | 55 | ribasim_model = ribasim.Model.read("ribasim/ribasim.toml") 56 | mf6_simulation = imod.mf6.Modflow6Simulation.from_file("modflow/GWF_1.toml") 57 | basin_definition = gpd.read_file("ribasim_network.gpkg", layer="basin_areas") 58 | 59 | driver_coupling_active = primod.RibaModActiveDriverCoupling( 60 | mf6_model="GWF_1", 61 | mf6_packages=["riv-1"], 62 | basin_definition=basin_definition, 63 | ) 64 | driver_coupling_passve = primod.RibaModPassiveDriverCoupling( 65 | mf6_model="GWF_1", 66 | mf6_packages=["drn-1", "drn-2"], 67 | basin_definition=basin_definition, 68 | ) 69 | 70 | ribamod_model = primod.RibaMod( 71 | ribasim_model=ribasim_model, 72 | mf6_simulation=mf6sim, 73 | coupling_list=[driver_coupling_active, driver_coupling_passive], 74 | ) 75 | 76 | ribamod_model.write( 77 | directory="coupled-ribamod-simulation", 78 | modflow6_dll=r"c:\bin\imod_coupler\modflow6\libmf6.dll", 79 | ribasim_dll=r"c:\bin\imod_coupler\ribasim\bin\libribasim.dll", 80 | ribasim_dll_dependency=r"c:\bin\imod_coupler\ribasim\bin", 81 | ) 82 | ``` 83 | 84 | ## Requirements 85 | 86 | * The start and end times of the Ribasim and MODFLOW 6 simulations must align. 87 | `primod` will raise an error otherwise. 88 | * Spatial extents of both models need not coincide. Part of the Ribasim basins 89 | may be located outside of the MODFLOW 6 simulation window. Uncoupled basins 90 | will proceed with the regular drainage and irrigation terms define in the 91 | Basin / Static or Basin / Time tables. 92 | * Similarly, not every River and Drainage boundary needs to be linked with 93 | Ribasim. Boundaries outside of any basin polygon will simply use the regular 94 | file input. 95 | 96 | ## Exchange derivation 97 | 98 | The exchanges are derived based on spatial overlap of Ribasim basins and the 99 | grid-based River and Drainage representation. For an active coupling, the x 100 | and y locations of the subgrid elements is used to link each actively coupled 101 | MODFLOW 6 boundary with a subgrid element. 102 | 103 | ### Passive coupling 104 | 105 | The derivation of exchanges proceeds in the following steps: 106 | 107 | * Rasterize the basin definition polygons (provided as a 108 | `geopandas.GeoDataFrame`) to the MODFLOW 6 model grid. 109 | * Overlay the conductance on the rasterized basin definition, 110 | and derive for each boundary the basin index. 111 | * Identify the indices of the coupled MODFLOW 6 boundaries. 112 | * Store the basin indices and boundary indices in a table. 113 | 114 | ### Active coupling 115 | 116 | The derivation of active coupling exchanges proceeds largely the same, but also 117 | locates the nearest subgrid elements: 118 | 119 | * Rasterize the basin definition polygons (provided as a 120 | `geopandas.GeoDataFrame`) to the MODFLOW 6 model grid. 121 | * Overlay the conductance on the rasterized basin definition, and derive for 122 | each boundary the basin index. 123 | * Identify the indices of the coupled MODFLOW 6 boundaries. 124 | * Using the `meta_x` and `meta_y` columns in the Ribasim Basin / subgrid table, 125 | find the nearest subgrid element for each MODFLOW 6 boundary. 126 | * Store the basin indices, boundary indices, subgrid indices in a table. 127 | 128 | **NB.** The subgrid In a passive coupling, only drainage package are expected on the MODFLOW 6 side. 129 | In this type of coupling, the occurrence of a river package is not allowed and triggers a fatal error during preprocessing. 130 | 131 | ## Modifications to the Ribasim model 132 | 133 | The `primod.RibaMod` class makes the following alteration to the Ribasim input 134 | before writing the Ribasim model: for basins that are coupled to MODFLOW 6, 135 | the infiltration and drainage columns are set to `NaN` / `Null` (nodata) in 136 | the Basin / Static or Basin / Time tables. 137 | 138 | This ensures that Ribasim does not overwrite the exchange flows while running 139 | coupled with MODFLOW 6. 140 | 141 | Conceptually, it also means that when a basin is coupled, it should generally 142 | located inside of the MODFLOW 6 model; after all, when half of the basin is 143 | located outside of the MODFLOW 6 model, it will not receive drainage or lose 144 | water to infiltration in that half. 145 | 146 | ## Modifications to the MODFLOW 6 simulation 147 | 148 | Currently, no modifications are made in the MODFLOW 6 input. 149 | 150 | ### Consistency between MODFLOW 6 and Ribasim subgrid 151 | 152 | During the coupling, water levels should not be set below the bed elevation 153 | of the boundary. For drainage packages, this is the drainage elevation 154 | provided in the MODFLOW 6 input; for river packages, this is the bottom 155 | elevation provided in the MODFLOW 6 input. 156 | 157 | There is potential for inconsistency here, as Ribasim also describes a bed 158 | elevation: the lowest level of the subgrid piecewise interpolation table: 159 | 160 | * In case the MODFLOW 6 bed elevation is higher than the subgrid elevation, 161 | infiltration will stop before the Ribasim basin is empty. 162 | * In case the MODFLOW 6 bed elevation is lower than the subgrid elevation, 163 | infiltration will proceed even when the Ribasim basin is empty. 164 | 165 | The second is a more pressing problem, as it will results in a discrepancy 166 | between the water balances of both models. However, this problem is detected 167 | in the preprocessing stage and triggers a fatal error. 168 | -------------------------------------------------------------------------------- /docs/coupler_metamod_technical.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Technical Reference 3 | --- 4 | 5 | 6 | This document describes how MetaSWAP and MODFLOW6 are coupled. It is intended 7 | for groundwater modellers, who need to know which variables are exchanged 8 | between computational kernels and at which moment. For details of the inner 9 | workings of the code, we refer to the docstrings in the code. 10 | 11 | Below is a flowchart showing the order in which one timestep is iteratively solved and when data is exchanged between MetaSWAP and MODFLOW6. 12 | 13 | ![MF6BMI Coupling](./figures/coupler/MF6BMI_coupling.png) 14 | 15 | # Requirements 16 | 17 | - Currently only confined flow is supported, similar to a previous 18 | implementation of MetaSWAP-MODFLOW coupling. 19 | - Both the specific storage and the storage coefficient option of MODFLOW 6 are supported. 20 | - A recharge package (RCH) is required in the MODFLOW 6 model to facilitate the recharge flux of MetaSWAP. 21 | - A well package (WEL) is required in the MODFLOW 6 to facilitate the extraction of groundwater for MetaSWAP's sprinkling. 22 | - The sum of svat areas should not exceed the area of the MODFLOW cell they are coupled to. 23 | - Currently only multiple svats can be coupled to one MODFLOW cell, and not the other way around. It is not possible to couple multiple MODFLOW cells to one svat. 24 | 25 | # Data exchanges 26 | 27 | ## MODFLOW 6 to MetaSWAP 28 | 29 | ### Heads 30 | 31 | MODFLOW sets the heads in MetaSWAP, to be specific the `hgwmodf` variable. When 32 | multiple svats are coupled to one MODFLOW cell, each svat is given MODFLOW's 33 | head. When multiple MODFLOW cells are coupled to one svat, the arithmetic 34 | average is taken. 35 | 36 | ## MetaSWAP to MODFLOW 37 | 38 | MetaSWAP provides a recharge, sets the storage, and extracts groundwater from deeper layers for sprinkling (if switched on). 39 | 40 | ### Storage 41 | q 42 | 43 | ### Recharge 44 | 45 | Recharge is provided by MetaSWAP to MODFLOW. MetaSWAP internally stores volumes 46 | that should be provided to MODFLOW, so these are converted to rates by dividing 47 | by the timestep length. When multiple svats are coupled to one MODFLOW cell, 48 | recharge rates are summed. 49 | 50 | ### Sprinkling 51 | 52 | Groundwater extraction rates to set sprinkling are computed by MetaSWAP based on 53 | irrigation requirements. MetaSWAP internally stores volumes that should be 54 | provided to MODFLOW, so these are converted to rates by dividing by the timestep 55 | length. When multiple svats are coupled to one MODFLOW cell, extraction rates 56 | are summed. 57 | 58 | # Files 59 | 60 | The following files are required to couple the two model codes. These files provide the mappings from MODFLOW indices to the MetaSWAP svats. 61 | 62 | MetaSWAP requires the file: 63 | 64 | - `mod2svat.inp` 65 | 66 | MODFLOW6 requires the files: 67 | 68 | - `[filename].rch` 69 | - `[filename].wel` (optional) 70 | 71 | The coupler itself requires the following files: 72 | 73 | - `nodenr2svat.dxc` 74 | - `rchindex2svat.dxc` 75 | - `wellindex2svat.dxc` (optional) 76 | 77 | Below we will describe the format for each file. 78 | 79 | ## MetaSWAP 80 | 81 | ### mod2svat.inp 82 | 83 | The file format for this file is also described in the [SIMGRO IO manual](ftp://ftp.wur.nl/simgro/doc/Report_913_3_V8_0_0_7.pdf). 84 | It is as follows: 85 | 86 | ``` 87 | node_nr svat ly 88 | ... 89 | ``` 90 | 91 | Were `node_nr` is the MODFLOW6 node number (to be specific: the user node 92 | number), which replaces the MODFLOW 2005 CellID. `svat` is the MetaSWAP svat 93 | number and `ly` is the MODFLOW layer number. Note that the format for this file 94 | should be fixed to 95 | 96 | ```python 97 | f"{nodenr:10d} {svat:10d}{ly:2d}" 98 | ``` 99 | 100 | where the number behind the colon indicated the number of characters, padded with whitespace. 101 | Note the two whitespaces between `nodenr` and `svat`. 102 | 103 | 104 | ## MODFLOW 6 105 | 106 | ### [filename].rch 107 | 108 | A dummy recharge file, of which the fluxes will be overridden. The location of 109 | the recharge cells is used to assign an recharge index by Modflow6. The file 110 | format of the .rch file is described here. To specify an uncoupled recharge as 111 | well, a second RCH package should be defined. How to define a second stress 112 | package is explained here. Please note that in the model name file the package 113 | name should correspond to the package name specified in the 114 | [configuration file](./coupler_metamod_config.qmd). 115 | 116 | ### [filename].wel 117 | 118 | A dummy well file, of which the fluxes will be overridden. The location of the 119 | wells is used to assign a well index by Modflow6. The file format of the .wel 120 | file is described here. To specify uncoupled extractions/injections as well, a 121 | second WEL package should be defined. How to define a second stress package is 122 | explained here. Please note that the package name in the 123 | [model name file](https://modflow6.readthedocs.io/en/latest/_mf6io/gwf-nam.html#block-packages) 124 | should correspond to the package name specified in the 125 | [configuration file](./coupler_metamod_config.qmd). 126 | 127 | ## Coupler 128 | 129 | ### nodenr2svat.dxc 130 | 131 | This file takes care of mapping the MODFLOW node numbers to the MetaSWAP svats, 132 | which is required for coupling the heads and storages of both kernels, it thus 133 | excludes nodes connected where wells are for sprinkling. The file format is as 134 | follows: 135 | 136 | ``` 137 | node_nr svat ly 138 | ... 139 | ``` 140 | 141 | Where `node_nr` is the MODFLOW6 node number (to be specific: the user node 142 | number), which replaces the MODFLOW 2005 CellID. `svat` is the MetaSWAP svat 143 | number and `ly` is the Modflow layer number. 144 | 145 | 146 | ### rchindex2svat.dxc 147 | 148 | This file takes care of mapping the recharge cells to the MetaSWAP svats. 149 | The file format is as follows: 150 | 151 | ``` 152 | rch_index svat ly 153 | ... 154 | ``` 155 | 156 | 157 | Where `rch_index` is the MODFLOW6 RCH index number, which equals the row number 158 | of the data specified under `period` in the `.rch` file. `svat` is the MetaSWAP 159 | svat number and `ly` is the MODFLOW layer number. 160 | 161 | ### wellindex2svat.dxc 162 | 163 | This file takes care of mapping MODFLOW wells to the MetaSWAP svats for sprinkling. 164 | The file format is as follows: 165 | 166 | ``` 167 | well_index svat ly 168 | ... 169 | ``` 170 | 171 | 172 | Where `well_index` is the MODFLOW6 WEL index number, which equals the row number 173 | of the data specified under `period` in the `.wel` file. `svat` is the MetaSWAP 174 | svat number and `ly` is the MODFLOW layer number. 175 | 176 | # How to define a second stress package for MODFLOW6 177 | 178 | A second stress package (in our case named `WELL2`) can be defined in the flow model's `.nam` file (GWF_1.nam). 179 | 180 | ``` 181 | begin options 182 | end options 183 | 184 | begin packages 185 | dis6 GWF_1/dis.dis 186 | chd6 GWF_1/chd.chd 187 | npf6 GWF_1/npf.npf 188 | ic6 GWF_1/ic.ic 189 | wel6 GWF_1/wel.wel WELLS_MSW 190 | wel6 GWF_1/wel2.wel WELL2 191 | sto6 GWF_1/sto.sto 192 | oc6 GWF_1/oc.oc 193 | end packages 194 | ``` 195 | 196 | 197 | The argument values `WELLS_MSW` and `WELL2`, specify the package names to be 198 | printed in the water budget .lst file. In the configuration file, you have to 199 | specify which package name is used for the coupling. 200 | -------------------------------------------------------------------------------- /docs/figures/logo/iMOD-tutorial.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 72 | 76 | 80 | 81 | -------------------------------------------------------------------------------- /docs/figures/logo/iMOD-Qgis.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 73 | 77 | 80 | 84 | 88 | 92 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /docs/coupler_ribametamod_technical.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Technical Reference 3 | --- 4 | 5 | This document describes the complete Ribasim - MetaSWAP - MODFLOW 6 coupling sequence, 6 | the operations performed by the individual components as well as the exchanges of data among the components. 7 | 8 | ```{mermaid} 9 | sequenceDiagram 10 | autonumber 11 | Ribasim ->> MODFLOW 6: stage [t-1] 12 | MODFLOW 6 ->> Ribasim: estimated RIV flux, active & passive [t-1] 13 | 14 | loop Ribasim-MetaSWAP subtimesteps [tsw] 15 | Note over MetaSWAP: prepare surface water timestep tsw 16 | MetaSWAP->>Ribasim: ponding runoff [tsw] 17 | MetaSWAP->>Ribasim: estimated sprinkling [tsw] 18 | Note over Ribasim: solve tsw 19 | Ribasim ->> MetaSWAP: realized sprinkling [tsw] 20 | end 21 | Ribasim ->> MODFLOW 6: realized RIV, active [t] 22 | MODFLOW 6 ->> MetaSWAP: head [t-1] 23 | loop MODFLOW 6-MetaSWAP iterations (solving t) 24 | Note over MetaSWAP: solve iter 25 | MetaSWAP ->> MODFLOW 6: storage coefficient [iter] 26 | MetaSWAP ->> MODFLOW 6: recharge flux [iter] 27 | MetaSWAP ->> MODFLOW 6: groundwater sprinkling flux [iter] 28 | Note over MODFLOW 6: solve iter 29 | MODFLOW 6 ->> MetaSWAP: head [iter] 30 | end 31 | 32 | ``` 33 | 34 | The exchanges between kernels can be summarized as follows: 35 |
    36 |
  1. 37 | Exchange the Ribasim subgrid stage from the previous timestep to actively coupled RIV en DRN packages. 38 |
  2. 39 |
  3. Estimated RIV and DRN flux, exchanged to Ribasim basins
  4. 40 |
    41 | Ribasim-MetaSWAP sub-timestepping: 42 |
  5. Runoff from MetaSWAP exchanged to Ribasim basins
  6. 43 |
  7. Irrigation demand from MetaSWAP svats to Ribasim water users.
  8. 44 |
  9. Irrigation volume on svats based on realized volumes per water user 45 |
  10. 46 |
  11. Flux correction in the case that Ribasim basins are unable to meet the total infiltration demand.
  12. 47 |
    48 | MODFLOW 6-MetaSWAP iterations: 49 |
  13. Head of MODFLOW 6 to MetaSWAP
  14. 50 |
  15. Storage coefficient from MetaSWAP sent to MODFLOW 6
  16. 51 |
  17. Recharge from MetaSWAP sent to MODFLOW 6 as a source term
  18. 52 |
  19. Groundwater sprinkling flux requested by MetaSWAP, extracted from MODFLOW 6
  20. 53 |
54 | 55 | ### Some remarks 56 | * If allocation is active in the Ribasim model, the demand-realisation cycle for irrigation is based on the user priority and the water availability. 57 | When inactive it is based on water availability alone. 58 | * For coupling surface water to Ribasim, only the RIV and DRN package can be used. Other packages like GHB are not supported and should not be present in coupled domain. 59 | 60 | 61 | ### Active versus passive coupling 62 | In coupling Ribasim and MODFLO 6, a distinction exists between *active* and *passive* coupling. 63 | In a passive coupling fluxes on the MODFLOW 6 side are evaluated irrespective of the Ribasim waterlevels 64 | and contribute directly to the Ribasim basins. 65 | The Ribasim water levels are *not* required in this case, fluxes are simply regarded as "lateral" sources to the basin, 66 | hence configuration on the Ribasim side is minimal. 67 | The passive approach is justified for drainage packages showing little variation in terms of elevation over time (e.g. surface runoff, or ditches with negligible water depth). 68 | On the contrary, in the case of an active coupling fluxes depend (linearly) on the Ribasim water levels. 69 | This requires the stages in the MODFLOW 6 model to be set to the subgrid water levels of Ribasim prior to evaluation of the river fluxes. 70 | 71 | In the case of river packages "over-infiltration" can cause Ribasim water levels can fall to zero, leaving a dry basin. 72 | Since in the passive situation, water levels are not taken into account, no feedback occurs that limits or impedes infiltration. 73 | The MODFLOW 6 model assumes infiltration to continue, whereas the coupled Ribasim basin already ran out of water. This raises a 74 | discrepancy in the water balance between both models. Therefore, passive couplings are unsuitable for river packages 75 | In active couplings, infiltration stops when the basin dries up and the water level reaches the bed elevation. 76 | 77 | ### Estimated sprinkling flux 78 | Within the Ribasim context, the sprinkling flux is implemented as a water user. 79 | The sprinkling demand is exchanged to Ribasim through the user demand matrix. 80 | From the couplers perspective, this is a two-dimensional array in which every column represents a water user 81 | and every row corresponds with a priority. The array elements are water demands for the users 82 | (also for other water users beside sprinkling), each with their own set of priorities. 83 | Priorities play a role on the Ribasim side only if allocation is active. 84 | Within Ribasim, water users are defined as nodes in the network and in the coupler water users are mapped onto MetaSWAP svats. 85 | For every of those users, the water demand can be non-zero for a single priority only. 86 | 87 | ### Realized sprinkling flux and infiltration flux correction. 88 | Before performing a Ribasim update, the surface water sprinkling amounts in MetaSWAP and the active infiltration or drainage in 89 | MODFLOW 6 have been evaluated under the assumption of an unlimited availability of surface water for these processes (steps 2 and 4) . 90 | After Ribasims timestep, the *realized* extraction is known in Ribasim and this information must somehow be communicated to MODFLOW 6 (step 6) and MetaSWAP (step 5) in order to maintain a correct overall water balance. 91 | 92 | For the surface water sprinkling the following procedure is used to derive the realized fluxes for the MetaSWAP units. 93 | 94 | * The realized fraction $f_i$ is derived of the realized sprinkling flux $R_i$, compared to the requested flux $D_i$ for Ribasim element $i$. 95 | i.o.w. 96 | $$ 97 | f_i\,=\, 98 | \begin{align} 99 | \begin{cases} 100 | R_i/D_i & D_i\neq 0 \\ 101 | 0 & D_i = 0 102 | \end{cases} 103 | \end{align} 104 | $$ 105 | 106 | * The real contribution of Ribasim element $i$ to MetaSWAP element $j$ was then $f_i A_{ij} M^*_j$, where $M^*$ denotes the MetaSWAP vector of demand fluxes and $A_{ij}$ refers to an element of the couple matrix. 107 | 108 | * So, the total realized flux $M_j$ received by MetaSWAP element $j$ is then obtained by summation over $j$: 109 | $$ 110 | M_j\,=\,\sum\limits_j f_i A_{ij} M^*_j 111 | $$\,\,, 112 | or in vector notation for all MetaSWAP elements: 113 | $$ 114 | \hspace{1cm} 115 | \mathbf{M}\,=\,(A^T\mathbf{f})\odot\mathbf{M^*} 116 | $$ 117 | 118 | The evaluation of the correction of the infiltration flux, for MODFLOW 6 proceeds in a similar fashion, except: 119 | 120 | * Not the realized fraction $f_i$, but its complement $1-f_i$ is used to obtain the correction $C_j$ on the infiltration flux. 121 | 122 | * This correction is only applied to the *negative* demands. The positive demands, associated with drainage, are always granted. 123 | 124 | * The correction amounts represent a lack of water already infiltrated into MODFLOW 6, which turned out not to be available at the end of the Ribasim timestep. Hence, this is corrected by means of a *negative* source term in MODFLOW 6 in the next groundwater timestep. 125 | $$ 126 | \begin{align} 127 | C_j\,=\, 128 | \begin{cases} 129 | \sum\limits_j (1-f_i) A_{ij} M^*_j & M^*_j<0 \\ 130 | 0 & M^*_j>0 131 | \end{cases} 132 | \end{align} 133 | $$ 134 | 135 | This must be taken into account into the realized fraction for a correct water balance. 136 | Therefore, the demand $D_i$ to Ribasim element $i$ is now plit into $D_{i-}$ and, $D_{i+}$, 137 | summing fluxes over the infiltrating and draining MODFLOW 6 elements respectively. 138 | 139 | $$ 140 | f_i\,=\, 141 | \begin{align} 142 | \begin{cases} 143 | (R_i - D_{i+})/D_{i-} & D_{i-}\neq 0 \\ 144 | 0 & D_{i-} = 0 145 | \end{cases} 146 | \end{align} 147 | $$ 148 | 149 | The correction $C_j$ enters MODFLOW 6 as a negative right-hand side term, i.e. extraction. 150 | 151 | 152 | -------------------------------------------------------------------------------- /docs/figures/logo/iMOD-news.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 34 | 59 | 65 | 70 | 71 | 74 | 78 | 83 | 87 | 91 | 95 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /docs/figures/logo/iMOD-python.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 71 | 76 | 80 | 85 | 86 | 91 | 96 | 101 | 106 | 111 | 116 | 121 | 122 | -------------------------------------------------------------------------------- /docs/figures/qgis/icons/NHI-portal.svg: -------------------------------------------------------------------------------- 1 | 2 | 21 | 23 | 24 | 26 | image/svg+xml 27 | 29 | 30 | 31 | 32 | 33 | 35 | 56 | 62 | 67 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | 96 | 97 | --------------------------------------------------------------------------------