Está en la página 1de 6

%Limpiamos todas las variables y la pantalla

clear all
clc
%DATOS DEL PROBLEMA Y CONSTANTES:
%Inicializacin de constantes:
rho=1000;
%kg/m^3
mu=0.001;
%Pas
rug=0.0015; %m
g=9.81;
%m/s^2
%Datos del problema:
L=100*[8 12 1 4.5 9 4.5 4.5 4.5 8 12 1 15 17 15 15 15 8 12 1 4 9 4 4
4 8 12 1 25]; %m
D=0.01*[30 25 20 35 22 25 20 20 32 22 15 35 22 25 20 22 32 22 15 35
22 25 20 20 30 25 20 35];
%m
A=(D.^2).*(pi/4);
%m^2
rugrel=rug./D;
%Adimensional
C0=1e-3*[-60; 00; -40; -20; 260; -21; -22; 0; 122; -22; -30; 0; -52;
-30; -28; -27; 00]; %m^3/s
%Inicializacin del vector de caudales Q:
Q=1e-2*ones(1,28); %m^3/s
%Construccin del vector columna H (17x1):
H0=zeros(17,1); %m
H0(2, 1)=50;
%m
H0(17, 1)=100;
%m
%Vector columna auxiliar de datos conocidos (17x1): (0-->conozco H)
(1-->conozco C)
y=[1; 0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0];
%Matriz de conectividad E:
E=zeros(28, 17);
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, 1)= 1;
E(4, 5)= -1;
E(5, 2)= 1;
E(5, 5)= -1;
E(6, 2)= 1;
E(6, 6)= -1;
E(7, 3)= 1;
E(7, 7)= -1;
E(8, 4)= 1;
E(8, 8)= -1;
E(9, 5)= 1;
E(9, 6)= -1;
E(10, 6)= 1;

E(10,
E(11,
E(11,
E(12,
E(12,
E(13,
E(13,
E(14,
E(14,
E(15,
E(15,
E(16,
E(16,
E(17,
E(17,
E(18,
E(18,
E(19,
E(19,
E(20,
E(20,
E(21,
E(21,
E(22,
E(22,
E(23,
E(23,
E(24,
E(24,
E(25,
E(25,
E(26,
E(26,
E(27,
E(27,
E(28,
E(28,

7)= -1;
7)= -1;
8)= 1;
5)= 1;
9)= -1;
5)= 1;
10)= -1;
6)= 1;
10)= -1;
7)= 1;
11)= -1;
8)= 1;
12)= -1;
9)= 1;
10)= -1;
10)= 1;
11)= -1;
11)= -1;
12)= 1;
9)= 1;
13)= -1;
9)= 1;
14)= -1;
10)= 1;
14)= -1;
11)= 1;
15)= -1;
12)= 1;
16)= -1;
13)= 1;
14)= -1;
14)= 1;
15)= -1;
15)= -1;
16)= 1;
8)= -1;
17)= 1;

%CLCULO DE LA RED
%Inicializacin de Factores de friccin por ec. de Nikuradse:
f = 1.0./((-2*log10(rugrel./3.71)).^2);
%ITERACIONES
%Datos para
tol
itermax
err
iter
H = H0;
C = C0;

convergencia:
= 1.0e-6;
= 1000;
= tol + 1;
= 1;

tic;
while((err > tol) && (iter < itermax)),
%Velocidades y Reynolds a partir de los caudales:
V = Q./A;
Re = rho*abs(V).*D/mu;
%Factores de friccin por Colebrook:
for k=1:28;
f(k) =
fzero(@(f)(1/sqrt(f)+2*log10(rugrel(k)/3.71+2.51/(sqrt(f)*Re(k)))),
f(k));
end;
%Construccin de la matriz K invertida:
K=((f.*L).*abs(Q))./(((A.^2).*D).*(2*g));
Kin = diag(1./K);
%Construccin de la matriz M:
M=E'*Kin*E;
%Construccin de la matriz [A]=AM:
AM=M.*(ones(17,1)*y')-diag(1.-y);
%Contruccin del vector columna b:
b=C.*y-M*((1.-y).*H);
%Resolucin del sistema:
x = AM\b;
%Se recalculan las alturas y los consumos a partir de x:
H = H0 + x.*y;
C = C0 + x.*(1-y);
%Se recalculan los nuevos caudales a partir de H:
Qold = Q;
%Se crea un vector con los nuevos caudales para
poder calcular el error.
Q = Kin*E*H;
%Nuevo vector de caudales para amortiguar la solucin
Coef = 0.65;
% Coeficiente ms adecuado para hacer la
solucion sobreamortiguada.
Q = Qold + Coef*(Q'-Qold);
%Clculo del error:
err = norm((abs(Q./Qold)-1),inf);
%Vector para pintar las iteraciones
cont(iter)=iter;
errv(iter)=err;
%Se incrementa la iteracion
iter = iter + 1;

%Error relativo.

end
toc;
%SALIDA DE RESULTADOS
%Se resta 1 a las iteraciones para quitar la ultima suma:
iter = iter - 1;
%SALIDA POR PANTALLA DE TODOS LOS RESULTADOS OBTENIDOS:
fprintf('\n**************************************DATOS
OBTENIDOS**************************************\n');
%Referidos a los elementos (tuberas): Caudales, velocidades, Reynold
y factores de friccin:
disp('============================================================');
disp('Tubera
Q (m^3/s)
V (m/s)
Re (-)
f (-)');
disp('-----------------------------------------------------------');
for k=1:28;
fprintf('%4.f
%9.7f
%8.5f
%10.2f
%8.7f\n', k, Q(k),
V(k), Re(k), f(k));
end;
%Referidos a los nodos: Alturas piezomtricas y consumos:
disp('============================');
disp('Nodo
H (m)
C(m^3/s)');
disp('----------------------------');
for k=1:17;
fprintf('%4.f %9.5f %9.5f\n', k, H(k), C(k));
end;
%CUESTIONES A RESOLVER
fprintf('\n**************************************CUESTIONES**************
************************\n');
%1. Caudal que circula por cada rama y el suministrado por el embalse
C:
fprintf('\n1. Caudal que circula por cada rama y caudal que
suministra el embalse C:\n');
disp('===================================================================
======');
disp('Rama
Q (m^3/s)');
disp('------------------');
for k=1:28;
fprintf('%4.f %10.5f\n', k, Q(k));
end;
fprintf('El caudal suministrado por el embalse C es %9.7f
m^3/s.\n', C(17));
disp('===================================================================
=======');
%2. Altura piezomtrica en todos los nodos:

fprintf('\n2. Altura piezomtrica en todos los nodos de la


red:\n');
disp('====================================================');
disp('Nodo
H (m)');
disp('----------------');
for k=1:17;
fprintf('%4.f %9.5f\n', k, H(k));
end;
disp('=====================================================');
%3. Consumo en nodo 2 (H=50m):
fprintf('\n3. El consumo en el nodo que cumple H=50m por ley
(nodo 2) es %9.7f m^3/s.\n', C(2));
disp('===================================================================
============');
%4. Grafico de convergencia:
fprintf('\n4. Grfico de convergencia (Figure 1):\n');
disp('======================================');
figure(1)
clf
set(gca, 'FontSize', 13)
plot(cont, errv, '-kd','LineWidth', 4, 'MarkerEdgeColor','g',
'MarkerFaceColor','k', 'MarkerSize', 3)
grid on
xlabel('Iteraciones')
ylabel('Error relativo')
title('CONVERGENCIA')
disp('Iteracin
Error relativo');
disp('--------------------------');
for k=1:iter;
fprintf('%8.f %12.5f\n', cont(k), errv(k));
end;
disp('======================================');
%5. Mayor riesgo de deposicin de suciedades:
W = abs(V);
myMin = min(W);
ntub = find(W == myMin);
fprintf('\n5. La tubera con mayor riesgo de deposicin de
suciedades es la %2.f.\n', ntub);
disp('===================================================================
=');

También podría gustarte