一维激波管问题和解决方案

计算科学 流体动力学 Python
2021-12-21 20:50:32

我已经解决了 1d 冲击管问题。(欧拉方程)。使用以下步骤:
1) 在域上定义黎曼问题
2) 执行局部线性化
3) 基于线性化,写出特征值和特征向量
4) 使用逆风,即找出数值通量并使用更新方程

当我在 Matlab 中实施上述策略时,它运行良好。但是“相同”的问题是在 python 中编码时,它显示左右状态的某些值存在问题。当将左右状态更改为一些新参数时,它工作正常并得到了预期的结果。

为什么会发生这种情况?

这是python的问题,还是python和matlab的“思考”策略不同?

我使用 numpy 来定义数组和矩阵。我使用 numpy.linalg.solve() 函数来查找特征变量的向量,从而找到通量差异的向量。我使用 pylab.plot(X,Y) 进行绘图。

(我交叉检查了几次程序。我想它没有问题。它运行良好......只是给出的图表对于左右状态的某些值不正确)

1个回答

我想问题出在我给出的压力条件上。
1) 条件 1
域均分为 101 个点。两半定义为
Pressure[left]=10,
pressure[right]=0.1;

密度[左]=1
密度[右]=0.1

到处速度=0:结果在此处输入图像描述

2)条件2:
压力[left]=1。
压力[右]=0.1;

密度和速度同上

在此处输入图像描述

而在 matlab 上,我只检查了第二种情况(但使用相同的代码)。在 python 上也可以正常工作。所以我想我的问题还不成熟,我应该在问之前完成这项工作。这是在域上拍摄 501 个等距点的高分辨率图片:

在此处输入图像描述

我认为图在第一种情况下的性质是因为该方法无法处理压力的巨大跳跃。

(令人惊讶的是,当压力和密度都设置为 [10:1] 时,效果很好!)(欢迎对此提出任何意见)