我有一个偏微分方程组(PDE),特别是应用于传热和对流的扩散-平流-反应方程,我用有限差分法求解。
在我的模拟环境中,我有很多不同的部分,比如管道,储能器,热交换器等等。。。根据零件的不同,每个零件的PDE可以是1D(在大多数情况下)或2D(约占零件的5%)或3D(很少)。由于这些不同的形状,为整个系统构造一个三对角(或五角、间隔-…)太复杂了。
这个问题发表在SO上而不是计算科学上,因为它是关于如何使用pde的求解算法的,而不是关于pde的求解方法。在
因此,目前每个部件都有一个diff函数,它返回给定输入温度的微分。由于材料特性等与温度(和流量)有关,因此PDE是非线性的,但由于系数滞后于系数而被认为是线性的(在每个步骤使用起始温度计算温度和流量相关值,对于在每次迭代中重新计算它们的隐式方法)。diff函数返回的微分的形状与零件的值数组形状相同,例如,对于具有10个网格点的一维管道,这将导致形状(10, )的差分数组。扩散系数和其他系数被认为是diff函数的内部参数,对解算器不可用。因此解算器将只知道差分、当前零件温度和步长。
有没有什么方法可以用python一次只执行一个步骤,使用一个专门用于求解pde的算法来求解这些pde?(以及优选为scipy/numpy的一部分并且更优选地已经由numba支持的算法。)
到目前为止我考虑过的事情:scipy.integrate:仅对ode可行,而PDE可能不在其中。对吗?至少我不能用它来做PDE的好结果。除此之外,scipy.integrate并不是只用于计算一个步骤的。在
np.linalg.solve:似乎是最好的方法,如果你有三对角矩阵和线性方程组。但由于