運動反応を伴う陰的有限差分熱方程式のMatlab解


8

私は、陰的有限差分法を使用して、木材シリンダー内の熱伝導をモデル化しようとしています。円筒形と球形に使用している一般的な熱方程式は次のとおりです。

ここに画像の説明を入力してください

ここで、pは形状係数です。円柱の場合はp = 1、球の場合はp = 2です。境界条件には、表面での対流が含まれます。モデルの詳細については、以下のMatlabコードのコメントを参照してください。

メインのmファイルは次のとおりです。

%--- main parameters
rhow = 650;     % density of wood, kg/m^3
d = 0.02;       % wood particle diameter, m
Ti = 300;       % initial particle temp, K
Tinf = 673;     % ambient temp, K
h = 60;         % heat transfer coefficient, W/m^2*K

% A = pre-exponential factor, 1/s and E = activation energy, kJ/mol
A1 = 1.3e8;     E1 = 140;   % wood -> gas
A2 = 2e8;       E2 = 133;   % wood -> tar
A3 = 1.08e7;    E3 = 121;   % wood -> char 
R = 0.008314;   % universal gas constant, kJ/mol*K

%--- initial calculations
b = 1;          % shape factor, b = 1 cylinder, b = 2 sphere
r = d/2;        % particle radius, m

nt = 1000;      % number of time steps
tmax = 840;     % max time, s
dt = tmax/nt;   % time step spacing, delta t
t = 0:dt:tmax;  % time vector, s

m = 20;         % number of radius nodes
steps = m-1;    % number of radius steps
dr = r/steps;   % radius step spacing, delta r

%--- build initial vectors for temperature and thermal properties
i = 1:m;
T(i,1) = Ti;    % column vector of temperatures
TT(1,i) = Ti;   % row vector to store temperatures 
pw(1,i) = rhow; % initial density at each node is wood density, rhow
pg(1,i) = 0;    % initial density of gas
pt(1,i) = 0;    % inital density of tar
pc(1,i) = 0;    % initial density of char

%--- solve system of equations [A][T]=[C] where T = A\C
for i = 2:nt+1

    % kinetics at n
    [rww, rwg, rwt, rwc] = funcY(A1,E1,A2,E2,A3,E3,R,T',pw(i-1,:));
    pw(i,:) = pw(i-1,:) + rww.*dt;      % update wood density
    pg(i,:) = pg(i-1,:) + rwg.*dt;      % update gas density
    pt(i,:) = pt(i-1,:) + rwt.*dt;      % update tar density
    pc(i,:) = pc(i-1,:) + rwc.*dt;      % update char density
    Yw = pw(i,:)./(pw(i,:) + pc(i,:));  % wood fraction
    Yc = pc(i,:)./(pw(i,:) + pc(i,:));  % char fraction
    % thermal properties at n
    cpw = 1112.0 + 4.85.*(T'-273.15);   % wood heat capacity, J/(kg*K) 
    kw = 0.13 + (3e-4).*(T'-273.15);    % wood thermal conductivity, W/(m*K)
    cpc = 1003.2 + 2.09.*(T'-273.15);   % char heat capacity, J/(kg*K)
    kc = 0.08 - (1e-4).*(T'-273.15);    % char thermal conductivity, W/(m*K)
    cpbar = Yw.*cpw + Yc.*cpc;  % effective heat capacity
    kbar = Yw.*kw + Yc.*kc;     % effective thermal conductivity
    pbar = pw(i,:) + pc(i,:);   % effective density
    % temperature at n+1
    Tn = funcACbar(pbar,cpbar,kbar,h,Tinf,b,m,dr,dt,T);

    % kinetics at n+1
    [rww, rwg, rwt, rwc] = funcY(A1,E1,A2,E2,A3,E3,R,Tn',pw(i-1,:));
    pw(i,:) = pw(i-1,:) + rww.*dt;
    pg(i,:) = pg(i-1,:) + rwg.*dt;
    pt(i,:) = pt(i-1,:) + rwt.*dt;
    pc(i,:) = pc(i-1,:) + rwc.*dt;
    Yw = pw(i,:)./(pw(i,:) + pc(i,:));
    Yc = pc(i,:)./(pw(i,:) + pc(i,:));
    % thermal properties at n+1
    cpw = 1112.0 + 4.85.*(Tn'-273.15);
    kw = 0.13 + (3e-4).*(Tn'-273.15);
    cpc = 1003.2 + 2.09.*(Tn'-273.15);
    kc = 0.08 - (1e-4).*(Tn'-273.15);
    cpbar = Yw.*cpw + Yc.*cpc;
    kbar = Yw.*kw + Yc.*cpc; 
    pbar = pw(i,:) + pc(i,:);
    % revise temperature at n+1
    Tn = funcACbar(pbar,cpbar,kbar,h,Tinf,b,m,dr,dt,T);

    % store temperature at n+1
    T = Tn;
    TT(i,:) = T';
end

%--- plot data
figure(1)
plot(t./60,TT(:,1),'-b',t./60,TT(:,m),'-r')
hold on
plot([0 tmax/60],[Tinf Tinf],':k')
hold off
xlabel('Time (min)'); ylabel('Temperature (K)');
sh = num2str(h);  snt = num2str(nt);  sm = num2str(m);
title(['Cylinder Model, d = 20mm, h = ',sh,', nt = ',snt,', m = ',sm])
legend('Tcenter','Tsurface',['T\infty = ',num2str(Tinf),'K'],'location','southeast')

figure(2)
plot(t./60,pw(:,1),'--',t./60,pw(:,m),'-','color',[0 0.7 0])
hold on
plot(t./60,pg(:,1),'--b',t./60,pg(:,m),'b')
hold on
plot(t./60,pt(:,1),'--k',t./60,pt(:,m),'k')
hold on
plot(t./60,pc(:,1),'--r',t./60,pc(:,m),'r')
hold off
xlabel('Time (min)'); ylabel('Density (kg/m^3)');

解く方程式系を作成する関数mファイルfuncACbarは次のとおりです。

% Finite difference equations for cylinder and sphere
% for 1D transient heat conduction with convection at surface
% general equation is:
% 1/alpha*dT/dt = d^2T/dr^2 + p/r*dT/dr for r ~= 0
% 1/alpha*dT/dt = (1 + p)*d^2T/dr^2     for r = 0
% where p is shape factor, p = 1 for cylinder, p = 2 for sphere

function T = funcACbar(pbar,cpbar,kbar,h,Tinf,b,m,dr,dt,T)

alpha = kbar./(pbar.*cpbar);    % effective thermal diffusivity
Fo = alpha.*dt./(dr^2);         % effective Fourier number
Bi = h.*dr./kbar;               % effective Biot number

% [A] is coefficient matrix at time level n+1
% {C} is column vector at time level n
A(1,1) = 1 + 2*(1+b)*Fo(1);
A(1,2) = -2*(1+b)*Fo(2);
C(1,1) = T(1);

for k = 2:m-1
    A(k,k-1) = -Fo(k-1)*(1 - b/(2*(k-1)));   % Tm-1
    A(k,k) = 1 + 2*Fo(k);                    % Tm
    A(k,k+1) = -Fo(k+1)*(1 + b/(2*(k-1)));   % Tm+1
    C(k,1) = T(k);
end

A(m,m-1) = -2*Fo(m-1);
A(m,m) = 1 + 2*Fo(m)*(1 + Bi(m) + (b/(2*m))*Bi(m));
C(m,1) = T(m) + 2*Fo(m)*Bi(m)*(1 + b/(2*m))*Tinf;

% solve system of equations [A]{T} = {C} where temperature T = [A]\{C}
T = A\C;

end

そして最後に、運動反応を処理する関数funcYは次のとおりです。

% Kinetic equations for reactions of wood, first-order, Arrhenious type equations
% K = A*exp(-E/RT) where A = pre-exponential factor, 1/s
% and E = activation energy, kJ/mol

function [rww, rwg, rwt, rwc] = funcY(A1,E1,A2,E2,A3,E3,R,T,pww)

K1 = A1.*exp(-E1./(R.*T));    % wood -> gas (1/s)
K2 = A2.*exp(-E2./(R.*T));    % wood -> tar (1/s)
K3 = A3.*exp(-E3./(R.*T));    % wood -> char (1/s)

rww = -(K1+K2+K3).*pww;      % rate of wood consumption (rho/s)
rwg = K1.*pww;               % rate of gas production from wood (rho/s)
rwt = K2.*pww;               % rate of tar production from wood (rho/s)
rwc = K3.*pww;               % rate of char production from wood (rho/s)

end

上記のコードを実行すると、木の円柱の中心と表面の温度プロファイルが得られます。

ここに画像の説明を入力してください

このプロットからわかるように、何らかの理由で、中心と表面の温度が2分マークに急速に収束していますが、これは正しくありません。

これを修正する方法、または問題を解決するより効率的な方法を作成する方法に関する提案はありますか?


私はこれを計算科学に移行します、それは彼らのためのより多くの話題です:)
Manishearth

私はうまくいけば、より良い質問を説明するために「運動反応と暗黙の有限差分熱方程式のためのMatlabのソリューション」にタイトルを変更し、あなたに感謝@Manishearth
wigging

@Gavin:コードを追加していただきありがとうございます。質問するための提案:使用する数値的方法の短い説明を選んで、前に置いてください。「暗黙の有限差分法」は良い出発点であり、それをさらに具体化できる場合、ユーザーは何が起こっているのかを理解するためにコードを掘り下げる必要がありません。つまり、ユーザーが助けになる可能性が高くなります。私の答えでわかるように、私はあなたが何をしたのかを理解するためにコードを徹底的に調査しなければなりませんでした。「逆オイラー」や「モデルに他の方程式もある」などの情報が役立ちます。
Geoff Oxberry 2013

回答:


2

解決しようとしているモデルは次のようです:

(1/α(w,c))Tt(r,t)=Trr(r,t)+(p/r)Tr(r,t)wt(r,t)=(k1(T(r,t))+k2(T(r,t))+k3(T(r,t)))w(r,t)gt(r,t)=k1(T(r,t))w(r,t)at(r,t)=k2(T(r,t))w(r,t)ct(r,t)=k3(T(r,t))w(r,t)

どこ:

  • r=半径
  • t=時間
  • T=温度
  • w=木材密度
  • g=ガス密度
  • a=タール密度
  • c=文字密度
  • kiはレート係数ですi=1,2,3
  • αはおよび関数である熱拡散率ですwc
  • pは定数形状係数です

と添え字は、導関数を示します。tr

温度の境界条件しかありません(必要な唯一の境界条件です)。表面の対流境界条件について言及しましたが、他の境界条件は対称条件である必要がありますは常に、形成するシステムの一部として課す必要があります。、でのPDEからその項を省略し、結果の方程式を離散化するのではなく。Tr(r=0,t)=0funcACbarr=0

次のように、温度の方程式を統合するために、ある種の2段階の暗黙的な予測子修正子のようなスキームを使用しているようです。

T~(r,tn+1)=T(r,tn)+hf(T~(r,tn+1))T(r,tn+1)=T~(r,tn+1)+hf(T(r,tn+1))

ここで、関数はの微分方程式の右辺を表します(実際には、より多くの変数の関数ですが、他の変数は、積分器の2つのステージのそれぞれで本質的に一定として扱われます。TfT

各段階で、明示的なオイラーを使用して種の密度を進めます。

このスキームにはいくつかの潜在的な問題があります。

  • 温度は実際には木材と木炭の密度に関連しているため、言及した数値のアーティファクトを引き起こす可能性のある(物理)分割エラーと呼ばれるものを導入しています。タイムステップを小さくすると、このエラーが減少します。
  • 化学物質の用語は時として硬直します。あなたはそれらを明示的なオイラーと統合していますが、これは安定性の問題のために(私が研究している問題に基づいて)直感的に行うとは思いません。ただし、ほとんどの問題では、大きな不安定性は見られず、また、不安定性は抑制されているため、問題ではない可能性があります。この方法で明示的メソッドと暗黙的メソッドを組み合わせると、IMEX(暗黙的明示的)メソッドを使用しない限り、通常、精度が(分割に応じて)1次または2次に制限されます。
  • 最大の問題は、タイムインテグレーターをローリングすることです。そのため、精度を制御できません。むしろ、精度を制御する唯一の方法は、時間ステップを縮小し、ソリューションを見て、新しいソリューションの方が正確かどうかを確認することです。

これが私がすることです:

  • 空間で方程式を離散化し、すべて同時に解決ます(現時点では)。半径方向に20個の点があり、PDEの連続式に5つの状態変数がある場合、右側には100個の状態変数しかありません。MATLABはそれをかなり簡単に処理できるはずです。この提案を実装すると、分割エラーがなくなります。
  • 時間の統合には、ライブラリの何かを使用します。拡散項と化学用語がある場合、おそらく暗黙的なものを使用する必要があります。組み込みのMATLABインテグレーターが機能しない場合は、MATLABインターフェイスをSUNDIALSにダウンロードしてインストールし、CVODEを使用します。この提案を実装すると、エラー制御された時間積分が得られ、これらのインテグレーターはタイムステップを調整して、提供するエラー許容誤差を満たすため、精度要件に応じてより正確またはより正確でないソリューションを求めることができます。

これらを実行すると、問題のトラブルシューティングが容易になります。


つまり、Dufourフラックス、またはある種の非形状因子の移流項を含める必要があるということですか?
Geoff Oxberry 2013

代わりに基づいてモデルを作成する必要があると思います whereは温度によって異なります。 ρTCPTT
1αTt=2Tr2+prTr
ρTCPTKT
ρ(T)Cp(T)Tt=1r2r(k(T)r2Tr)
ρ(T),Cp(T),k(T)
ウィッグ

それは理にかなっている。後者の形式は、エネルギーの節約から直接導き出されます。前者は本質的に、熱伝導率が無視できるほどの径方向依存性を持っていると仮定しています。上記で行った提案はすべてそのまま適用されます。私はまだ、完全に暗黙的で完全に結合した定式化を開始することをお勧めします。また、タイムステッピング用のライブラリを使用することをお勧めします。シミュレーションに時間がかかりすぎる場合は、速度を上げる方法についてさらに提案します。
Geoff Oxberry 2013

@Gavin:ここのスレッドはすでにかなり長いので、別の質問として質問する方が良いでしょう。
Geoff Oxberry 2013

ここに投稿された質問に直接関連する次の質問scicomp.stackexchange.com/questions/8609/…を参照してください。
2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.