You are on page 1of 5

#include <iostream>

#include <cmath>
#include <vector>
using namespace std;

//Se define Pi y la gravedad como valores globales constantes

const double Pi = 4 * atan(1);


const double g = 9.81;

// Se crea una funcion para obtener la distribucion de caudales

void ramificadas(int n) {
double dQ_bajo_Hx, dQ_encima_Hx, Hx, dQ;
double longitud [n];
double diametro[n];
double rugosidad[n];
double f[n];
double alpha[n];
double Caudal[n];
double altura [n];
double Re [n];
double viscosidad;
double Caudal_1 [n];
double error;
int contador;
//En esta parte del c�digo el usuario ingresa las variables

for (int i = 0; i < n; i++) {

double a = 0, b = 0, c = 0, d=0;
cout << "\nIngrese el diametro de la tuberia #" << i + 1 << ": "; //Se
ingresa el diametro de la tuberia
cin >> diametro [i];
cout << "Ingrese la longitud de la tuberia #" << i + 1 << ": "; //Se
ingresa la longitud de la tuberia
cin >> longitud [i];
cout << "Ingrese la rugosidad de la tuberia #" << i + 1 << ": "; //Se
ingresa la rugosidad de la tuberia
cin >> rugosidad [i];
cout << "Ingrese la altura del reservorio #"<<i+1<< ": "; //Se ingresa
la altura del reservorio
cin >> altura [i];
}

cout << "Ingrese la viscosidad cinematica del fluido en [m^2/s]: ";


cin >> viscosidad;

for (int i = 0; i < n; i++) {


f[i]= pow ((-1.8* log10 ( pow ((rugosidad[i]/diametro[i])/3.7,
1.11))) , -2); //Se calcula el factor de friccion suponiendo flujo muy turbulento
alpha[i] = 8 * f[i] * longitud[i] / (pow(diametro[i], 5)* pow(Pi, 2)*
g); //Se calcula el parametro alpha
}
do {

for (int k = 1; k <= n - 2; k++) {

Hx = altura[k]; //Se iguala la energia en la union como primera


suposici�n
Caudal[0] = sqrt((Hx - altura[0]) / alpha[0]); //Se calcula el flujo
hacia el reservorio inferior
Caudal[n - 1] = sqrt((altura[n - 1] - Hx) / alpha[n - 1]); //Se calcula
el flujo desde el reservorio superior

for (int j = k; j < n - 2; j++) {


Caudal[j + 1] = sqrt((altura[j + 1] - Hx) / alpha[j + 1]);
//Flujo de los reservorios con altura superior al valor actual de Hx
dQ_encima_Hx += Caudal[j + 1];
}

for (int j = k; j>0; j--) {


Caudal[j - 1] = sqrt((Hx - altura[j - 1]) / alpha[j - 1]);
//Flujo de los reservorios con altura inferior al valor actual de Hx
dQ_bajo_Hx += Caudal[j - 1];
}

dQ = dQ_encima_Hx + Caudal[n - 1] - (dQ_bajo_Hx + Caudal[0]);


//Conservaci�n de la masa

if (dQ > 0) { // Si la conservacion de la masa es positiva, el


flujo entrando a la union es mayor que el que sale
for (int h = 0; h < n; h++) { //Por lo tanto, Hx debe aumentar,
y el bucle debe ejecutarse de nuevo
Caudal[h] = 0; // Las variables se inicializan a
cero
}
dQ = 0;
dQ_bajo_Hx = 0;
dQ_encima_Hx = 0;
}

if (dQ < 0) {
do {
dQ_bajo_Hx=0;
dQ_encima_Hx = 0;
dQ = 0;
Hx -= 0.01;
for (int q = 0; q < k; q++) {
Caudal[q] = sqrt((Hx - altura[q]) / alpha[q]);
dQ_bajo_Hx += Caudal[q];
}
for (int w = k; w < n ; w++) {
Caudal[w] = sqrt((altura[w] - Hx) / alpha[w]);
dQ_encima_Hx += Caudal[w];
}
dQ = dQ_encima_Hx - dQ_bajo_Hx;

} while (dQ < 0);


break;
}

for (int i = 0; i<n; i++){


Re [i] = 4*Caudal [i]/(Pi*diametro[i]*viscosidad);
// Se calcula Reynolds
f[i]= pow ((-1.8* log10 ( pow
((rugosidad[i]/diametro[i])/3.7, 1.11) + 6.9/Re [i] )) , -2); //Se calcula el
factor de friccion suponiendo flujo muy turbulento
alpha[i] = 8 * f[i] * longitud[i] / (pow(diametro[i],
5)* pow(Pi, 2)* g); //Se calcula el parametro alpha
}

for (int k = 1; k <= n - 2; k++) {

Hx = altura[k]; //Se iguala la energia en la union como primera


suposici�n
Caudal_1[0] = sqrt((Hx - altura[0]) / alpha[0]); //Se calcula el flujo
hacia el reservorio inferior
Caudal_1[n - 1] = sqrt((altura[n - 1] - Hx) / alpha[n - 1]); //Se
calcula el flujo desde el reservorio superior

for (int j = k; j < n - 2; j++) {


Caudal_1[j + 1] = sqrt((altura[j + 1] - Hx) / alpha[j + 1]);
//Flujo de los reservorios con altura superior al valor actual de Hx
dQ_encima_Hx += Caudal_1[j + 1];
}

for (int j = k; j>0; j--) {


Caudal_1[j - 1] = sqrt((Hx - altura[j - 1]) / alpha[j - 1]);
//Flujo de los reservorios con altura inferior al valor actual de Hx
dQ_bajo_Hx += Caudal_1[j - 1];
}

dQ = dQ_encima_Hx + Caudal_1[n - 1] - (dQ_bajo_Hx + Caudal_1[0]);


//Conservaci�n de la masa

if (dQ > 0) { // Si la conservacion de la masa es positiva, el


flujo entrando a la union es mayor que el que sale
for (int h = 0; h < n; h++) { //Por lo tanto, Hx debe aumentar,
y el bucle debe ejecutarse de nuevo
Caudal_1[h] = 0; // Las variables se inicializan a
cero
}
dQ = 0;
dQ_bajo_Hx = 0;
dQ_encima_Hx = 0;
}

if (dQ < 0) {
do {
dQ_bajo_Hx=0;
dQ_encima_Hx = 0;
dQ = 0;
Hx -= 0.01;
for (int q = 0; q < k; q++) {
Caudal_1[q] = sqrt((Hx - altura[q]) / alpha[q]);
dQ_bajo_Hx += Caudal_1[q];
}
for (int w = k; w < n ; w++) {
Caudal_1[w] = sqrt((altura[w] - Hx) / alpha[w]);
dQ_encima_Hx += Caudal_1[w];
}
dQ = dQ_encima_Hx - dQ_bajo_Hx;

} while (dQ < 0);

break;
}

for (int i = 0; i<n ; i++){


error += sqrt (pow ( (abs (Caudal[i]- Caudal_1[i])/Caudal[i]) , 2) )/n;
}

if (error < 0.1){


cout << "\nLa solucion es:\n";
for (int i=0; i<n; i++){
cout <<"Q"<<i+1<<":"<<Caudal_1[i]<<"m^3/s" <<endl;
}

cout << "Hx:"<< Hx<<" m" <<endl;


cout << "Conservacion de la masa: "<< dQ << endl;
cout << "El error promedio cuadratico de calculo es: "<< error <<
" %"<< endl;

break;
}

if (error > 0.1){

for ( int i=0; i<n; i++){


Re [i] = 4*Caudal_1 [i]/(Pi*diametro[i]*viscosidad);
// Se calcula Reynolds
f[i]= pow ((-1.8* log10 ( pow
((rugosidad[i]/diametro[i])/3.7, 1.11) + 6.9/Re [i] )) , -2); //Se calcula el
factor de friccion suponiendo flujo muy turbulento
alpha[i] = 8 * f[i] * longitud[i] / (pow(diametro[i], 5)*
pow(Pi, 2)* g); //Se calcula el parametro alpha
}
}

} while (Hx < altura [n]);


}
int main() {
int numero;
cout << "Hecho por: Br. Argenis Bonilla\n\n";
cout << "Bienvenido al programa interactivo para el calculo de\ndistribucion
de caudales para tuberias ramificadas \n\n";
cout << "Se realizan las siguientes asunciones: \nFlujo monofasico \nFluido
incompresible \nSe desprecian las perdidas por accesorios \n\n";
cout << endl << "IMPORTANTE: LOS DATOS DEBEN INGRESARSE DESDE EL RESERVORIO
CON MENOR ALTURA \nHASTA EL RESERVORIO CON MAYOR ALTURA, ES DECIR, DE MENOR A MAYOR
ALTURA \n\n";
cout << "Ingrese el numero de tuberias de su sistema: ";
cin >> numero;
ramificadas(numero);
system ("pause");
}

You might also like