OpenModelica解决PDE初始化错误

Foa*_*oad 2 pde modelica 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],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;
Run Code Online (Sandbox Code Playgroud)

它确实编译但它没有完成模拟退出,错误如下:

Blocstdout | OMEditInfo |

C:/ Users /.../ AppData/Local/Temp/OpenModelica/OMEdit/pdetest_1.exe -port = 50450 -logFormat = xmltcp -override = startTime = 0,stopTime = 1,stepSize = 0.002,tolerance = 1e-6 ,solver = dassl,outputFormat = mat,variableFilter =.*-r = pdetest_1_res.mat -jacobian = coloredNumerical -w -lv = LOG_STATS

kquote LOG_INIT | 错误|

由于以下等式,初始化问题不一致:0!= 0.000204061 = u [4]

stdout | 警告|

初始化错误.存储结果并退出.
使用-lv = LOG_INIT -w获取更多信息.

stdout | 错误|

模拟过程失败.退出代码-1.

在此输入图像描述

如果您能帮我了解问题是什么以及如何解决,我将不胜感激?

Foa*_*oad 5

好的,首先,看到Modelica社区对这个问题非常麻木,我感到非常难过.在SO或OpenModelica论坛中有十几个与PDE相关的问题,并没有很多有正确答案的问题.我决定让这个Github回购收集我在互联网上找到的所有相关材料,所以至少其他人不必为一个有效的例子而烦恼.

但是关于上面的代码.代码几乎没问题,问题在于问题的物理问题.我在计算科学中提出了这个问题,得到了一个非常好的答案.

工作代码是:

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;
Run Code Online (Sandbox Code Playgroud)

我使用Jan Silar的演示文稿中的代码来解决问题.我还提到了github repo的例4中的代码.