OpenModelica解决PDE初始化错误
我试图用OpenModelica数值求解一个非常简单的PDE du/dx=du/dt,边界条件为u(0,t)=t^2和u_x(0,t)=0。我已经编写了以下代码:OpenModelica解决PDE初始化错误,modelica,pde,openmodelica,Modelica,Pde,Openmodelica,我试图用OpenModelica数值求解一个非常简单的PDE du/dx=du/dt,边界条件为u(0,t)=t^2和u_x(0,t)=0。我已经编写了以下代码: model pdetest_1 parameter Real L=1; parameter Integer N=100; parameter Real dx=L/(N-1); parameter Real[N] x=array(i*dx for i in 0:N-1); Real u[N],
model pdetest_1
parameter Real L=1;
parameter Integer N=100;
parameter Real dx=L/(N-1);
parameter Real[N] x=array(i*dx for i in 0:N-1);
Real u[N],ux[N];
initial equation
for i in 1:N loop
u[i]=0;
end for;
equation
u[1]=(time)^2;
ux[1]=0;
for i in 2:N loop
u[i]=u[i-1]+dx*ux[i-1];
der(u[i])=ux[i];
end for;
end pdetest_1;
它会编译,但不会完成模拟退出,错误如下:
Blocstdout | OMEditInfo |C:/Users/../AppData/Local/Temp/OpenModelica/OMEdit/pdetest_1.exe-port=50450-logFormat=xmltcp-override=startTime=0,stopTime=1,stepSize=0.002,公差=1e-6,解算器=dassl,outputFormat=mat,变量过滤器=.*-r=pdetest_1_res.mat-jacobian=colorednumeric-w-lv=LOG_STATSkquote
LOG_INIT | error |由于以下等式,初始化问题不一致:0=0.000204061=u[4]
stdout | warning |初始化错误。存储结果并退出。有关更多信息,请使用-lv=LOG_INIT-w stdout | error |模拟进程失败。已退出,代码为-1
如果您能帮助我了解问题所在以及如何解决问题,我将不胜感激。好的,首先,看到Modelica社区对这个问题如此麻木,我感到非常难过。在SO或OpenModelica论坛中有十几个与PDE相关的问题,没有多少能给出正确的答案。我决定收集我在互联网上能找到的所有相关资料,这样至少其他人就不必四处寻找一个有用的例子 但是关于上面的代码。代码几乎没有问题,问题在于问题的物理性 工作守则是:
model pdetest_1
parameter Real L = 1;
parameter Integer N = 100;
parameter Real dx = L / (N - 1);
parameter Real c = 1;
Real u[N], ux[N];
initial equation
for i in 1:N loop
u[i] = 0;
end for;
equation
if c>0 then
u[N] = time ^ 2;
ux[N] = 0;
for i in 1:N-1 loop
u[i] = u[i + 1] - dx * ux[i];
der(u[i]) = c*ux[i];
end for;
else
u[1] = time ^ 2;
ux[1] = 0;
for i in 2:N loop
u[i] = u[i - 1] + dx * ux[i];
der(u[i]) = c*ux[i];
end for;
end if;
end pdetest_1;
我用中的代码解决了这个问题。我还提到了中的代码