在modelica中使用PDE的耦合系统

Ane*_*nel 3 modelica

只有几个问题,我希望有人会抽空回答:).

如果我们有COUPLED模型示例怎么办:n个独立变量的系统X和n非线性偏微分方程PDEf(X,PDEf(X))相对于取决于X的时间,PDEf(X)(取决于变量X的偏微分方程) ).你能提一些建议吗?这是一个例子:

假设c是输出或期望的变量.假设r是自变量.偏微分方程看起来像:

∂c/∂t= D*1/r +∂c/∂r+ 2(D*(∂^ 2 c)/(∂r^ 2))D =常数r = 0:0.1:Rp- Matlab语法,如何在Modelica中表示相同(我使用积分器,但没有工作)?

这是一个代码(不起作用):

model PDEtest
/* Boundary conditions
1. delta(c)/delta(r)=0  for  r=0
2. delta(c)/delta(r)=-j*d for  r=Rp*/
parameter Real Rp=88*1e-3; // length
parameter Real initialConc=1000;
parameter Real Dp=1e-14;
parameter Integer np=10; // num. of points
Real cp[np](start=fill(initialConc,np));
Modelica.Blocks.Continuous.Integrator r(k=1); // independent x1
Real j;
protected 
parameter Real dr=Rp/np;
parameter Real ts= 0.01; // for using when loop (sample(0,ts) )
algorithm 
j:=sin(time); // this should be indepedent variable like x2
r.u:=dr;
while r.y<=Rp loop
for i in 2:np-1 loop
der(cp[i]):=2*Dp/r.y+(cp[i]-cp[i-1])/dr+2*(Dp*(cp[i+1]-2*cp[i]+cp[i-1])/dr^2);
end for;
if r.y==Rp then
cp[np]:=-j*Dp;
end if;
cp[1]:=if time >=0 then initialConc else initialConc;
end while;
annotation (uses(Modelica(version="3.2")));
end PDEtest;
Run Code Online (Sandbox Code Playgroud)

以下是更多问题:

  1. 此代码在OpenModelica 1.8.1中不起作用,也不适用于Dymola 2013demo.我们怎样才能有变量c的连续函数,而不是函数数组?
  2. 我们可以将数组cp的值放在combiTable中吗?如何?
  3. 如果相反"算法"保持"方程式"代码不能成功检查.为什么?在OpenModelica中,错误是:无法展平模型:S.
  4. 有没有简化的方法来使用耦合的一组方程(PDE)?我知道Modelica中的PDE库,但我认为它们很复杂.我想编写一个函数来解决PDE并在"主模型"中调用这些函数,因此函数的输出是"c"的连续函数.我不知道如何处理函数数组.
  5. 如果我们像在Matlab中"说话",你能给我建议如何理解Modelica语言吗?例如:自变量r的值,我们可以在Matlab中说明,比如r = 0:TimeStep:Rp ...如何在Modelica中做同样的事情?请解释一下"方程式"部分是如何工作的,是否与Matlab有相似之处,是否有必要的财务方法?干杯:)

Wil*_*lli 5

很难回答你的问题,因为你假设Modelica~Matlab,但事实并非如此.所以我不会评论你的代码,因为它确实是错的.让我举一个汉堡方程的示例模​​型.也许你可以用它作为起点.

model burgereqn
 Real u[N+2](start=u0);
 parameter Real h = 1/(N+1);
 parameter Integer N = 10;
 parameter Real v = 234;
 parameter Real Pi = 3.14159265358979;
 parameter Real u0[N+2]={((sin(2*Pi*x[i]))+0.5*sin(Pi*x[i])) for i in 1:N+2};
 parameter Real x[N+2] = { h*i for i in 1:N+2};
equation
 der(u[1]) = 0;
 for i in 2:N+1 loop
    der(u[i]) = - ((u[i+1]^2-u[i-1]^2)/(4*(x[i+1]-x[i-1])))
                + (v/(x[i+1]-x[i-1])^2)*(u[i+1]-2*u[i]+u[i+1]);
 end for;
 der(u[N+2]) = 0;
end burgereqn;
Run Code Online (Sandbox Code Playgroud)

你的进一步问题:

  1. cp是一个连续变量,数组代表每个离散点.
  2. 为什么你应该这样做,据我所知,cp是你想要的解决方案变量.
  3. 您应该尝试使用几乎总是方程部分算法部分通常用于函数.我很确定你可以用方程表示你的欲望行为.
  4. 我不知道那个图书馆,但是pde上的难点在于离散化和自我解决.使用modelica工具解决pde时可能会遇到问题,因为通常Modelica工具没有针对pdes的专门求解算法.
  5. 请考虑进一步参考该问题.你可以从Modelica.org开始.

  • 在Modelica中解决PDE时要考虑的一个重要事项是,由于Modelica没有"基函数"的概念,因此必须先将问题离散化为一组ODE,然后工具才能真正处理您的问题(Willi的答案提供了一个很好的例子).因此,Modelica解决方案中不存在解决方案的空间可变性.换句话说,您的解决方案将在时间上连续,但在空间上是离散的.您总是可以通过重建基础函数来从离散值重建空间连续解. (2认同)