Giải pháp Matlab cho ẩn phương trình sai phân hữu hạn với các phản ứng động học


8

Tôi đang cố gắng mô hình dẫn nhiệt trong một xi lanh gỗ bằng các phương pháp khác biệt ngầm định. Phương trình nhiệt chung mà tôi đang sử dụng cho hình dạng hình trụ và hình cầu là:

nhập mô tả hình ảnh ở đây

Trong đó p là hệ số hình dạng, p = 1 cho hình trụ và p = 2 cho hình cầu. Điều kiện biên bao gồm đối lưu ở bề mặt. Để biết thêm chi tiết về mô hình, vui lòng xem các bình luận trong mã Matlab bên dưới.

Tệp m chính là:

%--- 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)');

Hàm m-file, funcACbar, tạo ra hệ phương trình cần giải là:

% 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

Và cuối cùng, chức năng liên quan đến các phản ứng động học, funcY, là:

% 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

Chạy mã trên cho một cấu hình nhiệt độ ở trung tâm và bề mặt của xi lanh gỗ:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy từ âm mưu này, vì một số lý do, nhiệt độ trung tâm và bề mặt hội tụ nhanh chóng ở mốc 2 phút không chính xác.

Bất kỳ đề xuất về cách khắc phục điều này hoặc tạo ra một cách hiệu quả hơn để giải quyết vấn đề?


Tôi sẽ chuyển cái này sang Khoa học tính toán , nó sẽ có chủ đề hơn cho họ :)
Manishearth

@Manishearth cảm ơn bạn, tôi đã thay đổi tiêu đề để "giải pháp Matlab cho phương trình nhiệt khác biệt hữu hạn tiềm ẩn với phản ứng động học" để giải thích hy vọng hơn về câu hỏi
sự khiển trách

@Gavin: Cảm ơn bạn đã bao gồm mã. Một gợi ý để đặt câu hỏi: vui lòng thử chọn các mô tả ngắn về các phương pháp số bạn sử dụng và đưa chúng lên phía trước. "Các phương pháp khác biệt hữu hạn tiềm ẩn" là một khởi đầu tốt và nếu bạn có thể hiểu được nhiều hơn, thì người dùng phải tìm hiểu mã của bạn ít hơn để tìm hiểu điều gì đang xảy ra, điều đó có nghĩa là họ sẽ có nhiều khả năng giúp đỡ bạn hơn. Như bạn có thể thấy trong câu trả lời của tôi, tôi đã phải đào rất nhiều mã của bạn để tìm ra những gì bạn đã làm. Những điều như "Euler lạc hậu" và "Tôi cũng có một số phương trình khác trong mô hình của mình" rất hữu ích để biết.
Geoff Oxberry

Câu trả lời:


2

Có vẻ như mô hình bạn đang cố gắng giải quyết là:

(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)

Ở đâu:

  • r=
  • t=
  • T=
  • w=
  • g=
  • a=
  • c=
  • kii=1,2,3
  • αwc
  • p

tr

Tr(r=0,t)=0funcACbarr=0

Có vẻ như bạn đang sử dụng một loại sơ đồ giống như bộ dự đoán-chỉnh sửa ngầm hai giai đoạn để tích hợp các phương trình cho nhiệt độ, trong đó bạn thực hiện như sau:

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))

fT

Trong mỗi giai đoạn, bạn nâng cao mật độ loài bằng Euler rõ ràng.

Tôi thấy một vài vấn đề tiềm ẩn với sơ đồ này:

  • Vì nhiệt độ thực sự được kết hợp với mật độ gỗ và than, nên bạn đang giới thiệu cái được gọi là lỗi phân tách (vật lý) có thể gây ra các tạo tác số mà bạn đã đề cập. Thu hẹp bước thời gian của bạn sẽ giảm lỗi này.
  • Các thuật ngữ nguồn hóa học đôi khi cứng. Bạn đang tích hợp chúng với Euler rõ ràng, điều mà tôi không nghĩ sẽ làm theo trực giác (dựa trên các vấn đề tôi nghiên cứu), do vấn đề ổn định. Tuy nhiên, đối với hầu hết các vấn đề của bạn, dường như không có bất ổn lớn nào, và bất kỳ sự bất ổn nào bạn có được làm giảm bớt, vì vậy có lẽ đó không phải là vấn đề. Kết hợp các phương thức rõ ràng và ẩn theo cách này thường giới hạn độ chính xác ở mức thứ nhất hoặc thứ hai (tùy thuộc vào việc phân tách), trừ khi bạn sử dụng các phương thức IMEX (ẩn-tường minh).
  • Vấn đề lớn nhất của bạn là cán bộ tích hợp thời gian của riêng bạn, do đó bạn không kiểm soát được độ chính xác. Hay đúng hơn, cách duy nhất để kiểm soát độ chính xác của bạn là thu nhỏ bước thời gian, xem xét giải pháp của bạn và xem giải pháp mới có chính xác hơn không.

Đây là những gì tôi sẽ làm:

  • Phân biệt các phương trình của bạn trong không gian và giải quyết đồng thời tất cả chúng (bây giờ). Nếu bạn có hai mươi điểm theo hướng xuyên tâm và năm biến trạng thái trong công thức liên tục của PDE, bạn sẽ chỉ có 100 biến trạng thái ở phía bên tay phải. MATLAB có thể xử lý khá dễ dàng. Thực hiện đề xuất này sẽ loại bỏ các lỗi phân tách.
  • Để tích hợp thời gian, sử dụng một cái gì đó từ thư viện. Cho rằng bạn có thuật ngữ khuếch tán và thuật ngữ hóa học, bạn có thể muốn sử dụng một cái gì đó ẩn. Nếu bạn thấy rằng không có tích hợp MATLAB tích hợp nào hoạt động, hãy tải xuống giao diện MATLAB về SUNDIALS, cài đặt nó và sử dụng CVODE. Việc thực hiện đề xuất này sẽ cung cấp cho bạn tích hợp thời gian được kiểm soát lỗi và các nhà tích hợp này sẽ điều chỉnh các bước thời gian của họ để đáp ứng dung sai lỗi mà bạn cung cấp, do đó bạn có thể yêu cầu các giải pháp chính xác hơn hoặc kém chính xác hơn tùy thuộc vào yêu cầu độ chính xác của bạn.

Sau khi bạn làm những việc đó, việc khắc phục sự cố của bạn sẽ dễ dàng hơn.


Do đó, bạn có nghĩa là bạn cần bao gồm một thông lượng Dufour, hoặc một số thuật ngữ tiến bộ không có yếu tố hình dạng?
Geoff Oxberry

1αTt=2Tr2+prTr
ρ(T)Cp(T)Tt=1r2r(k(T)r2Tr)
ρ(T),Cp(T),k(T)

Điều đó có ý nghĩa. Hình thức thứ hai có nguồn gốc trực tiếp từ bảo tồn năng lượng; trước đây về cơ bản giả định rằng độ dẫn nhiệt có sự phụ thuộc xuyên tâm không đáng kể. Tất cả các đề xuất tôi thực hiện ở trên vẫn áp dụng. Tôi vẫn đề xuất một công thức hoàn toàn ẩn, được kết hợp đầy đủ để bắt đầu và sử dụng một thư viện cho bước thời gian, việc này sẽ giải quyết các vấn đề bạn gặp phải với các tạo tác số. Nếu quá trình mô phỏng mất quá nhiều thời gian, thì tôi có thể đưa ra những gợi ý thêm về cách bạn có thể tăng tốc mọi thứ.
Geoff Oxberry

@Gavin: Có lẽ tốt hơn để hỏi nó như một câu hỏi riêng biệt, vì chủ đề ở đây đã khá dài.
Geoff Oxberry

Vui lòng xem câu hỏi sau đây scicomp.stackexchange.com/questions/8609/ mà liên quan trực tiếp đến câu hỏi được đăng ở đây.
sự khiển trách
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.