我正在使用与代数方程混合的抛物线 PDE,并且所有这些方程都是耦合的。我在 OM(1.9.1)("residualFcn[some number]") 中使用了欧拉方法(Dassl 太慢)和大容差(用于快速模拟)和接收错误(两种类型)。问题是求解器不能t 求解非线性系统(数学上,系统是正确的)。第一个问题是什么类型的方法在 OM 中使用欧拉积分法(显式或隐式或 Crank-Nicholson ......或......)?所以我试图用数字解决它(显式欧拉方法(在“new [N]”下面的代码中)(也许问题可能是CFL条件。),但我有问题(特定采样时间的样本重建)。所以,第二个问题是指重现特定采样时间的值?!在下面的代码中有数组“a [3]”。想法是针对每个“
还有一件事,如果 delta(t)/(delta(x))^2 >= 0.5 (delta(t) 定义用户,并指代方程部分,则 delta(x) 如下面的代码所示,并使用空间离散化在方程部分(经典前馈方法)),是否满足数值稳定性?同样的例子,但算法部分?问候
这是代码:
model Euler1D
import Modelica.Utilities.*;
parameter Integer N=10; //50
parameter Real Lp=1e-6;
parameter Real deltax=1/(N-1)*Lp;
Real a[3];
Real old[N];
Real new[N];
Real b;
equation
a[1]=if
(time>5) then 0 else time+5;
a[2]=time;
a[3]=2;
when
(sample(0,1)) then
d=b;
end when;
algorithm
// IN t=ts;
when (sample(0,1)) then
for i in 1:2 loop
b:=a[i];
Streams.print(String(time)+" "+String(a[i])+ " "+String(b), "C:/Some_Path/text.txt");
end for;
end when;
// Another problem
old[1]:=10;
old [N]:=0;
new[1]:=10;
new [N]:=0;
// Boundary
for i in 2:N-1 loop
old [i]:=10;
new[i]:=10;
end for;
for dx in deltax:deltax:Lp-deltax loop // spatial discretization
for i in 2:N-1 loop
(new[i]):=(old[i]+0.5*(old[i + 1] +old[i-1]- 2*old[i]));
//def:=def+abs(new[i]-old[i]);
end for;
for i in 2:N-1 loop
old[i]:=new[i]; // switch the values
end for;
for i in 1:N loop
Streams.print(String(time)+" "+ String(new[2]), "C:/Some_Path/Anel_Nodes.txt");
end for;
annotation (uses(Modelica(version="3.2")));
end Euler1D;