Problems with Small Timesteps or Long Execution Times

概述

GEM模拟器因为使用最为精确的状态方程模拟流体的相态变化,其数值计算稳定性面临很大的压力。在实际跑模型时,用户经常遇到时间步长太小或计算速度太慢的问题。

针对以上问题,本文试图给大家提供一些帮助。

诊断信息的输出

重新运行问题并使用以下选项非常有帮助:

*WPRN *ITER *MATRIX

这将开启矩阵收敛以及牛顿迭代收敛诊断。

您还可以通过在输入/输出控制部分或井和循环数据部分使用关键词DIARY CHANGES-UNCONV将收敛状态标志打印到日志文件。主要变量(var)、主要方程残差(res)、井方程残差(wel)、约束方程残差(cer)和地质力学耦合收敛(gmc)的状态标志将被打印。值为0表示收敛,值为1表示未收敛。列中的空白表示未检查特定的收敛性。GEM认为当所有主要变量或所有主要方程残差收敛到它们的容差值时,时间步长已经收敛。然而,您可能希望通过在数值方法控制部分使用关键词NCHECK-CEQ和/或CONVERGE *CEQ来收敛约束方程残差,以在某些问题(如CO2封存、CBM/ECBM和沥青质建模)中获得更好的物理行为。

请注意,使用默认值(1.E-10)时偶尔出现约束方程残差收敛失败是正常的。同时请注意,使用*CONVERGE *CEQ在某些情况下可能会增加牛顿迭代次数,从而增加模拟的CPU时间。

收敛失败的原因

收敛失败可能由以下原因导致:

  • 内部迭代收敛失败
  • 导致时间步长减少的牛顿收敛失败
  • 物质平衡误差

修改方法

如果在输出文件中发现“迭代程序未能收敛”经常出现,那么尝试以下修改方法:

  • 采用更小的时间步长。通过设置更小的最大时间步长DTMAX或通过NORM PRESS和/或NORM *SATUR减少每个时间步的期望变化来实现。
  • 通过使用关键词*ITERMAX增加指定的迭代次数,或
  • 通过使用*SDEGREE增加分解度。请注意,这种补救措施会增加存储需求。
  • 如果迭代程序在第一次或第二次牛顿迭代中未能收敛,但在至少最后一次收敛,则这不是一个严重问题。

牛顿迭代收敛失败导致时间步长减少,并且是由主要变量的最大变化引起的,这些变化超过了每个时间步指定的名义变化的两倍多。可能会遇到非物理值,如负压力和/或饱和度,或者超出了指定的最大牛顿迭代次数。

如果问题是由最大变化引起的,并且不经常发生,则这不是一个主要问题。

如果大量时间步重复,那么您应该尝试以下补救措施:

  • 检查岩石和PVT曲线的非线性;曲线应该是平滑的。

  • 确保网格和其他属性正确指定。

  • 检查井约束规范。始终为每个注入器指定最大底孔压力,为每个生产器指定最小底孔压力是一个好习惯。

  • 如果由于超出最大牛顿迭代次数而导致非收敛,请使用关键词*NEWTONCYC增加指定的牛顿循环次数。

  • 如果由于值的振荡(表现为最大变化的振荡)而达到最大迭代次数,则平滑非线性(4)或减少时间步长(1)是更好的解决方案。

  • 确保储层不会在迭代之间在单相油和单相气之间翻转。如果是这样,请设置正确的PHASEID或REFDEN。

  • 将储层的某些区域或整个储层设置为完全隐式。默认的切换标准,*AIM *STAB仅在网格块是隐式块的邻居时检查从显式到隐式的切换。因此,如果储层的某些区域正在发生剧烈变化,并且这些区域不靠近井,或者流体前沿移动得如此之快以至于它试图在一个时间步长内扫过两个网格块;那么将这些问题区域设置为隐式。

  • 这种情况的例子包括:

    • 当未使用垂直平衡初始化时。在某些情况下,即使所有井都关闭,这可能会导致初始压力和饱和度发生大变化。如果发生这种情况,请运行完全隐式。
    • 当存在气顶时。如果气顶的底层存在强烈的尖峰 – 至少在尖峰发生的区域,可以将气顶的底层设置为隐式。
    • 当块具有极高的渗透率时。压力的小变化会导致饱和度的大变化。在这些区域将块设置为完全隐式。

物质平衡误差可能是由于收敛容差与每个时间步的名义变化相比太大而引起的。请检查以确保容差大约是名义值的十倍以下。

在大多数情况下,期望变化的默认值NORM和容差CONVERGE是足够的。然而,如果您试图模拟裂缝性储层或使用裂缝来表示水平井,建议使用较小的值。对于锥进问题,也建议使用较小的期望变化值。

一些迭代变量的定义

输出文件中找到的一些迭代变量的定义(当使用*WPRN *ITER *MATRIX时)包括:

jconv:未收敛方程的数量

dp:时间步内压力的最大变化

ds:时间步内饱和度的最大变化

dz:时间步内摩尔体积的最大变化

max V:牛顿迭代中主要变量的最大变化

nitr:在子程序jsolv中的迭代次数

omega:如果第一个omega很小,例如1.0E-3,则迭代程序难以收敛

rms:残差的平方和

rmsi:初始rms

rms/rmsi:如果rms/rmsi小于1.0E-6或所有当前更新都小于乘以相对容差的收敛容差,则线性求解器已收敛。

发表评论