Flopy MF6 溶质运移模型边界质量通量预算输出不一致问题咨询
Flopy 3.3.5结合MODFLOW 6.2.2溶质运移模拟边界通量提取问题记录
模型基础设置
- 采用软件版本:Flopy 3.3.5、MODFLOW 6(MF6)6.2.2版本溶质运移模块
- 模拟对象:工业场地污染羽向溪流的运移过程
- 网格设置:6层结构化规则网格,水流与运移过程同步耦合计算
- 边界概化:溪流通过水流模型的
RIV(河流)包及岸线布置的Drains(排水沟)包实现概化 - 计算配置:引入
ATS(自适应时间步长)包后模拟运行正常,浓度输出结果符合预期
通量提取过程中遇到的问题
- OBS包输出格式异常问题
迭代数次后,污染羽外区域的质量通量输出为极小值而非0;OBS包输出的列表文件与CSV文件中,三位指数的数值会丢失字母E,例如输出内容为-2.90933775-241,而两位指数的数值可正常输出为-2.90933775E-41,调整输出位数后问题仍稳定复现。目前已编写脚本修复OBS包的输出文件,推测该格式问题是使用flopylistBudget工具读取列表文件时返回全none对象的核心原因。 - SSM包列表输出cellid不匹配问题
设置SinkSourceMixing(SSM)包同时打印和保存预算信息后,直接通过文本编辑器读取列表文件中的SSM输出时,发现输出附带的cellid(层、行、列三元组)与原水流模型对应应力期井、河流、排水沟包输入的原始cellid不匹配。 - 二进制预算文件SSM数据逻辑匹配问题
加载二进制预算文件后,通过cbb.get_data(totem=t,text="SOURCE-SINK MIX")语句可提取到正确的SSM数据recarray;按照discretization/structuredgrid包get_node方法的公式node=L*nrow*ncol+R*ncol+C计算节点号(该公式与flopy/MF6复杂模型示例笔记中采用的公式不同),筛选recarray中node列匹配的行后,对应行的node2列值无法通过已知的任意节点转LRC方法反推出相邻单元格。
验证说明:通过上述计算得到的节点号提取预算文件中
FLOW-JA-FACE数据时,得到的断面流量值与OBS包(采用L,R,C元组定义)的输出一致,说明节点号计算无误,但对单单元格的所有FLOW-JA-FACE通量求和的结果,与预算文件中SSM数据的对应值不匹配。
问题说明与诉求
目前OBS包输出的边界节点通量已满足使用需求,发布该问题用于记录相关观测结果,希望明确两点:
- 上述问题是否由模型设置错误导致
- 若上述问题属于程序待修复的bug,相关使用经验可为flopy/MF6项目优化提供参考
感谢所有软件包贡献者的付出。
内容的提问来源于stack exchange,提问作者user2892329
相关产品推荐
相关产品推荐

