欧拉方程的多点轴对称边界条件

计算科学 有限差分
2021-12-13 16:43:33

我正在以保守形式求解二维轴对称欧拉方程:

Ut+F(U)x+G(U)r=H(U)
在哪里
U=(rρrρurρvre),F(U)=(rρur(ρu2+p)rρuvr(e+p)u),G(U)=(rρvrρuvr(ρv2+p)r(e+p)v),H(U)=(00p0),

使用有限差分WENO5方法。

如何正确施加离散轴对称边界条件r=0? 一篇关于边界条件(对于全柱坐标)的论文只是提到对称条件应该用于轴对称流动,但没有任何细节。

当我使用 MacCormack 的方法(二阶,每个网格点在每个方向上需要一个相邻点)时,过程非常简单(C 语法):

//internal points
for (k = 1; k <= k_max - 1; k++)
{
    for (l = 1; l <= l_max - 1; l++)
    {
        R[k][l] = ... (calculated by MacCormack's method); 
        U[k][l] = ...;
        V[k][l] = ...;
        P[k][l] = ...;
    }
}
//boundary at r = 0
for (k = 0; k <= k_max; k++)
{
    R[k][0] = R[k][1]; 
    U[k][0] = U[k][1];
    V[k][0] = 0;
    P[k][0] = P[k][1];
}
//other boundaries...

其中 R,U,V,P 是数组ρ,u,v,p, 第一个数组索引kx,第二个lr(均匀的方格)并l=0对应于r=0. 这个边界条件似乎运作良好。

使用 WENO5,问题在于对于每个网格点,模板中在每个方向上多使用三个点,因此在 处指定一个点l=0是不够的。

我目前的想法是:

1.显式设置三个近轴点:

//internal points
for (k = 3; k <= k_max - 3; k++)
{
    for (l = 3; l <= l_max - 3; l++)
    {
        R[k][l] = ... (calculated by WENO5 method); 
        U[k][l] = ...;
        V[k][l] = ...;
        P[k][l] = ...;
    }
}
//boundary at r = 0
for (k = 0; k <= k_max; k++)
{
    for (l = 0; l <= 2; l++)
    {
        R[k][l] = R[k][l]; 
        U[k][l] = U[k][l];
        V[k][l] = 0;
        P[k][l] = P[k][l];
    }
}
//other boundaries...

2.新增三个鬼点r<0(所以l=3r=0) 并使用镜像值设置它们:

//internal points
for (k = 3; k <= k_max - 3; k++)
{
    for (l = 3; l <= l_max - 3; l++)
    {
        R[k][l] = ... (calculated by WENO5 method); 
        U[k][l] = ...;
        V[k][l] = ...;
        P[k][l] = ...;
    }
}
//boundary at r = 0
for (k = 0; k <= k_max; k++)
{
    /values at r < 0
    for (l = 0; l <= 2; l++)
    {
        R[k][l] = R[k][6 - l]; 
        U[k][l] = U[k][6 - l];
        V[k][l] = -V[k][6 - l];
        P[k][l] = P[k][6 - l];
    }
    //values at r = 0
    R[k][3] = R[k][4]; 
    U[k][3] = U[k][4];
    V[k][3] = 0;
    P[k][3] = P[k][4];
}
//other boundaries...

或带有反转符号的镜像(因为鬼点处的值乘以负数r在方程式中):

    ...
    for (l = 0; l <= 2; l++)
    {
        R[k][l] = -R[k][6 - l]; 
        U[k][l] = -U[k][6 - l];
        V[k][l] = V[k][6 - l];
        P[k][l] = -P[k][6 - l];
    }
    ...

方法12在对称轴附近产生明显的伪影。

3.将网格移动半步,以便没有点正好位于r=0并使用鬼点。但是,这种方法会导致计算不稳定。

正确的方法是什么?

1个回答

正如您上面提到的,对称轴的处理方式与将鬼点值设置为其“镜像”对应物(否定速度)的一般对称平面相同。但是,您必须小心,因为您使用的是欧拉方程的几何通量形式。您正在“重新定义”您的控制方程,将它们乘以径向坐标r. 您在幽灵节点上的变量和通量r<0受到径向坐标符号变化的影响,因此您可能会在这些节点中施加非物理的负密度。您可以在本文中找到更多详细信息:

https://www.sciencedirect.com/science/article/pii/S004579301500119X

另外,我想向您指出应该有αrα1p而不仅仅是p在控制方程右侧的压力喷嘴项中。这是另一篇论文,显示了您当前使用的欧拉方程形式的推导:

https://link.springer.com/article/10.1007/s00193-017-0784-y