OpenModelica解决PDE初始化错误

时间:2017-08-04 01:20:07

标签: modelica pde openmodelica jmodelica

我正在尝试使用OpenModelica来数值求解非常简单的PDE du / dx = du / dt,边界条件为u(0,t)= t ^ 2且u_x(0,t)= 0。我写了下面的代码:

 $search = $_POST['search'];
 $stmt = $link->prepare("SELECT * FROM planner WHERE lname like ? OR fname like ? ");
 $stmt->execute(array("%".$search."%", "%".$search."%"));

它确实编译但它没有完成模拟退出并出现以下错误:

  

Blocstdout | OMEditInfo |

C:/用户/.../应用程序数据/本地/温度/ OpenModelica / OMEdit / pdetest_1.exe -port = 50450 -logFormat = xmltcp -override =开始时间= 0时,停止时间= 1,stepSize的= 0.002,公差= 1E-6,求解= DASSL,OUTPUTFORMAT =垫,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。

enter image description here

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

1 个答案:

答案 0 :(得分:5)

好吧,首先它很伤心地看到,Modelica的社会已经麻木了关于这个主题。在SO或OpenModelica论坛中有十几个与PDE相关的问题,并没有很多有正确答案的问题。我决定让this Github repo收集我在互联网上找到的所有相关材料,所以至少其他人不必为了一个有效的例子而感到惊讶。

但是关于上面的代码。代码几乎没问题,问题在于问题的物理问题。 I asked the question in computational science and got a very good answer

工作代码是:

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;

我使用this presentation by Jan Silar中的代码来解决问题。我还提到了the example 4 of the said github repo中的代码。