-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDraft_diffusion_1D.m
78 lines (61 loc) · 1.89 KB
/
Draft_diffusion_1D.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
%Comportamento da equação de difusão em 1D
%Resolução pelo método implícito de Euler e por Crank-Nicolson.
function Draft_diffusion_1D
clear all
%% Entrada da dimensão em x
nx=50; %intervalos em x
%pontos em uma dimensão
nnx=nx;
nn=nnx+1;
L=2; %largura
dx=L/nx; %variação em x
%% Parâmetros para o tempo
nt=30; %número de intervalos em t
tf=20; %tempo final
dt=tf/nt; %variação em t
%% Parâmetros
D=0.125*10^-2; %coeficiente de viscosidade
u=0.003; %velocidade em x
%% Núcleo de péclet
disp('o núcleo de péclet é')
np=u*dx/D;
disp(np)
%% Expansão em Taylor
% Valores referentes as entradas da matriz M
% E= 1+(2*D *dt/(dx*dx)); %coef. de c_i
% F= (-(D/dx)+(u/2))*dt/dx; %coef. de c_{i+1}
% G= (-(D/dx)-(u/2))*dt/dx; %coef. de c_{i-1}
%% Crank-Nicolson matrizes
% Valores referentes as entradas da matriz M
E= 1+(D *dt/(dx*dx)); %coef. de c_i
F= (-(D/2*dx)+(u/4))*dt/dx; %coef. de c_{i+1}
G= (-(D/2*dx)-(u/4))*dt/dx; %coef. de c_{i-1}
% Valores referentes as entradas da matriz P
Ep= 1-(D *dt/(dx*dx)); %coef. de c_i
Fp= ((D/2*dx)-(u/4))*dt/dx; %coef. de c_{i+1}
Gp= ((D/2*dx)+(u/4))*dt/dx; %coef. de c_{i-1}
%% Construção da matriz M
M=E*eye(nn)+diag(diag(F*eye(nn-1)),1)+diag(diag(G*eye(nn-1)),-1);
%% Construção da matriz P
P=Ep*eye(nn)+diag(diag(Fp*eye(nn-1)),1)+diag(diag(Gp*eye(nn-1)),-1);
% Preciso incluir condição de Von neumann
%% Construção da imagem
C_ini=zeros(nn,1); %inicialização da matriz C_ini
C_ini(2,1)=2;
%dimensões em x e em y
dim_x=[0:dx:L];
% Rearranjando o vetor C na matriz conc
figure
for t=1:nt
C=M\P*(C_ini); %Resolução do sistema
C_ini=C;
C_ini(nn,1)=0; %Condição de von neumann
C_ini(1,1)=0;
h=plot(dim_x,C);
xlabel('Dimensao de x')
ylabel('Concentracao')
title({['Difusão com D = ',num2str(D)];['u = ',num2str(u)];[ 'Núcleo de Péclet = ',num2str(np) ];['tempo (t) = ',num2str(t*dt),' de ',num2str(tf)]})
shading interp
pause(0.1)
end
end