La cual es necesario iterar hasta encontrar el factor.
Alternativamente se puede usar la expresión propuesta por Haaland, en el que logra despejar "f" de la ecuación de Colebrook.
He usado Octave (altamente compatible con matlab) para generar el diagrama de Moody.
Lo interesante con esto, es que aparte de ayudar a mi padre, he aprendido comandos interesantes como num2str, loglog, text y he reforzado mi conocimiento de bucles anidados y uso de arrays en Octave/Matlab.
Expongo el código por si alguien esté interesado.
Con ese código se puede obtener el diagrama de Moody para régimen turbulento, el cual se puede usar para hallar aproximadamente el factor de fricción para un determinado número de Reynolds y rugosidad relativa.
%%PROGRAMA QUE GRAFICA EL DIAGRAMA DE MOODY - FLUJO TURBULENTO %%SE ITERA CON DETERMINADOS VALORES DE RUGOSIDAD RELATIVA E/D vs nReynolds %%EL NUMERO DE REYNOLDS SE CALCULA EN BASE A LA FORMULA: %% nReynolds = VELOCIDAD*DENSIDAD*DIAMETRO_TUBERIA/MU %% LA RUGOSIDAD RELATIVA SE CALCULA EN BASE A LA FORMULA: %% e/DIAMETRO = ed %% EL COEFICIENTE DE RUGOSIDAD (f) SE CALCULA EN BASE A LA FORMULA DE HAALAND: %% 1/f^(1/2)=-1.8*log[(6.9/nReynolds)+(ed/3.7)^1.11] clear all;close all;clc; nReynolds = [3000]; ed = [0.00001 0.00002 0.00005 0.0001 0.0002 0.0004 0.0006 0.0008 0.001 ... 0.0015 0.002 0.003 0.004 0.006 0.008 0.01 0.0125 0.015 0.0175 0.02 0.025 ... 0.03 0.035 0.04 0.045 0.05 0.06 0.07]; f = []; for i = 2:214 nReynolds = [nReynolds 1.05015*nReynolds(i-1)]; end hold on; for i = 1:length(ed) for j = 1:length(nReynolds) f = 0.30864/(log10((6.9/nReynolds(j))+(ed(i)/3.7)^1.11))^2; eval(num2str(i,'f%d(j)=f;')); end end figure (1) hold on;grid on; for i=1:length(ed) eval(num2str(i,'loglog(nReynolds,f%d)')) end title({'Diagrama de Moody - Seccion Flujo Turbulento'; ' '; ... '{f} ^{-1/2} = -1.8 * log10 [ ( 6.9 / nReynolds ) + ( ed / 3.7 ) ^{1.11}]'}) xlabel ('Number Reynolds'); ylabel ('Factor friction'); for i=1:length(ed) VAL = ed(i); str = ['ed = ',num2str(VAL)]; text(nReynolds(214),eval(num2str(i,'f%d(214)')),str); endCon este algoritmo, se obtiene la siguiente gráfica:
Si necesitamos un programa que calcule analíticamente el factor de fricción para ambos regímenes, presento este programa hecho en C y compilado con gcc bajo Debian 8.2.
#include "stdio.h" #include "stdlib.h" #include "math.h" #define DENSIDAD 1.23 #define MHU 0.0000179 void muestraEncabezado () { puts("UNIVERSIDAD NACIONAL DE INGENIERIA\t\t MAESTRIA EN INGENIERIA HIDRAULICA\n"); puts("\n\t\t\t PROGRAMA QUE DETERMINA EL TIPO \n\t\t DE REGIMEN DEL AIRE A TRAVES DE UNA TUBERIA \ \n\t\t\tY CALCULA EL FACTOR DE FRICCIÓN\n"); puts("Alumno : Jorge Piscoya Fernández"); puts("Curso : Flujo en Superficie Libre"); puts("-------------------------------------\n"); } float mostrarReynolds(float diametro, float velocidad) { return (diametro*velocidad*DENSIDAD)/(MHU); } float regimenLaminar (float diametro, float velocidad) { return 64 / mostrarReynolds(diametro, velocidad); } float regimenTurbulento (float ed, float diametro, float velocidad) { float f; float nR; nR = mostrarReynolds(diametro, velocidad); f = 0.30864/(pow(log10((6.9/nR)+(pow(ed/3.7,1.11))),2)); return f; } int main() { float diametro = 0; float velocidad = 0; float nReynolds = 0; muestraEncabezado(); printf("Ingrese diámetro de tubería en (m): "); scanf("%f", &diametro); printf("\n"); printf("Ingrese la velocidad del fluido (m/s): "); scanf("%f", &velocidad); printf("\n"); nReynolds = mostrarReynolds(diametro, velocidad); printf("El número de Reynolds para el fluido ingresado es: %f\n", nReynolds); if (nReynolds < 2300) { puts("El fluido se encuentra en régimen laminar"); printf("El coeficiente de rugosidad es: %f\n", regimenLaminar(diametro, velocidad)); } else { float ed, f; puts("El fluido se encuentra en régimen turbulento\n\n"); puts("Se procederá a calcular el factor de fricción en Reg. Turbulento\n"); printf("Ingrese el valor de la Rugosidad Relativa (ed) del medio: "); scanf("%f", &ed); f = regimenTurbulento(ed, diametro, velocidad); printf("\nEl factor de fricción en regimen turbulento es: %f\n",f); } puts("\nPresione ENTER para salir\n"); while(getchar() != '\n'); getchar(); return 0; }Y se obtiene la siguiente ventana:
Voy a intentar meter ncurses para que sea más colorida la interface, pero será en otro momento.
Para ejecutarlo en Windows, pueden usar DEV-C++ ya que es parte del standar ANSI C, así podrán obtener el ejecutable para windows.
Para poder realizar este trabajo, he seguido este manual teórico más la explicación de mi padre:
http://es.scribd.com/doc/67350243/Diagrama-de-Moody
Con esto reforzado mi conocimiento básico de manejo de funciones definidas para el desarrollo del algoritmo. Si tienen alguna sugerencia de cómo mejorar el código, es bienvenido. Saludos
No hay comentarios:
Publicar un comentario