diff --git a/.github/workflows/ci-transient.yml b/.github/workflows/ci-transient.yml index 0fcce94..5579893 100644 --- a/.github/workflows/ci-transient.yml +++ b/.github/workflows/ci-transient.yml @@ -50,4 +50,4 @@ jobs: - name: Test benchmark notebooks run: | - uv run pytest --nbval-lax --cov-append --dist loadscope -n auto --ignore=docs/transient/05benchmarks/besselnumbanew_timing.ipynb docs/transient/05benchmarks/ + uv run pytest --nbval-lax --cov-append --dist loadscope -n auto docs/transient/05benchmarks/ diff --git a/docs/steady/00userguide/howtos/howto_convert_timml_model.ipynb b/docs/steady/00userguide/howtos/howto_convert_timml_model.ipynb index c7744c5..2542c40 100644 --- a/docs/steady/00userguide/howtos/howto_convert_timml_model.ipynb +++ b/docs/steady/00userguide/howtos/howto_convert_timml_model.ipynb @@ -178,8 +178,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/00userguide/howtos/howto_select_a_model.ipynb b/docs/steady/00userguide/howtos/howto_select_a_model.ipynb index b392e64..87eb6e2 100644 --- a/docs/steady/00userguide/howtos/howto_select_a_model.ipynb +++ b/docs/steady/00userguide/howtos/howto_select_a_model.ipynb @@ -207,8 +207,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/00userguide/tutorials/tutorial0_well_single_layer_aquifer.ipynb b/docs/steady/00userguide/tutorials/tutorial0_well_single_layer_aquifer.ipynb index 440f5ea..c79a062 100644 --- a/docs/steady/00userguide/tutorials/tutorial0_well_single_layer_aquifer.ipynb +++ b/docs/steady/00userguide/tutorials/tutorial0_well_single_layer_aquifer.ipynb @@ -302,8 +302,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/00userguide/tutorials/tutorial1_well_multi_layer_aquifer.ipynb b/docs/steady/00userguide/tutorials/tutorial1_well_multi_layer_aquifer.ipynb index 72beb7f..8f9b4e7 100755 --- a/docs/steady/00userguide/tutorials/tutorial1_well_multi_layer_aquifer.ipynb +++ b/docs/steady/00userguide/tutorials/tutorial1_well_multi_layer_aquifer.ipynb @@ -260,8 +260,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/00_single_layer_model.ipynb b/docs/steady/02examples/00_single_layer_model.ipynb index bf326c0..cbee9ae 100644 --- a/docs/steady/02examples/00_single_layer_model.ipynb +++ b/docs/steady/02examples/00_single_layer_model.ipynb @@ -395,8 +395,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/01_well_in_uniform_flow.ipynb b/docs/steady/02examples/01_well_in_uniform_flow.ipynb index 954e270..df628cb 100755 --- a/docs/steady/02examples/01_well_in_uniform_flow.ipynb +++ b/docs/steady/02examples/01_well_in_uniform_flow.ipynb @@ -225,8 +225,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/02_wells_rivers_and_recharge.ipynb b/docs/steady/02examples/02_wells_rivers_and_recharge.ipynb index 4753b60..e4420cc 100755 --- a/docs/steady/02examples/02_wells_rivers_and_recharge.ipynb +++ b/docs/steady/02examples/02_wells_rivers_and_recharge.ipynb @@ -214,8 +214,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/03a_modeling_inhomogeneities.ipynb b/docs/steady/02examples/03a_modeling_inhomogeneities.ipynb index 3522da4..d5365bb 100755 --- a/docs/steady/02examples/03a_modeling_inhomogeneities.ipynb +++ b/docs/steady/02examples/03a_modeling_inhomogeneities.ipynb @@ -421,8 +421,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/03b_modeling_inhomogeneities3D.ipynb b/docs/steady/02examples/03b_modeling_inhomogeneities3D.ipynb index 506555a..e90f640 100755 --- a/docs/steady/02examples/03b_modeling_inhomogeneities3D.ipynb +++ b/docs/steady/02examples/03b_modeling_inhomogeneities3D.ipynb @@ -267,8 +267,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/04_horizontal_wells.ipynb b/docs/steady/02examples/04_horizontal_wells.ipynb index 4c04f94..629931b 100644 --- a/docs/steady/02examples/04_horizontal_wells.ipynb +++ b/docs/steady/02examples/04_horizontal_wells.ipynb @@ -418,8 +418,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/05_impermeable_walls.ipynb b/docs/steady/02examples/05_impermeable_walls.ipynb index 655c428..f516605 100644 --- a/docs/steady/02examples/05_impermeable_walls.ipynb +++ b/docs/steady/02examples/05_impermeable_walls.ipynb @@ -113,8 +113,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/building_pit.ipynb b/docs/steady/02examples/building_pit.ipynb index b1d5787..3da27f3 100644 --- a/docs/steady/02examples/building_pit.ipynb +++ b/docs/steady/02examples/building_pit.ipynb @@ -670,8 +670,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/circular_area_sink.ipynb b/docs/steady/02examples/circular_area_sink.ipynb index f1be9ea..c3ef663 100644 --- a/docs/steady/02examples/circular_area_sink.ipynb +++ b/docs/steady/02examples/circular_area_sink.ipynb @@ -152,8 +152,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/collector_wells.ipynb b/docs/steady/02examples/collector_wells.ipynb index b9fd1b8..ab0de1e 100644 --- a/docs/steady/02examples/collector_wells.ipynb +++ b/docs/steady/02examples/collector_wells.ipynb @@ -380,8 +380,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/02examples/connected_wells.ipynb b/docs/steady/02examples/connected_wells.ipynb index 1f152b0..8a6f489 100755 --- a/docs/steady/02examples/connected_wells.ipynb +++ b/docs/steady/02examples/connected_wells.ipynb @@ -1170,8 +1170,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/03xsections/cross_section_models.ipynb b/docs/steady/03xsections/cross_section_models.ipynb index 75a31b1..ba54d6c 100644 --- a/docs/steady/03xsections/cross_section_models.ipynb +++ b/docs/steady/03xsections/cross_section_models.ipynb @@ -512,8 +512,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/large_diameter_experimental.ipynb b/docs/steady/04benchmarks/large_diameter_experimental.ipynb index 9f0fbdc..030ba54 100644 --- a/docs/steady/04benchmarks/large_diameter_experimental.ipynb +++ b/docs/steady/04benchmarks/large_diameter_experimental.ipynb @@ -97,8 +97,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_circular_buildingpit.ipynb b/docs/steady/04benchmarks/test_circular_buildingpit.ipynb index 7b3e6b3..a8f6503 100644 --- a/docs/steady/04benchmarks/test_circular_buildingpit.ipynb +++ b/docs/steady/04benchmarks/test_circular_buildingpit.ipynb @@ -486,8 +486,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_linesink_discharge.ipynb b/docs/steady/04benchmarks/test_linesink_discharge.ipynb index 80dc7b9..426a84f 100644 --- a/docs/steady/04benchmarks/test_linesink_discharge.ipynb +++ b/docs/steady/04benchmarks/test_linesink_discharge.ipynb @@ -738,8 +738,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_linesinkstrings.ipynb b/docs/steady/04benchmarks/test_linesinkstrings.ipynb index cdab826..6e2f9d5 100644 --- a/docs/steady/04benchmarks/test_linesinkstrings.ipynb +++ b/docs/steady/04benchmarks/test_linesinkstrings.ipynb @@ -156,8 +156,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_normal_flux.ipynb b/docs/steady/04benchmarks/test_normal_flux.ipynb index 722416e..9300ccd 100644 --- a/docs/steady/04benchmarks/test_normal_flux.ipynb +++ b/docs/steady/04benchmarks/test_normal_flux.ipynb @@ -275,8 +275,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_polygon_areasink.ipynb b/docs/steady/04benchmarks/test_polygon_areasink.ipynb index b462ef0..dd49d6d 100644 --- a/docs/steady/04benchmarks/test_polygon_areasink.ipynb +++ b/docs/steady/04benchmarks/test_polygon_areasink.ipynb @@ -95,8 +95,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_well_near_lake.ipynb b/docs/steady/04benchmarks/test_well_near_lake.ipynb index fe95eb8..ff673fe 100644 --- a/docs/steady/04benchmarks/test_well_near_lake.ipynb +++ b/docs/steady/04benchmarks/test_well_near_lake.ipynb @@ -51,8 +51,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_wells.ipynb b/docs/steady/04benchmarks/test_wells.ipynb index 462557d..843d09a 100644 --- a/docs/steady/04benchmarks/test_wells.ipynb +++ b/docs/steady/04benchmarks/test_wells.ipynb @@ -112,8 +112,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/steady/04benchmarks/test_wells_with_resistance.ipynb b/docs/steady/04benchmarks/test_wells_with_resistance.ipynb index 33c953b..07409e7 100644 --- a/docs/steady/04benchmarks/test_wells_with_resistance.ipynb +++ b/docs/steady/04benchmarks/test_wells_with_resistance.ipynb @@ -379,8 +379,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/00userguide/howtos/howto_convert_ttim_model.ipynb b/docs/transient/00userguide/howtos/howto_convert_ttim_model.ipynb index 48501e5..1a50eaf 100644 --- a/docs/transient/00userguide/howtos/howto_convert_ttim_model.ipynb +++ b/docs/transient/00userguide/howtos/howto_convert_ttim_model.ipynb @@ -75,8 +75,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/00userguide/howtos/howto_fluctuating_head_boundary.ipynb b/docs/transient/00userguide/howtos/howto_fluctuating_head_boundary.ipynb index 6e6d037..397a4b1 100644 --- a/docs/transient/00userguide/howtos/howto_fluctuating_head_boundary.ipynb +++ b/docs/transient/00userguide/howtos/howto_fluctuating_head_boundary.ipynb @@ -236,8 +236,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/00userguide/howtos/howto_pumpingtest.ipynb b/docs/transient/00userguide/howtos/howto_pumpingtest.ipynb index 22897f3..36b2fef 100755 --- a/docs/transient/00userguide/howtos/howto_pumpingtest.ipynb +++ b/docs/transient/00userguide/howtos/howto_pumpingtest.ipynb @@ -436,8 +436,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/00userguide/howtos/howto_select_a_model.ipynb b/docs/transient/00userguide/howtos/howto_select_a_model.ipynb index 503dbbf..1429fc7 100644 --- a/docs/transient/00userguide/howtos/howto_select_a_model.ipynb +++ b/docs/transient/00userguide/howtos/howto_select_a_model.ipynb @@ -83,8 +83,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/00userguide/howtos/howto_xsection_model.ipynb b/docs/transient/00userguide/howtos/howto_xsection_model.ipynb index b96248f..8b8250e 100644 --- a/docs/transient/00userguide/howtos/howto_xsection_model.ipynb +++ b/docs/transient/00userguide/howtos/howto_xsection_model.ipynb @@ -606,8 +606,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/00userguide/tutorials/tutorial0_start_a_model.ipynb b/docs/transient/00userguide/tutorials/tutorial0_start_a_model.ipynb index 376bef9..94da71e 100755 --- a/docs/transient/00userguide/tutorials/tutorial0_start_a_model.ipynb +++ b/docs/transient/00userguide/tutorials/tutorial0_start_a_model.ipynb @@ -139,8 +139,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/circareasink_example.ipynb b/docs/transient/02examples/circareasink_example.ipynb index 5a5de2b..0c410e3 100644 --- a/docs/transient/02examples/circareasink_example.ipynb +++ b/docs/transient/02examples/circareasink_example.ipynb @@ -182,8 +182,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/higher_order_head_linesink.ipynb b/docs/transient/02examples/higher_order_head_linesink.ipynb index 3cf09d9..6a46222 100644 --- a/docs/transient/02examples/higher_order_head_linesink.ipynb +++ b/docs/transient/02examples/higher_order_head_linesink.ipynb @@ -65,8 +65,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/line_sink_well_sol.ipynb b/docs/transient/02examples/line_sink_well_sol.ipynb index 458a924..fdaa999 100755 --- a/docs/transient/02examples/line_sink_well_sol.ipynb +++ b/docs/transient/02examples/line_sink_well_sol.ipynb @@ -177,8 +177,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/meandering_river.ipynb b/docs/transient/02examples/meandering_river.ipynb index c5d158d..dc22044 100644 --- a/docs/transient/02examples/meandering_river.ipynb +++ b/docs/transient/02examples/meandering_river.ipynb @@ -78,21 +78,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.5" } }, "nbformat": 4, diff --git a/docs/transient/02examples/pathline_trace.ipynb b/docs/transient/02examples/pathline_trace.ipynb index ee60db3..35fdda4 100644 --- a/docs/transient/02examples/pathline_trace.ipynb +++ b/docs/transient/02examples/pathline_trace.ipynb @@ -521,8 +521,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/well_in_multilayer_system.ipynb b/docs/transient/02examples/well_in_multilayer_system.ipynb index 28853be..a4925c8 100755 --- a/docs/transient/02examples/well_in_multilayer_system.ipynb +++ b/docs/transient/02examples/well_in_multilayer_system.ipynb @@ -222,8 +222,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/well_near_wall.ipynb b/docs/transient/02examples/well_near_wall.ipynb index 26e33ad..af4c2e4 100644 --- a/docs/transient/02examples/well_near_wall.ipynb +++ b/docs/transient/02examples/well_near_wall.ipynb @@ -108,8 +108,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/02examples/wells_in_different_systems.ipynb b/docs/transient/02examples/wells_in_different_systems.ipynb index 8f4fc8c..201c21b 100644 --- a/docs/transient/02examples/wells_in_different_systems.ipynb +++ b/docs/transient/02examples/wells_in_different_systems.ipynb @@ -266,8 +266,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/03xsections/1d_elements.ipynb b/docs/transient/03xsections/1d_elements.ipynb index e0120d2..9063f7e 100644 --- a/docs/transient/03xsections/1d_elements.ipynb +++ b/docs/transient/03xsections/1d_elements.ipynb @@ -596,8 +596,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/03xsections/1d_given_linesink.ipynb b/docs/transient/03xsections/1d_given_linesink.ipynb index 087be43..cb788f2 100755 --- a/docs/transient/03xsections/1d_given_linesink.ipynb +++ b/docs/transient/03xsections/1d_given_linesink.ipynb @@ -149,8 +149,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/03xsections/1d_inhom_elements.ipynb b/docs/transient/03xsections/1d_inhom_elements.ipynb index 3ee8450..6f347ff 100644 --- a/docs/transient/03xsections/1d_inhom_elements.ipynb +++ b/docs/transient/03xsections/1d_inhom_elements.ipynb @@ -630,8 +630,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/03xsections/river_in_cross_section.ipynb b/docs/transient/03xsections/river_in_cross_section.ipynb index d25609a..375fa94 100644 --- a/docs/transient/03xsections/river_in_cross_section.ipynb +++ b/docs/transient/03xsections/river_in_cross_section.ipynb @@ -291,9 +291,23 @@ "metadata": {}, "outputs": [], "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(10, 3))\n", + "ax.set_ylim(-30, 24)\n", "ml.plots.xsection(\n", - " xy=[(x0 - 25, 0), (100, 0)], labels=False, params=True, names=True, hstar=10, sep=\"\\n\"\n", - ")" + " xy=[(x0 - 0, 0), (60, 0)],\n", + " labels=True,\n", + " params=False,\n", + " names=True,\n", + " hstar=10,\n", + " sep=\"\\n\",\n", + " ax=ax,\n", + " units={\"k\": \"m/d\", \"Ss\": \"m$^{-1}$\", \"c\": \"d\"},\n", + " fontsize=8,\n", + ")\n", + "ax.set_xlabel(\"x-coordinate [m]\")\n", + "ax.set_ylabel(\"elevation [m]\")\n", + "fig.suptitle(\"Cross-section across a river of a semi-confined aquifer\")\n", + "fig.savefig(\"river_cross_section.png\", dpi=150, bbox_inches=\"tight\")" ] }, { @@ -440,7 +454,7 @@ "\n", "# set observation time series\n", "cal.series(\n", - " \"kruin\",\n", + " \"ObsWell 1\",\n", " xpb_kr,\n", " 0.0,\n", " layer=0,\n", @@ -448,7 +462,7 @@ " h=data_norm.loc[tstart:, \"kruin\"].values,\n", ")\n", "cal.series(\n", - " \"binnenteen\",\n", + " \"ObsWell 2\",\n", " xpb_bite,\n", " 0.0,\n", " layer=0,\n", @@ -551,14 +565,17 @@ "metadata": {}, "outputs": [], "source": [ - "ax = river.plot(labels=False, params=False, names=True)\n", - "foreland.plot(ax=ax, names=True)\n", - "hinterland.plot(ax=ax, params=False, names=True)\n", + "fig, ax = plt.subplots(1, 1, figsize=(10, 3))\n", + "river.plot(labels=False, params=True, names=True, ax=ax, sep=\"\\n\", fmt=\".1f\")\n", + "foreland.plot(ax=ax, params=True, names=True, sep=\"\\n\", fmt=\".1f\")\n", + "hinterland.plot(ax=ax, params=True, names=True, sep=\"\\n\", fmt=\".1f\")\n", "ml.elementlist[0].plot(ax=ax, hstar=10.0)\n", "ml.elementlist[1].plot(ax=ax, hstar=10.0)\n", "ax.set_xlim(x0, 100.0)\n", - "ax.set_ylim(-30, 20)\n", - "cal.xsection(ax=ax);" + "ax.set_ylim(-30, 27)\n", + "cal.xsection(ax=ax)\n", + "ax.set_ylabel(\"elevation [m]\")\n", + "ax.set_xlabel(\"x-coordinate [m]\")" ] }, { @@ -581,16 +598,24 @@ "\n", "t = data_norm.index.to_numpy()\n", "\n", - "f, axes = plt.subplots(len(xlocs), 1, figsize=(10, 6), sharex=True, sharey=True)\n", + "f, axes = plt.subplots(len(xlocs), 1, figsize=(10, 5), sharex=True, sharey=True)\n", "\n", "for i in range(len(xlocs)):\n", " h = ml.head(xlocs[i], 0.0, t)\n", - " axes[i].plot(t, h[0], label=\"model\")\n", + " axes[i].plot(t, h[0], label=\"timflow\")\n", " hobs = data_norm.loc[tstart:].iloc[:, i + 1] # showing calibration selection\n", " axes[i].plot(hobs.index, hobs, label=\"observed\")\n", - " axes[i].set_title(f\"x = {xlocs[i]} m\", loc=\"right\")\n", + " axes[i].set_title(f\"Observation well {i + 1} (x = {xlocs[i]} m)\", loc=\"right\")\n", " axes[i].legend(loc=(0, 1), frameon=False, ncol=2)\n", - " axes[i].grid()" + " axes[i].grid()\n", + "\n", + "for iax in axes:\n", + " iax.set_ylabel(\"head change [m]\")\n", + "axes[-1].set_xlabel(\"time [d]\")\n", + "axes[-1].figure.suptitle(\n", + " \"Calibration result of timflow cross-section model compared to observed heads.\"\n", + ")\n", + "axes[-1].figure.savefig(\"calibrated_head_response.png\", bbox_inches=\"tight\", dpi=150)" ] }, { @@ -633,8 +658,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/03xsections/stripareasink.ipynb b/docs/transient/03xsections/stripareasink.ipynb index 8810cef..6512f9d 100644 --- a/docs/transient/03xsections/stripareasink.ipynb +++ b/docs/transient/03xsections/stripareasink.ipynb @@ -690,8 +690,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/confined1_oude_korendijk.ipynb b/docs/transient/04pumpingtests/confined1_oude_korendijk.ipynb index acb713c..e0b771b 100644 --- a/docs/transient/04pumpingtests/confined1_oude_korendijk.ipynb +++ b/docs/transient/04pumpingtests/confined1_oude_korendijk.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -105,9 +105,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "self.neq 1\n", + "solution complete\n" + ] + } + ], "source": [ "# timflow model\n", "ml = tft.ModelMaq(kaq=60, z=[zt, zb], Saq=1e-4, tmin=1e-5, tmax=1)\n", @@ -125,9 +134,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".................................\n", + "Fit succeeded.\n" + ] + } + ], "source": [ "# unknown parameters: kaq, Saq\n", "cal = tft.Calibrate(ml)\n", @@ -140,9 +158,63 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
optimal
kaq_0_066.089354
Saq_0_00.000025
\n", + "
" + ], + "text/plain": [ + " optimal\n", + "kaq_0_0 66.089354\n", + "Saq_0_0 0.000025" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 0.050 m\n" + ] + } + ], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", "print(f\"RMSE: {cal.rmse():.3f} m\")" @@ -150,15 +222,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [], + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "hm1 = ml.head(ro1, 0, to1)\n", "hm2 = ml.head(ro2, 0, to2)\n", @@ -184,32 +261,72 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The performance of `timflow` was compared with AQTESOLV (Duffield, 2007), MLU (Carlson and Randall, 2012), and Kruseman and de Ridder (1970), here abbreviated to K&dR. Results from `timflow` and AQTESOLV are identical, those from MLU are very similar, while the solution of Kruseman and de Ridder shows small differences." + "The performance of `timflow` was compared with MLU (Hemker & Post, 2014), and Kruseman and de Ridder (1970), here abbreviated to K&dR. \n", + "\n", + "MLU included, compared to `timflow`, three observation wells in the calibration, located at 30, 90, and 215 m from the pumping well. The fit remains poor for the observations at 215 m, which explains the relatively large RMSE. The late-time drawdowns increase more slowly than the computed Theis drawdowns, which is likely caused by leakage (Kruseman and de Ridder, 1970; Hemker & Post, 2014).\n", + "\n", + "Since `timflow` only includes the first two observation wells (30 and 90 m), the fit to the data is better. However, the estimated parameters are quite similar to those obtained with MLU, while the solution reported by K&dR shows differences." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, - "outputs": [], + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 k [m/d]Ss [1/m]RMSE [m]
timflow66.092.54e-050.050
MLU63.513.58e-050.833
K&dR55.711.70e-041.293
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "t = pd.DataFrame(\n", " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"],\n", - " index=[\"timflow\", \"AQTESOLV\", \"MLU\", \"K&dR\"],\n", + " index=[\"timflow\", \"MLU\", \"K&dR\"],\n", ")\n", "\n", "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", - "t.loc[\"AQTESOLV\"] = [66.086, 2.541e-05, 0.05006]\n", - "t.loc[\"MLU\"] = [66.850, 2.400e-05, 0.05083]\n", - "t.loc[\"K&dR\"] = [55.71429, 1.7e-4, \"-\"]\n", + "t.loc[\"MLU\"] = [63.51428571, 3.58e-5, 0.832886547]\n", + "t.loc[\"K&dR\"] = [55.71429, 1.7e-4, 1.292710331]\n", "\n", "t_formatted = t.style.format(\n", " {\n", @@ -234,15 +351,22 @@ "## References\n", "\n", "* Bakker, M. (2013), Semi-analytic modeling of transient multi-layer flow with TTim, Hydrogeol J 21, 935–943, https://doi.org/10.1007/s10040-013-0975-2\n", - "* Carlson, F. and Randall, J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510\n", "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", + "* Hemker, K. en Post V. (2014) MLU for Windows: well flow modeling in multilayer aquifer systems; MLU User's guide. https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmicrofem.com%2Fdownload%2Fmlu-user.pdf&data=05%7C02%7CMark.Bakker%40tudelft.nl%7Cad7f16364d2d4fd55dbf08de73832eaa%7C096e524d692940308cd38ab42de0887b%7C0%7C0%7C639075204580287861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OBoe8seXZUfoat89Dfr4g6lF%2Bn1FdtXqtp%2F18BMXCn0%3D&reserved=0\n", "* Kruseman, G.P., De Ridder, N.A. and Verweij, J.M. (1970), Analysis and evaluationof pumping test data, volume 11, International institute for land reclamation and improvement The Netherlands." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -256,7 +380,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/confined2_grindley.ipynb b/docs/transient/04pumpingtests/confined2_grindley.ipynb index db6c4ec..805dec5 100644 --- a/docs/transient/04pumpingtests/confined2_grindley.ipynb +++ b/docs/transient/04pumpingtests/confined2_grindley.ipynb @@ -23,13 +23,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -100,13 +94,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# Loading Observation well (Well 1)\n", @@ -136,13 +124,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# known parameters\n", @@ -172,13 +154,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ml = tft.ModelMaq(kaq=10, z=[0, -H], Saq=0.001, tmin=0.001, tmax=1, topboundary=\"conf\")\n", @@ -215,13 +191,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# unknown parameters: kaq, Saq\n", @@ -238,13 +208,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", @@ -254,13 +218,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "hm1 = ml.head(r, 0, to1)\n", @@ -299,33 +257,30 @@ "tags": [] }, "source": [ - "The performance of `timflow` with two datasets simultaneously was compared with AQTESOLV (Duffield, 2007) and MLU (Carlson and Randall, 2012). Results from `timflow` with added wellbore storage and MLU are identical, while those from AQTESOLV show small differences." + "The performance of `timflow` is compared to the results based on Theis’ analytical solution (Theis, 1935), implemented in the software AQTESOLV (Duffield, 2007). \n", + "\n", + "Results from `timflow` with added wellbore storage differ largely from those from AQTESOLV. This difference is due to the missing wellborage storage in the AQTESOLV model." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, + "metadata": {}, "outputs": [], "source": [ "t = pd.DataFrame(\n", - " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"], index=[\"timflow\", \"AQTESOLV\", \"MLU\"]\n", + " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"], index=[\"timflow\", \"AQTESOLV\"]\n", ")\n", "\n", "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", - "t.loc[\"MLU\"] = [38.094, 1.193e-06, 0.259]\n", - "t.loc[\"AQTESOLV\"] = [37.803, 1.356e-06, 0.270]\n", + "t.loc[\"AQTESOLV\"] = [22.95, 0.000003722, \"-\"]\n", "\n", "t_formatted = t.style.format(\n", - " {\"k [m/d]\": \"{:.2f}\", \"Ss [1/m]\": \"{:.2e}\", \"RMSE [m]\": \"{:.3f}\"}\n", + " {\n", + " \"k [m/d]\": \"{:.2f}\",\n", + " \"Ss [1/m]\": \"{:.2e}\",\n", + " \"RMSE [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.3f}\",\n", + " }\n", ")\n", "t_formatted" ] @@ -347,15 +302,21 @@ "tags": [] }, "source": [ - "* Carlson, F. and Randall, J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510\n", "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", "* Walton, W.C. (1962), Selected analytical methods for well and aquifer evaluation, Illinois, department of Registration & Education.bulletin 49." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -369,7 +330,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/confined3_sioux.ipynb b/docs/transient/04pumpingtests/confined3_sioux.ipynb index 153e37f..d14cd69 100644 --- a/docs/transient/04pumpingtests/confined3_sioux.ipynb +++ b/docs/transient/04pumpingtests/confined3_sioux.ipynb @@ -29,13 +29,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -104,13 +98,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# time and drawdown of piezometer 100ft away from pumping well\n", @@ -145,13 +133,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# known parameters\n", @@ -168,13 +150,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# timflow model\n", @@ -199,13 +175,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# unknown parameters: k, Saq\n", @@ -221,13 +191,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", @@ -237,13 +201,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "hm1 = ml.head(r1, 0, t1)\n", @@ -273,33 +231,30 @@ }, "source": [ "### Comparison of results\n", - "The performance of `timflow` was compared with AQTESOLV (Duffield, 2007) and MLU (Carlson and Randall, 2012).`timflow` achieved similar results as the other software. " + "The performance of `timflow` is compared to the results based on Theis’ analytical solution (Theis, 1935), implemented in the software AQTESOLV (Duffield, 2007). \n", + "\n", + "`timflow` achieved similar results as AQTESOLV. " ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, + "metadata": {}, "outputs": [], "source": [ "t = pd.DataFrame(\n", - " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"], index=[\"timflow\", \"AQTESOLV\", \"MLU\"]\n", + " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"], index=[\"timflow\", \"AQTESOLV\"]\n", ")\n", "\n", "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", - "t.loc[\"AQTESOLV\"] = [282.659, 4.211e-03, 0.003925]\n", - "t.loc[\"MLU\"] = [282.684, 4.209e-03, 0.003897]\n", + "t.loc[\"AQTESOLV\"] = [282.659, 4.0355e-03, \"-\"]\n", "\n", "t_formatted = t.style.format(\n", - " {\"k [m/d]\": \"{:.2f}\", \"Ss [1/m]\": \"{:.2e}\", \"RMSE [m]\": \"{:.3f}\"}\n", + " {\n", + " \"k [m/d]\": \"{:.2f}\",\n", + " \"Ss [1/m]\": \"{:.2e}\",\n", + " \"RMSE [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.3f}\",\n", + " }\n", ")\n", "t_formatted" ] @@ -327,15 +282,21 @@ "tags": [] }, "source": [ - "* Carlson, F. and Randall, J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510\n", "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", "* Newville, M., Stensitzki, T., Allen, D.B., Ingargiola, A. (2014), LMFIT: Non Linear Least-Squares Minimization and Curve Fitting for Python, https://dx.doi.org/10.5281/zenodo.11813, https://lmfit.github.io/lmfit-py/intro.html (last access: August,2021)." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -349,7 +310,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/confined4_nevada.ipynb b/docs/transient/04pumpingtests/confined4_nevada.ipynb new file mode 100644 index 0000000..0e8310b --- /dev/null +++ b/docs/transient/04pumpingtests/confined4_nevada.ipynb @@ -0,0 +1,526 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Confined Aquifer Test - Nevada" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import packages" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import timflow.transient as tft\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = (5, 3) # default figure size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Introduction and Conceptual Model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example is taken from Kruseman and de Ridder (1990). It is based on a pumping test conducted in a fractured tertiary volcanic aquifer near Yucca Mountains, Nevada, US. \n", + "\n", + "The borehole extends to 1219 m depth and penetrates a 400 m thick sequence of fractured volcanic rocks with water entry points. At every entry point, the head is more or less the same, so they have good hydraulic connection. The water table is about 470 m below land surface, which indicates confined conditions. Drawdown data was monitored at the well, named ***UE-25b#1*** and at an observation well, named ***UE-25a#1***, 110 m away. Three pumping tests were conducted at the site and will be the object of our investigation. \n", + "\n", + "Although conventional Darcy flow does not apply to flow in discrete fractures, the fracture network at this site is sufficiently pervasive to justify the application of Darcy’s law at the aquifer scale. Groundwater flow to the well occurs through fractures, while the matrix exchanges water with the fracture network. For implementation in `timflow`, the fractured aquifer system is approximated using a ModelMaq configuration. This is achieved by representing the matrix as an upper aquifer layer, separated by a 1 m thick aquitard from a lower aquifer layer representing the fracture network." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "scrolled": true, + "tags": [ + "hide-input" + ] + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load Data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# time and drawdown of pumped well UE-25b#1\n", + "data1 = np.loadtxt(\"data/double-porosity-pumpingwell.txt\", skiprows=1)\n", + "t1 = data1[:, 0] # days\n", + "h1 = data1[:, 1] # m\n", + "\n", + "# time and drawdown of observation well UE-25a#1\n", + "data2 = np.loadtxt(\"data/double-porosity-110m.txt\", skiprows=1)\n", + "t2 = data2[:, 0]\n", + "h2 = data2[:, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Paramaters and model" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# known parameters\n", + "H = 400 # aquifer thickness in m\n", + "Q = 3093.12 # constant pumping rate in m^3/d\n", + "r = 110 # distance from pumping well to observation well in m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the `timflow` model, we will adopt the parameters for the first layer from the results obtained from Kruseman and de Ridder (1970). " + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "# parameters calculated by Kruseman and de Ridder (1970)\n", + "km = 0.1 / H # hydraulic conductivity of matrix\n", + "Sm = 3.75e-4 # specific storage of matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "self.neq 1\n", + "solution complete\n" + ] + } + ], + "source": [ + "ml = tft.ModelMaq(\n", + " kaq=[km, 1],\n", + " z=[0, -400, -401, -801],\n", + " c=5,\n", + " Saq=[Sm, 1e-3],\n", + " Sll=0,\n", + " topboundary=\"conf\",\n", + " tmin=1e-5,\n", + " tmax=3,\n", + ")\n", + "w = tft.Well(ml, xw=0, yw=0, rw=0.11, rc=0, tsandQ=[0, Q], layers=1)\n", + "ml.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Estimate aquifer parameters\n", + "The aquifer parameters are estimated using head observations at both wells." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".........................................................................................................................................................................................................\n", + "Fit succeeded.\n", + "[[Fit Statistics]]\n", + " # fitting method = leastsq\n", + " # function evals = 198\n", + " # data points = 138\n", + " # variables = 4\n", + " chi-square = 5.38947309\n", + " reduced chi-square = 0.04021995\n", + " Akaike info crit = -439.507237\n", + " Bayesian info crit = -427.798222\n", + "[[Variables]]\n", + " kaq_1_1: 0.87713604 +/- 0.00687861 (0.78%) (init = 10)\n", + " Saq_1_1: 5.0658e-06 +/- 4.9878e-07 (9.85%) (init = 0.0001)\n", + " c_1_1: 12.9124741 +/- 1.56932257 (12.15%) (init = 10)\n", + " rc: 0.10567818 +/- 0.00318208 (3.01%) (init = 0)\n", + "[[Correlations]] (unreported correlations are < 0.100)\n", + " C(kaq_1_1, c_1_1) = +0.8555\n", + " C(kaq_1_1, Saq_1_1) = -0.7271\n", + " C(Saq_1_1, c_1_1) = -0.5393\n", + " C(Saq_1_1, rc) = -0.4022\n" + ] + } + ], + "source": [ + "cal = tft.Calibrate(ml)\n", + "cal.set_parameter(name=\"kaq\", initial=10, layers=1)\n", + "cal.set_parameter(name=\"Saq\", initial=1e-4, pmin=0, layers=1)\n", + "cal.set_parameter(name=\"c\", initial=10, layers=1)\n", + "cal.set_parameter_by_reference(name=\"rc\", parameter=w.rc, initial=0)\n", + "\n", + "cal.seriesinwell(name=\"UE-25b#1\", element=w, t=t1, h=h1)\n", + "cal.series(name=\"UE-25a#1\", x=r, y=0, t=t2, h=h2, layer=1)\n", + "cal.fit(report=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
layersoptimalstdperc_stdpminpmaxinitialinhomsparray
kaq_1_11.00.8771366.878610e-030.784212-infinf10.0000None[[0.8771360363656927]]
Saq_1_11.00.0000054.987801e-079.8459950.0inf0.0001None[[5.0658166983463815e-06]]
c_1_11.012.9124741.569323e+0012.153539-infinf10.0000None[[12.912474111111717]]
rcNaN0.1056783.182079e-033.011103-infinf0.0000NaN[[0.1056781836698406]]
\n", + "
" + ], + "text/plain": [ + " layers optimal std perc_std pmin pmax initial \\\n", + "kaq_1_1 1.0 0.877136 6.878610e-03 0.784212 -inf inf 10.0000 \n", + "Saq_1_1 1.0 0.000005 4.987801e-07 9.845995 0.0 inf 0.0001 \n", + "c_1_1 1.0 12.912474 1.569323e+00 12.153539 -inf inf 10.0000 \n", + "rc NaN 0.105678 3.182079e-03 3.011103 -inf inf 0.0000 \n", + "\n", + " inhoms parray \n", + "kaq_1_1 None [[0.8771360363656927]] \n", + "Saq_1_1 None [[5.0658166983463815e-06]] \n", + "c_1_1 None [[12.912474111111717]] \n", + "rc NaN [[0.1056781836698406]] " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 0.19762123575324378\n" + ] + } + ], + "source": [ + "display(cal.parameters)\n", + "print(\"RMSE:\", cal.rmse())" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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uvTSS8nJyaFly5bcf//9XHrppU77v//+e4KCgkhOTmbXrl3cdNNNREVF8eSTTwKQkpJCx44dAXtrqsVi4Z133iE7OxuTyURkZCSjRo3ilVdeqf4PKSIiUsscSMt2ZBoAmwEPLthMn5b1a0XLq1pcz1BZF7i6Wl4zMzN59dVXefrppxk8eDBt27blzTffJDg4mLffftup7GOPPcbFF19Mhw4dmDt3LqmpqSxcuBCwB7jevXvToUMHmjZtyiWXXEKfPn3cUsdFixYRFhbm9Jg+fXqlj9++fTsvvvgi//jHPxzbwsLCmDVrFp988glff/01559/Ppdffjlffvml07EBAQH85z//oV27dgwdOpRp06bxwgsvYLPZAIiPj2fTpk2sWLECgLVr17J+/XoCAgJYsmQJmzZtYtq0aW74FkRERLzLgbRsFv2235FpClkNg11HsjxTqWLU4nqGdh7JLPMCV8d/mezYsYP8/Hyn29r+/v50796dP//806lsz549Hc/r1atHq1atHGUmTJjAHXfcwZIlS7jooou48sorHS2RZ6p///68+uqrTtsKW09vv/123n//fcf2kydPOpXbt28fgwYN4qqrrmLs2LGO7dHR0dxzzz2O1926dWP//v08/fTTTq2unTp1clpQomfPnpw8eZI9e/bQuHFj/Pz8SEpK4uOPP6Zbt2507NiRn376iZiYGLcFdxEREW9T9O5xcRaTiaTo2rFYk4LrGWoSHYrZhNOFrk0XuCy33norAwcO5Ouvv2bJkiXMmDGDWbNmcdddd5VaPjw8nLS0tBLbT5w4QUREhNO20NBQmjdvXup5pk2bxqRJk0rdt3//fvr370+vXr144403KvwM5513HkuXLq2wXFHt2rVj9+7d5OfnY7PZCAsLo6CggIKCAsLCwmjcuDH/+9//XDqniIiINyk+8Kr43eOiLCYT04e3rxXdBEBdBc5YXEQwM4Z3wHJqBaPqvsDNmjUjICCAn376ybEtPz+fdevW0bZtW6eyRaeKOn78OFu3bqVNmzaObQkJCdx+++0sWLCAe++9lzfffLPM923ZsiXr168vsX3Dhg20bNmy0vVv0KABzZs3dzwK7du3j379+nHuuecyZ84czOaKfzU3bdpEXFyc07Zff/2V7OzT3TTWrFlDWFgYCQkJACxevJhNmzYRGxvL+++/z6ZNm2jfvj2z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nqHY0Fge6/lYiT6u1TVAq1mzZgQEBPDTTz/RuHFjAPLz81m3bl2JqarWrFlDYqL9H6njx4+zdetW2rRp49ifkJDA7bffzu23384DDzzAm2++WWZwbdmyJevXry+xfcOGDbRq1arS9W/QoAENGjQosX3fvn3079+fc889lzlz5mA+tQ50eTZt2kRcXJzj9U8//cQrr7ziGGC2Z88ejhw54tgfHx/Ppk2bOHjwIBdddBGbNm3CarXSuXNnfvzxR+rVq0d4eHilP4uIuMBms68Pn7oZDm4+/TMtpexjTBaom3RqCc7mENXMPqF8RCJENHSav7O2qail80BaNtsPpnOiyExTZQXN4tv/Nag1//52S7lB09238MtS2TBaqLK37SsKoAqoZy8FVzcY3mI4veJ7sSdjDwl1Eqp1VoHQ0FDuuOMO7rvvPurVq0diYiJPPfUUWVlZ3HLLLU5lp02bRlRUFDExMTz00ENER0dz+eWXAzBx4kQGDx5My5YtOX78OMuWLXMKtcVNnDiRvn378uSTTzJ8+HCsVisffvghq1ev5pVXXnEqm5uby8GDB522+fn5ldl3dN++ffTr14/GjRvzzDPPcPjwYce+whkE5s6dS0BAAF26dAFgwYIF/Oc//+Gtt95ylG3RogXvvfceXbt2JT09nfvuu4/g4NP/sPn5+dG8eXN++eUXzjvvPFq3bs2KFSto2rQp3bt3L7Vu27dv5+TJkxw8eJDs7GzHPK5t27Z1zDErIsXYbPaW030bYP8G2L8JUv9nH3lfmpDoIuG0uWOteOomgZ9n/85KC6CVm86p7JbOovtNWPBP3Ev/NrGlBs3WsXVKbP/3N1uwFXvP4kHT3bfwy+NqH1KFTjkTCq5uEhsaW+3TYBWaOXMmNpuNG264gYyMDLp27cp///tf6tatW6LcP//5T7Zt20bnzp356quvHGHLarUyfvx49u7dS3h4OIMGDeK5554r8z179erFN998w7Rp05g1axZms5kOHTrw/fffO6bYKvTtt986tYQCtGrVii1btpR67qVLl7J9+3a2b99Oo0aNnPYZxul/SR9//HF2796Nn58frVu3Zv78+YwYMcKx/+233+a2227jnHPOISEhgenTp5faLSE5OZk+ffoAsHz5csfz0tx6660sX77c8bowOO/cuVN9YkUKndgD+345FVQ32oNqXkbJcn5B0KANxLS3P2LbQ4O29j6mblCZVs6y9ldmxaUZw+2DWd05nZOBiYe/+IMXQgJLDZrrdh0vdR5Sk8neDbhQ8aBZHbfwy6MwKjXFZBRNBj4oPT2diIgI0tLSStwGzsnJYefOnTRp0oSgoCAP1bB2s9lspKenEx4eXqnb91KzXPkdzs/PZ/GpEcz+tWAEs1SNx6+jzQaHt0DKKkhZA7tXQ/rekuX8QyCuE8SfA/FdIK4j1GtWbVM1udLKWXx/WRPa9y66nj1gBiglDK6c3N8R2lbtOMKoN9eWqN+HY3vQs1lUmftfurYLEz7aWOLcC8b15IpXVpXYfv/gVjz1zV9OQbO0Pq7Fw2h5A64OpGVr5H0VePxv0keUl9eKUouriIiUrSDX3oqastoeVFPW2NekL8IwWcis2xpTw3MJbdLNHlbrt3aEVEdrZkA+cRGn/2/HlemXKmotrcqk9X1a1gdwacUlqmE6J7OJMqdz6pRQ+vaR3RK5tFN8uUFTt/DFFym4iojIaTYbHPof7FgGfy/D2L0aU0G2cxn/EGjUDRr3Yll2U+5cYSFzfxDmAzAjsQMjYytu6XRl+qWKylZ10vpdR7IwMCo9oX1ZLa5nMp2TCYMnLmtX7nROZW2vTNBUGBVfo+AqInK2S9sHfy+Dv5Ptj8zTAyRNwBEjnF9srYhp348u5w+B2A5g8edAWja3FLmdXtmWztIGHJU14r0yo+OrOml94X5XJrQH3Dad047UdHZsWsNV557u219W0FQAFbFTcBUR8VFl3V4/ePgwx//3A4kn1hK690c4stX5QP9Qchr14Olt8aywdmCb0RAwYdlkYuWgNsSdWg2qqi2dpQ04KmvEe2VGx5/JpPWAyxPau2s6p+gQP47+WWYRESmFgquIiA8of4J6g5cG1GFI4O+krv+CqCPriTVZTx9sMtv7pTbrD037Q6NubNidztt/Og8ictfynN2S6lZ6xHtlR8efyaT1rk5or9ZPEc9RcBUR8RKlTVoPJfuA/mtQa2Z9u5nzTH9xsWU9F5o3krQ8FYAYABPsssWw0taen4yOPDbhH8TGOE9hV53Lc5Y14KisW+SulK3qpPUKoyLeQcFVRKSWKG/kfGmT1o/q0cSpD2gIOfQ1/UqD715hXcAGIkxZjuPzDAuHorrxdmoLfrB1Ybdxet7pG08GEBvjXJfqXp7TlRHvro6OFxHfpeAqIlILlDdyvqxJ6/u3iWXPvn1caU5mkHkd55s3E2jKd5zzqFGH763n8L3tHFYbHXjviguZW8qcoGWtkFTdy3O60sqpFlERAQVXEZEacSbzkBYfoBRFGgPMvxD80at0S11Nd/8Cx75dthi+s3WlfvcrmLQ6mHzDVKVb9IUUGEWkNlFw9RHJycn079+f48ePExkZWeXzZGVlccMNN7B06VIyMjI4evQonTt35u677+buu+92X4VFziJnOg9pk+hQok3pDDT/zFDzGs4z/4nFZMABe9nj4a1451hHFlu78TeNmD68A5d1S6R735IrIem2u4h4M63h6YX69evHxIkTnbb16tWLAwcOEBERcUbnnjt3Lj/++COrVq1yy/mqorTPB/DOO+84hfIpU6ZgMplKPFq3bl3muY8dO8Zdd91Fq1atCA4OJjExkQkTJpCWluZUrrTzfvTRR1X+TOvWrSM+Ph6A/fv3ExwcTF5enlOZJ598kl69ehESEnJG//EhnncgLZtVO45wIC27zNbUA2mnJ/UvHAhVlMVkokmdAtg0j7gvr+PnoPE86f8feln+wGIyOBreFv7vMbhrA3Xv+Zlr7nuRabeOYOXkCx2hOC4imJ7NokodFV/adhGR2k4trj4iICCA2NjYigtWYMeOHbRp04b27e0TbdtstjM+Z3Vq164d3333ndM2P7+yf63379/P/v37eeaZZ2jbti27d+/m9ttvZ//+/Xz66adOZefMmcOgQYMcr88kTK5evZrevXsD8OOPP9K1a1cCAgKcyuTl5XHVVVfRs2dP3n777Sq/l3hW8dbVW89v4tI8pH5GLhdbNjK50WZiXx8DVvsUAmYgr0FH9jUczIaMBlw6cjQUWRddt/RF5GygFlcvM2bMGJYvX87zzz/vaAnctWsXycnJmEwmTpw4AZxunVy0aBGtWrUiJCSEESNGkJWVxdy5c0lKSqJu3bpMmDABq9U+n2O/fv2YNWsWK1aswGQy0a9fv1LrkJKSwmWXXUZYWBjh4eFcffXVpKbap9pJS0vDYrHwyy+/APbgW69ePXr06OE4/v333ychIcEt34efnx+xsbFOj+jo6DLLt2/fns8++4xhw4bRrFkzLrzwQp588km++uorCgoKnMpGRkY6nTcoKMixb8eOHVx22WXExMQQFhZGt27dSgToolatWuUIritXrnQ8L2rq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REZGlltuypQpdO7c2el14bGzZ8+u1jqKiLhCwVVExE369evHxIkTnbb16tWLAwcOEBER4ZE6zZkzh61bt7p0zKRJkzhw4ACNGjWqplqJiFSNn6crICLiywICAoiNjfXY+0dGRtKgQQOXjgkLCyMsLAyLxVJNtRIRqRq1uIqIuMGYMWNYvnw5zz//vOM2+65du0p0FXjnnXeIjIxk0aJFtGrVipCQEEaMGEFWVhZz584lKSmJunXrMmHCBKxWq+P8ubm5TJo0iYYNGxIaGsp5551HcnJyleo6c+ZMYmJiqFOnDrfccgs5OTlu+AZERKqfgquIiBs8//zz9OzZk7Fjx3LgwAEOHDhAQkJCqWWzsrJ44YUX+Oijj/j2229JTk7miiuuYPHixSxevJj33nuP119/nU8//dRxzJ133snq1av56KOP+O2337jqqqsYNGgQ27Ztc6meH3/8MVOmTGH69On88ssvxMXF8corr5zRZxcRqSnqKiAi4gYREREEBAQQEhJSYdeA/Px8Xn31VZo1awbAiBEjeO+990hNTSUsLIy2bdvSv39/li1bxsiRI0lJSWHOnDmkpKQQHx8P2Puhfvvtt8yZM4fp06dXup6zZ8/mlltu4ZZbbgHgiSee4LvvvlOrq4h4BbW4iojUsJCQEEdoBYiJiSEpKYmwsDCnbYcOHQLg999/x2q10rJlS0f/07CwMJYvX86OHTtceu8///yT8847z2lbz549z+DTiIjUHLW4iojUMH9/f6fXJpOp1G02mw2AkydPYrFYWL9+fYkBU0XDroiIr1NwFRFxk4CAAKcBVe7SpUsXrFYrhw4d4oILLjijc7Vp04a1a9dy4403OratWbPmTKsoIlIjFFxFRNwkKSmJtWvXsmvXLsLCwqhXr55bztuyZUuuu+46brzxRmbNmkWXLl04fPgw33//PR07dmTo0KGVPtc///lPxowZQ9euXenduzcffPAB//vf/2jatKlb6ioiUp3Ux1VExE0mTZqExWKhbdu21K9fn5SUFLede86cOdx4443ce++9tGrVissvv5x169aRmJjo0nlGjhzJI488wv3338+5557L7t27ueOOO9xWTxGR6mQyDMPwdCVERMT9TCYTCxcu5PLLL6/S8UlJSUycOLHEamAiIp6iFlcRER927bXXurx06/Tp0wkLC3Nri7GIiDuoxVVExEdt374dAIvFQpMmTSp93LFjxzh27BgA9evXJyIiolrqJyLiKgVXEREREfEK6iogIiIiIl5BwVVE/r/dOiABAAAAEPT/dTsCXSEALIgrAAAL4goAwIK4AgCwIK4AACyIKwAAC+IKAMCCuAIAsBBoUs5VbpqHdgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hm1 = w.headinside(t1)\n", + "hm2 = ml.head(r, 0, t2)\n", + "plt.figure(figsize=(8, 5))\n", + "plt.semilogx(t1, -h1, \".\", label=\"obs UE-25b#1\")\n", + "plt.semilogx(t1, -hm1[-1], label=\"timflow UE-25b#1\")\n", + "plt.semilogx(t2, -h2, \".\", label=\"obs UE-25a#1\")\n", + "plt.semilogx(t2, -hm2[-1], label=\"timflow UE-25a#1\")\n", + "plt.xlabel(\"time [d]\")\n", + "plt.ylabel(\"drawdown [m]\")\n", + "plt.title(\"Model Results\")\n", + "plt.legend()\n", + "plt.grid();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison of results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The performance of `timflow` was evaluated by comparison to the results obtained from the software AQTESOLV (Duffield, 2007), MLU (Hemker & Post, 2014), and Kruseman and de Ridder (1990), here abbreviated to K&dR.\n", + "\n", + "The problem is solved in AQTESOLV using a double-porosity analytical solution proposed by Moench (1984). The MLU (Hemker & Post, 2014) solution used a similar approach to our `timflow` model by simulating the matrix as a very-low transmissivity aquifer on top of the fractured aquifer and separated by a zero-storage aquitard. However, the calibrated MLU model only fits the observations of well UE-25b#1. When the observations of well UE-25a#1 are included, the fit is not as good as initially thought. Kruseman et al. (1990) solved the problem using a graphical method, where the transmissivity was calculated as one aquifer and the storativity was separated between matrix and fractures. \n", + "\n", + "Overall, `timflow` showed similar results to MLU but with a better fit since both observation wells are taken into account with the `timflow` model. While the AQTESOLV obtained the best fit using Moench's analytical solution." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 km [m/d]Sm [1/m]kf [m/d]Sf [1/m]c [d]rc [m]RMSE [m]
timflow0.003.75e-040.885.07e-0612.910.110.198
AQTESOLV0.155.48e-040.941.95e-03-0.11-
MLU0.003.75e-040.848.05e-065.20--
K&dR0.833.75e-040.834.00e-06---
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = pd.DataFrame(\n", + " columns=[\n", + " \"km [m/d]\",\n", + " \"Sm [1/m]\",\n", + " \"kf [m/d]\",\n", + " \"Sf [1/m]\",\n", + " \"c [d]\",\n", + " \"rc [m]\",\n", + " \"RMSE [m]\",\n", + " ],\n", + " index=[\"timflow\", \"AQTESOLV\", \"MLU\", \"K&dR\"],\n", + ")\n", + "\n", + "t.loc[\"timflow\"] = np.concatenate(\n", + " [np.array([0.00025, 3.750e-04]), cal.parameters[\"optimal\"].values, [cal.rmse()]]\n", + ")\n", + "t.loc[\"AQTESOLV\"] = [0.1513, 5.4800e-4, 0.9366, 1.9508e-3, \"-\", 0.11, \"-\"]\n", + "t.loc[\"MLU\"] = [0.00025, 3.750e-04, 0.8351125, 8.05e-6, 5.2035, \"-\", \"-\"]\n", + "t.loc[\"K&dR\"] = [0.8325, 3.750e-4, 0.8325, 4.000e-6, \"-\", \"-\", \"-\"]\n", + "\n", + "t_formatted = t.style.format(\n", + " {\n", + " \"km [m/d]\": \"{:.2f}\",\n", + " \"Sm [1/m]\": \"{:.2e}\",\n", + " \"kf [m/d]\": \"{:.2f}\",\n", + " \"Sf [1/m]\": \"{:.2e}\",\n", + " \"c [d]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.2f}\",\n", + " \"rc [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.2f}\",\n", + " \"RMSE [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.3f}\",\n", + " }\n", + ")\n", + "t_formatted" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reference\n", + "\n", + "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", + "* Hemker, K. en Post V. (2014) MLU for Windows: well flow modeling in multilayer aquifer systems; MLU User's guide. https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmicrofem.com%2Fdownload%2Fmlu-user.pdf&data=05%7C02%7CMark.Bakker%40tudelft.nl%7Cad7f16364d2d4fd55dbf08de73832eaa%7C096e524d692940308cd38ab42de0887b%7C0%7C0%7C639075204580287861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OBoe8seXZUfoat89Dfr4g6lF%2Bn1FdtXqtp%2F18BMXCn0%3D&reserved=0\n", + "* Kruseman, G.P. and De Ridder, N.A. (1990), Analysis and evaluation of pumping test data, 2nd edn. ILRI Publ. 47, ILRI, Wageningen, The Netherlands\n", + "* Moench, A.F. (1984), Double-Porosity Models for a Fissured Groundwater Reservoir With Fracture Skin, Water Resour. Res., 20( 7), 831– 846, doi:10.1029/WR020i007p00831." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/transient/04pumpingtests/data/schroth_obs3.txt b/docs/transient/04pumpingtests/data/schroth_obs3.txt new file mode 100644 index 0000000..365a502 --- /dev/null +++ b/docs/transient/04pumpingtests/data/schroth_obs3.txt @@ -0,0 +1,11 @@ +# time (d), head (m) +0.013889 -0.010 +0.020833 -0.025 +0.027778 -0.050 +0.041667 -0.080 +0.055556 -0.110 +0.069444 -0.130 +0.104167 -0.180 +0.138889 -0.210 +0.208333 -0.240 +0.277778 -0.270 \ No newline at end of file diff --git a/docs/transient/04pumpingtests/figs/Dawsonville.png b/docs/transient/04pumpingtests/figs/Dawsonville.png new file mode 100644 index 0000000..b5464b2 Binary files /dev/null and b/docs/transient/04pumpingtests/figs/Dawsonville.png differ diff --git a/docs/transient/04pumpingtests/figs/Moench.png b/docs/transient/04pumpingtests/figs/Moench.png new file mode 100644 index 0000000..a892c7e Binary files /dev/null and b/docs/transient/04pumpingtests/figs/Moench.png differ diff --git a/docs/transient/04pumpingtests/figs/Nevada.png b/docs/transient/04pumpingtests/figs/Nevada.png new file mode 100644 index 0000000..cc4353e Binary files /dev/null and b/docs/transient/04pumpingtests/figs/Nevada.png differ diff --git a/docs/transient/04pumpingtests/figs/Schroth.png b/docs/transient/04pumpingtests/figs/Schroth.png new file mode 100644 index 0000000..8823895 Binary files /dev/null and b/docs/transient/04pumpingtests/figs/Schroth.png differ diff --git a/docs/transient/04pumpingtests/figs/Vennebulten.png b/docs/transient/04pumpingtests/figs/Vennebulten.png new file mode 100644 index 0000000..aa23334 Binary files /dev/null and b/docs/transient/04pumpingtests/figs/Vennebulten.png differ diff --git a/docs/transient/04pumpingtests/leaky1_dalem.ipynb b/docs/transient/04pumpingtests/leaky1_dalem.ipynb index 30e1aa6..7e2a1a3 100644 --- a/docs/transient/04pumpingtests/leaky1_dalem.ipynb +++ b/docs/transient/04pumpingtests/leaky1_dalem.ipynb @@ -29,13 +29,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -92,13 +86,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# data of observation well 30 m away from pumping well\n", @@ -138,13 +126,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# known parameters\n", @@ -176,13 +158,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# unkonwn parameters: kaq, Saq, c\n", @@ -210,13 +186,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "cal = tft.Calibrate(ml)\n", @@ -234,13 +204,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", @@ -250,13 +214,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "hm_1 = ml.head(r1, 0, t1)\n", @@ -335,7 +293,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The performance of `timflow` is compared with other models and with parameter values reported in Kruseman and de Ridder (1970). The published values were obtained by graphical matching to a Hantush type curve (Hantush, 1955). In addition to the `timflow` results and the literature values, results from AQTESOLV (Duffield, 2007) and MLU (Carlson & Randall, 2012) are included for comparison. Both AQTESOLV and MLU were applied to minimize the sum of the squared log-transformed drawdowns. \n", + "The performance of `timflow` is compared with other models and with parameter values reported in Kruseman and de Ridder (1970). The published values were obtained by graphical matching to a Hantush type curve (Hantush, 1955). In addition to the `timflow` results and the literature values, results from AQTESOLV (Duffield, 2007) and MLU (Hemker & Post, 2014) are included for comparison. Both AQTESOLV and MLU were applied to minimize the sum of the squared log-transformed drawdowns. AQTESOLV only fitted the model to the observation well at r = 90 m, whereas the other models were calibrated using data from multiple observation wells.\n", "\n", "Overall, all models yield similar estimates of the hydraulic conductivity and specific storage coefficient. The fitted value of the resistance differs. However, the `timflow` results differ substantially from the MLU and AQTESOLV solutions with respect to aquitard storage and hydraulic resistance." ] @@ -343,13 +301,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "t = pd.DataFrame(\n", @@ -361,8 +313,8 @@ "t.loc[\"timflow weights\"] = np.append(\n", " cal2.parameters[\"optimal\"].values, cal2.rmse(weighted=False)\n", ")\n", - "t.loc[\"AQTESOLV\"] = [49.286, 4.559e-05, 745.156, 0.007245]\n", - "t.loc[\"MLU\"] = [45.186, 3.941e-05, 769.200, 0.005941]\n", + "t.loc[\"AQTESOLV\"] = [41.5575, 4.4625e-05, 327.920, 0.03818]\n", + "t.loc[\"MLU\"] = [45.297, 4.865e-05, 328, 0.042426]\n", "t.loc[\"Hantush\"] = [45.332, 4.762e-5, 331.141, 0.005917]\n", "\n", "t_formatted = t.style.format(\n", @@ -378,16 +330,23 @@ "## References\n", "\n", "* Bakker, M. (2013), Semi-analytic modeling of transient multi-layer flow with TTim, Hydrogeol J 21, 935–943, https://doi.org/10.1007/s10040-013-0975-2 \n", - "* Carlson, F. and Randall, J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510.\n", "* Duffield, G.M., (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", + "* Hemker, K. en Post V. (2014) MLU for Windows: well flow modeling in multilayer aquifer systems; MLU User's guide. https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmicrofem.com%2Fdownload%2Fmlu-user.pdf&data=05%7C02%7CMark.Bakker%40tudelft.nl%7Cad7f16364d2d4fd55dbf08de73832eaa%7C096e524d692940308cd38ab42de0887b%7C0%7C0%7C639075204580287861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OBoe8seXZUfoat89Dfr4g6lF%2Bn1FdtXqtp%2F18BMXCn0%3D&reserved=0\n", "* Kruseman, G.P., De Ridder, N.A. and Verweij, J.M., (1970), Analysis and evaluationof pumping test data, volume 11, International institute for land reclamation and improvement The Netherlands.\n", "* Newville, M., Stensitzki, T., Allen, D.B. and Ingargiola, A. (2014), LMFIT: Non Linear Least-Squares Minimization and Curve Fitting for Python, https://dx.doi.org/10.5281/zenodo.11813, https://lmfit.github.io/lmfit-py/intro.html (last access: August,2021)." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -401,7 +360,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/leaky2_hardixveld.ipynb b/docs/transient/04pumpingtests/leaky2_hardixveld.ipynb index 930504f..3e51f70 100644 --- a/docs/transient/04pumpingtests/leaky2_hardixveld.ipynb +++ b/docs/transient/04pumpingtests/leaky2_hardixveld.ipynb @@ -29,13 +29,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -93,13 +87,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "data = np.loadtxt(\"data/recovery.txt\", skiprows=1)\n", @@ -123,13 +111,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# known parameters\n", @@ -144,13 +126,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# model with impermeable top and bottom\n", @@ -169,13 +145,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "cal = tft.Calibrate(ml)\n", @@ -190,13 +160,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", @@ -206,13 +170,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# model with semi-confining top\n", @@ -232,13 +190,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "cal1 = tft.Calibrate(ml1)\n", @@ -253,13 +205,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal1.parameters[\"optimal\"])\n", @@ -269,13 +215,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "tm = np.logspace(np.log10(to[0]), np.log10(to[-1]), 100)\n", @@ -314,21 +254,19 @@ "tags": [] }, "source": [ - "The performance of `timflow` is compared to MLU (Carlson and Randall, 2012). The MLU parameters are similar to the `timflow` parameters for the confined case. The semi-confined case gives somewhat lower RMSE and a slightly better fit. It is noted that this model is exceedingly sensitive to the specified moment that the well is turned off. Even a change of 1 second will produce significantly different results. " + "The performance of `timflow` is compared to MLU (Hemker and Post, 2014). \n", + "\n", + "With the MLU the deeper layers are also included in the aquifer system. Although little information about the deeper layers\n", + "is available, they are included because of the principle that including guessed properties of little-known layers is preferable to disregarding them altogether. The entered values for c1 and c2 (1000 d), T2 (800 m2/d) and S2 (0.001) are rough estimates,\n", + "based on regional pumping test information.\n", + "\n", + "The MLU parameters are similar to the `timflow` parameters for the confined case. The semi-confined case gives somewhat lower RMSE and a slightly better fit. It is noted that this model is exceedingly sensitive to the specified moment that the well is turned off. Even a change of 1 second will produce significantly different results. " ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, + "metadata": {}, "outputs": [], "source": [ "t = pd.DataFrame(\n", @@ -338,7 +276,7 @@ "\n", "t.loc[\"timflow confined\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", "t.loc[\"timflow semi-confined\"] = np.append(cal1.parameters[\"optimal\"].values, cal1.rmse())\n", - "t.loc[\"MLU\"] = [51.530, 8.16e-04, 0.022, 0.00756]\n", + "t.loc[\"MLU\"] = [48.94241, 1.037e-05, 0.0007349, 0.00756]\n", "\n", "t_formatted = t.style.format(\n", " {\"k [m/d]\": \"{:.2f}\", \"Ss [1/m]\": \"{:.2e}\", \"res\": \"{:.3f}\", \"RMSE [m]\": \"{:.4f}\"}\n", @@ -352,15 +290,21 @@ "source": [ "## References\n", "\n", - "* Carlson F. and Randall J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510\n", - "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", + "* Hemker, K. en Post V. (2014) MLU for Windows: well flow modeling in multilayer aquifer systems; MLU User's guide. https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmicrofem.com%2Fdownload%2Fmlu-user.pdf&data=05%7C02%7CMark.Bakker%40tudelft.nl%7Cad7f16364d2d4fd55dbf08de73832eaa%7C096e524d692940308cd38ab42de0887b%7C0%7C0%7C639075204580287861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OBoe8seXZUfoat89Dfr4g6lF%2Bn1FdtXqtp%2F18BMXCn0%3D&reserved=0\n", "* Newville, M., Stensitzki, T., Allen, D.B. and Ingargiola, A. (2014), LMFIT: Non Linear Least-Squares Minimization and Curve Fitting for Python, https://dx.doi.org/10.5281/zenodo.11813, https://lmfit.github.io/lmfit-py/intro.html (last access: August,2021)." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -374,7 +318,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/leaky3_texashill.ipynb b/docs/transient/04pumpingtests/leaky3_texashill.ipynb index 7ed25dc..351f2fd 100644 --- a/docs/transient/04pumpingtests/leaky3_texashill.ipynb +++ b/docs/transient/04pumpingtests/leaky3_texashill.ipynb @@ -23,13 +23,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -87,13 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# data of OW1\n", @@ -131,13 +119,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# known parameters\n", @@ -165,13 +147,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ml = tft.ModelMaq(\n", @@ -205,13 +181,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# unknown parameters: kaq, Saq, c\n", @@ -228,13 +198,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", @@ -244,13 +208,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# plot the fitted curves\n", @@ -298,15 +256,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, + "metadata": {}, "outputs": [], "source": [ "t = pd.DataFrame(\n", @@ -314,11 +264,16 @@ " index=[\"timflow\", \"AQTESOLV\"],\n", ")\n", "\n", - "t.loc[\"AQTESOLV\"] = [224.726, 2.125e-4, 43.964, 0.059627]\n", + "t.loc[\"AQTESOLV\"] = [224.723, 2.124e-4, 43.998, \"-\"]\n", "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", "\n", "t_formatted = t.style.format(\n", - " {\"k [m/d]\": \"{:.2f}\", \"Ss [1/m]\": \"{:.2e}\", \"c [d]\": \"{:.2f}\", \"RMSE [m]\": \"{:.3f}\"}\n", + " {\n", + " \"k [m/d]\": \"{:.2f}\",\n", + " \"Ss [1/m]\": \"{:.2e}\",\n", + " \"c [d]\": \"{:.2f}\",\n", + " \"RMSE [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.3f}\",\n", + " }\n", ")\n", "t_formatted" ] @@ -329,15 +284,21 @@ "source": [ "## References\n", "\n", - "* Carlson F. and Randall J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510.\n", "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", "* Newville, M.,Stensitzki, T., Allen, D.B. and Ingargiola, A. (2014), LMFIT: Non Linear Least-Squares Minimization and Curve Fitting for Python, https://dx.doi.org/10.5281/zenodo.11813, https://lmfit.github.io/lmfit-py/intro.html (last access: August,2021)." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -351,7 +312,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/slug1_pratt_county.ipynb b/docs/transient/04pumpingtests/slug1_pratt_county.ipynb index 92a1eb6..2dbe096 100644 --- a/docs/transient/04pumpingtests/slug1_pratt_county.ipynb +++ b/docs/transient/04pumpingtests/slug1_pratt_county.ipynb @@ -29,13 +29,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -103,13 +97,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "data = np.loadtxt(\"data/slug.txt\", skiprows=1)\n", @@ -133,13 +121,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "rw = 0.125 # well radius, m\n", @@ -167,13 +149,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "Q = np.pi * rc**2 * H0 # instantaneous discharge\n", @@ -197,13 +173,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ml = tft.Model3D(kaq=10, z=[0, zt, zb, -b], Saq=1e-4, kzoverkh=1, tmin=1e-6, tmax=0.01)\n", @@ -228,13 +198,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "cal = tft.Calibrate(ml)\n", @@ -247,13 +211,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", @@ -263,13 +221,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "tm = np.logspace(np.log10(to[0]), np.log10(to[-1]), 100)\n", @@ -313,15 +265,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, + "metadata": {}, "outputs": [], "source": [ "t = pd.DataFrame(\n", @@ -353,11 +297,18 @@ "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", "* Hyder, Z., Butler Jr, J.J., McElwee, C.D. and Liu, W. (1994), Slug tests in partially penetrating wells, Water Resources Research 30, 2945–2957." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -371,7 +322,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/slug2_multiwell.ipynb b/docs/transient/04pumpingtests/slug2_multiwell.ipynb index 90fee63..50f2705 100644 --- a/docs/transient/04pumpingtests/slug2_multiwell.ipynb +++ b/docs/transient/04pumpingtests/slug2_multiwell.ipynb @@ -28,14 +28,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "execution_count": 1, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -59,7 +53,7 @@ "source": [ "## Introduction and Conceptual Model\n", "\n", - "A well (Ln-2) fully penetrates a sandy confined aquifer of 6.1 m thickness. Additionally, a fully penetrating observation well (Ln-3) is located 6.45 m away from the test well. The slug displacement is 2.798 m. Head change was recorded at the slug well and the observation well. The well and casing radii of the slug well are 0.102 and 0.051 m, respectively. For the observation well, they are 0.051 and 0.025 m, respectively." + "A well (Ln-2) fully penetrates a sandy confined aquifer of 6.1 m thickness. Additionally, a fully penetrating observation well (Ln-3) is located 6.45 m away from the test well. The slug displacement is 2.798 m. Head change was recorded at the slug well and the observation well. The well and casing radii of the slug well are 0.102 and 0.051 m, respectively. For the observation well, they are 0.071 and 0.025 m, respectively." ] }, { @@ -90,14 +84,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "data1 = np.loadtxt(\"data/ln-2.txt\")\n", @@ -124,14 +112,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "# known parameters\n", @@ -158,15 +140,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [], + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Slug: 0.02286 m^3\n" + ] + } + ], "source": [ "Q = np.pi * rc1**2 * H0\n", "print(f\"Slug: {Q:.5f} m^3\")" @@ -174,15 +158,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [], + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "self.neq 1\n", + "solution complete\n" + ] + } + ], "source": [ "ml = tft.ModelMaq(kaq=10, z=[0, -b], Saq=1e-4, tmin=1e-5, tmax=0.01)\n", "w = tft.Well(ml, xw=0, yw=0, rw=rw1, rc=rc1, tsandQ=[(0, -Q)], layers=0, wbstype=\"slug\")\n", @@ -205,15 +192,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [], + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "...................................\n", + "Fit succeeded.\n" + ] + } + ], "source": [ "# unknown parameters: kaq, Saq\n", "cal = tft.Calibrate(ml)\n", @@ -226,15 +216,63 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
optimal
kaq_0_01.166107
Saq_0_00.000009
\n", + "
" + ], + "text/plain": [ + " optimal\n", + "kaq_0_0 1.166107\n", + "Saq_0_0 0.000009" + ] + }, + "metadata": {}, + "output_type": "display_data" }, - "tags": [] - }, - "outputs": [], + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 0.01024 m\n" + ] + } + ], "source": [ "display(cal.parameters.loc[:, [\"optimal\"]])\n", "print(f\"RMSE: {cal.rmse():.5f} m\")" @@ -242,15 +280,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [], + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "hm1 = w.headinside(t1)\n", "hm2 = ml.head(r, 0, t2, layers=0)\n", @@ -277,22 +320,59 @@ "source": [ "### Comparison of results\n", "\n", - "The values in `timflow` are compared with the KGS analytical model (Hyder et al. 1994) implemented in AQTESOLV (Duffield, 2007), and to the MLU model (Carlson & Randall, 2012). The parameters of all three models are very similar." + "The values in `timflow` are compared with the KGS analytical model (Hyder et al. 1994) implemented in AQTESOLV (Duffield, 2007), and to the MLU model (Hemker & Post, 2014). The parameters of `timflow`and AQTESOLV are very similar. MLU differs a bit, this is likely due to the added skin resistance (skin factor of 2.42). " ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, - "outputs": [], + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 k [m/d]Ss [1/m]RMSE [m]
timflow1.179.38e-060.010
AQTESOLV1.179.37e-06-
MLU1.318.20e-06-
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "t = pd.DataFrame(\n", " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"],\n", @@ -300,11 +380,15 @@ ")\n", "\n", "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", - "t.loc[\"AQTESOLV\"] = [1.166, 9.368e-06, 0.009151]\n", - "t.loc[\"MLU\"] = [1.311, 8.197e-06, 0.010373]\n", + "t.loc[\"AQTESOLV\"] = [1.166, 9.369e-06, \"-\"]\n", + "t.loc[\"MLU\"] = [1.311, 8.197e-06, \"-\"]\n", "\n", "t_formatted = t.style.format(\n", - " {\"k [m/d]\": \"{:.2f}\", \"Ss [1/m]\": \"{:.2e}\", \"RMSE [m]\": \"{:.3f}\"}\n", + " {\n", + " \"k [m/d]\": \"{:.2f}\",\n", + " \"Ss [1/m]\": \"{:.2e}\",\n", + " \"RMSE [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.3f}\",\n", + " }\n", ")\n", "t_formatted" ] @@ -322,15 +406,22 @@ "### References\n", "\n", "* Butler Jr., J.J. (1998), The Design, Performance, and Analysis of Slug Tests, Lewis Publishers, Boca Raton, Florida, 252p.\n", - "* Carlson F. and Randall J. (2012), MLU: a Windows application for the analysis of aquifer tests and the design of well fields in layered systems, Ground Water 50(4):504–510.\n", + "* Hemker, K. and Post V. (2014) MLU for Windows: well flow modeling in multilayer aquifer systems; MLU User's guide. https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmicrofem.com%2Fdownload%2Fmlu-user.pdf&data=05%7C02%7CMark.Bakker%40tudelft.nl%7Cad7f16364d2d4fd55dbf08de73832eaa%7C096e524d692940308cd38ab42de0887b%7C0%7C0%7C639075204580287861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OBoe8seXZUfoat89Dfr4g6lF%2Bn1FdtXqtp%2F18BMXCn0%3D&reserved=0\n", "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", "* Hyder, Z., Butler Jr, J.J., McElwee, C.D. and Liu, W. (1994), Slug tests in partially penetrating wells, Water Resources Research 30, 2945–2957." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -344,7 +435,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/docs/transient/04pumpingtests/slug3_falling_head.ipynb b/docs/transient/04pumpingtests/slug3_falling_head.ipynb new file mode 100644 index 0000000..3c4bb4a --- /dev/null +++ b/docs/transient/04pumpingtests/slug3_falling_head.ipynb @@ -0,0 +1,327 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "# 3. Slug Test - Falling Head" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import timflow.transient as tft\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = [5, 3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Introduction and Conceptual Model\n", + "\n", + "A well partially penetrates a sandy unconfined aquifer that has a saturated depth of 32.57 ft. The top of the screen is located 0.47 ft below the water table and has 13.8 ft in length. The well and casing radii are 5 and 2 inches, respectively. The slug displacement is 1.48 ft. Head change has been recorded at the slug well. This slug test, taken from the AQTESOLV examples (Duffield, 2007), was reported in Batu (1998). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = np.loadtxt(\"data/falling_head.txt\", skiprows=2)\n", + "to = data[:, 0] / 60 / 60 / 24 # convert time from seconds to days\n", + "ho = (10 - data[:, 1]) * 0.3048 # convert drawdown from ft to meters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameters and model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rw = 5 * 0.0254 # well radius, m\n", + "rc = 2 * 0.0254 # well casing radius, m\n", + "L = 13.8 * 0.3048 # screen length, m\n", + "b = 32.57 * 0.3048 # aquifer thickness, m\n", + "zt = 0 # top of aquifer, m\n", + "zst = -0.47 * 0.3048 # top of screen, m\n", + "zsb = zst - L # bottom of screen, m\n", + "zb = zt - b # bottom of aquifer, m\n", + "H0 = 1.48 * 0.3048 # initial displacement in well, m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "convert measured displacement into volume" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Q = np.pi * rc**2 * H0\n", + "print(f\"slug: {Q:.5f} m^3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will create a multi-layer model. For this, we divide the second and third layers into 0.5 m thick layers. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# z = np.array([zt, zt - 0.1, zst, zsb, zb])\n", + "z = np.hstack(\n", + " (\n", + " zt,\n", + " np.linspace(zt - 0.01, zst, 5)[:-1],\n", + " np.linspace(zst, zsb, 5)[:-1],\n", + " np.linspace(zsb, zb, 10),\n", + " )\n", + ")\n", + "nlay = len(z) - 1\n", + "nlay" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "z" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ml = tft.Model3D(\n", + " kaq=10,\n", + " z=z,\n", + " Saq=[0.1] + (nlay - 1) * [1e-4],\n", + " kzoverkh=1,\n", + " tmin=1e-5,\n", + " tmax=0.01,\n", + " phreatictop=True,\n", + ")\n", + "w = tft.Well(\n", + " ml,\n", + " xw=0,\n", + " yw=0,\n", + " rw=rw,\n", + " tsandQ=[(0, -Q)],\n", + " layers=range(6, 6 + 5),\n", + " rc=rc,\n", + " wbstype=\"slug\",\n", + ")\n", + "ml.solve()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "r = np.linspace(-10, 10, 100)\n", + "h = ml.headalongline(r, 0, 0.01).squeeze()\n", + "plt.plot(h[0])\n", + "plt.plot(h[1])\n", + "plt.plot(h[2])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t = np.logspace(-5, -2, 100)\n", + "h = ml.head(0, 0, t)\n", + "zc = 0.5 * (z[:-1] + z[1:])\n", + "plt.plot(zc, h[:, 10])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Estimate aquifer parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cal = tft.Calibrate(ml)\n", + "cal.set_parameter(name=\"kaq\", layers=list(range(1, nlay)), initial=10, pmin=0)\n", + "cal.set_parameter(name=\"Saq\", layers=list(range(1, nlay)), initial=1e-4, pmin=0)\n", + "cal.seriesinwell(name=\"obs\", element=w, t=to, h=ho)\n", + "cal.fit(report=False)\n", + "display(cal.parameters[\"optimal\"])\n", + "print(\"RMSE:\", cal.rmse())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tm = np.logspace(np.log10(to[0]), np.log10(to[-1]), 100)\n", + "hm = w.headinside(tm)\n", + "plt.semilogx(to, ho / H0, \".\", label=\"obs\")\n", + "plt.semilogx(tm, hm[0] / H0, label=\"timflow\")\n", + "plt.xlabel(\"time [d]\")\n", + "plt.ylabel(\"Normalized head (h/H0)\")\n", + "plt.title(\"Model results - multi-layer model\")\n", + "plt.legend()\n", + "plt.grid()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison of results\n", + "Here, the `timflow` performance in analysing slug tests is checked. The solution in `timflow` is compared with the KGS analytical model (Hyder et al. 1994) implemented in AQTESOLV (Duffield, 2007). The parameters of `timflow` and AQTESOLV are similar, even though AQTESOLV only used one layer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "t = pd.DataFrame(\n", + " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"],\n", + " index=[\"timflow\", \"AQTESOLV\"],\n", + ")\n", + "\n", + "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", + "t.loc[\"AQTESOLV\"] = [0.4211, 5.70e-4, \"-\"]\n", + "\n", + "t_formatted = t.style.format(\n", + " {\n", + " \"k [m/d]\": \"{:.2f}\",\n", + " \"Ss [1/m]\": \"{:.2e}\",\n", + " \"RMSE [m]\": lambda x: \"-\" if x == \"-\" else f\"{float(x):.3f}\",\n", + " }\n", + ")\n", + "t_formatted" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "## References\n", + "\n", + "* Batu, V. (1998), Aquifer hydraulics: a comprehensive guide to hydrogeologic data analysis, John Wiley & Sons\n", + "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", + "* Hyder, Z., Butler Jr, J.J., McElwee, C.D. and Liu, W. (1994), Slug tests in partially penetrating wells, Water Resources Research 30, 2945–2957." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/transient/04pumpingtests/slug4_dawsonville.ipynb b/docs/transient/04pumpingtests/slug4_dawsonville.ipynb new file mode 100644 index 0000000..667d2fe --- /dev/null +++ b/docs/transient/04pumpingtests/slug4_dawsonville.ipynb @@ -0,0 +1,409 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Slug test for confined aquifer - Dawsonville" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import packages" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "import timflow.transient as tft\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = [5, 3]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "### Introduction and Conceptual Model\n", + "\n", + "This Slug Test, was reported by Cooper Jr et al. (1967), and it was performed in Dawsonville, Georgia, USA. \n", + "\n", + "A fully penetrated well (Ln-2) is screened in a confined aquifer, located between depths 24 and 122 (98 m thick). The volume of the slug is 10.16 litres. Head change has been recorded at the slug well. Both the well and the casing radii of the slug well is 0.076 m." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "data = np.loadtxt(\"data/dawsonville_slug.txt\")\n", + "to = data[:, 0]\n", + "ho = data[:, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "source": [ + "### Parameters and model" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "# known parameters\n", + "b = 98 # aquifer thickness in m\n", + "zt = -24 # top of aquifer in m\n", + "zb = zt - b # bottom of aquifer in m\n", + "rw = 0.076 # well radius of Ln-2 Well in m\n", + "rc = 0.076 # casing radius of Ln-2 Well in m\n", + "Q = 10.16 / 1000 # slug volume in m^3 (10.16 l = 0.01016 m^3)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "self.neq 1\n", + "solution complete\n" + ] + } + ], + "source": [ + "ml = tft.ModelMaq(kaq=10, z=[zt, zb], Saq=1e-4, tmin=1e-6, tmax=1e-3, topboundary=\"conf\")\n", + "w = tft.Well(ml, xw=0, yw=0, rw=rw, rc=rc, tsandQ=[(0, -Q)], layers=0, wbstype=\"slug\")\n", + "ml.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Estimate aquifer parameters\n", + "\n", + "We calibrate hydraulic conductivity and specific storage, as in the KGS model (Hyder et al. 1994)." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".....................................\n", + "Fit succeeded.\n", + "[[Fit Statistics]]\n", + " # fitting method = leastsq\n", + " # function evals = 34\n", + " # data points = 22\n", + " # variables = 2\n", + " chi-square = 4.2779e-04\n", + " reduced chi-square = 2.1389e-05\n", + " Akaike info crit = -234.654459\n", + " Bayesian info crit = -232.472374\n", + "[[Variables]]\n", + " kaq0_0_0: 0.42101398 +/- 0.01839446 (4.37%) (init = 10)\n", + " Saq0_0_0: 1.6975e-05 +/- 5.2892e-06 (31.16%) (init = 0.0001)\n", + "[[Correlations]] (unreported correlations are < 0.100)\n", + " C(kaq0_0_0, Saq0_0_0) = -0.9853\n" + ] + } + ], + "source": [ + "# unknown parameters: kay, Saq\n", + "cal = tft.Calibrate(ml)\n", + "cal.set_parameter(name=\"kaq0\", initial=10, pmin=0, layers=0)\n", + "cal.set_parameter(name=\"Saq0\", initial=1e-4, layers=0)\n", + "cal.seriesinwell(name=\"obs\", element=w, t=to, h=ho)\n", + "cal.fit(report=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
layersoptimalstdperc_stdpminpmaxinitialinhomsparray
kaq0_0_000.4210140.0183944.3690860.0inf10.0000None[[0.42101397957109743]]
Saq0_0_000.0000170.00000531.159403-infinf0.0001None[[1.697465569017154e-05]]
\n", + "
" + ], + "text/plain": [ + " layers optimal std perc_std pmin pmax initial inhoms \\\n", + "kaq0_0_0 0 0.421014 0.018394 4.369086 0.0 inf 10.0000 None \n", + "Saq0_0_0 0 0.000017 0.000005 31.159403 -inf inf 0.0001 None \n", + "\n", + " parray \n", + "kaq0_0_0 [[0.42101397957109743]] \n", + "Saq0_0_0 [[1.697465569017154e-05]] " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rmse: 0.004409650627757543\n" + ] + } + ], + "source": [ + "display(cal.parameters)\n", + "print(\"rmse:\", cal.rmse())" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tm = np.logspace(np.log10(to[0]), np.log10(to[-1]), 100)\n", + "hm = ml.head(0, 0, tm)\n", + "plt.semilogx(to, ho, \".\", label=\"obs\")\n", + "plt.semilogx(tm, hm[0], label=\"timflow\")\n", + "plt.xlabel(\"time [d]\")\n", + "plt.ylabel(\"drawdown [m]\")\n", + "plt.title(\"Model Results - Single-layer model\")\n", + "plt.legend()\n", + "plt.grid()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison of results\n", + "\n", + "We now compare the values in `timflow` and add the results of the modelling done in MLU (Hemker & Post, 2014). Results are similar between both models. The RMSE of MLU is slightly better than the one from `timflow`." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 k [m/d]Ss [1/m]RMSE [m]
timflow0.421.70e-050.004
MLU0.411.94e-050.004
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = pd.DataFrame(\n", + " columns=[\"k [m/d]\", \"Ss [1/m]\", \"RMSE [m]\"],\n", + " index=[\"timflow\", \"MLU\"],\n", + ")\n", + "\n", + "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", + "t.loc[\"MLU\"] = [0.4133, 1.9388e-05, 0.004264]\n", + "\n", + "t_formatted = t.style.format(\n", + " {\"k [m/d]\": \"{:.2f}\", \"Ss [1/m]\": \"{:.2e}\", \"RMSE [m]\": \"{:.3f}\"}\n", + ")\n", + "t_formatted" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "\n", + "* Cooper Jr, H.H., Bredehoeft, J.D. and Papadopulos, I.S. (1967) Response of a finite diameter well to an instantaneous charge of water, Water Resources Research 3, 263–269\n", + "* Duffield, G.M. (2007), AQTESOLV for Windows Version 4.5 User's Guide, HydroSOLVE, Inc., Reston, VA.\n", + "* Hemker, K. en Post V. (2014) MLU for Windows: well flow modeling in multilayer aquifer systems; MLU User's guide. https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmicrofem.com%2Fdownload%2Fmlu-user.pdf&data=05%7C02%7CMark.Bakker%40tudelft.nl%7Cad7f16364d2d4fd55dbf08de73832eaa%7C096e524d692940308cd38ab42de0887b%7C0%7C0%7C639075204580287861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OBoe8seXZUfoat89Dfr4g6lF%2Bn1FdtXqtp%2F18BMXCn0%3D&reserved=0\n", + "* Hyder, Z., Butler Jr, J.J., McElwee, C.D. and Liu, W. (1994) Slug tests in partially penetrating wells, Water Resources Research 30, 2945–2957." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/transient/04pumpingtests/unconfined2_moench.ipynb b/docs/transient/04pumpingtests/unconfined2_moench.ipynb new file mode 100644 index 0000000..803ce19 --- /dev/null +++ b/docs/transient/04pumpingtests/unconfined2_moench.ipynb @@ -0,0 +1,420 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2.Test for an anisotropic water-table aquifer - Moench Example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import required libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import timflow.transient as tft\n", + "\n", + "plt.rcParams[\"figure.figsize\"] = (5, 3) # default figure size" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Introduction and Conceptual Model\n", + "\n", + "This test is based on a synthetic example reported by Barlow and Moench (1999), utilizing an analytical solution developed by Moench and Allen (1997) for the transient flow of partially-penetrating wells in unconfined aquifers. \n", + "\n", + "The aquifer is partially saturated with water (10 m water table). A pumping well is screened from 5 to 10 m depth. The well and the well-casing radius is 0.1 m. \n", + "\n", + "Drawdown is recorded at the pumping well and four piezometers located at two different distances and two different depths. Two piezometers, PS1 and PS2, are located at one-meter depth below the water table and 3.16 and 31.6 m distance, respectively. Another two (PD1 and PD2) piezometers are at 7.5 m depth below the water table and the same distances, directly below the previous piezometers. The figure below shows the location of the well and the piezometers\n", + "\n", + "Pumping starts at time t = 0 at a constant rate of 172.8 m3/d. Drawdown is recorded until t = 3 days." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load data\n", + "\n", + "The dataset for each well consists of a column with the time data in seconds and drawdown in meters. We are loading it and converting it to days and meters." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "data0 = np.loadtxt(\"data/moench_pumped.txt\", skiprows=1)\n", + "t0 = data0[:, 0] / 60 / 60 / 24 # convert time from seconds to days\n", + "h0 = -data0[:, 1] # converting drawdown to heads\n", + "data1 = np.loadtxt(\"data/moench_ps1.txt\", skiprows=1)\n", + "t1 = data1[:, 0] / 60 / 60 / 24 # convert time from seconds to days\n", + "h1 = -data1[:, 1]\n", + "data2 = np.loadtxt(\"data/moench_pd1.txt\", skiprows=1)\n", + "t2 = data2[:, 0] / 60 / 60 / 24 # convert time from seconds to days\n", + "h2 = -data2[:, 1]\n", + "data3 = np.loadtxt(\"data/moench_ps2.txt\", skiprows=1)\n", + "t3 = data3[:, 0] / 60 / 60 / 24 # convert time from seconds to days\n", + "h3 = -data3[:, 1]\n", + "data4 = np.loadtxt(\"data/moench_pd2.txt\", skiprows=1)\n", + "t4 = data4[:, 0] / 60 / 60 / 24 # convert time from seconds to days\n", + "h4 = -data4[:, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Parameters and model" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "b = 10 # aquifer thickness, m\n", + "Q = 172.8 # constant discharge rate, m^3/d\n", + "rw = 0.1 # well radius, m\n", + "rc = 0.1 # casing radius, m\n", + "r1 = 3.16 # distance of closer wells, m\n", + "r2 = 31.6 # distance of wells more far away, m" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "self.neq 1\n", + "solution complete\n" + ] + } + ], + "source": [ + "ml = tft.Model3D(\n", + " kaq=1,\n", + " z=[0, -0.1, -2.1, -5.1, -10.1],\n", + " Saq=[0.1, 1e-4, 1e-4, 1e-4],\n", + " kzoverkh=1,\n", + " tmin=1e-5,\n", + " tmax=3,\n", + " phreatictop=True,\n", + ")\n", + "w = tft.Well(ml, xw=0, yw=0, rw=rw, rc=rc, tsandQ=[(0, Q)], layers=3)\n", + "ml.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Estimate aquifer parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "............................................................\n", + "Fit succeeded.\n" + ] + } + ], + "source": [ + "cal = tft.Calibrate(ml)\n", + "cal.set_parameter(name=\"kaq\", initial=1, layers=[0, 1, 2, 3])\n", + "cal.set_parameter(name=\"Saq\", initial=0.2, layers=[0])\n", + "cal.set_parameter(name=\"Saq\", initial=1e-4, pmin=0, layers=[1, 2, 3])\n", + "cal.set_parameter(name=\"kzoverkh\", initial=0.1, pmin=0, layers=[0, 1, 2, 3])\n", + " \n", + "cal.seriesinwell(name=\"pumped\", element=w, t=t0, h=h0)\n", + " \n", + "cal.series(name=\"PS1\", x=r1, y=0, t=t1, h=h1, layer=1)\n", + "cal.series(name=\"PD1\", x=r1, y=0, t=t2, h=h2, layer=3)\n", + "cal.series(name=\"PS2\", x=r2, y=0, t=t3, h=h3, layer=1)\n", + "cal.series(name=\"PD2\", x=r2, y=0, t=t4, h=h4, layer=3)\n", + " \n", + "cal.fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
optimal
kaq_0_39.067651
Saq_0_00.172880
Saq_1_30.000039
kzoverkh_0_30.535051
\n", + "
" + ], + "text/plain": [ + " optimal\n", + "kaq_0_3 9.067651\n", + "Saq_0_0 0.172880\n", + "Saq_1_3 0.000039\n", + "kzoverkh_0_3 0.535051" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RMSE: 0.01038 m\n" + ] + } + ], + "source": [ + "display(cal.parameters.loc[:, [\"optimal\"]])\n", + "print(f\"RMSE: {cal.rmse():.5f} m\")" + ] + }, + { + "cell_type": "code", + "execution_count": 158, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "hm0 = ml.head(0, 0, t0, layers=3)[0]\n", + "hm1 = ml.head(r1, 0, t1, layers=1)[0]\n", + "hm2 = ml.head(r1, 0, t2, layers=3)[0]\n", + "hm3 = ml.head(r2, 0, t3, layers=1)[0]\n", + "hm4 = ml.head(r2, 0, t4, layers=3)[0]\n", + "\n", + "plt.semilogx(t0, -h0, \".\", label=\"pumped\")\n", + "plt.semilogx(t0, -hm0, label=\"ttim pumped\")\n", + "plt.semilogx(t1, -h1, \".\", label=\"PS1\")\n", + "plt.semilogx(t1, -hm1, label=\"ttim PS1\")\n", + "plt.semilogx(t2, -h2, \".\", label=\"PD1\")\n", + "plt.semilogx(t2, -hm2, label=\"ttim PD1\")\n", + "plt.semilogx(t3, -h3, \".\", label=\"PS2\")\n", + "plt.semilogx(t3, -hm3, label=\"ttim PS2\")\n", + "plt.semilogx(t4, -h4, \".\", label=\"PD2\")\n", + "plt.semilogx(t4, -hm4, label=\"ttim PD2\")\n", + "\n", + "plt.xlabel(\"time (d)\")\n", + "plt.ylabel(\"drawdown (m)\")\n", + "plt.title(\"Model Results\")\n", + "plt.legend(bbox_to_anchor=(1.05, 1))\n", + "plt.grid();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparison of results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The performance of `timflow` is compared with the stimulated results using Moench's parameters (Barlow and Moench, 1999). The RMSE decreased with the performance of `timflow`. " + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 k [m/d]Sy [-]Ss [1/m]kz/khRMSE [m]
timflow9.070.23.87e-050.50.0104
Moench8.640.22.00e-050.50.0613
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 168, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = pd.DataFrame(\n", + " columns=[\"k [m/d]\", \"Sy [-]\", \"Ss [1/m]\", \"kz/kh\", \"RMSE [m]\"],\n", + " index= [\"timflow\", \"Moench\"],\n", + ")\n", + "\n", + "t.loc[\"timflow\"] = np.append(cal.parameters[\"optimal\"].values, cal.rmse())\n", + "t.loc[\"Moench\"] = [8.64, 0.2, 2e-5, 0.5, 0.061318]\n", + "\n", + "t_formatted = t.style.format(\n", + " {\"k [m/d]\": \"{:.2f}\", \n", + " \"Sy [-]\": \"{:.1f}\",\n", + " \"Ss [1/m]\": \"{:.2e}\", \n", + " \"kz/kh\": \"{:.1f}\", \n", + " \"RMSE [m]\": \"{:.4f}\"}\n", + ")\n", + "t_formatted" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "* Barlow, P.M., Moench, A.F., 1999. WTAQ, a computer program for calculating drawdowns and estimating hydraulic properties for confined and water-table aquifers. 99-4225, US Dept. of the Interior, US Geological Survey\n", + "* Moench, Allen, F., 1997. Flow to a well of finite diameter in a homogeneous, anisotropic water table aquifer. Water Resources Research 34, 2431–2432." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/transient/05benchmarks/compare_wells_linesink.ipynb b/docs/transient/05benchmarks/compare_wells_linesink.ipynb index 9a76af1..61d629d 100644 --- a/docs/transient/05benchmarks/compare_wells_linesink.ipynb +++ b/docs/transient/05benchmarks/compare_wells_linesink.ipynb @@ -116,8 +116,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/line-sink-ditch.ipynb b/docs/transient/05benchmarks/line-sink-ditch.ipynb index 8ba4b73..d663af7 100644 --- a/docs/transient/05benchmarks/line-sink-ditch.ipynb +++ b/docs/transient/05benchmarks/line-sink-ditch.ipynb @@ -89,8 +89,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/synthetic0_data.ipynb b/docs/transient/05benchmarks/synthetic0_data.ipynb index da29fe6..a8ede69 100644 --- a/docs/transient/05benchmarks/synthetic0_data.ipynb +++ b/docs/transient/05benchmarks/synthetic0_data.ipynb @@ -638,8 +638,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/synthetic_calibrate_2aquifers.ipynb b/docs/transient/05benchmarks/synthetic_calibrate_2aquifers.ipynb index e4ff8e1..9d764cf 100644 --- a/docs/transient/05benchmarks/synthetic_calibrate_2aquifers.ipynb +++ b/docs/transient/05benchmarks/synthetic_calibrate_2aquifers.ipynb @@ -258,8 +258,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/synthetic_test_calibrate.ipynb b/docs/transient/05benchmarks/synthetic_test_calibrate.ipynb index a1a4a8e..41ce949 100644 --- a/docs/transient/05benchmarks/synthetic_test_calibrate.ipynb +++ b/docs/transient/05benchmarks/synthetic_test_calibrate.ipynb @@ -268,8 +268,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/test_line_elements.ipynb b/docs/transient/05benchmarks/test_line_elements.ipynb index cf8366c..a6f2b78 100644 --- a/docs/transient/05benchmarks/test_line_elements.ipynb +++ b/docs/transient/05benchmarks/test_line_elements.ipynb @@ -96,8 +96,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/theis_storage.ipynb b/docs/transient/05benchmarks/theis_storage.ipynb index 360029d..5012ac3 100644 --- a/docs/transient/05benchmarks/theis_storage.ipynb +++ b/docs/transient/05benchmarks/theis_storage.ipynb @@ -222,8 +222,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/ttim_neuman_comparison.ipynb b/docs/transient/05benchmarks/ttim_neuman_comparison.ipynb index c89bcfe..cbe973b 100644 --- a/docs/transient/05benchmarks/ttim_neuman_comparison.ipynb +++ b/docs/transient/05benchmarks/ttim_neuman_comparison.ipynb @@ -117,8 +117,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/validation_tidal_wave_with_Bruggeman.ipynb b/docs/transient/05benchmarks/validation_tidal_wave_with_Bruggeman.ipynb index 22f493e..d8b145b 100644 --- a/docs/transient/05benchmarks/validation_tidal_wave_with_Bruggeman.ipynb +++ b/docs/transient/05benchmarks/validation_tidal_wave_with_Bruggeman.ipynb @@ -505,8 +505,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/well_benchmarks.ipynb b/docs/transient/05benchmarks/well_benchmarks.ipynb index b5de1d6..058ab7b 100644 --- a/docs/transient/05benchmarks/well_benchmarks.ipynb +++ b/docs/transient/05benchmarks/well_benchmarks.ipynb @@ -488,8 +488,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/docs/transient/05benchmarks/well_near_river_or_wall.ipynb b/docs/transient/05benchmarks/well_near_river_or_wall.ipynb index 3a86e1b..26eeae6 100644 --- a/docs/transient/05benchmarks/well_near_river_or_wall.ipynb +++ b/docs/transient/05benchmarks/well_near_river_or_wall.ipynb @@ -117,8 +117,10 @@ } ], "metadata": { - "language_info": { - "name": "python" + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" } }, "nbformat": 4, diff --git a/utils/clear_notebooks.py b/utils/clear_notebooks.py index e562cda..24b51f2 100644 --- a/utils/clear_notebooks.py +++ b/utils/clear_notebooks.py @@ -6,20 +6,7 @@ ClearOutputPreprocessor, ) -nbdirs = [ - # steady - Path("docs/steady/00userguide/tutorials"), - Path("docs/steady/00userguide/howtos"), - Path("docs/steady/02examples"), - Path("docs/steady/03xsections"), - Path("docs/steady/04benchmarks"), - # transient - Path("docs/transient/00userguide/tutorials"), - Path("docs/transient/00userguide/howtos"), - Path("docs/transient/02examples"), - Path("docs/transient/03xsections"), - Path("docs/transient/05benchmarks"), -] +nbroots = [Path("docs/steady"), Path("docs/transient")] skip = [ "benchmarking_besselaes.ipynb", @@ -30,13 +17,21 @@ def get_notebooks(): nblist = [] - for nbdir in nbdirs: - nblist += [nb for nb in nbdir.glob("*.ipynb") if nb.name not in skip] - return nblist + for root in nbroots: + for nb in root.rglob("*.ipynb"): + if nb.name in skip: + continue + if "_build" in nb.parts: + continue + nblist.append(nb) + return sorted(nblist) clear_output = ClearOutputPreprocessor() -clear_metadata = ClearMetadataPreprocessor() + +# By default nbconvert keeps `metadata.language_info.name`. Use an empty preserve +# mask so kernel/language metadata is stripped from notebook files. +clear_metadata = ClearMetadataPreprocessor(preserve_nb_metadata_mask=set()) for notebook in get_notebooks(): print("Clearing notebook:", notebook) @@ -46,4 +41,11 @@ def get_notebooks(): clear_output.preprocess(nb, {}) clear_metadata.preprocess(nb, {}) + # Ensure a portable kernel is defined for CI/ReadTheDocs notebook execution. + nb.metadata["kernelspec"] = { + "name": "python3", + "display_name": "Python 3", + "language": "python", + } + nbformat.write(nb, notebook)