8.0 KiB
EDFM Simulator 软件使用手册
1. 软件定位
本软件是一个基于 MATLAB App Designer 的 EDFM 图形化模拟工具,正式界面文件为:
gui_support/app/EDFM_Simulator_App.mlapp
当前项目已经不再以早期 .m 代码版界面为主线,后续使用与维护都应以 .mlapp 版本为准。
软件的核心用途是:
- 通过图形界面编辑 EDFM 模拟参数
- 加载模板算例
- 导入/导出配置
- 运行模拟
- 导入/导出结果
- 查看基础结果和部分后处理图
2. 运行前准备
请确保:
- 已安装 MATLAB
- 工程目录完整
- MATLAB 当前工作路径切换到工程根目录
示例:
cd('C:\Users\Administrator\Videos\3D_EDFM_simulator_20260305')
3. 推荐启动方式
由于正式界面是 .mlapp,推荐两种启动方式。
方式一:在 App Designer 中直接打开并运行
直接打开:
gui_support/app/EDFM_Simulator_App.mlapp
然后点击 Run。
这是当前最推荐的方式。
方式二:在 MATLAB 中直接实例化 App
如果 .mlapp 已经在 MATLAB 路径下可见,可以在命令行中运行:
app = EDFM_Simulator_App;
说明:
- 根目录中的
launch_edfm_simulator_app.m目前仍指向早期.m版EDFMSimulatorApp(),不应再作为正式 GUI 的主入口理解。
4. 软件整体结构
界面按原始 main1.m 中的逻辑拆分为多个部分,并带有顶部工具栏。
顶部工具栏
主要包括:
New ConfigTemplateLoad TemplateImport ConfigExport ConfigRunImport ResultExport ResultStatus
主页面签
ModelGridFractureDiscretizationFlowWellsSolover或SolverRunResults
不同版本导出的文字可能略有差异,但功能分组是一致的。
5. 推荐使用流程
建议按下面顺序使用。
5.1 新建或加载配置
你可以选择以下两种起点:
- 点击
New Config创建空配置 - 在模板下拉框中选择
case01到case07,然后点击Load Template
如果是第一次使用,建议先加载已有模板,不建议直接从空配置开始。
5.2 按页面修改参数
Model 页
这里主要设置:
ModelFlagGridModelFlowModel
其中:
FlowModel=1:气水两相流FlowModel=2:油水两相流FlowModel=3:组分流
运行时只使用当前选中的流动模型分支。
Grid 页
这里填写网格参数:
dxdydzNTG
这类参数通常使用 MATLAB 表达式录入,例如:
[10 10 10 10]
[5; 5; 5]
Fracture 页
这里用于设置裂缝输入方式及裂缝相关参数,例如:
- 输入类型
- 裂缝工程输入
- 裂缝线
- 裂缝高度
- 是否流动阻隔
Discretization 页
这里用于设置离散化参数,例如:
- 边界
- 无效层
- 基质参数
- 裂缝参数
- 应力敏感参数
Flow 页
这里设置:
- 初始压力
- 初始含水饱和度
- 初始
Cs - 初始
Cb - 与当前流动模型对应的流体参数
注意:
- 三种流动模型互斥
- GUI 中虽然可能展示多个区块,但运行时只会使用当前
FlowModel对应的数据
Wells 页
这是井和排产制度设置页面,当前包含四个关键表格:
Well1TableWell2TableScheduleTableFractureWellLocationTable
同时还包括:
timedtmindtmax
5.3 Wells 页四个表如何填写
1. Well1Table
通常用于定义常规井。
当前表头含义:
well_namenperfindex_xyzrwskinwell_type
其中:
index_xyz通常是网格索引,如[20 10 1; 20 10 2]well_type对应原始代码中的井类型编号
2. FractureWellLocationTable
用于定义压裂井轨迹点或井位坐标。
当前表头含义:
xyz
3. Well2Table
通常用于定义压裂水平井或与裂缝单元相关的井。
当前表头含义:
well_namenperfperfnumrwskinwell_type
4. ScheduleTable
用于定义井制度和阶段排产。
当前表头含义:
well_namestate(open/close)role(inj/pro)control(const_q/const_pwf)target_1target_2Cs_keyCs_injCb_keyinj_salinity
结合原始 main1.m 注释,可按下面理解填写:
stateopenclose
roleinjpro
controlconst_qconst_pwf
target_1- 常用于输入目标流量或目标井底流压
target_2- 一般与
target_1成对使用
- 一般与
Cs_inj- 注入表活剂浓度
inj_salinity- 注入水或压裂液盐浓度,即矿化度
5.4 时间步参数
Wells 页还需要填写:
timedtmindtmax
这三个量通常按阶段一一对应。
建议保证:
time的阶段数dtmin的阶段数dtmax的阶段数well_schedules的阶段数
四者保持一致。
6. 配置导入与导出
导出配置
点击 Export Config 后,软件会把当前 GUI 数据整理成统一 config 结构,并保存为 .mat 文件。
该 MAT 文件中应包含变量:
config
导入配置
点击 Import Config,选择包含 config 变量的 .mat 文件即可。
7. 运行模拟
参数设置完成后:
- 点击顶部
Run - 或在
Run页点击运行按钮
运行时软件会:
- 从
.mlapp控件读取参数 - 通过
EDFMAppController.m写入统一config - 调用
gui_support/runtime/run_case.m - 由
run_case(config)组织网格、裂缝、流体、井和 schedule - 最终调用底层求解器
运行日志会显示在 Run 页文本框中。
8. 查看结果
运行成功后,可在 Results 页查看:
- 结果摘要
- 时间步信息
- 牛顿迭代信息
- 基础结果曲线
并可调用部分旧版后处理功能,例如:
PlotWellResponsePlot2DLayerPlot3DDistributionPlotPermPlotSPDP
9. 结果导入与导出
导出结果
点击 Export Result,导出当前结果为 .mat 文件。
MAT 文件中应包含变量:
results
导入结果
点击 Import Result,选择包含 results 变量的 .mat 文件即可。
10. 输入格式说明
当前软件中,很多复杂参数仍然采用 MATLAB 表达式方式输入。
常见格式如下。
数值
10
向量
[1 2 3]
列向量
[1; 2; 3]
矩阵
[1 2; 3 4]
单元数组
{'w1', 1, [20 10 1], 0.089, 0, 1}
多行排产表
{
'w1','open','inj','const_pwf',40,40,'Cs_inj',0.5,'Cb_inj',1;
'w1','open','pro','const_q',0,0,'',[],'',[]
}
11. 使用建议
建议遵循以下原则:
- 优先从模板开始,而不是手工全新录入
- 大改参数前先导出一份配置备份
- 保证
ScheduleTable井名与井定义一致 - 保证
time、dtmin、dtmax与阶段 schedule 数一致 - 修改流体参数时,确认当前
FlowModel是否正确
12. 常见问题
1. 为什么不建议再用 .m 版界面
因为项目已经明确转向 App Designer 的 .mlapp 维护方式,.m 版只应视为早期过渡实现。
2. 导入配置失败怎么办
检查 .mat 文件中是否存在变量:
config
3. 导入结果失败怎么办
检查 .mat 文件中是否存在变量:
results
4. 表格里不知道填什么
建议按以下顺序判断:
- 先看表头
- 再看模板默认值
- 再看对应算例目录的
main1.m注释
5. 改了别的流动模型参数为什么不生效
因为三种流动模型是互斥的,运行时只读取当前选中的 FlowModel 分支。
13. 当前版本特点
当前版本的重点是:
- 正式界面已经放到
.mlapp - 业务逻辑主要通过
EDFMAppController.m绑定 - 运行入口已经统一为
run_case(config)
也就是说,使用者可以把它理解为:
.mlapp负责界面controller负责连接界面与后端run_case负责统一调度求解流程