OpenFOAM残差监控的疑问

各位大神,请教几个问题:
当我在residuals设置残差监控的场为:
fields (p U);
在postProcessing/residuals文件中的数据却是这样的:

# Residuals   
# Time        	p             	Ux            	Uy            	Uz            
1             	N/A	    N/A
2             	N/A	    N/A
3         N/A       N/A
4             	N/A	    N/A
5             	N/A	    N/A
6             	N/A	    N/A
7             	N/A	    N/A
……

为什么压力场和速度场的残差监控不了?但是当我设置场为:
fields (h p_rgh k);
在postProcessing/residuals文件中的数据为:

# Residuals   
# Time        	h             	p_rgh         	k
1             	1.000000e+00	9.956230e-01	1.000000e+00
2             	2.020600e-01	5.445240e-02	7.657660e-01
3             	2.715280e-01	4.654750e-02	2.873880e-01
4             	3.085200e-01	4.240910e-02	1.611210e-01
5             	2.929240e-01	2.505230e-01	1.146400e-01
……

我的问题是,p和U这两个场为什么不能输出残差?(ps:我用的求解器为buoyantSimpleFoam)
另一个问题,当我监测(h p_rgh k)的残差,残差图如下所示:
residual

对于p_rgh残差下不去的原因有哪些?此时可以认为算例已经收敛了吗?毕竟迭代2万多次了,一次都是水平的,除了有点细微地震荡。
期待大佬们的回复,祝好!

Hi. 你说的残差监控的问题,主要是因为,在 buoyantSimpleFoam 求解器中,p, U 这两个变量都不是直接通过求解方程计算出来的,所以就不能输出了。p 是通过动压力 p_rgh 计算得出的,U 是通过修正预测值得出的。因此,你可以监控 p_rgh,而不能监控 p.

你说的残差不能持续减小的情况是有可能的,而且你计算的是稳态的情况,如果这样一直保持在某个值附近,没有出现大的变化或是增加的情况,可以认为已经收敛了。从你的图上来看,算到 8000 步,就差不多了。

谢谢你的回复,追问一句:p和U是否有其他方法进行监控呢?

这么说可能比较清楚:p U 并不是解方程所得,所以不存在残差的问题,但是也是场,可以通过 sample 的方法得到某些点的值。