应用 stars - learn cmglearncmg.cn/wp-content/uploads/2020/07/course-90.pdf · 2020. 7. 2. ·...

36
2 应用 STARS 模拟复杂油藏 数值控制参数选取及重点问题 马惠平

Upload: others

Post on 03-Feb-2021

0 views

Category:

Documents


0 download

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