3

いくつか質問がありますが、誰かが答える時間を見つけてくれることを願っています:)。

COUPLED モデルの例があるとしたらどうなるでしょうか: n 個の独立変数 X と n 個の非線形偏微分方程式の系 PDEf(X,PDEf(X)) X に依存する時間に関する PDEf(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 では、エラーは :could not flattening model :S です。
  4. 結合された一連の方程式 (PDE) を使用する簡単な方法はありますか? Modelica の PDE ライブラリについては知っていますが、複雑だと思います。偏微分方程式を解くための関数を書き、その関数を「メイン モデル」で呼び出して、関数の出力が「c」の連続関数になるようにしたいのですが、関数の配列をどうするかわかりません。
  5. Matlab のように「話す」場合、Modelica 言語を理解する方法についてアドバイスをいただけますか? 例: 独立変数 r の値は、r=0:TimeStep:Rp のように Matlab で指定できます。Modelica で同じことを行うには? また、セクション「方程式」がどのように機能するか、Matlab との類似性はありますか、必要な順次アプローチはありますか? 乾杯 :)
4

1 に答える 1

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;

その他の質問:

  1. cp は連続変数であり、配列はすべての離散化ポイントを表しています。
  2. cp が目的のソリューション変数であることを理解している限り、なぜそれを行う必要があるのか​​ 。
  3. ほとんどの場合、等式セクション アルゴリズム セクションは通常、関数で使用されます。欲望の行動を方程式で表現できると確信しています。
  4. 私はそのライブラリを知りませんが、pde で難しいのは、離散化とそれを自己解決することです。通常、Modelica ツールには pdes に特化した解決アルゴリズムがないため、modelica ツールで pde を解決しているときに問題が発生する場合があります。
  5. その質問については、さらに参考にしてください。Modelica.orgから始めることができます。
于 2012-11-28T16:55:42.327 に答える