Matematické modelování problémů proudění
kód předmětu: 2011083
Obsah
Přednášející:
Doc. Ing. Jiří Fürst, PhD. Ústav technické matematiky, FS ČVUT v Praze Karlovo nám. 13 121 35 Praha 2 místnost D301
Plán předmětu
- Jednorozměrný zákon zachování
- Rovnice kontinuity v 1D
- Lineární advekce
- Charakteristiky, analytické řešení počáteční úlohy
- Formulace smíšené úlohy, okrajové podmínky
- Nelineární skalární hyperbolická rovnice (Burgersova rovnice)
- Vznik nespojitosti a neexistence globálního klasického řešení
- Definice slabého řešení a jeho nejednoznačnost
- Koncept entropického řešení
- Rankine-Hugoniotova podmínka (rychlost pohybu nespojitosti)
- Další příklady nelineárních rovnic
- Lineární hyperbolický systém rovnic prvního řádu
- Diagonalizace matice A, charakteristické proměnné
- Analytické řěšení počáteční úlohy
- Formulace smíšené úlohy, okrajové podmínky
- Numerické řešení jednorozměrných skalárních zákonů zachování
- Metoda konečných objemů pro 1D problém
- Chyba aproximace, konzistence, stabilita, globální chyba
- Laxova věta o ekvivalenci
- Spektrální kriterium stability
- Monotónní schéma a princip maxima pro skalární problém
- Princip umělé vazkosti
- TVD schéma pro skalární problém
- Příklady schémat:
- Centrální schéma
- Laxovo-Wendroffovo schéma
- Schéma upwind
- Laxovo-Friedrichsovo (Rusanovovo) schéma
- Laxovo-Wendroffovo schéma s umělou vazkostí
- TVD schéma
- Numerické řešení hyperbolických systémů v 1D
- Schéma upwind
- Laxovo-Freidrichsovo schéma
- Laxovo-Wendroffovo (MacCormackovo) schéma
- AUSM schéma pro Eulerovy rovnice
- Příklady:
- Řešení Riemannova problému pro systém Eulerových rovnic (rázová trubice)
- Řešení rovnic proudění mělké vody (protržení hráze)
- Princip metody konečných objemů pro vícerozměrné problémy
Plán bude doplněn v průběhu semestru
Seznam doporučené literatury
- J. Fürst, K. Kozel: Numerické metody řešení problémů proudění I, skripta ČVUT, 2001
- J. Fořt, K. Kozel: Numerické metody řešení problémů proudění II, skripta ČVUT, 2002
- J. Fořt, K. Kozel, P. Louda, J. Fürst: Numerické metody řešení problémů proudění III, skripta ČVUT, 2004
- J.H. Ferziger, M. Peric: Computational Methods for Fluid Dynamics, Springer 2002
- J. Blazek: Computational Fluid Dynamics: Principles and Applications, Elsevier, 2001
- E.F.Toro: Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction, Springer 2009
Materiály k předmětu
Program pro numerické řešení smíšené úlohy pro rovnici linární advekce v 1D,
clear all;
% Reseni smisene ulohy pro rovnici u_t + a*u_x = 0 pomoci MKO
a = 1;
% Delka intervalu a pocet bunek
L = 1;
n = 100;
dx = L / n;
x = linspace(dx/2, L-dx/2, n);
% x = dx/2:dx:(L-dx/2);
u(1:n) = 0; % aktualni hodnota reseni
un(1:n) = 0; % nova hodnota reseni
% Pocatecni podminka
for i = 1:n
if (x(i)>0.25 && x(i)<0.5)
u(i) = 1-cos(2*pi*(x(i)/0.25-1));
end
end
plot(x, u); axis([0 1 -0.5 2.5]);
disp("Stiskni enter pro pokracovani"); pause;
dt = 0.8*dx;
t = 0;
for iter = 1:(n/2)
% Okrajova podminka na leve casti intervalu
f(1) = 0;
% Numericky tok f
for i = 2:n+1
f(i) = a*u(i-1);
end
un(1:n) = u(1:n) - dt/dx * (f(2:n+1) - f(1:n));
u = un;
t = t + dt;
if (mod(iter,10)==0)
plot(x, u); axis([0 1 -0.5 2.5]);
pause(1);
end
end
%clear all;
% Reseni smisene ulohy pro rovnici u_t + a*u_x = 0 pomoci MKO
a = 1;
% Delka intervalu a pocet bunek
L = 1;
n = 100;
dx = L / n;
x = linspace(dx/2, L-dx/2, n);
u(1:n) = 0;
un(1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)>0.25 && x(i)<0.5)
u(i) = 1-cos(2*pi*(x(i)/0.25-1));
end
end
plot(x, u); axis([0 1 -0.5 2.5]);
disp("Stiskni enter pro pokracovani"); pause;
dt = 0.8*dx;
for iter = 1:(n/2)
% Okrajova podminka na leve casti intervalu
f(1) = 0;
f(n+1) = a*u(n);
% Numericky tok f
for i = 2:n
f(i) = a/2*(u(i-1)+u(i)) - a^2/2*dt/dx*(u(i)-u(i-1));
end
un(1:n) = u(1:n) - dt/dx * (f(2:n+1) - f(1:n));
u = un;
if (mod(iter,10)==0)
plot(x, u); axis([0 1 -0.5 2.5]);
pause(1);
end
end
Program pro numerické řešení smíšené úlohy pro Burgersovu rovnici v 1D,
clear all;
% Reseni smisene ulohy pro rovnici u_t + (u^2/2)_x = 0 pomoci MKO
% Delka intervalu a pocet bunek
L = 1;
n = 100;
dx = L / n;
x = linspace(dx/2, L-dx/2, n);
u(1:n) = 0;
un(1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)>0.25 && x(i)<0.5)
u(i) = 1-cos(2*pi*(x(i)/0.25-1));
end
end
plot(x, u); axis([0 1 -0.5 2.5]);
disp("Stiskni enter pro pokracovani"); pause;
dt = 0.4*dx;
t = 0;
for iter = 1:n
% Okrajova podminka na leve casti intervalu
f(1) = 0;
% Numericky tok f
for i = 2:n+1
f(i) = u(i-1)^2/2;
end
un(1:n) = u(1:n) - dt/dx * (f(2:n+1) - f(1:n));
t = t + dt;
u = un;
if (mod(iter,10)==0)
plot(x, u); axis([0 1 -0.5 2.5]);
pause(1);
end
end
clear all;
% Reseni smisene ulohy pro rovnici u_t + (u^2/2)_x = 0 pomoci MKO
% Delka intervalu a pocet bunek
L = 1;
n = 400;
dx = L / n;
x = linspace(dx/2, L-dx/2, n);
u(1:n) = 0;
un(1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)>0.25 && x(i)<0.5)
u(i) = 1-cos(2*pi*(x(i)/0.25-1));
end
end
plot(x, u); axis([0 1 -0.5 2.5]);
disp("Stiskni enter pro pokracovani"); pause;
dt = 0.1*dx;
t = 0;
for iter = 1:n
% Okrajova podminka na leve casti intervalu
f(1) = 0;
f(n+1) = u(n)^2/2;
% Numericky tok f
for i = 2:n
a = (u(i-1)+u(i))/2;
f(i) = a/2*(u(i-1)+u(i)) - a^2/2*dt/dx*(u(i)-u(i-1));
end
un(1:n) = u(1:n) - dt/dx * (f(2:n+1) - f(1:n));
t = t + dt;
u = un;
if (mod(iter,10)==0)
plot(x, u); axis([0 1 -0.5 2.5]);
pause(1);
end
end
%clear all;
% Reseni smisene ulohy pro rovnici u_t + a*u_x = 0 pomoci MKO
a = 1;
% Delka intervalu a pocet bunek
L = 1;
n = 100;
dx = L / n;
x = linspace(dx/2, L-dx/2, n);
u(1:n) = 0;
un(1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)>0.25 && x(i)<0.5)
u(i) = 1-cos(2*pi*(x(i)/0.25-1));
end
end
plot(x, u); axis([0 1 -0.5 2.5]);
disp("Stiskni enter pro pokracovani"); pause;
dt = 0.8*dx;
for iter = 1:(n/2)
% Okrajova podminka na leve casti intervalu
f(1) = 0;
f(2) = 0;
f(n+1) = a*u(n-1);
f(n+1) = a*u(n);
% Numericky tok f
for i = 3:n-1
fl = a*u(i-1);
fr = a*u(i);
flw = (fr+fl)/2 - a/2*dt/dx*(fr-fl);
fup = (fr+fl)/2 - abs(a)/2*(u(i)-u(i-1));
if ( (u(i)-u(i-1))*(u(i+1)-u(i)) <= 0)
phi = 0;
else
r = (u(i-1)-u(i-2)) / (u(i)-u(i-1));
phi = min(1, 2*r);
end
f(i) = fup + phi*(flw-fup);
end
un(1:n) = u(1:n) - dt/dx * (f(2:n+1) - f(1:n));
u = un;
if (mod(iter,10)==0)
plot(x, u); axis([0 1 -0.5 2.5]);
pause(1);
end
end
clear all;
% Reseni smisene ulohy pro rovnici u_t + (u^2/2)_x = 0 pomoci MKO
% Delka intervalu a pocet bunek
L = 1;
n = 100;
dx = L / n;
x = linspace(dx/2, L-dx/2, n);
u(1:n) = 0;
un(1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)>0.25 && x(i)<0.5)
u(i) = 1-cos(2*pi*(x(i)/0.25-1));
end
end
plot(x, u); axis([0 1 -0.5 2.5]);
disp("Stiskni enter pro pokracovani"); pause;
dt = 0.1*dx;
t = 0;
for iter = 1:n
% Okrajova podminka na leve casti intervalu
f(1) = 0;
f(2) = 0;
f(n) = 0;
f(n+1) = 0;
% Numericky tok f
for i = 2:n-1
a = (u(i-1)+u(i))/2;
fl = u(i-1)^2/2;
fr = u(i)^2/2;
flw = (fr+fl)/2 - a/2*dt/dx*(fr-fl);
fup = (fr+fl)/2 - abs(a)/2*(u(i)-u(i-1));
if ( (u(i)-u(i-1))*(u(i+1)-u(i)) <= 0)
phi = 0;
else
rl = (u(i-1)-u(i-2)) / (u(i)-u(i-1));
rr = (u(i+1)-u(i)) / (u(i)-u(i-1));
if (rr<0)
phi = 0;
else
phi = min(1, 2*min(rl, rr));
end
end
f(i) = fup + phi*(flw-fup);
end
un(1:n) = u(1:n) - dt/dx * (f(2:n+1) - f(1:n));
t = t + dt;
u = un;
if (mod(iter,10)==0)
plot(x, u); axis([0 1 -0.5 2.5]);
pause(1);
end
end
Programy pro řešení rovnice mělké vody
%
% rovnice resime ve tvaru W_t + F(W)_x = 0, kde
% W = [h, q], F(W) = [q, q^2/h + gh^2/2] kde q = hu
%
g = 10;
% Delka intervalu a pocet bunek
L = 1;
n = 400;
dx = L / n;
x = dx/2:dx:(L-dx/2);
W(1:2,1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)<0.5)
W(1,i) = 1.0;
else
W(1,i) = 0.01;
end
end
plot(x, W(1,:)); axis([0 1 0 1.5]);
disp("Stiskni enter pro pokracovani"); pause;
t = 0;
for iter = 1:n
h = W(1,:);
q = W(2,:);
u = q ./ h;
% Vypocet fyzikalniho toku
FF(1,:) = q;
FF(2,:) = q.^2./h + g*h.^2/2;
% Vypocet spektralniho polomeru jakobianu
sigma = abs(u) + sqrt(g*h);
%
dt = 0.4 * dx / max(sigma);
% Numericky tok na leve a prave casti intervalu
F(:,1) = FF(:,1);
F(:,n+1) = FF(:,n);
% Numericky tok f
for i = 2:n
s = max(sigma(i-1),sigma(i));
F(:,i) = (FF(:,i-1)+FF(:,i))/2 - s/2*(W(:,i)-W(:,i-1));
end
W(:,1:n) = W(:,1:n) - dt/dx * (F(:,2:n+1) - F(:,1:n));
t = t + dt;
if (mod(iter,10)==0)
plot(x, W(1,:)); axis([0 1 0 1.5]);
pause(1);
end
end
clear all;
% Reseni pocatecni ulohy pro rovnice melke vody
% h_t + (uh)_x = 0
% (hu)_t + (hu^2 + gh^2/2)_x = 0
%
% rovnice resime ve tvaru W_t + F(W)_x = 0, kde
% W = [h, q], F(W) = [q, q^2/h + gh^2/2] kde q = hu
%
g = 10;
% Delka intervalu a pocet bunek
L = 1;
n = 400;
dx = L / n;
x = dx/2:dx:(L-dx/2);
W(1:2,1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)<0.5)
W(1,i) = 1.0;
else
W(1,i) = 0.01;
end
end
plot(x, W(1,:)); axis([0 1 0 1.5]);
disp("Stiskni enter pro pokracovani"); pause;
t = 0;
for iter = 1:n
% Vypocet "derivace" W
DW(1:2,1) = 0;
DW(1:2,n) = 0;
for i = 2:n-1
for k = 1:2
if ( (W(k,i)-W(k,i-1))*(W(k,i+1)-W(k,i)) <= 0 )
DW(k,i) = 0;
else
if ( abs(W(k,i)-W(k,i-1)) < abs(W(k,i+1)-W(k,i)) )
DW(k,i) = W(k,i)-W(k,i-1);
else
DW(k,i) = W(k,i+1)-W(k,i);
end
end
end
end
h = W(1,:);
q = W(2,:);
u = q ./ h;
% Vypocet spektralniho polomeru jakobianu
sigma = abs(u) + sqrt(g*h);
%
dt = 0.4 * dx / max(sigma);
% Numericky tok na leve a prave casti intervalu
F(:,1) = [q(1); q(1)^2/h(1) + g*h(1)^2/2] ;
F(:,n+1) = [q(n); q(n)^2/h(n) + g*h(n)^2/2] ;
% Numericky tok f
for i = 2:n
sl = min( u(i-1)-sqrt(g*h(i-1)), u(i)-sqrt(g*h(i)) );
sr = min( u(i-1)+sqrt(g*h(i-1)), u(i)+sqrt(g*h(i)) );
Wl = W(:,i-1) + DW(:,i-1)/2;
Wr = W(:,i) - DW(:,i)/2;
Fl = [Wl(2); Wl(2)^2/Wl(1) + g*Wl(1)^2/2];
Fr = [Wr(2); Wr(2)^2/Wr(1) + g*Wr(1)^2/2];
if (0<=sl)
F(:,i) = Fl;
elseif (0<sr)
F(:,i) = (sr*Fl - sl*Fr + sl*sr*(Wr-Wl)) / (sr-sl);
else
F(:,i) = Fr;
end
end
W(:,1:n) = W(:,1:n) - dt/dx * (F(:,2:n+1) - F(:,1:n));
t = t + dt;
if (mod(iter,10)==0)
plot(x, W(1,:)); axis([0 1 0 1.5]);
pause(1);
end
end
</pre>
clear all;
% Reseni proudeni melke vody pres prekazku
%
% h_t + (uh)_x = 0
% (hu)_t + (hu^2 + gh^2/2)_x = -g h b'
%
% rovnice resime ve tvaru W_t + F(W)_x = Q, kde
% W = [h, q], F(W) = [q, q^2/h + gh^2/2] kde q = hu a
% Q = [0, -g h b']
%
%
% Jakobian dF/dW = [ 0, 1; gh^2-u, 2u]
% vlastni cisla u +- sqrt(g*h)
% vlastni vektory [1; u+-sqrt(g*h)]
%
% charakteristicke promenne V = [u+2*c,u-2*c] c =sqrt(g*h)
g = 10;
% Rychlost vtoku m3/s
q_in = 1;
h_out = 0.8;
% Delka intervalu a pocet bunek
L = 1;
n = 200;
dx = L / n;
x = dx/2:dx:(L-dx/2);
% tvar dna
for i = 1:n
if (0.3 < x(i) && x(i)<0.7)
b(i) = (cos(pi*(x(i)-0.5)/0.2) + 1)/2 + (1-x(i))*0.2;
bx(i) = ( (cos(pi*(x(i)+dx/2-0.5)/0.2) + 1)/2 -
(cos(pi*(x(i)-dx/2-0.5)/0.2) + 1)/2 ) / dx - 0.2;
else
b(i) = (1-x(i))*0.2;
bx(i)= -0.2;
end
end
W(1,1:n) = max(h_out,max(b)+0.1) - b;
W(2,1:n) = 0;
plot(x, b, x, W(1,:)+b); axis([0 1 0 3]);
disp("Stiskni enter pro pokracovani"); pause;
t = 0;
tend = 1;
Q(1:2,1:n) = 0;
for iter = 1:(40*n)
h = W(1,:);
q = W(2,:);
u = q ./ h;
% Vypocet spektralniho polomeru jakobianu
sigma = abs(u) + sqrt(g*h);
%
dt = 0.4 * dx / max(sigma);
% Numericky tok na vstupu (zadany prutok)
F(:,1) = [q_in; q_in^2/h(1) + g*h(1)^2/2] ;
% Numericky tok na vystupu (zadana vyska hladiny)
F(:,n+1) = [q(n); q(n)^2/h_out + g*h_out^2/2] ;
% Numericky tok f
for i = 2:n
sl = min( u(i-1)-sqrt(g*h(i-1)), u(i)-sqrt(g*h(i)) );
sr = min( u(i-1)+sqrt(g*h(i-1)), u(i)+sqrt(g*h(i)) );
Wl = W(:,i-1);
Wr = W(:,i);
Fl = [Wl(2); Wl(2)^2/Wl(1) + g*Wl(1)^2/2];
Fr = [Wr(2); Wr(2)^2/Wr(1) + g*Wr(1)^2/2];
if (0<=sl)
F(:,i) = Fl;
elseif (0<sr)
F(:,i) = (sr*Fl - sl*Fr + sl*sr*(Wr-Wl)) / (sr-sl);
else
F(:,i) = Fr;
end
end
% Zdrojovy clen
Q(2,1:n) = - g * h .* bx;
W(:,1:n) = W(:,1:n) - dt/dx * (F(:,2:n+1) - F(:,1:n)) + dt*Q;
t = t + dt;
if (mod(iter,10)==0)
plot(x, b, x, W(1,:)+b); axis([0 1 0 3]);
pause(0.1);
end
end
Řešení Eulerových rovnic v 1D
clear all;
% Reseni pocatecni ulohy pro Eulerovy rovnice
% rho_t + (rho u)_x = 0
% (rho u)_t + (rho u^2 + p)_x = 0
% (rho E)_t + [u (rho E + p)]_x = 0
%
% p = (kappa-1) * rho * (E - u^2/2)
%
% rovnice resime ve tvaru W_t + F(W)_x = 0, kde
% W = [rho, m, e], F(W) = [rho u, rho u^2 + p, u (rho E + p)]
% kde m = rho u, e = rho E
%
kappa = 1.4;
% Delka intervalu a pocet bunek
L = 1;
n = 400;
dx = L / n;
x = dx/2:dx:(L-dx/2);
W(1:3,1:n) = 0;
% Pocatecni podminka
for i = 1:n
if (x(i)<0.5)
W(1:3,i) = [ 10; 0; 1e6/(kappa-1) ];
else
W(1:3,i) = [ 1; 0; 1e5/(kappa-1) ];
end
end
plot(x, W(1,:)); axis([0 1 0 20]);
disp("Stiskni enter pro pokracovani"); pause;
t = 0;
for iter = 1:n
rho = W(1,:);
u = W(2,:) ./ rho;
E = W(3,:) ./ rho;
p = (kappa-1) * rho .* (E - 0.5*u.*u);
a = sqrt(kappa * p ./ rho);
FF(1,:) = rho .* u;
FF(2,:) = rho .* u.^2 + p;
FF(3,:) = u .* (rho .* E + p);
% Vypocet spektralniho polomeru jakobianu
sigma = abs(u) + a;
%
dt = 0.4 * dx / max(sigma);
% Numericky tok na leve a prave casti intervalu
F(:,1) = FF(:,1);
F(:,n+1) = FF(:,n);
% Numericky tok f
for i = 2:n
sl = min( u(i-1)-a(i-1), u(i)-a(i) );
sr = max( u(i-1)+a(i-1), u(i)+a(i) );
Wl = W(:,i-1);
Wr = W(:,i);
Fl = FF(:,i-1);
Fr = FF(:,i);
if (0<=sl)
F(:,i) = Fl;
elseif (0<sr)
F(:,i) = (sr*Fl - sl*Fr + sl*sr*(Wr-Wl)) / (sr-sl);
else
F(:,i) = Fr;
end
end
W(:,1:n) = W(:,1:n) - dt/dx * (F(:,2:n+1) - F(:,1:n));
t = t + dt;
if (mod(iter,10)==0)
plot(x, W(1,:)); axis([0 1 0 20]);
pause(1);
end
end
clear all;
% Reseni proudeni 1D dyzou
% (A rho)_t + (A rho u)_x = 0
% (A rho u)_t + ( A rho u^2 + A p)_x = p A_x
% (A rho E)_t + [A u (rho E + p)]_x = 0
%
% p = (kappa-1) * rho * (E - u^2/2)
%
% rovnice resime ve tvaru A W_t + (A F(W))_x = Q, kde
% W = [rho, m, e], F(W) = [rho u, rho u^2 + p, u (rho E + p)]
% kde m = rho u, e = rho E
%
% na vstupu zadvame celkovy tlak a celkovou teplotu
% na vystupu zadavame staticky tlak
%
kappa = 1.4;
% Delka intervalu a pocet bunek
L = 1;
n = 200;
dx = L / n;
x = dx/2:dx:(L-dx/2);
% Prurezy dyzy na hranicich bunek A(x) = 1 + (x-0.5)^2
A(1:n+1) = ((0:dx:L)-L/2) .^2 + 1;
Ai(1:n) = (A(1:n) + A(2:n+1)) / 2;
W(1:3,1:n) = 0;
Q(1:3,1:n) = 0;
% Pocatecni podminka
for i = 1:n
W(1:3,i) = [ 1.1; 0; 1e5/(kappa-1) ];
end
plot(x, W(1,:)); axis([0 1 0 1.2]);
disp("Stiskni enter pro pokracovani"); pause;
t = 0;
Rezidua = [];
for iter = 1:20000
rho = W(1,:);
u = W(2,:) ./ rho;
E = W(3,:) ./ rho;
p = (kappa-1) * rho .* (E - 0.5*u.*u);
a = sqrt(kappa * p ./ rho);
FF(1,:) = rho .* u;
FF(2,:) = rho .* u.^2 + p;
FF(3,:) = u .* (rho .* E + p);
% Vypocet spektralniho polomeru jakobianu
sigma = abs(u) + a;
%
dt = 0.4 * dx / max(sigma);
% Numericky tok na leve a prave casti intervalu
pTot = 1.e5;
rhoTot = 1.2;
pb = min(p(1),pTot);
M2 = ( (pb/pTot) ^ ((1-kappa)/kappa) - 1 ) * 2/(kappa-1);
rhob = rhoTot * (1+(kappa-1)/2*M2) ^ (1/(1-kappa));
cb = sqrt(kappa*pb/rhob);
ub = cb*sqrt(M2);
rEb = pb/(kappa-1) + 0.5*rhob*ub^2;
F(:,1) = [rhob*ub; rhob*ub^2+pb; ub*(rEb + pb)];
p2 = 0.75 * pTot;
pb = p2;
rhob = rho(n);
ub = u(n);
rEb = pb/(kappa-1) + 0.5*rhob*ub^2;
F(:,n+1) = [rhob*ub; rhob*ub^2+pb; ub*(rEb + pb)];
% Numericky tok f
for i = 2:n
sl = min( u(i-1)-a(i-1), u(i)-a(i) );
sr = max( u(i-1)+a(i-1), u(i)+a(i) );
Wl = W(:,i-1);
Wr = W(:,i);
Fl = FF(:,i-1);
Fr = FF(:,i);
if (0<=sl)
F(:,i) = Fl;
elseif (0<sr)
F(:,i) = (sr*Fl - sl*Fr + sl*sr*(Wr-Wl)) / (sr-sl);
else
F(:,i) = Fr;
end
end
Q(2,:) = p .* (A(2:n+1)-A(1:n))/dx;
for k=1:3
F(k,:) = A .* F(k,:);
Wn(k,1:n) = W(k,1:n) - dt/dx./Ai .* (F(k,2:n+1) - F(k,1:n)) + dt./Ai.*Q(k,:);
end
if (mod(iter,100)==0)
Rezidua = [ Rezidua, sqrt(sum((Wn-W).**2,dim=2)) / dt];
plot(x, p/1e5); axis([0 1 0 1.2]);
pause(0.01);
end
W = Wn;
t = t + dt;
end
