You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flopy中定义MODFLOW 6模型的瞬态/稳态模拟?

在Flopy中定义MODFLOW 6的稳态/瞬态模式

一、稳态模式设置

稳态模式的核心是在TDIS(时间离散)包中,将所有应力期的steady参数设为True。此时模型不考虑时间变化,每个应力期内的水文地质参数保持恒定。

示例代码:

import flopy

# 初始化模拟对象
sim = flopy.mf6.MFSimulation(sim_name="steady_state_model", version="mf6", exe_name="mf6")

# 定义TDIS包,设置为稳态
tdis = flopy.mf6.ModflowTdis(
    sim,
    pname="tdis",
    time_units="DAYS",
    nper=1,  # 单个应力期
    perioddata=[[365.0, 1, 1.0]],  # [应力期时长, 时间步数量, 时间步长乘数]
    steady=[True]  # 标记该应力期为稳态
)

二、瞬态模式设置

瞬态模式需要满足两个条件:

  1. 在TDIS包中,至少有一个应力期的steady参数设为False;
  2. 结合stress_period_data和MFTransientList对象,定义随时间变化的边界条件或源汇项(如抽水井、河流、水头边界等)。

示例代码:

# 初始化模拟对象
sim = flopy.mf6.MFSimulation(sim_name="transient_model", version="mf6", exe_name="mf6")

# 定义TDIS包,设置为瞬态
tdis = flopy.mf6.ModflowTdis(
    sim,
    pname="tdis",
    time_units="DAYS",
    nper=2,  # 两个应力期
    # 每个应力期的时长、时间步数量、时间步长乘数
    perioddata=[[180.0, 10, 1.0], [185.0, 10, 1.0]],
    steady=[False, False]  # 两个应力期均为瞬态
)

# 创建地下水流模型对象
gwf = flopy.mf6.ModflowGwf(sim, modelname="transient_gwf", save_flows=True)

# 以抽水井(WEL)为例,用MFTransientList定义瞬态抽水量
wel_transient_data = flopy.mf6.ModflowGwfwel.TransientList([
    [0, 0, 0, -1200.0],  # 第1应力期第1时间步:(层,行,列)位置抽水量-1200 m³/d
    [0, 0, 0, -900.0],   # 第1应力期第2时间步抽水量
    [0, 0, 0, -600.0]    # 第2应力期第1时间步抽水量
])

# 添加WEL包到模型
wel = flopy.mf6.ModflowGwfwel(gwf, pname="wel", stress_period_data=wel_transient_data)

三、关于瞬态触发的疑问解答

不是只要某个包使用stress_period_data和MFTransientList,模型就会自动按瞬态求解,核心控制逻辑在TDIS包的steady参数:

  • 如果TDIS中所有应力期的steady都设为True,即使某包传入了MFTransientList数据,模型仍会按稳态求解——此时瞬态数据会被忽略,仅取第一个时间步的参数值;
  • 只有当TDIS中至少有一个应力期的steady设为False时,模型才会进入瞬态求解模式,stress_period_data中的时间序列数据才会生效。

内容的提问来源于stack exchange,提问作者Aeonian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:43:12