gpt4 book ai didi

modelica - 在 modelica 中使用偏微分方程耦合系统

转载 作者:行者123 更新时间:2023-12-02 19:59:06 24 4
gpt4 key购买 nike

只是几个问题,希望有人能抽出时间来回答:)。

如果我们有 COUPLED 模型示例:n 个独立变量 X 和 n 个非线性偏微分方程组 PDEf(X,PDEf(X)) 相对于 TIME 的系统,取决于 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;

还有更多问题:

  1. 此代码在 OpenModelica 1.8.1 中不起作用,在 Dymola 2013demo 中也不起作用。我们怎样才能拥有变量 c 的连续函数,而不是函数数组?
  2. 我们可以将数组 cp 的值放入 CombiTable 中吗?怎么办?
  3. 如果把“算法”改为“方程”代码就无法成功检查。为什么?在 OpenModelica 中,错误是:无法展平模型:S。
  4. 是否有任何简化的方法来使用一组耦合方程(偏微分方程)?我知道 Modelica 中的偏微分方程库,但我认为它们很复杂。我想编写一个求解偏微分方程的函数,并在“主模型”中调用这些函数,以便函数的输出是“c”的连续函数。我不知道如何处理函数数组。
  5. 如果我们像在 Matlab 中那样“说话”,您能给我建议如何理解 Modelica 语言吗?例如:自变量r的值,我们可以在Matlab中指定,如r=0:TimeStep:Rp…如何在Modelica中做同样的事情?请解释一下“方程”部分是如何工作的,与Matlab有相似之处吗?是否有必要的顺序方法?干杯:)

最佳答案

很难回答你的问题,因为你假设 Modelica ~ Matlab,但事实并非如此。所以我不会评论你的代码,因为它确实是错误的。让我给您一个 burger equation 的示例模型。也许您可以使用它作为起点。

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;

您的进一步问题:

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

关于modelica - 在 modelica 中使用偏微分方程耦合系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13603769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com