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

使用FloPy加载GMS导出的MODFLOW-USG模型出现ValueError如何解决

FloPy加载GMS导出MODFLOW-USG模型LPF包报错解决方案

错误根因

该错误由GMS导出的MODFLOW-USG原生文本格式与FloPy内置的LPF包数组解析规则不匹配导致:FloPy解析数组控制记录时,默认读取行前10位字符转换为整数类型的LOCAT参数,但GMS导出的ANGLEX数组控制行首段直接写入了浮点型的角度数值,触发类型转换失败。


可行解决方案

  • 方案1:关闭不需要的ANGLEX参数
    如果你的模拟场景不需要用到水平各向异性角度参数,可直接在GMS中关闭ANGLEX相关配置,重新导出原生文本文件后再用FloPy加载,即可跳过ANGLEX读取环节直接完成加载。
    注意:修改GMS配置前请备份原始模型工程

  • 方案2:手动修正LPF文件格式
    打开LPF包对应文本文件,找到hani层数据之后的ANGLEX数组控制行,按照MODFLOW-USG的数组控制记录规范调整格式:前10位填写整数0(表示数组内容紧跟在控制行之后),10位之后填写数组格式说明(如(20F10.3),根据你实际的数值宽度调整格式),调整完成后保存文件再重新加载即可。
    示例调整前的错误控制行:

    -877.0  -921.0  -856.0 ...
    

    示例调整后的正确控制行:

    0 (20F10.3)
    -877.0  -921.0  -856.0 ...
    
  • 方案3:代码端分步骤加载模型
    加载模型时通过load_only参数先跳过LPF包,加载完其余包后手动读取LPF参数构造LPF对象添加到模型中,参考代码如下:

    # 加载除LPF外的所有所需包
    load_model = flopy.modflow.Modflow.load(
        'HTHModel',
        model_ws='model_ws',
        version='mfusg',
        exe_name='exe_name',
        verbose=True,
        check=False,
        load_only=['DIS', 'BAS6', 'OC'] # 按需补充其他需要加载的包名
    )
    
    # 手动构造LPF包,参数从原始LPF文件中读取填写
    lpf = flopy.modflow.ModflowLpf(
        load_model,
        laytyp=[0], # 替换为你的LAYTYP参数
        layavg=[0], # 替换为你的LAYAVG参数
        chani=[1], # 替换为你的CHANI参数
        layvka=[0], # 替换为你的LAYVKA参数
        laywet=[0], # 替换为你的LAYWET参数
        hdry=-1e30, # 替换为你的HDRY参数
        hk=hk_array, # 替换为你读取到的hk数组
        hani=hani_array, # 替换为你读取到的hani数组
        anglex=anglex_array # 替换为你读取到的anglex数组
    )
    
  • 方案4:调整FloPy版本
    部分FloPy版本对MODFLOW-USG的LPF包ANGLEX参数解析存在兼容bug,可尝试升级到最新稳定版FloPy,或切换到3.3.4、3.4.1这类经过广泛测试的历史版本重试加载。


内容的提问来源于stack exchange,提问作者张鹏伟

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:54:03