我正在尝试使用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 |警告|错误在初始化。结果存储和退出。
stdout |错误|
使用-lv = LOG_INIT -w获得更多信息。仿真过程失败。退出,代码-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中的代码。