FloPy快速上手:20行代码从零构建并运行你的第一个MODFLOW 6地下水模型

发布时间:2026/8/22 15:47:41
FloPy快速上手:20行代码从零构建并运行你的第一个MODFLOW 6地下水模型 FloPy快速上手20行代码从零构建并运行你的第一个MODFLOW 6地下水模型【免费下载链接】flopyA Python package to create, run, and post-process MODFLOW-based models.项目地址: https://gitcode.com/gh_mirrors/fl/flopyFloPy发音同 Floppy是 USGS 开发的 Python 开源包专门用于创建、运行和后处理 MODFLOW 系列地下水数值模拟模型。它把 MODFLOW 6 的文件输入全部封装成 Python 对象让你告别手写繁琐的文本文件——只需约 20 行代码就能从零搭建一个完整的地下水模型并跑出含水层水头分布图 。什么是 FloPy为什么选它FloPy 是目前使用最广泛的 MODFLOW Python 接口覆盖MODFLOW 6当前主力结构化 / 非结构化网格都支持MODFLOW-2000、MODFLOW-2005、MODFLOW-NWT、MODFLOW-USG配套程序MODPATH 6/7流路追踪、MT3DMS、MT3D-USGS、SEAWAT溶质运移 / 咸潮入侵对新手来说它最大的价值是参数以关键字参数传入如nrow10, ncol10IDE 可以直接自动补全和提示比手动编辑.dis、.npf等输入文件直观得多。核心代码位于 flopy/mf6/ 目录支持的模型与包清单可查阅 docs/supported_packages.md。一键安装三步装好 FloPy 和 MODFLOW 6FloPy 要求 Python 3.11依赖 numpy、pandas、matplotlib。第 1 步安装 FloPypip install flopy # 或使用 conda conda install -c conda-forge flopy第 2 步获取 MODFLOW 6 可执行文件FloPy 本身只负责写文件 调程序 读结果真正求解的是mf6可执行文件。安装后直接运行官方脚本即可自动下载get-modflow第 3 步验证安装import flopy print(flopy.__version__)三步完成无需任何编译 ✅20行代码构建并运行你的第一个MODFLOW 6地下水模型下面这个例子构建一个 10×10 的方形含水层左上角为高水头边界1.0右下角为低水头边界0.0其余边界封闭模拟稳态渗流import flopy ws ./mymodel # 模型工作目录 name mymodel # 模型名称 # —— 第 1 部分搭建模拟框架Simulation—— sim flopy.mf6.MFSimulation(sim_namename, sim_wsws, exe_namemf6) tdis flopy.mf6.ModflowTdis(sim) # 时间离散包 ims flopy.mf6.ModflowIms(sim) # 迭代求解器 # —— 第 2 部分创建 GWF 地下水流动模型及输入包 —— gwf flopy.mf6.ModflowGwf(sim, modelnamename, save_flowsTrue) dis flopy.mf6.ModflowGwfdis(gwf, nrow10, ncol10) # 网格 ic flopy.mf6.ModflowGwfic(gwf) # 初始条件 npf flopy.mf6.ModflowGwfnpf(gwf, save_specific_dischargeTrue) # 水文参数 chd flopy.mf6.ModflowGwfchd(gwf, stress_period_data[ # 定水头边界 [(0, 0, 0), 1.], [(0, 9, 9), 0.]]) oc flopy.mf6.ModflowGwfoc(gwf, budget_filerecordname .bud, head_filerecordname .hds, saverecord[(HEAD, ALL), (BUDGET, ALL)]) # —— 第 3 部分写文件、运行、读结果 —— sim.write_simulation() # 一键写出全部输入文件 sim.run_simulation() # 调用 mf6 运行 head gwf.output.head().get_data() # 读取水头数组 bud gwf.output.budget() # 读取水量平衡对照官方 Quick Start 原文和完整教程.docs/Notebooks/mf6_tutorial01.py、.docs/Notebooks/mf6_simple_model_example.py。看懂关键对象一张表理清 MODFLOW 6 结构对象对应包作用MFSimulationSIM模拟顶层容器管理模型与工作目录ModflowTdisTDIS时间离散时段长度、步数ModflowImsIMS非线性迭代求解器ModflowGwfGWF地下水流动模型本体ModflowGwfdisDIS网格定义行列数、层数、单元尺寸ModflowGwficIC初始水头ModflowGwfnpfNPF水力传导度等水文地质参数ModflowGwfchdCHD定水头边界本例的高/低水头端ModflowGwfocOC控制输出水头、预算文件 注意MODFLOW 6 与旧版 MODFLOW 最大的区别就是模拟Simulation这一层——时间离散和求解器属于模拟而水文参数、边界等属于具体模型多个模型还可以耦合在一起如水流 溶质运移。上图为该例子的最终成果颜色表示水头高低左上角 1.0 → 右下角 0.0白色箭头是地下水具体渗流方向绿色虚线是等水头线。读取与可视化MODFLOW 6结果水头等值线和比流量矢量运行结束后FloPy 可以直接把二进制输出文件读成 numpy 数组并用内置绘图工具出图spdis bud.get_data(textDATA-SPDIS)[0] qx, qy, qz flopy.utils.postprocessing.get_specific_discharge(spdis, gwf) # 比流量 pmv flopy.plot.PlotMapView(gwf) # 地图视图 pmv.plot_array(head) # 水头底图 pmv.plot_grid(colorswhite) # 网格线 pmv.contour_array(head, levels[.2, .4, .6, .8], linewidths3) # 等水头线 pmv.plot_vector(qx, qy, normalizeTrue, colorwhite) # 流向箭头绘图工具在 flopy/plot/map.py后处理函数在 flopy/utils/postprocessing.py。除了二维图FloPy 还支持剖面图CrossSectionPlot、三维 VTK 导出以及把结果批量导出为 NetCDF 栅格flopy/export/netcdf.py方便接入 GIS 分析。上面这张来自官方教程的示例图展示了一个 15×10 网格的真实盆地模型——包含地表等高线和河段编号。等你掌握基础后就可以这样把网格套到真实地形上去建模型。进阶路线官方教程与示例工程清单完成第一个模型后建议按以下路线进阶完整入门教程非稳态非饱和模型含抽水井.docs/Notebooks/mf6_tutorial01.py边界条件专题河溪RIV、蒸发、湖泊等边界 .docs/Notebooks/mf_boundaries_example.py输出读取专题.docs/Notebooks/mf6_output_tutorial01.py真实案例数据examples/data/下有 Freyberg 经典算例、MF6 官方测试算例examples/data/mf6/、USG 非结构化网格算例examples/data/mfusg_test/等几十个可直接加载运行的完整模型网格生成工具从 DEM 生成网格 .docs/Notebooks/gridgen_example.py、三角剖分 / Voronoi 网格示例 小提示MODFLOW 6 的单元格索引是从 0 开始的与旧版 MODFLOW 的 1 开始不同——写stress_period_data时(层, 行, 列)都要记住这一点这是新手最常踩的坑。从零到出图全文核心就 20 行代码 一张结果图。现在打开终端pip install flopy开始你的第一个地下水模拟吧 【免费下载链接】flopyA Python package to create, run, and post-process MODFLOW-based models.项目地址: https://gitcode.com/gh_mirrors/fl/flopy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考