应用 stars - learn cmglearncmg.cn/wp-content/uploads/2020/07/course-90.pdf · 2020. 7. 2. ·...
TRANSCRIPT
-
2
应用 STARS 模拟复杂油藏
数值控制参数选取及重点问题
马惠平
-
为什么要调整数值控制参数?
模型运行至终点并不保证结果满足油藏物理
模型运行至终点并不保证结果满足工程精度
对大型复杂油藏的模拟运算时间至关重要
3
-
讨论要点
1. 数值求解油藏物理模型流程
2. 诊断模型运算数值问题所在及对症施治
3. 建立复杂油藏模型值得注意的事项
4
-
讨论要点 1
5
1.油藏模型数值求解流程简介
-
质量和能量守恒关系
QFt
M
体系内源汇净生成率 体系边界净流量 体系内质量或能量的变化率 = +
F
Q M
网格体积 Vb
-
组分‘i’的质量守恒方程
kkiki
n
kbgiggoioowiww
n
k
iviggiooiwwfb
rssVyTxTwT
AdySxSwSt
V
rf
'
11
klayerwell
11
igkgiokoiwkw
wkw
n
kiwiggiiooiiwwi
n
k
yqxqwq
qaqyDxDwDff
质量累积项
邻界流动项 化学反应源项
邻界扩散项 边界水层流动项
井产.注源项
-
能量守恒方程
rvssvgggooowwwfb UUcUSUSUS
tV 1
THTHTHTff n
k
ggggoooowwww
n
k 11
klayerwellggkgookowwkw HqHqHq
kCDCV
n
k
okrk
n
k
b HAHAHLrHVfr
11
能量累积项
邻界能量对流项 邻界热传导
井产.注源项
化学反应焓 盖层能量交换 边界水层能量交换
-
非线性方程组求解:牛顿迭代法
对每个网格,求解 Nc + 2 个非线性方程
对整个模型,联立求解 (Nc+2)*Ngrid 非线性方程组
非线性方程组的数值解 牛顿迭代法
-
牛顿迭代法引例
xf
0x
单变量非线性函数牛顿迭代图示: 0xf
0
xf
1x
2x
3x
xf
0xf
x
1
xf
2
xf
)()(
,)(
n1
n
1
'
'
xfxxxf
orxf
xfxx
nnn
n
nn
0x
-
牛顿迭代收敛判据
残差判据: 收敛精度
或
变量判据: 收敛精度
提高收敛精度 迭代次数增加
函数的非线性程度影响迭代的收敛
初始值的选取影响迭代的收敛
nxf
nn xx 1
-
油藏非线性方程组的牛顿迭代求解
迭代方程:
nNnN
nn
nn
nnn
xx
xx
xx
XXX
1
212
111
11
nxxxf
xxxf
xxxf
XF
NN
N
N
n
),...,,(
),...,,(
,...,,(
)(
21
212
)211
nx
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
XF
N
NNN
N
N
n
21
2
2
2
1
2
1
2
1
1
1
'
)()( 1'
nnn XFXXF
变量变化向量
残余向量 (右端项)
偏导数矩阵
)()(' n1 xfxxxf nnn
-
求解线性代数方程组
利用迭代法对大型,稀疏系数矩阵求逆
CMG线性解算器 AIMSOL(PARASOL)是特为求解复杂
13
油藏大型稀疏矩阵而开发的
-
线性解算器求解 基本步骤:
IBM 1
构筑偏导数矩阵 和残余向量 (右端项)
偏导数矩阵 预处理 :减小矩阵阶数
偏导数矩阵比例化, 方程简化为
不完全LU分解: 构筑矩阵 使得
迭代求解
后处理:通过 计算
STARS
)(' nXF
IMB 1
nxF
cYB
cYMMB 1
1 nX
ULM
Y
内迭代
线性解算器
bAX
)()( 1'
nnn XFXXF
)(' nXF
-
All timesteps
done?
Start timestep loop
Initialization
Data input
Start Newton iteration
Build Jacobian & r.h.s.
Solve matrix equation
Converged?
Update and I/O
End
No
Yes
No
Yes
模拟器运行流程框图
是否到结束时间步?
开始时间步
模型初始化
数据输入
启始牛顿迭代
构筑偏导数矩阵和残余向量
迭代求解线性方程组
是否收敛?
更新并输出变量
终止运算
否
是
否
是
外迭代:牛顿迭代
内迭代:线性解算器
时间步循环
-
讨论要点 2
16
2.诊断模型数值问题所在及对症施治
-
数控参数适当的模型具有特征
适当的计算步长
大部分时间步用2-7次牛顿迭代收敛
次数不多的时间步截短(time-step cuts)
可接受的最终物质守恒误差
线性解算器在大部分牛顿迭代中收敛
17
-
运行记录文件:物质守恒误差
运行记录文件 (.log file)
No.: 时间步序号 Size Days: 时间步步长 IT: 该时间步收敛所需的牛顿迭代次数 CUT: 该时间步步长截断的次数 Production (Injection):该时间步平均日产量,日注量,气油比,含水率 Mat Bal Err %: 最大物质(能量)守恒累积误差 Maximum Changes: 压力,饱和度,温度变化最大値
-
模型运行最终统计数据
参看 *.log 文件结尾
参看 *.out文件结尾
Run Performance Summary
1425 – 总时间步步数 1425 - 此次运行模拟步数 6073 - 总牛顿迭代次数 10 - 时间步截短总次数 432380 - 线性解算器迭代总次数 1106 - 线性解算器迭代未收敛总次数 18.2 - 线性解算器未收敛总次数与牛顿迭代总次数之比 0 – 显格式平均百分比
-
减少线性解算器(内迭代)不收敛
时间步长控制
牛顿迭代控制
线性解算器 控制
•DTMAX, DTWELL: 允许的最大时间步长 •NORM: 每时间步允许的变量的最大变化值
• NEWTONCYC: 允许的最大牛顿迭代次数 • NCUTS: 时间步长最大截短次数 • CONVERGE: 收敛标准:残余精度,变 量精度,井收敛精度以及物质守恒精度
•ITERMAX: 允许的最大矩阵解算迭代次数 •NORTH: 允许的最大正交化次数 •SDEGREE: ILU分解的阶数 •PRECC: 矩阵解收敛精度
所有上列控制参数都可以随时间重新定义.
-
减少线性解算器(内迭代)不收敛
IBM 1
构筑偏导数矩阵 和残余向量 (右端项)
偏导数矩阵 预处理 :减小矩阵阶数
偏导数矩阵比例化, 方程简化为
ILU分解: 构筑矩阵 ,使得
(*SDEGREE)
迭代求解 (*ITERMAX,*NORTH,
*PRECC)
后处理:通过 计算
STARS
线性解算器
)(' nXF
IMB 1
nxF
cYB
cYMMB 1
1 nX
ULM
Y
-
内迭代控制参数: *ITERMAX *NORTH *PRECC
用 GMRES 法求解
赋初值: set
迭代: for k = 1, ..., ITERMAX
find such that
if ( PRECC ) then
return
else if ( j reach NORTH ) then
重启: set
end if
end do
发布内迭代未收敛信息
bXA
-
消除线性解算器不收敛:可调整的参数
参考 *.out 文件 用关键字 ‘*OUTPRN ITER NEWTON’
参数调整步骤
CYC dpmx block dsmx block dtmx block dymx block dxmx block urpm iconv nitr
5 1.95E+02 1,48,39 -1.21E-01 2,23,72 -2.64E+01 2,24,73 -9.03E-02 1,25,74 -1.09E-01 3,25,73 0.95 8 43
** WARNING ** Iterative Solution Convergence Criterion Not Satisfied*
1. 增加最大内迭代次数: *ITERMAX;
2. 增加最大正交解向量项数:*NORTH (NORTH ≤ ITERMAX);
3. 增加 ILU 分解阶数: *SDEGREE;
4. 减小计算步长: *NORM 或 *DTWELL
-
使用建模器调整数值控制参数
-
牛顿迭代与时间步长控制参数
时间步长控制
牛顿迭代控制
线性解算器 控制
•DTMAX, DTWELL: 允许的最大时间步长 •NORM: 每时间步允许的自变量的最大变化量
•NEWTONCYC: 允许的最大牛顿迭代次数 •NCUTS: 时间步长最大截短次数 •CONVERGE: 收敛标准:残余标准,自变量标准,井收敛性以及质量守恒标准
•ITERMAX: 允许的最大矩阵解算迭代次数 •NORTH:允许的最大正交化次数 •SDEGREE: Max. degree of ILU factorization
•PRECC: 矩阵解收敛精度
所有上列控制参数都可以随时间重新定义.
-
与牛顿迭代相关的数值控制参数
是否到结束时间步?
开始时间步
模型初始化
数据输入
启始牛顿迭代
构筑偏导数矩阵和残余向量
迭代求解线性方程组
是否收敛?
更新并输出变量
出错信息
否
是
否
是
该时间步牛顿迭代是否收敛?
模型平均总残差(L1)? *CONVERGE *TOTRES…
网格最大残差? *CONVERGE *MAXRES…
网格变量增量? *CONVERGE *PRESS…
井日注,产量? *CONVERGE *WELRES…
模型物质守恒误差? *MATBALTOL…
某相消失或出现? *PVTOSCMAX…
时间步自变量最大变化? *NORM…
井控制模式是否变化?
违反上述任一判敛标准将视为该时间步结果尚未收敛,从而进入新一次迭代或时间步截短。
NEWTONCYC?
NCUTS?
是 否
终止运算
是 否
-
牛顿迭代数值收敛信息输出
参看 *.out 文件
*OUTPRN ITER NEWTON
CYC - 牛顿迭代次数 dpmax - 该次迭代油藏最大网格压力变化 dtmax - 该次迭代油藏最大网格饱和度变化 dtmax - 该次迭代油藏最大网格温度变化 dymax - 该次迭代油藏最大网格气摩尔分数变化 dxmax - 该次迭代油藏最大网格油摩尔分数变化 block - 网格地址 urpm - 亚松驰参数 iconv - 该次迭代未收敛的网格数 nitr - 该次迭代线性解算器迭代次数
time = 1577.89070 days
CYC dpmx block dsmx block dtmx block dymx block dxmx block urpm iconv nitr
1 5.45E+01 1,48,39 -1.84E-01 3,25,73 -2.64E+01 2,24,73 1.42E-01 1,26,73 -1.05E-01 1,26,73 0.30 20 49
2 1.09E+02 1,48,39 2.41E-01 4,24,71 -2.64E+01 2,24,73 2.45E-01 4,24,71 -1.34E-01 4,24,71 0.38 16 48
3 1.35E+02 1,48,39 1.70E-01 4,24,71 -2.64E+01 2,24,73 1.72E-01 4,24,71 -1.09E-01 3,25,73 0.30 19 48
4 1.64E+02 1,48,39 -1.11E-01 4,23,71 -2.64E+01 2,24,73 -1.08E-01 2,23,72 -1.09E-01 3,25,73 0.47 15 44
5 1.95E+02 1,48,39 -1.21E-01 2,23,72 -2.64E+01 2,24,73 -9.03E-02 1,25,74 -1.09E-01 3,25,73 0.95 8 43
** WARNING ** Iterative Solution Convergence Criterion Not Satisfied
6 1.95E+02 1,48,39 -1.31E-01 1,26,73 -2.64E+01 2,24,73 -9.37E-02 4,23,71 -1.09E-01 3,25,73 0.30 11 51
-
牛顿迭代数值收敛信息输出
参看 *.out 文件
SCAL - 网格守恒方程残差折算值 TOL - 定义的残差或变量收敛精度 DIFF - 牛顿迭代变量变化值 BLK - 网格地址 L1 Norm - 平均总残差
*OUTPRN ITER UNCONV
SCAL = 66.9924 TOL = 1.00000 RES(Energy) = 2.529135E+13 BLK = 5,20,72
SCAL = 3.19132 TOL = 1.00000 RES(WATER) = 4.216244E+06 BLK = 1,25,74
SCAL = 1.55378 TOL = 1.00000 RES(BITUMEN) = 72899.1 BLK = 1,25,74
SCAL = 0.837226 TOL = 1.000000E-02 RES(Energy) = 1.935801E+14 L1 Norm
DIFF =-6.014360E-02 TOL = 5.000000E-02 So = 0.497058 BLK = 1,24,73
DIFF = 22.0131 TOL = 5.00000 T = 201.238 BLK = 1,26,73
DIFF = 1.59131 TOL = 5.000000E-02 So = 0.621781 BLK = 1,25,74
DIFF = 0.418976 TOL = 5.000000E-02 Y(CH4) = 0.147310 BLK = 1,25,74
Switch to wide-boiling in block 1,25,74 , SG= 0.0000 SUMYCG= 1.0072
******** Gas phase has appeared in grid block 1,31,15
WATER material balance error 0.1074% too big
-
调整与牛顿迭代相关的数值控制参数
收紧收敛精度值 (即增加牛顿迭代次数), 以减小物质平衡累积误差
减小时间步最大允许变量变化值 (NORM), 控制时间步长过大
用网格最大残差判敛取代变量增量判敛
应用全隐式格式
在高渗区,应用 *UPSTREAM KLEVEL
在井控制重新定义时间步,加 *DTWELL
如某相消失˴出现频繁,尝试收紧收敛精度值
-
使用建模器调整牛顿迭代控制参数
-
讨论要点 3
31
3.建立复杂油藏模型的几点提示
-
首先应思考的问题
你的模型是否以最简洁的方式反映了你所要模拟的油藏实际?
你的模型是否以最简洁的方式代表了你所预期的油藏机理?
32
-
增加数值求解困难的主要因素
增加网格间的关联致偏导数矩阵的非零项及带宽增加
任何原因削弱偏导数矩阵的主对角线占优
任何原因致非线性强化
模拟器程序错误
-
检查你的模型, 关注.修正下列问题
检查 .out 文件,尽量清除所有的警告信息;
输入图表曲线要尽可能平滑,避免折点;
流体PVT数据应涵盖整个油藏运行条件范围;
可设具有过分小于模型孔隙体积平均值的边界网格为死网格;
可设具有过分小于模型孔隙度˴渗透率平均值的网格为零孔隙度网格;
避免孤立网格(即被零孔隙度网格包围), 可设这些网格为零孔隙度网格;
相邻网格应具有相似的孔隙度˴渗透率,避免突然变化;
输入适当的岩石压缩系数;
-
检查你的模型, 关注˴修正下列问题
避免网格过度局部加密;
相渗曲线应有适当共流区;
如欲考虑网格与相邻水层质˴能交换,用水层网格替代解析水层;
如有纯单相区,在区内赋其它相微量饱和度;
油藏初始化应尽量采用纵向平衡(毛管力/重力);
输入的孔隙度不一定是网格初始孔隙度;
避免过度频繁的日期输入˴井控制变化定义;
井参数不应过大,以避免井的数值收敛困难;
-
提高运算效率的其它措施
对EOR模拟而言,非线性往往不可避免;对大型全油田
模型,完成一次模拟的周期亦往往很长。此时可考虑采
用其它 CMG 增速技术。
动态网格 (Dynamic Gridding)
并行运算 (Parallel Processing)
CMOST优化数值控制参数
-
谢谢!Thank you!
欢迎提问!
37