Você está na página 1de 9

%INICIALIZACION DE LOS PARMETROS

clc
clear all
close all
disp('-------------------------Apartado A-------------------')
rho=1000;%densidad
mu=1e-3;%viscosidad
g=9.81; %gravedad con dos decimales de precision
rabs=0.001; %rugosidad absoluta
NE=22; %numero de tuberas
NN=16; % numero de nodos
%Vector longitud de tuberias (elementos)
L1=1000;
L2=1000;
L3=800;
L4=1000;
L5=800;
L6=1000;
L7=800;
L8=1200;
L9=1000;
L10=600;
L11=150;
L12=100;
L13=150;
L14=100;
L15=1200;
L16=100;
L17=1200;
L18=1050;
L19=600;
L20=500;
L21=700;
L22=200;
L=[ L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19
L20 L21 L22 ]';
%Vector diametros de cada elemento
D1=1;
D2=1;
D3=0.75;
D4=0.75;
D5=0.75;
D6=0.75;
D7=1;
D8=0.75;
D9=0.75;
D10=0.75;
D11=0.5;
D12=0.5;
D13=0.5;
D14=0.5;

D15=0.5;
D16=0.5;
D17=0.5;
D18=0.75;
D19=0.75;
D20=0.75;
D21=0.75;
D22=0.75;
D = [ D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19
D20 D21 D22 ]';
%Vector consumos. Los consumos que desconocemos se inicializan con valor
"0"
C = [ 20 -1 -0.2 -0.5 -1 -0.5 -2 -1 0 -0.8 -0.5 -0.5 -1 -0.3 -2 0 ]';
%Vector de alturas piezomtricas. Como anteriormente inicializamos con
%valor "0" las alturas que desconocemos"
H = [ 0 0 0 0 0 0 0 0 75 0 0 0 0 0 0 50 ]';

%Vector rugosiad relativa


rr = rabs./D;
%Matriz de conectividad. Se establece una jerarquia en la nomenclatura
como
%positiva si el sentido va de menor a mayor orden en el numero del nodo
%(Ejemplo: Positivo del nodo 1 al nodo 3)En la solucin el signo negativo
%indicara que el sentido real sera al contrario de lo previamente
%Definido)
E=zeros(22,16);
E(1,1)=1;
E(1,2)=-1;
E(2,2)=1;
E(2,3)=-1;
E(3,3)=1;
E(3,4)=-1;
E(4,4)=1;
E(4,5)=-1;
E(5,2)=1;
E(5,5)=-1;
E(6,5)=1;
E(6,6)=-1;
E(7,1)=1;
E(7,6)=-1;
E(8,6)=1;
E(8,7)=-1;
E(9,7)=1;
E(9,8)=-1;
E(10,7)=1;
E(10,11)=-1;
E(11,8)=1;

E(12,10)=1;
E(12,11)=-1;
E(13,9)=1;
E(13,10)=-1;
E(14,8)=1;
E(14,9)=-1;
E(15,11)=1;
E(15,12)=-1;
E(16,12)=1;
E(16,13)=-1;
E(17,10)=1;
E(17,13)=-1;
E(18,12)=1;
E(18,14)=-1;
E(19,5)=1;
E(19,14)=-1;
E(20,4)=1;
E(20,16)=-1;
E(21,15)=1;
E(21,16)=-1;
E(22,14)=1;

E(11,11)=-1;

E(22,15)=-1;

%Factores de friccion inicial


for i=1:NE
f(i) = 1.0./((-2*log10(rr(i)./3.71)).^2);
end
f=f';
%Caudales iniciales
for i=1:NE
Q(i,1)=0.01;%m^3/s
end
%Alturas y consumos iniciales
C0=C;
H0=H;
%elementos iterativos
iter=1;%iteracin inicial
itermax=1500;%numero de iteraciones mximas
tol=1e-4;%tolerancia error relativo
Error=1;%error inicial
%Vector de consumos conocidos (0-->conozco H) (1-->conozco C)
CC= ones(16,1); %conocemos todos los consumos menos en 9 y 16
CC(9)=0;
CC(16)=0;
%BUCLE ITERATIVO
while((Error > tol) && (iter < itermax))
%Numero de Reynolds para cada iteracion
Re=(rho*abs(Q)*4)./(pi*D*mu);

%colebrook
for k=1:NE;
f(k,1) = fzero(@(f)(1/sqrt(f)+2*log10(rr(k)/3.71+2.51/(sqrt(f)*Re(k)))),
f(k));
end;
%Formamos el vector K (vector diagonal)
K=((f.*L)./(2*g.*D.*(pi*0.25*D.^2).^2)).*abs(Q);
K(1)=K(1)+20*(abs(Q(1))/((2*g)*(pi*0.25*D(1).^2)^2));
K(15)=K(15)+20*(abs(Q(15))/((2*g)*(pi*0.25*D(15).^2)^2));
%Generamos la matriz M
M=E'*diag(1./K)*E;
%Generamos la Matriz A
A=zeros(NN,NN);

A(:,CC==1)=M(:,CC==1);
A=A-diag(CC==0);

%Formamos el vector b
b=C.*(CC==1);
b=b-M*(H.*(CC==0));

%Solucionamos el sistema [A]x=b


x=A\b;
%Para cada iteracion generamos unas alturas y unos consumos nuevos
C=C0 + x.*(CC==0);
H=H0 + x.*(CC==1);
%Generacion de caudales de las iteraciones previas
Qprev=Q;
%Generacion del vector caudal en cada iteracion
Q=diag(1./K)*E*H;
%Amortiguamos el caudal con uun factor de relajacion
Rel=0.7;
Q=(Q*Rel)+Qprev*(1-Rel);
Inc(iter)=norm(E'*Q-C,inf);
%generacion del error relativo
ErrorRel=((Qprev-Q)./Qprev);
Error=norm(ErrorRel);
Verr(iter)=Error;%Generacion del vector de errores para el postproceso
Viter(iter)=iter;%Generacion del vector de iteraciones para el
postproceso
iter=iter+1;
end

%APARTADO 1 CAUDALES
Q
%APARTADO 2 ALTURAS Y CONSUMOS
H
C
%APARTADO 3 GRFICA INCREMENTOS
figure(1)
plot(Viter,Verr,'Marker','+');
axis([0 19 0 200]);
grid;
xlabel('Iteraciones');
ylabel('Incremento relativo de la solucin');
title('Apartado A, Grafica 1');

%APARTADO 4 GRAFICA DE RESIDUOS


figure(2)
plot(Viter,Inc,'Marker','+');
axis([0 19 0 40]);
grid;
xlabel('Iteraciones');
ylabel('Residuo de la solucin');
title('Apartado A, Grfica 2');
%APARTADO 5 Clculo de la tuberia con mximo riesgo de deposicin
A=pi*D.^2*0.25;
V=Q./A
Vmin=min(abs(V));%obtenemos la velocidad mnima
Vabs=abs(V);
Tuberia=find(Vabs==Vmin)%Encontramos su posicin para obtener el elemento
%6 Calculo del punto con mayor riesgo de rotura
Hmax=max(H);
Nodo=find(H==Hmax)

%%%%%%%%%%%%%APARTADO B%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
disp('-------------------------Apartado B-------------------')
rho=1000;
mu=1e-3;
g=9.81;
rabs=0.001;
NE=22;
NN=16;

L1=1000;
L2=1000;
L3=800;
L4=1000;
L5=800;
L6=1000;
L7=800;
L8=1200;
L9=1000;
L10=600;
L11=150;
L12=100;
L13=150;
L14=100;
L15=1200;
L16=100;
L17=1200;
L18=1050;
L19=600;
L20=500;
L21=700;

L22=200;
L=[ L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19
L20 L21 L22 ]';

D1=1;
D2=1;
D3=0.75;
D4=0.75;
D5=0.75;
D6=0.75;
D7=1;
D8=0.75;
D9=0.75;
D10=0.75;
D11=0.5;
D12=0.5;
D13=0.5;
D14=0.5;
D15=0.5;
D16=0.5;
D17=0.5;
D18=0.75;
D19=0.75;
D20=0.75;
D21=0.75;
D22=0.75;
D = [ D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19
D20 D21 D22 ]';

C = [ 20 -1 -0.2 -0.5 -1 -0.5 -2 -1 0 -0.8 -0.5 -0.5 -1 -0.3 -2 0 ]';


H = [ 0 0 0 0 0 0 0 0 75 0 0 0 0 0 0 50 ]';

nikuradse = @(x) 0.25/(log10(x/3.71))^2;

rr = rabs./D;

E=zeros(22,16);
E(1,1)=1;
E(1,2)=-1;
E(2,2)=1;
E(2,3)=-1;
E(3,3)=1;
E(3,4)=-1;
E(4,4)=1;
E(4,5)=-1;
E(5,2)=1;

E(12,10)=1;
E(12,11)=-1;
E(13,9)=1;
E(13,10)=-1;
E(14,8)=1;
E(14,9)=-1;
E(15,11)=1;
E(15,12)=-1;
E(16,12)=1;

E(5,5)=-1;
E(6,5)=1;
E(6,6)=-1;
E(7,1)=1;
E(7,6)=-1;
E(8,6)=1;
E(8,7)=-1;
E(9,7)=1;
E(9,8)=-1;
E(10,7)=1;
E(10,11)=-1;
E(11,8)=1;
E(11,11)=-1;

E(16,13)=-1;
E(17,10)=1;
E(17,13)=-1;
E(18,12)=1;
E(18,14)=-1;
E(19,5)=1;
E(19,14)=-1;
E(20,4)=1;
E(20,16)=-1;
E(21,15)=1;
E(21,16)=-1;
E(22,14)=1;
E(22,15)=-1;

for i=1:NE
f(i) = 1.0./((-2*log10(rr(i)./3.71)).^2);
end
f=f';

for i=1:NE
Q(i,1)=0.01;
end

C0=C;
H0=H;
%variables iterativas
iter=1;
itermax=1500;%iteraciones mximas
tol=1e-5;%tolerancia del error relativo
Error=1;%definimos un error inicial
%Vector de consumos conocidos
CC= ones(16,1); %conocemos todos los consumos menos en 9 y 16
CC(9)=0;
CC(16)=0;
%Comienzo del bucle para las iteraciones
while((Error > tol) && (iter < itermax))
%Reynolds
Re=(rho*abs(Q)*4)./(pi*D*mu);

%factor de friccin (colebrook)


for k=1:NE;
f(k,1) = fzero(@(f)(1/sqrt(f)+2*log10(rr(k)/3.71+2.51/(sqrt(f)*Re(k)))),
f(k));
end;

%Vector K (con un numero muy alto para las perdidas de carga en la


valvula assemejandolo a una valvula cerrada)
K=((f.*L)./(2*g.*D.*(pi*0.25*D.^2).^2)).*abs(Q);
K(1)=K(1)+2000900000900*(abs(Q(1))/((2*g)*(pi*0.25*D(1).^2)^2));
K(15)=K(15)+20009000009*(abs(Q(15))/((2*g)*(pi*0.25*D(15).^2)^2));

%Generamos la matriz M
M=E'*diag(1./K)*E;
%Generamos la matriz A
A=zeros(NN,NN);
A(:,CC==1)=M(:,CC==1);
A=A-diag(CC==0);

%generamos el vector b
b=C.*(CC==1);
b=b-M*(H.*(CC==0));

%Resolcemos sistema [A]x=b


x=A\b;
%En cada iteracion volvemos a calcular unos caudales y alturas nuevos
C=C0 + x.*(CC==0);
H=H0 + x.*(CC==1);
%Generacion de caudales de las iteraciones previas
Qprev=Q;
%Calculo del caudal en cada paso de la iteracion
Q=diag(1./K)*E*H;
%Amortiguamos el caudal con uun factor de relajacion
Rel=0.7;
Q=(Q*Rel)+Qprev*(1-Rel);
Inc(iter)=norm(E'*Q-C,inf);
%error relativo
ErrorRel=((Qprev-Q)./Qprev);
Error=norm(ErrorRel);
Verr(iter)=Error;
Viter(iter)=iter;
iter=iter+1;
end

%APARTADO 1 CAUDALES
Q
%APARTADO 2 ALTURAS Y CONSUMOS
H
C
%APARTADO 3 GRFICA INCREMENTOS
figure(3)
plot(Viter,Verr,'Marker','+');
axis([0 19 0 40]);
grid;
xlabel('Iteraciones');
ylabel('Incremento relativo de la solucin');
title('Apartado B, Grafica 1');
%APARTADO 4 GRAFICA DE RESIDUOS
figure(4)
plot(Viter,Inc,'Marker','+');
axis([0 19 0 40]);
grid;
xlabel('Iteraciones');
ylabel('Residuo de la solucin');
title('Apartado B, Grfica 2');
%APARTADO 5 Clculo de la tuberia con mximo riesgo de deposicin
A=pi*D.^2*0.25;
V=Q./A
Vmin=min(abs(V));%obtenemos la velocidad mnima
Vabs=abs(V);
Tuberia=find(Vabs==Vmin)%Encontramos su posicin para obtener el elemento
%APARTADO 6 Calculo del punto con mayor riesgo de rotura
Hmax=max(H);
Nodo=find(H==Hmax)

Você também pode gostar