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