UNIVERSIDAD DE CASTILLA - LA MANCHA ESCUELA TÉCNICA SUPERIOR DE INGENIEROS INDUSTRIALES CIUDAD REAL PROYECTO FIN DE CARRERA No 10-12-200927 ANÁLISIS NUMÉRICO Y COMPROBACIÓN EXPERIMENTAL DE LAS ECUACIONES BÁSICAS EN EL TRANSPORTE DE FLUIDOS Autor: JOSÉ ENRIQUE CABAÑAS CEBALLOS Director de proyecto: GONZALO RODRÍGUEZ PRIETO Noviembre 2010 CAPÍTULO 1. OBJETIVOS, ANTECEDENTES Y... Capítulo 1 OBJETIVOS, ANTECEDENTES Y MOTIVACIÓN El objetivo de este proyecto es crear un programa capaz de analizar la dependencia de la pérdida de carga con otras variables elementales de un fluido al recorrer una tubería. Concretamente las variables elementales son la presión, la velocidad del fluido, la rugosidad y la longitud de la tubería. Hay varios modelos para obtener esta dependencia en rangos distintos de sus variables, por lo que un primer paso es analizar en qué rangos es aplicable cada uno de ellos y asi se ha hecho en este proyecto. Posteriormente y debido a la complejidad de estos modelos, se desarrolló un programa informático, en el que con el conocimiento de algunas variables básicas de la instalación, se calculan rápidamente el resto de parámetros usando los diversos modelos con el ánimo de establecer una comparación entre los cálculos y los resultados experimentales. La mayoria de los modelos analíticos de dinámica de fluidos en una tubería fueron obtenidos durante los siglos XIX y XX, poseyendo una complejidad ya mencionada que favorece su sustitución por modelos numericos informáticos, de mayor complejidad y precisión. Sin embargo, estos nuevos programas son todavía muy lentos, por lo que para poder realizar algunos José Enrique Cabañas Ceballos 2 cálculos se recurre todavía a estos modelos analíticos. Además de estos modelos, también se usó el conocido Diagrama de Moody, que consiste en una recopilación experimental de datos sobre diversas tuberías expresados en función de variables adimensionales. De los modelos existentes los estudiados en este proyecto han sido: Ecuación de Blasius [1] Ecuación para régimen laminar [2] Ecuación de Colebrook [2] Ecuación de Prandtl [3] Ecuación de Von Karman-Nikuradse [3] Diagrama de Moody [4] Ecuación Explícita [5] Ecuación de Churchill [6] Por lo tanto en este proyecto se ha desarrollado un programa informático que facilita resultados numéricos sobre las magnitudes principales del desplazamiento de un fluido a lo largo de una tubería y sus cálculos han sido validados al compararlos tanto con el diagrama de Moody como con datos experimentales obtenidos con una instalación de estudio hidrodinámico. José Enrique Cabañas Ceballos 3 1.1. DISTINCIÓN ENTRE RÉGIMEN LAMINAR Y... 1.1. Distinción entre régimen laminar y turbulento en fluidos. Cuando entre dos partículas fluidas en movimiento existe un gradiente de velocidad, una se mueve más rápido que la otra, se desarrollan fuerzas de fricción que actúan tangencialmente a la dirección a las velocidades. Éstas fuerzas de fricción tratan de introducir un elemento de rotación entre las partículas en movimiento, pero simultáneamente la viscosidad del fluido actúa en sentido contrario tratando de impedirlo. Dependiendo del valor relativo de estas fuerzas se pueden producir diferentes estados de flujo. Cuando el gradiente de velocidad es bajo, la fuerza de inercia debida al movimiento es mayor que la de fricción, y las partículas se desplazan pero no rotan, o lo hacen pero con muy poca energía. El resultado final es un movimiento en el cual las partículas siguen trayectorias definidas y para el que todas las partículas que pasan por un punto en el campo del flujo siguen la misma trayectoria. Este tipo de flujo fue identificado por O. Reynolds [8] y se denomina laminar, queriendo significar con ello que las partículas se desplazan en forma de capas o láminas. Al aumentar el gradiente de velocidad se incrementa la fricción entre partículas vecinas dentro del fluido y estas adquieren una energía de rotación apreciable. La viscosidad pierde su efecto y debido a la rotación las partículas cambian de trayectoria. Al pasar de unas trayectorias a otras, las partículas chocan entre sí y cambian de rumbo de forma errática. Éste tipo de flujo se denomina turbulento. Sus características principales son: Las partículas del fluido no se mueven siguiendo trayectorias definidas. La acción de la viscosidad es despreciable. Las partículas del fluido poseen energía de rotación apreciable, y se mueven de forma errática chocando unas con otras. José Enrique Cabañas Ceballos 4 1.2. EL EXPERIMENTO DE REYNOLDS. Así pues y para resumir la distinción entre los diversos regímenes de flujo, cuando las fuerzas de inercia del fluido en movimiento son muy bajas, la viscosidad es la fuerza dominante y el flujo es laminar, pero si predominan las fuerzas de inercia el flujo es turbulento. Existe un parámetro adimensional que relaciona estos dos casos, el número de Reynolds. Para números de Reynolds bajos el flujo es laminar, y para valores altos el flujo es turbulento. Experimentalmente se ha encontrado que en tubos de sección circular cuando el número de Reynolds pasa de 2400 se inicia la turbulencia en la zona central del tubo, sin embargo este límite es muy variable y depende de las condiciones de estabilidad del conjunto. Para números de Reynolds mayores de 4000 el flujo es turbulento. Al descender la velocidad se encuentra que para números de Reynolds menores de 2100 el flujo es siempre laminar y cualquier turbulencia que se produzca es eliminada por la acción de la viscosidad. Por lo tanto el paso de flujo laminar a turbulento es un fenómeno gradual en el que inicialmente se produce turbulencia en la zona central del tubo, donde la velocidad es mayor, pero queda una corona de flujo laminar entre las paredes del tubo y el núcleo central. Al aumentar la velocidad media, el espesor de la corona laminar disminuye gradualmente hasta desaparecer totalmente. Esta última condición se consigue a altas velocidades cuando se obtiene turbulencia total en el flujo. Para un flujo entre placas paralelas, si se toma como dimensión característica la separación de éstas, el número de Reynolds máximo que garantiza flujo laminar es 1000. Para canales rectangulares anchos y usando como dimensión característica la profundidad, este límite es de 500; y para esferas con el diámetro como dimensión característica el límite es la unidad. 1.2. El experimento de Reynolds. Osborne Reynolds en 1883 presentaba el siguiente dilema, en uno de sus extensos trabajos[8]: «Aunque las ecuaciones de la hidrodinámica sean aplicables al movimiento laminar, o sea sin remolinos, mostrando que entonces la resistencia es proporcional a la velocidad, no habían arrojado hasta ese entonces ninguna luz sobre las circunstancias de las cuales dicho movimiento José Enrique Cabañas Ceballos 5 1.2. EL EXPERIMENTO DE REYNOLDS. depende. Y, con todo y que en años recientes estas ecuaciones se habían aplicado a la teoría del torbellino, no se habían aplicado en lo absoluto al movimiento del agua que es una masa de remolinos, movimiento turbulento, ni habían ofrecido una pista para descubrir la causa de que la resistencia a tal movimiento varíe como el cuadrado de la velocidad» y agregaba: «Mientras que, cuando se aplican a olas y al movimiento del agua en tubos capilares, los resultados teóricos concuerdan con los experimentales, la teoría de la hidrodinámica había fracasado hasta la fecha en proporcionar la más leve sugerencia acerca del porqué no logra explicar las leyes de la resistencia encontrada por grandes cuerpos que se mueven a través del agua con velocidades sensiblemente grandes, o por el agua en tuberías bastante anchas». Como expresan los parrafos anteriores, Reynolds buscaba determinar si el movimiento del agua era laminar o turbulento, y dilucidar las influencias de los parámetros básicos del fluido en el cambio de un régimen a otro. Se sabía que cuando más viscoso fuera el fluido, menos probable es que el movimiento regular o laminar se altere. Por otro lado tanto la velocidad del fluido como el tamaño del sistema hidráulico son favorables a la inestabilidad, cuanto más ancho sea el canal y más grande la velocidad mayor es la probabilidad de remolinos, una indicación clara de turbulencia. Utilizando el análisis dimensional y con las ecuaciones fundamentales del movimiento Reynolds comenzó a resolver dichas dudas. A presión constante, pensó, en las ecuaciones del movimiento de un fluido se equilibra el efecto de la inercia, representado por la energía cinética contenida en la unidad de volumen, ρU 2 , con el efecto de la viscosidad, representado por el esfuerzo de Newton, µU/L, donde U es la velocidad media, µ la viscosidad del fuido y L una longitud característica de la corriente en estudio (el diámetro del tubo por ejemplo). Ambos parámetros dieron origen al siguiente parámetro adimensional llamado «Número de Reynolds»: ρU 2 ρU L Ef ectos de inercia = = Ef ectos viscosos µU/L µ (1.1) Es un parámetro capaz de cuantificar la importancia relativa de las acciones mencionadas: José Enrique Cabañas Ceballos 6 1.2. EL EXPERIMENTO DE REYNOLDS. un valor pequeño indica que los efectos viscosos prevalecen, con lo que el movimiento será laminar, mientras que un valor grande, implica que predominan las fuerzas de inercia, por lo que tendremos un comportamiento turbulento. Debe pues existir un valor intermedio que separe los dos regímenes y que identificará la relación entre velocidad, viscosidad y longitud característica tal que alterando alguna de ellas, se pase de régimen laminar a turbulento o viceversa. Entonces se propuso determinar bajo qué condiciones experimentales se produce el movimiento laminar y el turbulento. Dado que este último se caracteriza por la presencia de remolinos, la primera idea que se le ocurrió fue visualizar con colorante el movimiento de un fluido en una tubería transparente. Así, usó un sifón de vidrio de 6 mm de diámetro (ABC) lleno de agua con una entrada abocinada en A y una válvula de control en C e introdujo su brazo corto AB en el agua de un vaso V. Por otro lado, instaló un depósito de líquido coloreado D, provisto de un tubo EF, también de 6 mm, terminado en una angosta boquilla cónica que penetraba en el centro de la boca A. El suministro de este líquido se controlaba por medio de la pinza P como indica la figura 1.1. Figura 1.1: Sifón utilizado por Reynolds. Imagen adaptada de [10] Luego de dejar todo el sistema lleno de agua durante varias horas, para asegurarse que José Enrique Cabañas Ceballos 7 1.2. EL EXPERIMENTO DE REYNOLDS. todo movimiento interno cesara, se abría poco a poco la pinza P. El líquido coloreado salía de la boquilla F, primero adquiriendo la forma de la llama de una vela, luego alargándose, hasta volverse un filamento muy delgado que al desagüar por la apertura de la válvula C se extendía por todo el sifón. A la válvula C se le daban aperturas siempre mayores, para que aumentara la velocidad del agua en el sifón, y al mismo tiempo se incrementaba el suministro de colorante, a fin de que el filamento se mantuviera visible. Contrariamente a lo previsto, con la máxima abertura de la válvula, este último se mantenía todavía perfectamente claro y estable a lo largo de todo el tubo, sin el menor asomo de perturbaciones en la corriente. Se prolongó el brazo BC hasta casi tocar el suelo para aumentar aun más la velocidad pero el filamento no se alteraba en lo más mínimo. Evidentemente el diámetro de 6 milímetros era demasiado reducido por lo que el flujo no pasaba de régimen laminar a turbulento. Entonces Reynolds decidió usar un tubo de 25,4 milímetros (una pulgada). Pero hacer un sifón de vidrio de este diámetro no era fácil y se le ocurrió una solución mucho más simple, ver figura 1.2. Ésta moficicación se insertó en la instalación de la figura 1.3. Figura 1.2: Modificación del sifón utilizado por Reynolds. Imagen adaptada de [10] José Enrique Cabañas Ceballos 8 1.2. EL EXPERIMENTO DE REYNOLDS. Figura 1.3: Esquema de la instalación utilizada por Reynolds. Imagen adaptada de [8] José Enrique Cabañas Ceballos 9 1.2. EL EXPERIMENTO DE REYNOLDS. El tanque V, de 1,80 metros de largo, medio de ancho y otro tanto de profundidad, se ve levantado 2 metros por encima del suelo, con el fín de alargar considerablemente el brazo vertical de la tubería de hierro que prolongaba, al otro lado de la pared del tanque, el tubo de vidrio AB donde se realizaba el experimento. Para realizar el experimento, tras asegurarse de que el agua en el tanque V estuviese en reposo se permitió al tinte fluir muy despacio, y se abrió un poco la válvula C. El filamento coloreado se estableció como antes, fig. 1.4.a, y permaneció muy estable al crecer la velocidad hasta que de repente con una leve apertura de la válvula, en un punto situado más o menos medio metro antes del tubo de hierro, el filamento se expandió y se mezcló con el agua, hasta llenar el resto del conducto con una nube coloreada, que a primera vista parecía como un tinte uniforme, fig 1.4.b. Un examen más cuidadoso reveló la naturaleza de esa nube: moviendo el ojo siguiendo el avance de la corriente, la expansión del filamento coloreado se vió conformada por un movimiento ondulatorio bien definido, fig. 1.4.c. Al cerrar la válvula de nuevo los remolinos desaparecieron y el filamento se reconstituyó. Figura 1.4: Evolución del flujo. Imagen adaptada de [8] Por lo tanto se produjeron en un mismo tubo los dos regímenes, laminar y turbulento, con sólo variar la velocidad. Pero el mismo resultado debía obtenerse al calentar el agua, y así reducir su viscosidad. El cuarto donde se realizaban los experimentos estaba a una temperatura de 8.3◦ C, y ésta era también la temperatura del agua. Con un chorro de vapor Reynolds consiguió elevarla a 21◦ C, reduciendo 1.39 veces la viscosidad. Aumentando poco a poco la José Enrique Cabañas Ceballos 10 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... velocidad, determinó en ambos casos el valor crítico con el cual empezaba a transformarse el movimiento laminar y encontró que en el segundo caso la velocidad crítica era 1.45 veces menor que en el primero. Aunque esta concordancia fuera aceptable, Reynolds pensó que en el tanque calentado se habían manifestado algunas perturbaciones adicionales debido tanto a la diferencia de temperatura entre el tanque y el medio ambiente como al gradiente de temperaturas en el tanque mismo. Reynolds también enfrió el agua hasta su máxima densidad, 4◦ C, agregándole hielo. Comprobó que en todos los casos existe una velocidad crítica y que varía en proporción directa con la viscosidad del flujo. Por otro lado, ensayos realizados con otros dos tubos, de distinto diámetro, permitieron concluir que la velocidad crítica mencionada es inversamente proporcional al diámetro del tubo, confirmando así que el flujo laminar se empieza a alterar en un valor definido por el parámetro ρU L/µ. Estos ensayos, realizados con sumo cuidado en muchísimas condiciones distintas, le permitieron confirmar que su previsión era correcta; aun cuando llego a la conclusión de que, para flujo turbulento, la resistencia que el conducto ofrece al avance de la corriente no es proporcional al cuadrado de la velocidad, si no a una potencia de exponente 1,72. 1.3. Métodos y ecuaciones del movimiento de un fluido en una tubería de sección circular. En este apartado se van a comentar los modelos estudiados y empleados en este proyecto. Dichos modelos son relaciones experimentales de las distintas variables en el transporte de fluidos en una tubería, de forma que se relaciona el número de Reynolds con la longitud, diámetro interno y rugosidad de la tubería y el factor de frición. Estas variables toman la forma de la ecuacion de Darcy-Weisbach [9]: José Enrique Cabañas Ceballos 11 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... hf = L · f · v2 2·D·g (1.2) Donde hf es la pérdida de carga, L es la longitud de la tubería en metros, f es el factor de fricción, v es la velocidad del fluido, D el diámetro interno de la tubería y por último g es la aceleración de la gravedad. Esta ecuación relaciona las magnitudes del transporte del fluido a través de la tubería con la pérdida de carga. Hay que destacar que dicha pérdida de carga tiene dimensiones de longitud y se calcula en metros si se utiliza el Sistema Internacional. Luego tan sólo es necesario hallar una forma del factor de frición para poder hallar la pérdida de carga. Para ello se emplean diversos modelos que se especifican a continuación. 1.3.1. Ecuación de Blasius. Blasius en 1911 propone una expresión en la que el factor de fricción viene dado sólo como una función del número de Reynolds [1]. Dicha expresión es válida para tubos lisos, en los que la rugosidad relativa r , (la relación entre el diámetro y la rugosidad media del tubo) no afecta al flujo al tapar la subcapa laminar las irregularidades de la tubería. Se puede expresar de la siguiente manera: f = 0,3164 · Re−0,25 , (1.3) y como se puede observar es un modelo muy simplificado en el que el factor de fricción sólo depende del número de Reynolds. José Enrique Cabañas Ceballos 12 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... 1.3.2. Ecuación para régimen laminar. Esta ecuación es la más sencilla de todas y la única que se puede deducir de forma analítica, pero sólo es válida en régimen laminar, es decir, con números de Reynolds por debajo de 4000, si el sistema hidráulico es una tubería de sección circular. Se escribe como: f= 1.3.3. 64 . Re (1.4) Ecuación de Colebrook-White. Esta ecuación es una de las más precisas para el cálculo del factor de fricción y en un rango más amplio, pero tiene la desventaja de su complejidad al ser una función implícita. Debe resolverse de forma iterativa hasta alcanzar una cota de error aceptable, con el coste computacional y tiempo que ello conlleva. Fue propuesta por Colebrook y White en 1939 [2] y es la más utilizada por ser la más precisa y universal. Dicha fórmula es: 1 √ = −2,0 log10 f 1.3.4. r 2,5226 √ . + 3,7065 Re f (1.5) Ecuación de Prandtl. La ecuación de Prandtl es más sencilla que la anterior, pero a costa de disminuir su rango de validez al eliminar su dependencia con la rugosidad relativa. Fue propuesto en 1930, ampliando el rango de validez del modelo de Blausius [3]. Su forma es la siguiente: José Enrique Cabañas Ceballos 13 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... 1 √ = 2,0 log10 f 1.3.5. √ Re f . 2, 51 (1.6) Ecuación de von Karman-Nikuradse. Este modelo es aun más sencillo, ya que como se puede observar no depende del número de Reynolds, sólo de la rugosidad relativa de la tubería. Fue propuesto en 1933 para poder utilizar una expresión similar a la ecuación de Prandtl con tuberías rugosas [3]. y su forma es: 1 √ = −2,0 log10 f 1.3.6. r . 3, 71 (1.7) Diagrama de Moody. Todas las expresiones y ecuaciones anteriores presentan inconvenientes que hacen gravoso su uso, incluso con los avances en computacion y cálculo actuales. En 1944 el ingeniero norteamericano Lewis F. Moody trató de solventar este problema con la búsqueda experimental de un diagrama en el que el factor de fricción se viera reflejado en función tanto del número de Reynolds como de la rugosidad relativa de la tubería [4]. El diagrama obtenido, llamado Diagrama de Moody en su nombre, fig. 1.5, permanece en uso actualmente. Habitualmente se emplea el Diagrama de Moody para obtener una solución inicial, que aunque no es lo suficientemente precisa para utilizarla como solución final, es válida para poder realizar iteraciones con la ecuacion de Colebrook-White y llegar rápidamente a la solución final con la precisión requerida. José Enrique Cabañas Ceballos 14 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... Figura 1.5: Diagrama de Moody. Imagen adaptada de [7] 1.3.7. Ecuación Explícita. Esta ecuación es uno de los métodos más sencillos para solucionar la dependencia de la pérdida de carga con la rugosidad y el número de Reynolds. Su origen está en realizar una aproximación numerica del diagrama de Moody, que es válida en un rango muy amplio de números de Reynolds gracias a la gran cantidad de términos empleados. Los detalles del procedimiento están detallados en [5] y su expresión es la siguiente: r 1 √ = −2,0 log10 − 3,7065 f 0,9924 0,9345 5,0272 r 4,567 r 5,3326 − log10 − log10 − , Re 3,827 Re 7,7918 208,815 + Re (1.8) donde Re es el número de Reynolds y r es la rugosidad relativa de la tubería como en José Enrique Cabañas Ceballos 15 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... casos anteriores. Como se puede observar a pesar de ser una ecuación explícita lo que facilita su resolución de una forma clara , sigue resultando una ecuación muy compleja. 1.3.8. Ecuación de Churchill. Este modelo fue propuesto por S. W. Churchill en 1977 [6]. Este modelo abarca tanto el régimen turbulento como el laminar pero requiere una capacidad de cálculo muy importante, por lo que es complicado conseguir la precisión necesaria en los cálculos implementándolo en un programa de cálculo convencional ya que se cometen errores de redondeo y truncado, aportando estas soluciones con un error superior al 50 % por lo que la solución obtenida no es válida. Sin embargo utilizando un programa de cálculo avanzado como Matlab, se obtienen resultados precisos. Su fórmula es la siguiente: 12 1/12 8 1 f =8 + , Re (A + B)1,5 (1.9) donde A y B toman la forma: A = 2,457 log 1 7 0,9 ( Re ) + 0,27r 16 37530 B= Re 16 , (1.10) Como se aprecia cláramente este metodo presenta importantes problemas de cálculo debido a los redondeos ya que opera con valores muy próximos a cero. En el cálculo del factor de frición trabaja con valores del orden de (1 · 10−4 )12 o lo que es lo mismo 1 · 10−48 . Debido a esta dificultad de operación, no se ha podido implementar en el programa informático, aunque se ha estudiado el método mediante el programa Matlab, y se han observado resultados muy similares al modelo de Colebrook para el régimen turbulento. En el régimen laminar no se José Enrique Cabañas Ceballos 16 1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO... han obtenido resultados concluyentes, debido a que no se han podido conseguir resultados experimentales en esta zona por limitaciones en la instalación experimental. José Enrique Cabañas Ceballos 17 CAPÍTULO 2. PROCEDIMIENTO EXPERIMENTAL Capítulo 2 PROCEDIMIENTO EXPERIMENTAL En este capítulo se describe la instalación experimental y el procedimiento para la toma de medidas necesarias para la evaluación experimental de la expresiones previamente presentadas. La instalación experimental se describe en primer lugar, y después de definir los principales puntos del método para la adquisición y toma de datos, el capítulo finaliza con las expresiones empleadas en el cálculo del factor de fricción a partor de los datos adquiridos. 2.1. Instalación Experimental. La instalación experimental está compuesta por una serie de elementos que permiten la circulación del fluido, en este caso agua, de forma controlada a través de ella. También posee la posibilidad de medir parámetros importantes tales como el caudal y la presión relativa entre distintos puntos de la misma. Esta última es equivalente a la caida de presión debida al rozamiento o pérdida de carga. Así la instalación posee un sistema experimental análogo al de los experimentos de Reynolds. Esta instalación se utiliza para la realización de prácticas de diversas asignaturas relacionadas con la mecánica de fluidos y se encuentra situada en el laboratorio de Mecánica de Fluidos de la E.T.S.I.I. de Ciudad Real. José Enrique Cabañas Ceballos 18 2.1. INSTALACIÓN EXPERIMENTAL. La instalación esta compuesta por los siguientes componentes: Depósito de agua. Tiene dos funciónes, almacenar y recoger el agua utilizada en el experimento de forma que se pueda cuantificar el caudal que atraviesa la instalación y además evitar el derroche de agua ya que permite la recirculación. Bomba hidráulica. Su misión es transportar el agua a través de la instalación. La absorbe del depósito y la expulsa a través de una tubería que recorre la instalación experimental. Válvulas. Estos componentes permiten regular el caudal que atraviesa la instalación, llegando incluso a cortarlo si se encuentra totalmente cerrada. Tubería. Conduce el agua desde la bomba, recorre toda la instalación pasando por las válvulas y la retorna al depósito de nuevo. Medidor de presión. Este componente mide la caída de presión entre dos puntos de la tubería de manera que la medida es una presión relativa. Dicha caida de presión es equivalente a la pérdida de carga debida al rozamiento del fluido con la tubería. Desagüe. Su función es trasladar el agua de la tubería al depósito para poder ser reutilizada. Su esquema es el de la figura 2.1, donde ∆P es el medidor de presión que mide la presión relativa entre los puntos P1 y P2 separados entre sí una distancia L de 0,915 metros. B se corresponde a la bomba hidráulica, D es el depósito de agua y por último V1 es la válvula sobre la que se actúa para regular el caudal. José Enrique Cabañas Ceballos 19 2.2. FUNCIONAMIENTO. Figura 2.1: Esquema de la instalación. Imagen adaptada de [9] 2.2. Funcionamiento. Antes de la puesta en marcha, se deben inspeccionar algunos elementos para asegurar su correcto funcionamiento y precisión en las medidas efectuadas: Debemos asegurarnos de que al menos una de las válvulas esté abierta para evitar daños a la bomba y a la instalación por sobrepresiones. El nivel del depósito de agua debe encontrarse por encima de un nivel mínimo para asegurar un caudal constante y evitar la entrada de aire al sistema. Se debe medir la temperatura ambiente ya que esto afecta directamente a la viscosidad del agua y por tanto a los resultados obtenidos. Una vez hechas las comprobaciones y medidas anteriores podemos poner en marcha la bomba. Es conveniente esperar unos segundos para alcanzar el régimen estacionario y a continuación se puede comenzar con la toma de medidas. José Enrique Cabañas Ceballos 20 2.3. TOMA DE MEDIDAS. Los parámetros que se pueden medir entre dos puntos de interés, en nuestro caso dos puntos de una tubería separados en un metro son el caudal de agua que lleva la tubería y la presión relativa entre esos dos puntos. El caudal se mide símplemente mediante un nivel y cronometrando el tiempo que transcurre al cambiar dicho nivel entre diferentes marcas graduadas que se corresponden con un volumen expresado en litros. Por tanto, el caudal se calcula como la relación entre el volumen de líquido desplazado y el tiempo invertido por la bomba para moverlo: Q[l/s] = ∆V [l/s] ∆t (2.1) La presión relativa es medida por su relación con la altura de columna de agua, una conectada a un punto de la instalación y otra conectada a otro. Esta presión es directamente proporcional a la diferencia de alturas entre las dos columnas, por lo que será la cantidad a emplear diréctamente como pérdida de carga sin realizar ninguna transformación posterior. Dado que los datos de viscosidad, diámetro interno de la tubería, caudal (volumen desplazado y tiempo invertido) y pérdida de carga son datos conocidos, se pueden calcular el número de Reynolds, el factor de fricción, la velocidad del fluido y la rugosidad efectiva analíticamente, usando las ecuaciones correspondientes que relacionan unas variables con las otras. En el procedimiento de toma de datos, las medidas se efectuarán repetidas veces para mejorar la precisión de las mismas y poder tener una cota estadística del error cometido. 2.3. Toma de medidas. Habiendo hecho las comprobaciones necesarias ponemos en funcionamiento la bomba y esperamos el tiempo suficiente para que se estabilice el flujo, una vez que se ha alcanzado el régimen estacionario, podemos comenzar con la toma de datos. De los datos necesarios, el José Enrique Cabañas Ceballos 21 2.4. CÁLCULO DE LOS PARÁMETROS. diámetro de la tubería es un parámetro conocido y de valor constante e igual a 13,6 mm. La temperatura se puede medir fácilmente mediante un termómetro de laboratorio y también es un parámetro invariable. En el momento de la adquisión de datos, se consideró un valor de 25o C. La densidad del fluido, en nuestro caso agua, también se trata de un dato conocido y constante, con un valor de 1000 kg/m3 . Debido a que la temperatura y la densidad son constantes, la viscosidad tambien lo es y su valor es de 1,001 · 10−6 m2 /s. Con estos datos ya se puede proceder a medir el caudal y la caída de presión en la sección de la tubería que hemos escogido para la toma de datos experimentales. Esta toma de datos se hace de la siguiente forma: Una vez alcanzado el régimen estacionario, se pone el cronómetro a cero e interrumpiendo el paso del agua esperamos a que el nivel del depósito alcance la linea cero de la escala graduada. Ponemos en marcha el cronómetro, y lo paramos cuando el nivel del depósito alcance la siguiente marca graduada de medida del volumen, así mismo anotamos la caída de presión inicial y final. Repetiremos la toma de medidas aumentando en cada medida una línea de la escala hasta llegar a la última linea de la escala graduada del depósito. Con este procedimiento, obtenemos la primera serie de medidas, la cual debemos repetir varias veces para poder hacer un análisis estadístico del error. Este procedimiento debe ser repetido para diversas posiciones de la válvula que regula el caudal que circula por el sistema, de forma que obtendremos medidas para distintos caudales. De esta forma se obtiene una nube de puntos que se puede analizar para comprobar la dependencia del caudal con la perdida de carga mediante el número de Reynolds, la viscosidad, el diámetro y la rugosidad de la tubería. 2.4. Cálculo de los parámetros. Como la pérdida de carga es un dato conocido porque lo hemos medido y asociado a un caudal determinado, se puede calcular el factor de fricción empleando la ecuación de DarcyWeisbach, expresión que proviene de realizar un análisis dimensional sobre los parámetros de los que depende la pérdida de carga [2]: José Enrique Cabañas Ceballos 22 2.4. CÁLCULO DE LOS PARÁMETROS. hf [m] = f LV 2 [m3 /s2 ] , 2Dg [m2 /s2 ] (2.2) donde hf es la pérdida de carga en metros, f corresponde al factor de frición que es un parámetro adimensional, g a la aceleración de la gravedad que viene expresada en (m/s2 ), D y L corresponden al diámetro y longitud de la tubería respectivamente expresados en metros, y por último V es la velocidad del fluido (m/s). Despejando el factor de frición, podemos observar su carácter adimensional y obtenerlo en función de las medidas realizadas anteriormente f [adimensional] = 2Dghf [m3 /s2 ] . LV 2 [m3 /s2 ] (2.3) Para calcular la rugosidad de la tubería, en este proyecto se utiliza la ecuación de ColebrookWhite: 1 √ = −2,0 log10 f r 2,5226 √ . + 3,7065 Re f (2.4) Como observamos esta ecuación es una función implícita en el factor de fricción, sin embargo se convierte en una función explícita al tener como única incógnita la rugosidad. Operando y despejando la rugosidad absoluta obtenemos: = 3,7065 · D 10 −1 √ f 2,5226 √ , − Re f (2.5) con la rugosidad absoluta de la tubería expresada en metros. Si se pretende calcular la rugosidad relativa para poder emplear el diagrama de Moody y hacer comprobaciones, símplemente hay que dividir entre la longitud característica del sistema, es decir, el diámetro de la tubería en metros también para ser dimensionalmente consistente: José Enrique Cabañas Ceballos 23 2.4. CÁLCULO DE LOS PARÁMETROS. r [adimensional] = [m] . D [m] (2.6) Por lo que calculado directamente se obtiene: −1 2,5226 √ √ . r = = 3,7065 10 f − D Re f José Enrique Cabañas Ceballos (2.7) 24 CAPÍTULO 3. RESULTADOS Capítulo 3 RESULTADOS En este capítulo se presentan los resultados obtenidos mediando el método descrito en el capítulo anterior y se realiza una comprobación entre ellos y el diagrama de Moody, concluyendo que los datos se ajustan de manera precisa al diagrama, por lo tanto se puede comparar el resultado obtenido experimentalmente con las diversas ecuaciones presentadas para poder apreciar cuál se ajusta mejor a la realidad, lo que se realiza en la última sección del capítulo. 3.1. Comparación entre los resultados experimentales y el diagrama de Moody. Una vez realizados los experimentos se ha procedido a su tratamiento estadístico, donde se calculan la media y el error cuadrático medio, obteniendo los resultados presentados en la tabla 3.1. José Enrique Cabañas Ceballos 25 3.1. COMPARACIÓN ENTRE LOS RESULTADOS... Los parámetros de la instalación y el líquido empleado son los siguientes, como ya se había comentado en el capítulo anterior: Agua: Viscosidad = 1.001·10−6 m2 /s Diámetro interno de la tubería = 13,6 mm Longitud de la tubería = 915 mm Una vez que se ha calculado tanto el factor de frición como el número de Reynolds, se puede proceder a su representación gráfica para su mejor comprensión y poder compararlos con el diagrama de Moody que debe predecir los resultados obtenidos. Los datos obtenidos con la instalación experimental del laboratorio cubren un reducido rango experimental, fig. 3.1, por lo que sólo se consigue analizar una pequeña parte del diagrama de Moody; ésta línea roja representa los puntos experimentales en la figura 3.2. Caudal Pérdida Velocidad medio de carga (l/s) (mm) 0,300 ± 0,003 380 ± 2 2,07 28.266 0,0257 0,0008 0,283 ± 0,001 340 ± 2 1,95 26.521 0,0262 0,0008 0,263 ± 0,001 300 ± 2 1,81 24.627 0,0268 0,0010 0,220 ± 0,002 220 ± 2 1,52 20.697 0,0279 0,0010 0,165 ± 0,001 130 ± 2 1,13 15.434 0,0297 0,0012 0,114 ± 0,001 68 ± 3 0,78 10.711 0,0320 0,0011 0,097 ± 0,001 50 ± 2 0,66 9.088 0,0333 0,0012 0,090 ± 0,001 44 ± 2 0,62 8.437 0,0334 0,0008 (m/s) Número de Factor Rugosidad de relativa Reynolds frición Tabla 3.1: Resultados experimentales Podemos observar como la instalación experimental del laboratorio tiene unas posibilidades muy reducidas de acción y sólo se consigue analizar una pequeña parte del diagrama de José Enrique Cabañas Ceballos 26 3.1. COMPARACIÓN ENTRE LOS RESULTADOS... Figura 3.1: Factor de fricción obtenido experimentalmente frente a número de Reynolds. José Enrique Cabañas Ceballos 27 3.1. COMPARACIÓN ENTRE LOS RESULTADOS... Moody, realzada por el rectángulo rojo de la figura 3.2. Figura 3.2: Zona estudiada del diagrama de Moody. Se observa cláramente cómo los datos experimentales y los predichos por el diagrama de Moody se corresponden con una diferencia muy reducida, del orden del 10 %. Así podemos afirmar que la rugosidad relativa de la tubería posee un límite superior de 0.001 puesto que estos son los datos que se corresponden con el diagrama de Moody, y su correspondecia con la rugosidad absoluta se calcula fácilmente ya que el diámetro de la tubería es un parámetro conocido. La rugosidad absoluta obtenida es 0,013 ± 0,002 mm. Además se puede ver cómo la rugosidad se mantiene constante dentro del margen de error, ver fig. 3.3, excepto para números de Reynolds bajos, donde se aprecia un pico en la gráfica. Este resultado es lógico ya que nos encontramos en la zona de transición entre los regímenes laminar y turbulento, región para la cual los datos experimentales no son concluyentes debido a la alta dispersión de los mismos y a la dificultad de hallar puntos en esta región de transición. José Enrique Cabañas Ceballos 28 3.1. COMPARACIÓN ENTRE LOS RESULTADOS... Figura 3.3: Rugosidad relativa obtenida experimentalmente frente al número de Reynolds utilizando el modelo de Colebrook. José Enrique Cabañas Ceballos 29 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... 3.2. Discusión de las diversas ecuaciones presentadas y su validez. En esta sección se compararán gráficamente los distintos modelos mencionados anteriormente con los resultados experimentales para poder comprobar el rango de validez de dichos modelos. En la figura 3.4 se grafica el factor de fricción frente al número de Reynolds para distintas rugosidades. Como se puede apreciar, a medida que el número de Reynolds aumenta el factor de fricción disminuye. Esto sucede hasta un valor a partir del cual se mantiene constante, cuando el flujo está totalmente dominado por la rugosidad. Además se observa como a medida que hacemos que la tubería sea más lisa, es decir menos rugosa, el factor de fricción se convierte en un valor constante para un número de Reynolds cada vez mayor. Así, siguiendo una de las curvas del factor de fricción, para bajos números de Reynolds, el factor de fricción es elevado, y a medida que aumenta la turbulencia, es decir el número de Reynolds se incrementa, el factor de fricción disminuye hasta alcanzar un valor constante e independiente del número de Reynolds. Y este factor de frición constante depende de la rugosidad de la tubería como ya se había dicho, ya que para rugosidades altas, es más grande y se alcanza a números de Reynolds más bajos. 3.2.1. Tubería lisa. En una tubería lisa, el flujo necesita un número de Reynolds muy alto para desarrollar completamente la turbulencia, fig. 3.5. Analizando los distintos modelos, se ve que la ecuación de Von Karman-Nikuradse no es válida en este caso ya que sólo se puede aplicar para el flujo turbulento totalmente desarrollado, donde el factor de fricción es independiente del número de Reynolds, situación muy difícil de alcanzar en una tubería lisa. José Enrique Cabañas Ceballos 30 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... Figura 3.4: Dependencia del factor de fricción con la rugosidad José Enrique Cabañas Ceballos 31 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... Por otro lado, tanto las ecuaciones explícita,como las de Colebrook y Prandtl sí modelizan con precisión el factor de fricción en estas condiciones. Comparando la expresión del régimen laminar con el resto de modelos, se observan discrepancias significativas. Esto es debido a que este modelo es específico para régimen laminar, mientras que los otros son más generales lo que en estas condiciones de flujo les lleva a cometer errores importantes debido a la dificultad de integrar en un único modelo el amplio rango de números de Reynolds deseado. Figura 3.5: Factor de fricción para tubería lisa. Rugosidad relativa 1 · 10−8 3.2.2. Rugosidad relativa de 1 · 10−5 . En este caso nos encontramos con una rugosidad muy pequeña, para la cual el flujo turbulento se desarrolla completamente a partir de un número de Reynolds en torno a 106 . A partir de este punto el factor de fricción es independiente del número de Reynols, fig. 3.6. Por otro lado se observa como los modelos de Prandtl, Colebrook y el explícito son coincidentes y una José Enrique Cabañas Ceballos 32 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... vez desarrollado completamente el flujo turbulento, estos modelos tienden asintóticamente al modelo de von Karman-Nikuradse. A partir del mismo número de Reynolds en el que el flujo turbulento está completamente desarrollado, el modelo de Prandtl deja de ser válido debido a que no depende del número de Reynolds ni de la rugosidad de la tubería. Figura 3.6: Factor de fricción con una rugosidad relativa de 1 · 10−5 3.2.3. Rugosidad relativa de 1 · 10−3 . La rugosidad sigue tomando importancia a medida que aumenta, lo cual pone a prueba la validez de los modelos. El modelo de Prandtl sólo es válido en la zona laminar, mientras que el de von Karman-Nikuradse se puede emplear en la zona turbulenta una vez que se ha desarrollado completamente el flujo. Por otro lado podemos decir que los modelos de Colebrook y el Explícito tienden asintóticamente por los extremos a los modelos de Prandtl y von Karman-Nikuradse, como indica la figura 3.7. José Enrique Cabañas Ceballos 33 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... Figura 3.7: Factor de fricción con una rugosidad relativa de 1 · 10−3 José Enrique Cabañas Ceballos 34 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... 3.2.4. Rugosidad relativa de 0,01. En este caso la rugosidad representa un orden de magnitud de un 1 % del diámetro de la tubería. El modelo de Prandtl se puede descartar ya que no es válido con la excepcion de números de Reynolds realmente pequeños por debajo de 300, fig. 3.8, los cuales son complicados de conseguir en las condiciones habituales en el transporte de fluidos. El resto de modelos son coincidentes una vez que se ha desarrollado completamente el flujo, en torno a un número de Reynolds de 5 · 104 . Figura 3.8: Factor de fricción con una rugosidad relativa de 0,01 3.2.5. Rugosidad relativa de 0,05. En este caso la rugosidad es macroscópica, apreciable a simple vista. El régimen turbulento se desarrolla completamente para valores de número de Reynolds muy bajos, del orden de 104 . José Enrique Cabañas Ceballos 35 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... El modelo de Prandtl no es válido ya que fue pensado para tuberías lisas y la rugosidad es un parámetro con gran importancia en este caso, ver fig. 3.9. El modelo de von Karman-Nikuradse toma validez una vez desarrollada la turbulencia, como siempre, tendiendo asintóticamente a éste último tanto el modelo Explícito como el de Colebrook. Figura 3.9: Factor de fricción si la rugosidad relativa es de 0,05 3.2.6. Rugosidad relativa de 1. Este es un caso hipotético en el cual la rugosidad es del mismo orden de magnitud que el diámetro de la tubería y se aprecia cláramente como el modelo de Prandtl no es válido. Sin embargo, el de von Karman-Nikuradse tiende asintóticamente desde un principio al de Colebrook y al Explícito, fig. 3.10. Al aumentar la rugosidad el régimen turbulento se desarrolla completamente para números de Reynolds muy bajos, del orden de 103 . José Enrique Cabañas Ceballos 36 3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES... Figura 3.10: Factor de fricción con rugosidad relativa de 1 José Enrique Cabañas Ceballos 37 3.3. EXPLICACIÓN DEL PROGRAMA. 3.3. Explicación del programa. El programa informático se ha desarrollado a partir de las necesidades demandadas: interface visual, sencillez de manejo, empleo de bases de datos con las características de los fluidos y materiales de las tuberías, flexibilidad al operar con los datos, presentación de resultados claros, empleo de distintos modelos de transporte de fluidos y comparación entre los resultados. Lo primero que se programó fue la forma de resolver un sistema de ecuaciones capaz de proporcionar los valores de los parámetros de la instalación de forma que sean cuales quiera tanto los datos conocidos como las incognitas, con la excepción de la rugosidad que debe ser un parámetro conocido puesto que la única forma de calcularla es resolver el modelo de Colebrook teniendo como única incógnita la rugosidad una vez conocidos todos los datos y calculada la pérdida de carga y el factor de frición. Por otro lado, se buscó dotar al programa de flexibilidad puesto que aunque existe una base de datos de la cual se leen los datos de viscosidad de diferentes fluidos y las rugosidades de los distintos materiales en las tuberías, es posible emplear otros parámetros. La flexibilidad también se hace notable al poder elegir cualquier combinación de variables para ser incógnitas o parámetros conocidos para calcular los restantes. Por este motivo es necesario desplegar un árbol de variables para tener en cuenta todas las combinaciones posibles y posteriormente, mediante una serie de if anidados se programa su resolución en función de las incógnitas y los parámetros conocidos. Cómo es lógico, algunas combinaciones de variables no son posibles, por lo que el programa advertirá este hecho enviando mensajes de error tales como «datos insuficientes» o «sistema incompatible». Los resultados del factor de fricción se redondean a 6 cifras significativas con el objetivo de ser más manejables. Así mismo se presentan los resultados de cada modelo por separado para poder compararlos y posteriormente se elabora una media ponderada de ellos para presentar un factor de frición medio. La pérdida de carga se calcula mediante la ecuación de DarcyWeisbach empleando este factor de fricción medio. José Enrique Cabañas Ceballos 38 3.4. CÁLCULOS MEDIANTE MATLAB. El programa se ha escrito en Java y su código se presenta en el Anexo B. Del mismo modo se ha elaborado un manual de usuario presentado en el Anexo A. 3.4. Cálculos mediante Matlab. Los cálculos del factor de fricción con diversas rugosidades y los cálculos estadísticos presentados en las secciones precedentes se han realizado con el programa Matlab y estan presentados en el Anexo C. Una vez obtenidos los datos experimentales se analizan estadísticamente, calculando la media, el error cuadrático medio y la desviación típica para otener una dispersión del error de las medidas. A su vez se calculan el resto de parámetros y se representan gráficamente para su mejor compresión y análisis. De esta forma se puede representar el factor de fricción y la rugosidad frente al número de Reynolds y comparar los resultados con el diagrama de Moody. Por otro lado, se representan gráficamente los distintos modelos que explican el comportamiento del transporte de fluidos a lo largo de una tubería y se analiza lo que ocurre variando el número de Reynolds y la rugosidad de forma independiente, es decir se obtienen curvas de nivel de estas funciones. De esta forma se puede analizar el comportamiento del fluido manteniendo todas las variables de las que depende el transporte a lo largo de la tubería constantes y variando sólo una, la variable objeto de estudio. Esto se realiza de dos formas, mediante la representación gráfica de todos los modelos frente al número de Reynolds para una misma rugosidad y analizando un método en todo el rango de números de Reynolds, pero representando gráficamente distintas rugosidades, como ya se ha hecho en párrafos anteriores. José Enrique Cabañas Ceballos 39 CAPÍTULO 4. CONCLUSIONES Capítulo 4 CONCLUSIONES El transporte de fluidos hasta el siglo XIX era un procedimiento totalmente artesanal. Se sabía de la existencia de turbulencias, pérdidas de carga, etc, pero no se conocían sus causas ni la forma de cuantificarlas, por lo que había que recurrir a la experiencia y utilizar amplios márgenes de seguridad en las instalaciones hidráulicas. Los experimentos de Reynolds, Prandtl, Colebrook, White y muchos otros, esclarecieron la compleja naturaleza de estos fenómenos. A pesar de haber conseguido desarrollar unos modelos que predicen el comportamiento del fluido bajo diversas condiciones de flujo para poder aplicarlos, hay que tener en cuenta la variabilidad de las medidas, y que estos modelos no dejan de ser aproximaciones a la compleja realidad de comportamiento de los fluidos en el transporte, por tanto cometen un error alrededor del 20 % en muchas ocaciones. Los modelos estudiados aproximan el comportamiendo del fluido, de forma que el factor de fricción disminuye a medida que aumenta el número de Reynolds, hasta alcanzar un valor constante e independiente del número de Reynolds un vez desarrollado completamente el régimen turbulento. Además, este valor de número de Reynolds a partir del cual el factor de fricción permanece constante depende de la rugosidad de la tubería, alcanzando valores mayores a medida que la rugosidad disminuye, es decir la tubería es más lisa. Todo esto se José Enrique Cabañas Ceballos 40 ha graficado para poder comparar visualmente dichos modelos y comprobar el rango de aplicación de los mismos. Además se han ajustado a la misma escala que el diagrama de Moody para tomarlo como referencia. Los experimentos realizados en el laboratorio se corresponden con estos modelos y su precisión. Y, a pesar de intentar mantener todo invariable y esperar el tiempo necesario para alcanzar el régimen estacionario en el sistema al realizar las mediciones, se observa como hay fluctuaciones en los parámetros del sistema. El caudal proporcionado por la bomba oscila debido a oscilaciones en la red eléctrica y a que estamos utilizando un depósito de agua de pequeñas dimensiones, por lo cual a medida que la bomba extrae agua del sistema, la presión a la entrada de la bomba disminuye. En la modelización de la tubería se ha utilizado como hipótesis que su rugosidad es contínua, aleatoria y estable, pero se conoce la existencia de cal y otras sustancias que se adhieren a las paredes de la misma añadiendo rugosidad al sistema que no cumplen estas condiciones. La temperatura tampoco es un factor que permanece constante ya que a medida que la bomba trabaja, hay rozamiento y por tanto se genera calor, el cual es absorbido por el agua aumentando su temperatura. Esta variación afecta la densidad y viscosidad del fluido. Las medidas a su vez tienen una variabilidad intrínseca al ser observadas en escalas graduadas con pequeñas oscilaciones y por tanto están sujetas al error cometido por el observador. Pero a pesar de todas las fuentes de error y variación en los parámetros medidos, con los resultados obtenidos y una vez tratados estadísticamente, al compararlos con el diagrama de Moody, la referencia en este proyecto, se comete un error por debajo del 10 %. Una vez analizados los modelos, y comparados con los resultados experimentales, se procede a la elaboración del programa informático. En él se ponderan los resultados de dichos modelos en función de su rango de aplicación, de tal forma que se obtenga el mejor resultado posible. En este proceso se llega incluso a desechar puntualmente alguno de los modelos a la hora de calcular los parámetros si fuera necesario por encontrarse fuera del rango de aplicación con las variables dadas. Dicho programa, conocidos algunos datos de la instalación, calcula el resto de los parámetros, asi como el factor de frición que predice cada modelo, el José Enrique Cabañas Ceballos 41 factor de fricción ponderado y la perdida de carga del sistema, dando avisos en caso de errores puntuales. Figura 4.1: Resultados experimentales Como se aprecia en la figura 4.1, los modelos de Colebrook y el Explícito son coincidentes entre sí y reproducen los datos experimentales fielmente en el rango de números de Reynolds que permite estudiar la instalacion hidraúlica del laboratorio. El modelo de Prandtl también se ajusta a los resultados obtenidos pero comete un error mayor que los métodos anteriores, por lo que este modelo se desecha a la hora de implementar el programa informático. El modelo para régimen laminar se encuentra fuera de rango, por lo que no es válido y es desechado del mismo modo y el modelo de von Karman-Nikuradse vemos que no es aplicable en este rango de números de Reynolds, aunque se ha estudiado que tiende asintóticamente a los modelos anteriores para números de Reynolds superiores a 107 . El programa se ha diseñado proporcionando cierta flexibilidad a la hora de introducir los José Enrique Cabañas Ceballos 42 datos dado que se eligen mediante una lista desplegable extraida de una base de datos. Ésta base de datos puede modificarse fácilmente en cualquier momento mediante un programa de edición de texto plano, véase el manual en los apéndices. Del mismo modo y a pesar de haber seleccionado alguna de las opciones de la lista desplegable, se pueden cambiar los valores predeterminados para obtener valores de la pérdida de carga mas adecuados. Debido a la gran complejidad de los cálculos por ser modelos implícitos, se decidió la realización del programa informatico para aprovechar la gran capacidad de calculo de cualquier ordenador de sobremesa convencional. Comparando la resolución de forma tradicional de estos problemas con la resolución mediante el programa informático, se observa como se gana en velocidad, precisión del cálculo al poder utilizar varios modelos y estar seleccionados segun el rango de aplicación de los mismos y fiabilidad al cometer menos errores de cálculo que de forma manual. Además es fácil representar gráficamente la solución obtenida de forma que se pueden analizar los resultados obtenidos y encontrar los posibles errores visualmente. José Enrique Cabañas Ceballos 43 BIBLIOGRAFÍA Bibliografía [1] V. L. Streeter, Mecánica de los fluidos, McGraw-Hill (2004). [2] F. White, Mecánica de fluidos, McGraw-Hill (2001). [3] Langelandsvik, An evaluation of the friction factor formula based on operational data. Presentado en la conferencia PSIG 2005 (2005). [4] L. F. Moody, Friction factor for pipe flow. Trans. Am. Soc. Mech. Engrs vol. 66, p. 671 (1944). [5] A. Monzón, Short communication: improved explicit equations for estimation of the friction factor in rough and smooth pipes. Chemical Engineering Journal vol. 86 pp. 369-374 (2002). [6] H. M. Hathoot, Unsteady flow through a pipe connecting tow reservoirs. Research Bulletin No. 80, Agric. Res. Center, King Saud Univ., pp. 5-25 (1999). [7] V. T. Chow, Hidráulica de los canales abiertos, McGraw-Hill (2004). [8] O. Reynolds, An experimental investigation of the circumstances which determine whether the motion of water in parallel channels shall be direct or sinuous and of the law of resistance in parallel channels. Royal Society Phil. Trans. vol. 40 is.29 pp.56 (1883). [9] Asociación Técnica Española de Climatización y Refrigeración (ATECYR), Guía técnica de selección de equipos de transporte de fluidos, Ahorro y eficiencia energética en climatización , IDAE (Instituto para la Diversificación y Ahorro de la Energía), vol. 10, 2010. José Enrique Cabañas Ceballos 44 BIBLIOGRAFÍA [10] Iñaki Carrascal Mozo. Ciencias Físicas, Vicens Vives (1988) José Enrique Cabañas Ceballos 45 ANEXO A. MANUAL DEL PROGRAMA DE... Anexo A MANUAL DEL PROGRAMA DE CÁLCULO A.1. Aplicaciones. Este programa informático ha sido diseñado para calcular de forma rápida, sencilla e intuitiva el factor de fricción, la pérdida de carga y una serie de parámetros en función de unos datos básicos de la instalación experimental, tarea que si se realizase a mano sería larga y compleja. A.2. Requisitos mínimos de sistema para la instalación. RAM: 256 Mb o superior. PROCESADOR: 300 MHz o superior. SISTEMA OPERATIVO: Win2000/XP/2003/Vista/7/Linux/Macintosh. ESPACIO LIBRE EN DISCO DURO: 100 MB. José Enrique Cabañas Ceballos 46 A.3. REQUISITOS DE SOFTWARE. A.3. Requisitos de Software. Es necesario tener instalado una plataforma JDK de Java. NetBeans IDE funciona en el kit de desarrollo de Java SE (JDK), que consta del entorno de ejecución de Java y de herramientas para desarrolladores para la compilación, depuración y ejecución de aplicaciones escritas en lenguaje Java. Para instalar y ejecutar los paquetes de NetBeans, sólo se necesita los entornos de ejecución de Java 5 ó 6. Puede descargar JDK para la plataforma que desee desde: http://java.sun.com/javase/downloads/index.jsp A.4. Instalación del programa. Para instalar el programa, sólo es necesario descomprimir el archivo DIST.zip y ejecutar el archivo factor_fricion.jar detro del entorno de ejecución de Java. A.5. Introducción de datos. Para iniciar la aplicación, es necesario seleccionar los parámetros conocidos, y el programa informático calculará el resto de los datos. En el caso de conocer un dato, se debe marcar la casilla correspondiente y escribir el valor a continuación. Si por el contrario no se conoce, símplemente hay que dejar la casilla desmarcada. Es importante en este punto mencionar que si el dato es un número decimal, el José Enrique Cabañas Ceballos 47 A.6. MENSAJES DE ERROR. caracter que separa la parte entera de la decimal es un punto y NO una coma. Hay que puntualizar que el programa SÓLO utilizará los datos cuya casilla esté seleccionada. En caso de estar desactivada, la aplicación lo considerará una incógnita a calcular aun estando escrita. Algunos datos como son la rugosidad del material de la tuberia, o la densidad y viscosidad del fluido, pueden ser seleccionados de una base de datos, la cual esta integrada en la aplicación mediante listas desplegables. Pero como se ha mencionado anteriormente aun seleccionando el valor de la lista, es necesario marcar dicha casilla para indicar al programa que utilice ese valor y no considere el parámetro como una incógnita a calcular. A.6. Mensajes de error. Para los mensajes de error hay que tener en cuenta que el parámetro de rugosidad absoluta es necesario conocerlo de antemano ya que de otra forma es imposible calcular el factor de frición por ser una variable independiente. Del mismo modo, se destaca que el resto de los parámetros se podrán calcular a partir de cualquier combinación de estos tal que se obtenga un sistema compatible determinado, es decir, haya el mismo numero incógnitas que ecuaciones. Por lo tanto si no proporcionamos un sistema compatible determinado, la aplicación emitirá mensajes de error avisando de esta situación. Si el parámetro de la rugosidad no está seleccionado, entonces la aplicación avisa mostrando el siguiente mensaje: «necesario el dato de rugosidad». Para corregirlo simplemente hay que seleccionar la casilla de dicho parámetro y escribir a continuación su valor si se conoce, o elegir uno de los materiales de tuberías en la lista desplegable mencionada anteriormente. Otro mensaje de error frecuente es el de: «datos insuficientes». Esto ocurre porque existen más incógnitas que ecuaciones. La solución es añadir los datos que sean necesarios hasta obtener José Enrique Cabañas Ceballos 48 A.7. USO. un sistema compatible. También es posible encontrar el error: «sistema incompatible». Este error sucede cuando se han seleccionado más parámetros de los necesarios, de tal forma que hay más ecuaciones que incognitas y no es posible el cálculo debido a las incongruencias. La solución es eliminar algun parámetro para permitir un grado más de libertad. A.7. Uso. Tras introducir los datos, y pulsando al botón de «calcular», una vez corregidos los errores mencionados anteriormente, aparecerá el mensaje: «parámetros calculados correctamente». Este mensaje símplemente indica que hemos seleccionado adecuadamente los parámetros para el cálculo y las operaciones se han realizado satisfactoriamente, apareciendo impresos los parámentros no conocidos, los factores de fricción según distintos métodos de cálculo y además un factor de frición medio ponderado, asi como la pérdida de carga observada para dicho «factor de frición medio». A.8. Modificación de la base de datos. La base de datos de la aplicación recoge valores tanto de la rugosidad absoluta de distintos materiales de tuberias, como de viscosidad y densidad de algunos fluidos típicos de trabajo. Estas bases de datos están escritas con una codificacion ASCII, extensión .txt y su estructura es la siguiente: materiales: material1;rugosidad1;material2;rugosidad2; etc José Enrique Cabañas Ceballos 49 A.9. EJEMPLO PRÁCTICO DE USO DE LA... fluidos: fluido1;densidad1;viscosidad1;fluido2;densidad2;viscosidad2; etc De tal forma que si se quiere añadir un nuevo material o fluido, simplemente hay que abrir el archivo .txt correspondiente y escribir a continuación de los datos existentes el nombre del material o fluido nuevo seguido de un ; y el valor del campo correspondiente acabado en ; siguiendo la estructura anteriormente descrita, sin espacios en blancos ni saltos de linea y siempre usando las unidades del sistema internacional tal como indica la primera línea del código. A.9. Ejemplo práctico de uso de la aplicación. Para que la demostración sea lo más completa posible, supondremos los siguientes datos: Diámetro de la tuberia = 50 mm Número de Reynolds = 50.000 Fluido es agua Si se probase a calcular, aparecerá el error «dato de rugosidad necesario». La forma de corregirlo es sencilla, se va a resolver en este caso, marcando la casilla que pone «rugosidad». A continuación se procede a escribir su valor. Rugosidad = 0.046 mm Una vez solucionado este error, si se intenta calcular de nuevo, aparecerá el mensaje «datos insuficientes». Esto es debido a que aun no hemos introducido los datos necesarios. En esta José Enrique Cabañas Ceballos 50 A.9. EJEMPLO PRÁCTICO DE USO DE LA... ocasión, añadiremos la viscosidad, seleccionandola de la base de datos, la cual se maneja mediante una lista desplegable en la parte superior de la ventana de la aplicación tal como indica la figura A.1. Figura A.1: Ejemplo de uso de la base de datos si el fluido es agua. Como se mencionó anteriormente, aunque hayamos seleccionado el valor, es necesario marcar la casilla correspondiente para que la aplicación lo tenga en cuenta a la hora de calcular. Llegados a este punto, vemos que se han calculado los valores del caudal de aproximadamente 2 litros por segundo, la velocidad del flujo de 1 metro por segundo, además se han obtenido los factores de fricción y por último la pérdida de carga por metro de tubería de 0.0238 y 0.024 respectivamente como indica la figura A.2. En estas condiciones de flujo la pérdida de carga no es significativa, sin embargo simplemente cambiando el fluido por aceite SAE 30, cuya viscosidad es mucho mayor, el valor de la pérdida de carga es 1.890 metros por metro de tubería ya que es necesario un caudal de 547 litros por segundo en una tubería de tan sólo 50 mm de diámetro. José Enrique Cabañas Ceballos 51 A.9. EJEMPLO PRÁCTICO DE USO DE LA... Figura A.2: Ejemplo de resultados obtenidos José Enrique Cabañas Ceballos 52 ANEXO B. CÓDIGO DEL PROGRAMA... Anexo B CÓDIGO DEL PROGRAMA INFORMÁTICO En este apartado se presenta el código fuente de la aplicación informática desarrollada para el cálculo del factor de fricción, la pérdida de carga y las variables de la instalación hidráulica. El capítulo está dividido en varias secciones, donde cada una se corresponde con el fichero .java necesario para la aplicación. B.1. Cálculos Esta sección se corresponde con el archivo del mismo nombre: calculos.java. 1 package factor_friccion; 2 /** Metodos que realizan las operaciones necesarias para gestionar los datos 3 * de las propiedades del flujo y devuelve como resultado el factor de friccion 4 */ José Enrique Cabañas Ceballos 53 B.1. CÁLCULOS 5 public class calculos { 6 private String nombre; 7 private double densidad; /* km/m3 */ 8 private double viscosidad; /* m2/s */ 9 public calculos(String nom){ this.nombre = nom; 10 11 } 12 public calculos(String nom, double densidad, double viscosidad){ 13 this.nombre = nom; 14 this.densidad = densidad; 15 this.viscosidad = viscosidad; 16 } 17 public String getNombre(){ return this.nombre; 18 19 } 20 public void setNombre(String nombre){ this.nombre = nombre; 21 22 } 23 public double getDensidad(){ return this.densidad; 24 25 } 26 public void setDensidad(double den){ this.densidad = den; 27 28 } 29 public double getViscosidad(){ return this.viscosidad; 30 31 } 32 public void setViscosidad(double vis){ this.viscosidad = vis; 33 34 } 35 public static double getVelocidad (double q, double D){ 36 double A=3.1415926*D*D*(1e-6)/4; José Enrique Cabañas Ceballos 54 B.1. CÁLCULOS 37 double vel=q/A; 38 return vel; 39 } 40 public static double getReynolds(double L, double vel, double vis) { 41 double Re=L*(1e-3)*vel/vis; 42 return Re; 43 } 44 public static double getViscosidad(double Re, double D, double vel) { 45 double vis=vel*D*1e-3/Re; 46 return vis; 47 } 48 public static double getCaudal(double D,double vel){ 49 double A=3.1415926*D*D*(1e-6)/4; 50 double q=vel*A; 51 return q; 52 } 53 public static double getVel(double Re,double D,double vis){ 54 double vel=Re*vis/(D*1e-3); 55 return vel; 56 } 57 public static double getD(double Re,double vis,double vel){ 58 double D=Re*vis*1000/vel; 59 return D; 60 } 61 public static double getD1(double Re,double vis,double q){ 62 double D=4000*q/(3.1415926*Re*vis); 63 return D; 64 } 65 public static double getD(double q,double vel){ 66 double A=q/vel; José Enrique Cabañas Ceballos 55 B.1. CÁLCULOS 67 double Dm=2*Math.sqrt(A/3.1415926); 68 double D=Dm*1e3; 69 return D; 70 } public static double getMedia(double a,double b,double c,double 71 Re,double e){ 72 double media = 0; 73 if (e>0.00001){ media=(a+b)/2; 74 75 } 76 else{ media= (a+b+c)/3; 77 78 } 79 return media; 80 } 81 //Metodo que resuelve la ecuacion de Colebrook del factor de friccion. 82 public static double getFactor(double Re, double D, double e) 83 { 84 double f,x,X,s,a,b=0; 85 if(Re<=5000) 86 { s=64/Re; 87 88 } 89 else //if (Re>2100) 90 { 91 x=0.000000000001; 92 do 93 { 94 f=-2.0*Math.log10((e/(D*3.7065))+(2.5226/(Re*Math. sqrt(x)))); 95 a=1/(f*f); José Enrique Cabañas Ceballos 56 B.1. CÁLCULOS 96 X=Math.abs(x-a); 97 s=x; 98 x=x+0.000001; } 99 while(X>0.000001); 100 101 } 102 return s; 103 } 104 //Metodo que resuelve la ecuacion de explicita del factor de fricción. 105 public static double getFactor1(double Re, double D, double e) 106 { 107 double f,x,X,s,a,b=0; 108 s=0; 109 if(Re<=5000) 110 { s=64/Re; 111 112 } 113 114 else //if (Re>2100) 115 { if(e==0) 116 117 { 118 e=0.0000000001; 119 a=-2.0*Math.log10(((e/D)/3.7065)-(5.0272/Re)*Math.log10 (((e/D)/3.827)-(4.567/Re)*Math.log10((Math.pow((e/D) /7.7918,0.9924))+ Math.pow((5.3326/(208.815+Re)),0.9345)))); 120 s=1/(a*a); 121 122 } 123 else{ 124 a=-2.0*Math.log10(((e/D)/3.7065)-(5.0272/Re)*Math.log10 José Enrique Cabañas Ceballos 57 B.1. CÁLCULOS (((e/D)/3.827)-(4.567/Re)*Math.log10((Math.pow((e/D) /7.7918,0.9924))+ Math.pow((5.3326/(208.815+Re)),0.9345)))); 125 126 s=1/(a*a); 127 } 128 } 129 return s; 130 } 131 //Metodo que resuelve la ecuacion explicita árabe del factor de fricción. 132 133 public static double getFactor2(double Re, double D, double e) { 134 double f,x,X,s,a,b=0; 135 //a=Math.pow((2.457*Math.log10(1/(Math.pow((7/Re),0.9) +0.27*(e/D)))),16); a=Math.pow((2.457*Math.log(1/((Math.pow((7/Re),0.9))+(0.27*e 136 /D)))),16); 137 b=Math.pow((37530/Re),16); 138 s=8*Math.pow(((Math.pow((8/Re),12))+(1/(Math.pow((a+b),1.5)) )),(1/12)); 139 System.out.println("a = "+a); 140 System.out.println("b = "+b); 141 //s=8*Math.pow((1/Math.pow((a+b),1.5))+(Math.pow((8/Re),12)) ,(1/12)); //s=8*Math.pow((Math.pow((8/Re),12)+(1/(Math.pow((a+b),1.5)) 142 )),(1/12)); return s; 143 144 145 } //Metodo que resuelve la ecuación de Prandtl del factor de fricción. 146 147 public static double getFactor3(double Re) { José Enrique Cabañas Ceballos 58 B.1. CÁLCULOS 148 double f,x,X=0; 149 x=0.000000000001; 150 do 151 { f=Math.pow(1/(2*Math.log10((Re*Math.sqrt(x))/2.51)) 152 ,2); 153 X=Math.abs(x-f); 154 x=x+0.000001; 155 } 156 while(X>0.000001); return x; 157 } 158 //Metodo que resuelve la ecuación de Karman-Nikuradse del factor 159 de fricción. public static double getFactor4(double D, double e,double Re) 160 { 161 162 double f,x,X=0; 163 f=1/Math.pow((-2*Math.log10(e/(3.71*D))),2); 164 return f; 165 } 166 167 //CALCULO DE PERDIDA DE CARGA MEDIANTE ECUACION DARCY-WEISBACH 168 public static double getPC(double D,double vel,double media) 169 { 170 double g=9.81; 171 double PC=media*vel*vel/(2*g*(0.001*D)); 172 return PC; } 173 174 } José Enrique Cabañas Ceballos 59 B.2. CAMPOS DE LA BASE DE DATOS B.2. Campos de la base de datos Esta sección se corresponde con el archivo: campos.java 1 package factor_friccion; 2 public class campos { 3 private String nombre; 4 private double rugosidad; /* mm */ 5 public campos(String nom){ 6 this.nombre = nom; 7 } 8 public campos(String nom, double rugosidad){ this.nombre = nom; 9 this.rugosidad = rugosidad; 10 11 } 12 public String getNombre(){ return this.nombre; 13 14 } 15 public void setNombre(String nombre){ this.nombre = nombre; 16 17 } 18 public double getRugosidad(){ return this.rugosidad; 19 20 } 21 public void setRugosidad(double vis){ this.rugosidad = vis; 22 } 23 24 } José Enrique Cabañas Ceballos 60 B.3. BASE DE DATOS DE FLUIDOS B.3. Base de datos de fluidos Esta sección se corresponde con el archivo: leerfluidos.java 1 package factor_friccion; 2 import java.io.*; 3 public class leerfluidos { 4 public static String[] leerfichero() 5 { 6 File archivo = null; 7 FileReader fr = null; 8 BufferedReader br = null; 9 String linea=null; 10 String z[]=null; 11 try 12 { /* 13 // Apertura del fichero y creacion de BufferedReader para 14 poder 15 //hacer una lectura comoda (disponer del metodo readLine()) 16 */ 17 archivo = new File ("listafluidos.txt"); 18 fr = new FileReader (archivo); 19 br = new BufferedReader(fr); 20 // Lectura del fichero 21 while((linea=br.readLine())==null) 22 System.out.println(""); 23 } 24 catch(Exception e) 25 { e.printStackTrace(); 26 27 } José Enrique Cabañas Ceballos 61 B.3. BASE DE DATOS DE FLUIDOS 28 finally 29 { 30 // En el finally cerramos el fichero, para asegurarnos 31 // que se cierra tanto si todo va bien como si salta 32 // una excepcion. 33 try 34 { 35 if( null != fr ) 36 { fr.close(); 37 } 38 39 } 40 catch (Exception e2) 41 { e2.printStackTrace(); 42 } 43 44 } 45 int y=0; 46 for(int w=0;w<linea.length();w++) 47 { //recorrer el String linea 48 if (linea.charAt(w) == ’;’)//condicion de que caracter 49 sea ";" { 50 y=y+1;//contador de caracteres ";"para poder 51 subdividir linea } 52 53 54 } String [] W=new String [y]; 55 56 for(int b=0;b<y;b++) 57 { José Enrique Cabañas Ceballos 62 B.4. BASE DE DATOS DE MATERIALES DE... W[b]=""; 58 59 } 60 int a=0; 61 for(int t=0;t<linea.length();t++) { 62 //recorrer el String linea 63 64 if (linea.charAt(t) != ’;’) 65 { W[a] = W[a]+ Character.toString(linea.charAt(t)); 66 67 } 68 else// (linea.charAt(t) == ’;’) 69 { a=a+1; 70 } 71 } 72 73 System.out.println("hay "+y+" ; en el archivo"); 74 75 return W; 76 } 77 78 } B.4. Base de datos de materiales de tuberías Esta sección se corresponde con el archivo: Leermateriales.java 1 package factor_friccion; 2 import java.io.*; 3 //import java.util.StringTokenizer; 4 public class Leermateriales José Enrique Cabañas Ceballos 63 B.4. BASE DE DATOS DE MATERIALES DE... 5 { 6 public static String[] leerfichero() 7 { 8 File archivo = null; 9 FileReader fr = null; 10 BufferedReader br = null; 11 String linea=null; 12 String z[]=null; 13 try 14 { /* 15 // Apertura del fichero y creacion de BufferedReader para 16 poder 17 //hacer una lectura comoda (disponer del metodo readLine()) 18 */ 19 archivo = new File ("listamateriales.txt"); 20 fr = new FileReader (archivo); 21 br = new BufferedReader(fr); 22 // Lectura del fichero 23 while((linea=br.readLine())==null) 24 System.out.println(""); 25 } 26 catch(Exception e) 27 { e.printStackTrace(); 28 29 } 30 finally 31 { 32 // En el finally cerramos el fichero, para asegurarnos 33 // que se cierra tanto si todo va bien como si salta 34 // una excepcion. 35 try José Enrique Cabañas Ceballos 64 B.4. BASE DE DATOS DE MATERIALES DE... { 36 37 if( null != fr ) 38 { fr.close(); 39 } 40 41 } 42 catch (Exception e2) 43 { e2.printStackTrace(); 44 } 45 46 } 47 int y=0; 48 for(int w=0;w<linea.length();w++) 49 { //recorrer el String linea 50 if (linea.charAt(w) == ’;’)//condicion de que caracter 51 sea ";" { 52 y=y+1;//contador de caracteres ";"para poder 53 subdividir linea } 54 55 56 } String [] W=new String [y]; 57 58 for(int b=0;b<y;b++) 59 { W[b]=""; 60 61 } 62 int a=0; 63 for(int t=0;t<linea.length();t++) 64 65 { //recorrer el String linea José Enrique Cabañas Ceballos 65 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 66 if (linea.charAt(t) != ’;’) 67 { W[a] = W[a]+ Character.toString(linea.charAt(t)); 68 69 } 70 else// (linea.charAt(t) == ’;’) 71 { a=a+1; 72 } 73 } 74 75 System.out.println("hay "+y+" ; en el archivo"); 76 77 return W; 78 } 79 80 } B.5. Código de de la interface gráfica Esta sección se corresponde con el archivo: Factor_friccionView.java 1 /* 2 * Factor_friccionView.java 3 */ 4 5 package factor_friccion; 6 7 import org.jdesktop.application.Action; 8 import org.jdesktop.application.ResourceMap; 9 import org.jdesktop.application.SingleFrameApplication; 10 import org.jdesktop.application.FrameView; José Enrique Cabañas Ceballos 66 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 11 import org.jdesktop.application.TaskMonitor; 12 import java.awt.event.ActionEvent; 13 import java.awt.event.ActionListener; 14 import javax.swing.DefaultComboBoxModel; 15 import javax.swing.Timer; 16 import javax.swing.Icon; 17 import javax.swing.JDialog; 18 import javax.swing.JFrame; 19 import java.text.DecimalFormat; 20 21 /** 22 * The application’s main frame. 23 */ 24 public class Factor_friccionView extends FrameView { 25 DecimalFormat formateador = new DecimalFormat("0.000000"); 26 String Z[]=Leermateriales.leerfichero(); 27 int q=Z.length; 28 int y=1+(q/2); 29 public String Nombres[]=new String[y-1]; 30 public String Rug[]=new String[y-1]; 31 String W[]=leerfluidos.leerfichero(); 32 int r=W.length; 33 int p=r/3; 34 public String Nombres1[]=new String[p]; 35 public String Vis[]=new String[p]; 36 public String Den[]=new String[p]; 37 public DefaultComboBoxModel model; 38 public DefaultComboBoxModel model1; 39 40 public Factor_friccionView(SingleFrameApplication app) { 41 super(app); 42 for (int a=1;a<y-1;a++) José Enrique Cabañas Ceballos 67 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 43 { 44 Nombres[a]=Z[2*a]; 45 Rug[a]=Z[(2*a)+1]; 46 //System.out.print(Nombres[a]); 47 } 48 for (int b=1;b<p-1;b++) 49 { 50 Nombres1[b]=W[3*b]; 51 Vis[b]=W[(3*b)+2]; 52 Den[b]=W[(3*b)+1]; 53 //System.out.print(Nombres[b]); 54 } 55 model = new DefaultComboBoxModel(Nombres); 56 model1 = new DefaultComboBoxModel(Nombres1); 57 initComponents(); 58 59 // status bar initialization - message timeout, idle icon and busy animation, etc 60 ResourceMap resourceMap = getResourceMap(); 61 int messageTimeout = resourceMap.getInteger("StatusBar. messageTimeout"); 62 messageTimer = new Timer(messageTimeout, new ActionListener () { public void actionPerformed(ActionEvent e) { 63 statusMessageLabel.setText(""); 64 } 65 66 }); 67 messageTimer.setRepeats(false); 68 int busyAnimationRate = resourceMap.getInteger("StatusBar. busyAnimationRate"); 69 70 for (int i = 0; i < busyIcons.length; i++) { busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[ José Enrique Cabañas Ceballos 68 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA " + i + "]"); 71 } 72 busyIconTimer = new Timer(busyAnimationRate, new ActionListener() { public void actionPerformed(ActionEvent e) { 73 busyIconIndex = (busyIconIndex + 1) % busyIcons. 74 length; statusAnimationLabel.setIcon(busyIcons[busyIconIndex 75 ]); } 76 77 }); 78 idleIcon = resourceMap.getIcon("StatusBar.idleIcon"); 79 statusAnimationLabel.setIcon(idleIcon); 80 progressBar.setVisible(false); 81 82 // connecting action tasks to status bar via TaskMonitor 83 TaskMonitor taskMonitor = new TaskMonitor(getApplication(). getContext()); 84 taskMonitor.addPropertyChangeListener(new java.beans. PropertyChangeListener() { 85 public void propertyChange(java.beans. PropertyChangeEvent evt) { 86 String propertyName = evt.getPropertyName(); 87 if ("started".equals(propertyName)) { 88 if (!busyIconTimer.isRunning()) { 89 statusAnimationLabel.setIcon(busyIcons[0]); 90 busyIconIndex = 0; 91 busyIconTimer.start(); 92 } 93 progressBar.setVisible(true); 94 progressBar.setIndeterminate(true); 95 } else if ("done".equals(propertyName)) { José Enrique Cabañas Ceballos 69 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 96 busyIconTimer.stop(); 97 statusAnimationLabel.setIcon(idleIcon); 98 progressBar.setVisible(false); 99 progressBar.setValue(0); } else if ("message".equals(propertyName)) { 100 101 String text = (String)(evt.getNewValue()); 102 statusMessageLabel.setText((text == null) ? "" : text); messageTimer.restart(); 103 104 } else if ("progress".equals(propertyName)) { 105 int value = (Integer)(evt.getNewValue()); 106 progressBar.setVisible(true); 107 progressBar.setIndeterminate(false); 108 progressBar.setValue(value); } 109 } 110 }); 111 112 } 113 114 @Action 115 public void showAboutBox() { if (aboutBox == null) { 116 JFrame mainFrame = Factor_friccionApp.getApplication(). 117 getMainFrame(); 118 aboutBox = new Factor_friccionAboutBox(mainFrame); 119 aboutBox.setLocationRelativeTo(mainFrame); 120 } 121 Factor_friccionApp.getApplication().show(aboutBox); 122 } 123 124 125 /** This method is called from within the constructor to * initialize the form. José Enrique Cabañas Ceballos 70 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 126 * WARNING: Do NOT modify this code. The content of this method is 127 * always regenerated by the Form Editor. 128 */ 129 @SuppressWarnings("unchecked") 130 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 131 private void initComponents() { 132 133 mainPanel = new javax.swing.JPanel(); 134 jLabel1 = new javax.swing.JLabel(); 135 jTextField1 = new javax.swing.JTextField(); 136 jTextField2 = new javax.swing.JTextField(); 137 jTextField3 = new javax.swing.JTextField(); 138 jTextField4 = new javax.swing.JTextField(); 139 jTextField5 = new javax.swing.JTextField(); 140 jButton1 = new javax.swing.JButton(); 141 jComboBox1 = new javax.swing.JComboBox(); 142 jCheckBox1 = new javax.swing.JCheckBox(); 143 jCheckBox2 = new javax.swing.JCheckBox(); 144 jCheckBox3 = new javax.swing.JCheckBox(); 145 jCheckBox4 = new javax.swing.JCheckBox(); 146 jCheckBox5 = new javax.swing.JCheckBox(); 147 jCheckBox6 = new javax.swing.JCheckBox(); 148 jTextField6 = new javax.swing.JTextField(); 149 jTextField7 = new javax.swing.JTextField(); 150 jLabel2 = new javax.swing.JLabel(); 151 jLabel4 = new javax.swing.JLabel(); 152 jComboBox2 = new javax.swing.JComboBox(); 153 jCheckBox7 = new javax.swing.JCheckBox(); 154 jTextField8 = new javax.swing.JTextField(); 155 jLabel5 = new javax.swing.JLabel(); 156 jLabel6 = new javax.swing.JLabel(); José Enrique Cabañas Ceballos 71 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 157 jTextField9 = new javax.swing.JTextField(); 158 jLabel7 = new javax.swing.JLabel(); 159 jTextField11 = new javax.swing.JTextField(); 160 jTextField12 = new javax.swing.JTextField(); 161 jLabel8 = new javax.swing.JLabel(); 162 jLabel9 = new javax.swing.JLabel(); 163 jTextField13 = new javax.swing.JTextField(); 164 jLabel10 = new javax.swing.JLabel(); 165 jLabel12 = new javax.swing.JLabel(); 166 jTextField14 = new javax.swing.JTextField(); 167 menuBar = new javax.swing.JMenuBar(); 168 javax.swing.JMenu fileMenu = new javax.swing.JMenu(); 169 javax.swing.JMenuItem exitMenuItem = new javax.swing. JMenuItem(); 170 javax.swing.JMenu helpMenu = new javax.swing.JMenu(); 171 javax.swing.JMenuItem aboutMenuItem = new javax.swing. JMenuItem(); 172 statusPanel = new javax.swing.JPanel(); 173 javax.swing.JSeparator statusPanelSeparator = new javax. swing.JSeparator(); 174 statusMessageLabel = new javax.swing.JLabel(); 175 statusAnimationLabel = new javax.swing.JLabel(); 176 progressBar = new javax.swing.JProgressBar(); 177 jLabel3 = new javax.swing.JLabel(); 178 jPanel1 = new javax.swing.JPanel(); 179 jLabel11 = new javax.swing.JLabel(); 180 jTextField10 = new javax.swing.JTextField(); 181 182 mainPanel.setName("mainPanel"); // NOI18N 183 mainPanel.setPreferredSize(new java.awt.Dimension(600, 400)) ; 184 José Enrique Cabañas Ceballos 72 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 185 jLabel1.setText("FLUIDOS"); 186 jLabel1.setName("jLabel1"); // NOI18N 187 188 jTextField1.setText(""); 189 jTextField1.setEnabled(false); 190 jTextField1.setName("jTextField1"); // NOI18N 191 192 jTextField2.setText(""); 193 jTextField2.setEnabled(false); 194 jTextField2.setName("jTextField2"); // NOI18N 195 196 jTextField3.setText(""); 197 jTextField3.setEnabled(false); 198 jTextField3.setName("jTextField3"); // NOI18N 199 200 jTextField4.setText(""); 201 jTextField4.setEnabled(false); 202 jTextField4.setName("jTextField4"); // NOI18N 203 204 jTextField5.setText(""); 205 jTextField5.setEnabled(false); 206 jTextField5.setName("jTextField5"); // NOI18N 207 208 jButton1.setText("CALCULAR"); 209 jButton1.setName("jButton1"); // NOI18N 210 jButton1.addActionListener(new java.awt.event.ActionListener () { public void actionPerformed(java.awt.event.ActionEvent 211 evt) { jButton1ActionPerformed(evt); 212 } 213 214 }); José Enrique Cabañas Ceballos 73 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 215 216 jComboBox1.setModel(model1); 217 jComboBox1.setName("jComboBox1"); // NOI18N 218 jComboBox1.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 219 evt) { jComboBox1ActionPerformed(evt); 220 } 221 222 }); 223 224 jCheckBox1.setText("DENSIDAD(kg/m3)"); 225 jCheckBox1.setName("jCheckBox1"); // NOI18N 226 jCheckBox1.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 227 evt) { jCheckBox1ActionPerformed(evt); 228 } 229 230 }); 231 232 jCheckBox2.setText("VISCOSIDAD(m2/s)"); 233 jCheckBox2.setName("jCheckBox2"); // NOI18N 234 jCheckBox2.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 235 evt) { jCheckBox2ActionPerformed(evt); 236 } 237 238 }); 239 240 jCheckBox3.setText("DIÁMETRO TUBERIA(mm)"); José Enrique Cabañas Ceballos 74 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 241 jCheckBox3.setName("jCheckBox3"); // NOI18N 242 jCheckBox3.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 243 evt) { jCheckBox3ActionPerformed(evt); 244 } 245 246 }); 247 248 jCheckBox4.setText("RUGOSIDAD(mm)"); 249 jCheckBox4.setName("jCheckBox4"); // NOI18N 250 jCheckBox4.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 251 evt) { jCheckBox4ActionPerformed(evt); 252 } 253 254 }); 255 256 jCheckBox5.setText("CAUDAL(m3/s)"); 257 jCheckBox5.setName("jCheckBox5"); // NOI18N 258 jCheckBox5.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 259 evt) { jCheckBox5ActionPerformed(evt); 260 } 261 262 }); 263 264 jCheckBox6.setText("REYNOLDS"); 265 jCheckBox6.setName("jCheckBox6"); // NOI18N 266 jCheckBox6.addActionListener(new java.awt.event. José Enrique Cabañas Ceballos 75 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 267 evt) { jCheckBox6ActionPerformed(evt); 268 } 269 270 }); 271 272 jTextField6.setText(""); 273 jTextField6.setEnabled(false); 274 jTextField6.setName("jTextField6"); // NOI18N 275 276 jTextField7.setText(""); 277 jTextField7.setEnabled(false); 278 jTextField7.setName("jTextField7"); // NOI18N 279 280 jLabel2.setText(""); 281 jLabel2.setName("jLabel2"); // NOI18N 282 283 jLabel4.setText("MATERIAL DE LA TUBERIA"); 284 jLabel4.setName("jLabel4"); // NOI18N 285 286 jComboBox2.setModel(model); 287 jComboBox2.setName("jComboBox2"); // NOI18N 288 jComboBox2.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 289 evt) { jComboBox2ActionPerformed(evt); 290 } 291 292 }); 293 294 jCheckBox7.setText("VELOCIDAD (m/s)"); José Enrique Cabañas Ceballos 76 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 295 jCheckBox7.setName("jCheckBox7"); // NOI18N 296 jCheckBox7.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent 297 evt) { jCheckBox7ActionPerformed(evt); 298 } 299 300 }); 301 302 jTextField8.setText(""); 303 jTextField8.setName("jTextField8"); // NOI18N 304 305 jLabel5.setText("f Colebrook"); 306 jLabel5.setName("jLabel5"); // NOI18N 307 308 jLabel6.setText("f explícita"); 309 jLabel6.setName("jLabel6"); // NOI18N 310 311 jTextField9.setText(""); 312 jTextField9.setName("jTextField9"); // NOI18N 313 314 jLabel7.setText(""); 315 jLabel7.setName("jLabel7"); // NOI18N 316 317 jTextField11.setText(""); 318 jTextField11.setName("jTextField11"); // NOI18N 319 320 jTextField12.setText(""); 321 jTextField12.setName("jTextField12"); // NOI18N 322 323 jLabel8.setText("f Prandtl"); 324 jLabel8.setName("jLabel8"); // NOI18N José Enrique Cabañas Ceballos 77 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 325 326 jLabel9.setText("f von Karman-Nikuradse"); 327 jLabel9.setName("jLabel9"); // NOI18N 328 329 jTextField13.setText(""); 330 jTextField13.setName("jTextField13"); // NOI18N 331 332 jLabel10.setText("factor fricción medio"); 333 jLabel10.setName("jLabel10"); // NOI18N 334 335 jLabel12.setText("Pérdida de Carga/metro 336 jLabel12.setName("jLabel12"); // NOI18N (m)"); 337 338 jTextField14.setText(""); 339 jTextField14.setName("jTextField14"); // NOI18N 340 341 javax.swing.GroupLayout mainPanelLayout = new javax.swing. GroupLayout(mainPanel); 342 mainPanel.setLayout(mainPanelLayout); 343 mainPanelLayout.setHorizontalGroup( 344 mainPanelLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.LEADING) 345 .addGroup(mainPanelLayout.createSequentialGroup() 346 .addContainerGap() 347 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.LEADING) 348 .addComponent(jCheckBox7) 349 .addComponent(jCheckBox6) 350 .addGroup(mainPanelLayout.createSequentialGroup () .addGroup(mainPanelLayout. 351 createParallelGroup(javax.swing. José Enrique Cabañas Ceballos 78 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA GroupLayout.Alignment.LEADING) .addGroup(mainPanelLayout. 352 createSequentialGroup() .addGroup(mainPanelLayout. 353 createParallelGroup(javax.swing. GroupLayout.Alignment.TRAILING) .addComponent(jCheckBox1, javax. 354 swing.GroupLayout.Alignment. LEADING) .addComponent(jCheckBox2, javax. 355 swing.GroupLayout.Alignment. LEADING) .addComponent(jCheckBox3, javax. 356 swing.GroupLayout.Alignment. LEADING) .addComponent(jCheckBox4, javax. 357 swing.GroupLayout.Alignment. LEADING) .addComponent(jCheckBox5, javax. 358 swing.GroupLayout.Alignment. LEADING) .addGroup(javax.swing. 359 GroupLayout.Alignment.LEADING , mainPanelLayout. createSequentialGroup() .addComponent(jLabel1, javax 360 .swing.GroupLayout. PREFERRED_SIZE, 71, javax .swing.GroupLayout. PREFERRED_SIZE) 361 .addGap(18, 18, 18) 362 .addComponent(jComboBox1, José Enrique Cabañas Ceballos 79 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA javax.swing.GroupLayout. PREFERRED_SIZE, 136, javax.swing.GroupLayout. PREFERRED_SIZE)) .addComponent(jButton1, javax. 363 swing.GroupLayout.Alignment. LEADING, javax.swing. GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout. PREFERRED_SIZE)) 364 .addGap(18, 18, 18) 365 .addComponent(jLabel4, javax.swing. GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout. PREFERRED_SIZE)) 366 .addComponent(jLabel6) 367 .addComponent(jLabel5) 368 .addComponent(jLabel8, javax.swing. GroupLayout.DEFAULT_SIZE, 397, Short. MAX_VALUE) .addComponent(jLabel9, javax.swing. 369 GroupLayout.DEFAULT_SIZE, 397, Short. MAX_VALUE) .addComponent(jLabel10)) 370 .addPreferredGap(javax.swing.LayoutStyle. 371 ComponentPlacement.RELATED) .addGroup(mainPanelLayout. 372 createParallelGroup(javax.swing. GroupLayout.Alignment.LEADING) .addComponent(jLabel7, javax.swing. 373 GroupLayout.DEFAULT_SIZE, 216, Short. MAX_VALUE) José Enrique Cabañas Ceballos 80 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA .addGroup(mainPanelLayout. 374 createParallelGroup(javax.swing. GroupLayout.Alignment.TRAILING, false ) .addComponent(jTextField13, javax. 375 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField8, javax. 376 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField1, javax. 377 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField2, javax. 378 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField3, javax. 379 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField4, javax. 380 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField5, javax. 381 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField6, javax. 382 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField7, javax. 383 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField9, javax. 384 José Enrique Cabañas Ceballos 81 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField11, javax. 385 swing.GroupLayout.Alignment. LEADING) .addComponent(jTextField12, javax. 386 swing.GroupLayout.Alignment. LEADING) .addComponent(jComboBox2, javax. 387 swing.GroupLayout.Alignment. LEADING, 0, 181, Short.MAX_VALUE) .addComponent(jTextField14, javax. 388 swing.GroupLayout.Alignment. LEADING)))) .addComponent(jLabel2, javax.swing.GroupLayout. 389 PREFERRED_SIZE, 128, javax.swing.GroupLayout. PREFERRED_SIZE) .addComponent(jLabel12)) 390 .addContainerGap()) 391 392 ); 393 mainPanelLayout.setVerticalGroup( 394 mainPanelLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.LEADING) 395 .addGroup(mainPanelLayout.createSequentialGroup() 396 .addContainerGap(javax.swing.GroupLayout. DEFAULT_SIZE, Short.MAX_VALUE) 397 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 398 .addComponent(jLabel1, javax.swing.GroupLayout. PREFERRED_SIZE, 37, javax.swing.GroupLayout. PREFERRED_SIZE) 399 .addComponent(jComboBox1, javax.swing. José Enrique Cabañas Ceballos 82 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA GroupLayout.PREFERRED_SIZE, 26, javax.swing. GroupLayout.PREFERRED_SIZE) 400 .addComponent(jLabel4) 401 .addComponent(jComboBox2, javax.swing. GroupLayout.PREFERRED_SIZE, 29, javax.swing. GroupLayout.PREFERRED_SIZE)) 402 .addGap(24, 24, 24) 403 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 404 .addComponent(jCheckBox1) 405 .addComponent(jTextField1, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 406 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.UNRELATED) 407 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 408 .addComponent(jCheckBox2) 409 .addComponent(jTextField2, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 410 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.UNRELATED) 411 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 412 .addComponent(jCheckBox3) 413 .addComponent(jTextField3, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) José Enrique Cabañas Ceballos 83 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 414 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.UNRELATED) 415 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 416 .addComponent(jCheckBox4) 417 .addComponent(jTextField4, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 418 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.UNRELATED) 419 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 420 .addComponent(jCheckBox5) 421 .addComponent(jTextField5, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 422 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.UNRELATED) 423 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 424 .addComponent(jCheckBox6) 425 .addComponent(jTextField6, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 426 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.UNRELATED) 427 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 428 .addComponent(jCheckBox7) José Enrique Cabañas Ceballos 84 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 429 .addComponent(jTextField7, javax.swing. GroupLayout.PREFERRED_SIZE, 22, javax.swing. GroupLayout.PREFERRED_SIZE)) 430 .addGap(28, 28, 28) 431 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 432 .addComponent(jButton1, javax.swing.GroupLayout. PREFERRED_SIZE, 35, javax.swing.GroupLayout. PREFERRED_SIZE) 433 .addComponent(jLabel7)) 434 .addGap(34, 34, 34) 435 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 436 .addComponent(jLabel5) 437 .addComponent(jTextField8, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 438 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 439 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 440 .addComponent(jLabel6) 441 .addComponent(jTextField9, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 442 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 443 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.LEADING) 444 .addComponent(jTextField11, javax.swing. José Enrique Cabañas Ceballos 85 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE) 445 446 .addComponent(jLabel8)) .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 447 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.LEADING) 448 .addComponent(jTextField12, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE) 449 .addComponent(jLabel9)) 450 .addGap(33, 33, 33) 451 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 452 .addComponent(jTextField13, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE) 453 454 .addComponent(jLabel10)) .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 455 .addGroup(mainPanelLayout.createParallelGroup(javax. swing.GroupLayout.Alignment.BASELINE) 456 .addComponent(jLabel12) 457 .addComponent(jTextField14, javax.swing. GroupLayout.PREFERRED_SIZE, javax.swing. GroupLayout.DEFAULT_SIZE, javax.swing. GroupLayout.PREFERRED_SIZE)) 458 .addGap(18, 18, 18) 459 .addComponent(jLabel2, javax.swing.GroupLayout. José Enrique Cabañas Ceballos 86 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA PREFERRED_SIZE, 28, javax.swing.GroupLayout. PREFERRED_SIZE)) 460 ); 461 462 menuBar.setName("menuBar"); // NOI18N 463 464 org.jdesktop.application.ResourceMap resourceMap = org. jdesktop.application.Application.getInstance( factor_friccion.Factor_friccionApp.class).getContext(). getResourceMap(Factor_friccionView.class); 465 fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N 466 fileMenu.setName("fileMenu"); // NOI18N 467 468 javax.swing.ActionMap actionMap = org.jdesktop.application. Application.getInstance(factor_friccion. Factor_friccionApp.class).getContext().getActionMap( Factor_friccionView.class, this); 469 exitMenuItem.setAction(actionMap.get("quit")); // NOI18N 470 exitMenuItem.setName("exitMenuItem"); // NOI18N 471 fileMenu.add(exitMenuItem); 472 473 menuBar.add(fileMenu); 474 475 helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N 476 helpMenu.setName("helpMenu"); // NOI18N 477 478 aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N 479 aboutMenuItem.setName("aboutMenuItem"); // NOI18N 480 helpMenu.add(aboutMenuItem); José Enrique Cabañas Ceballos 87 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 481 482 menuBar.add(helpMenu); 483 484 statusPanel.setName("statusPanel"); // NOI18N 485 486 statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N 487 488 statusMessageLabel.setName("statusMessageLabel"); // NOI18N 489 490 statusAnimationLabel.setHorizontalAlignment(javax.swing. SwingConstants.LEFT); 491 statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N 492 493 progressBar.setName("progressBar"); // NOI18N 494 495 jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N 496 jLabel3.setName("jLabel3"); // NOI18N 497 498 javax.swing.GroupLayout statusPanelLayout = new javax.swing. GroupLayout(statusPanel); 499 statusPanel.setLayout(statusPanelLayout); 500 statusPanelLayout.setHorizontalGroup( 501 statusPanelLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.LEADING) 502 .addComponent(statusPanelSeparator, javax.swing. GroupLayout.DEFAULT_SIZE, 641, Short.MAX_VALUE) 503 504 .addGroup(statusPanelLayout.createSequentialGroup() .addGroup(statusPanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) José Enrique Cabañas Ceballos 88 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA .addGroup(statusPanelLayout. 505 createSequentialGroup() 506 .addContainerGap() 507 .addComponent(statusMessageLabel)) .addGroup(statusPanelLayout. 508 createSequentialGroup() 509 .addGap(72, 72, 72) 510 .addComponent(jLabel3, javax.swing. GroupLayout.PREFERRED_SIZE, 142, javax. swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle. 511 ComponentPlacement.RELATED, 267, Short.MAX_VALUE) .addComponent(progressBar, javax.swing.GroupLayout. 512 PREFERRED_SIZE, javax.swing.GroupLayout. DEFAULT_SIZE, javax.swing.GroupLayout. PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle. 513 ComponentPlacement.RELATED) 514 .addComponent(statusAnimationLabel) 515 .addContainerGap()) 516 ); 517 statusPanelLayout.setVerticalGroup( 518 statusPanelLayout.createParallelGroup(javax.swing. GroupLayout.Alignment.LEADING) 519 520 .addGroup(statusPanelLayout.createSequentialGroup() .addComponent(statusPanelSeparator, javax.swing. GroupLayout.PREFERRED_SIZE, 2, javax.swing. GroupLayout.PREFERRED_SIZE) 521 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 522 .addGroup(statusPanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.TRAILING) José Enrique Cabañas Ceballos 89 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA .addGroup(statusPanelLayout. 523 createSequentialGroup() .addGroup(statusPanelLayout. 524 createParallelGroup(javax.swing. GroupLayout.Alignment.BASELINE) 525 .addComponent(statusMessageLabel) 526 .addComponent(statusAnimationLabel) 527 .addComponent(progressBar, javax.swing. GroupLayout.PREFERRED_SIZE, javax. swing.GroupLayout.DEFAULT_SIZE, javax .swing.GroupLayout.PREFERRED_SIZE)) .addGap(3, 3, 3)) 528 .addComponent(jLabel3, javax.swing.GroupLayout. 529 DEFAULT_SIZE, 17, Short.MAX_VALUE))) 530 ); 531 532 jPanel1.setName("jPanel1"); // NOI18N 533 534 javax.swing.GroupLayout jPanel1Layout = new javax.swing. GroupLayout(jPanel1); 535 jPanel1.setLayout(jPanel1Layout); 536 jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing. 537 GroupLayout.Alignment.LEADING) .addGap(0, 100, Short.MAX_VALUE) 538 539 ); 540 jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing. 541 GroupLayout.Alignment.LEADING) .addGap(0, 100, Short.MAX_VALUE) 542 543 ); 544 José Enrique Cabañas Ceballos 90 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA jLabel11.setText(resourceMap.getString("jLabel11.text")); // 545 NOI18N jLabel11.setName("jLabel11"); // NOI18N 546 547 jTextField10.setText(resourceMap.getString("jTextField10. 548 text")); // NOI18N jTextField10.setName("jTextField10"); // NOI18N 549 550 551 setComponent(mainPanel); 552 setMenuBar(menuBar); 553 setStatusBar(statusPanel); 554 }// </editor-fold> 555 /** Este método recoge los datos y gestiona las operaciones 556 * llamando a los metodos necesarios para calcular el factor de friccion 557 */ 558 559 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 560 // TODO add your handling code here: 561 double D,e,vis,vel,Re,q,vel1,vel2,Re1,Re2,D1,D2,Den; 562 D=0; 563 e=0; 564 Re=0; 565 vel=0; 566 vis=0; 567 q=0; 568 if(jCheckBox1.isSelected()) 569 { Den = 570 Double.parseDouble(jTextField1.getText()); 571 } 572 if(jCheckBox2.isSelected()) José Enrique Cabañas Ceballos 91 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 573 { 574 vis = Double.parseDouble(jTextField2.getText()); 575 if(jCheckBox3.isSelected()) 576 { 577 D = Double.parseDouble(jTextField3.getText()); 578 if(jCheckBox4.isSelected()) 579 { 580 e = Double.parseDouble(jTextField4.getText()); 581 if(jCheckBox5.isSelected()) 582 { q = 583 Double.parseDouble(jTextField5.getText ()); 584 if (jCheckBox6.isSelected()) 585 { Re = Double.parseDouble(jTextField6. 586 getText()); 587 if (jCheckBox7.isSelected()) 588 { vel = Double.parseDouble(jTextField7 589 .getText()); 590 vel1=calculos.getVelocidad(q,D); 591 vel2=calculos.getVel(Re,D,vis); 592 if(vel1!=vel2) 593 { jLabel7.setText("problemas de 594 compatibilidad!!! necesario desmarcar alguna variable"); } 595 596 } 597 else 598 { vel1=calculos.getVelocidad(q,D); 599 José Enrique Cabañas Ceballos 92 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 600 vel2=calculos.getVel(Re,D,vis); 601 if(vel1!=vel2) 602 { jLabel7.setText("sistema 603 incompatible desmarca alguna variable"); 604 jTextField7.setText(""+vel1); 605 vel = Double.parseDouble( jTextField7.getText()); } 606 } 607 608 } 609 else 610 { 611 if (jCheckBox7.isSelected()) 612 { vel = Double.parseDouble(jTextField7 613 .getText()); vel1 = Double.parseDouble( 614 jTextField7.getText()); vel2=calculos.getVelocidad(q,D); 615 if(vel1!=vel2) 616 { 617 jLabel7.setText("sistema 618 incompatible desmarca alguna variable"); jTextField7.setText(""+vel1); 619 620 621 } 622 Re=calculos.getReynolds(D, vel, vis) ; jTextField6.setText(""+Re); 623 José Enrique Cabañas Ceballos 93 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 624 } 625 else 626 { 627 vel=calculos.getVelocidad(q,D); 628 jTextField7.setText(""+vel); 629 Re=calculos.getReynolds(D, vel, vis) ; jTextField6.setText(""+Re); 630 } 631 } 632 633 } 634 else 635 { 636 if (jCheckBox6.isSelected()) 637 { Re = Double.parseDouble(jTextField6. 638 getText()); 639 if (jCheckBox7.isSelected()) 640 { vel = Double.parseDouble(jTextField7 641 .getText()); Re1=calculos.getReynolds(D, vel, vis 642 ); 643 if(Re!=Re1) 644 { jLabel7.setText("problemas de 645 compatibilidad desmarca alguna variable"); 646 } 647 q=calculos.getCaudal(D, vel); 648 jTextField5.setText(""+q); } 649 José Enrique Cabañas Ceballos 94 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 650 else 651 { 652 vel=calculos.getVel(Re,D,vis); 653 jTextField7.setText(""+vel); 654 q=calculos.getCaudal(D,vel); 655 jTextField5.setText(""+q); } 656 657 } 658 else 659 { 660 if (jCheckBox7.isSelected()) 661 { vel = Double.parseDouble(jTextField7 662 .getText()); 663 q=calculos.getCaudal(D, vel); 664 jTextField5.setText(""+q); 665 Re=calculos.getReynolds(D, vel, vis) ; jTextField6.setText(""+Re); 666 667 } 668 else 669 { 670 jLabel7.setText("datos insuficientes 671 "); } 672 } 673 } 674 675 } 676 else 677 { 678 if(jCheckBox5.isSelected()) José Enrique Cabañas Ceballos 95 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 679 { 680 q = Double.parseDouble(jTextField5.getText ()); 681 if (jCheckBox6.isSelected()) 682 { Re = Double.parseDouble(jTextField6. 683 getText()); 684 if (jCheckBox7.isSelected()) 685 { vel = Double.parseDouble(jTextField7 686 .getText()); jLabel7.setText("necesario dato 687 rugosidad"); 688 } 689 else 690 { jLabel7.setText("necesario dato 691 rugosidad"); } 692 693 } 694 else 695 { 696 if (jCheckBox7.isSelected()) 697 { vel = Double.parseDouble(jTextField7 698 .getText()); jLabel7.setText("necesario dato 699 rugosidad"); 700 } 701 else 702 { jLabel7.setText("necesario dato 703 José Enrique Cabañas Ceballos 96 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA rugosidad"); } 704 } 705 706 } 707 else 708 { 709 if (jCheckBox6.isSelected()) 710 { Re = Double.parseDouble(jTextField6. 711 getText()); 712 if (jCheckBox7.isSelected()) 713 { vel = Double.parseDouble(jTextField7 714 .getText()); jLabel7.setText("necesario dato 715 rugosidad"); 716 } 717 else 718 { jLabel7.setText("necesario dato 719 rugosidad"); } 720 721 } 722 else 723 { 724 if (jCheckBox7.isSelected()) 725 { vel = Double.parseDouble(jTextField7 726 .getText()); jLabel7.setText("necesario dato 727 rugosidad"); } 728 José Enrique Cabañas Ceballos 97 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 729 else 730 { jLabel7.setText("necesario dato 731 rugosidad"); } 732 } 733 } 734 } 735 736 } 737 else 738 { 739 if(jCheckBox4.isSelected()) 740 { 741 e = Double.parseDouble(jTextField4.getText()); 742 if(jCheckBox5.isSelected()) 743 { q = 744 Double.parseDouble(jTextField5.getText ()); 745 if (jCheckBox6.isSelected()) 746 { Re = Double.parseDouble(jTextField6. 747 getText()); 748 if (jCheckBox7.isSelected()) 749 { vel = Double.parseDouble(jTextField7 750 .getText()); 751 D1=calculos.getD(Re, vis, vel); 752 D2=calculos.getD(q, vel); 753 if(D1!=D2){ jLabel7.setText("problemas de 754 compatibilidad!!! desmarca alguna variable"); José Enrique Cabañas Ceballos 98 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 755 } 756 D=D2; 757 jTextField3.setText(""+D); 758 759 } 760 else 761 { 762 D=calculos.getD1(Re, vis, q); 763 jTextField3.setText(""+D); 764 vel=calculos.getVelocidad(q, D); 765 jTextField7.setText(""+vel); } 766 767 } 768 else 769 { 770 if (jCheckBox7.isSelected()) 771 { vel = Double.parseDouble(jTextField7 772 .getText()); 773 D=calculos.getD(q, vel); 774 jTextField3.setText(""+D); 775 Re=calculos.getReynolds(D,vel,vis); 776 jTextField6.setText(""+Re); 777 } 778 else 779 { jLabel7.setText("datos insuficientes 780 "); } 781 } 782 783 } 784 else José Enrique Cabañas Ceballos 99 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 785 { 786 if (jCheckBox6.isSelected()) 787 { Re = Double.parseDouble(jTextField6. 788 getText()); 789 if (jCheckBox7.isSelected()) 790 { vel = Double.parseDouble(jTextField7 791 .getText()); 792 D=calculos.getD(Re,vel,vis); 793 jTextField3.setText(""+D); 794 q=calculos.getCaudal(D, vel); 795 jTextField5.setText(""+q); 796 } 797 else 798 { jLabel7.setText("datos insuficientes 799 "); } 800 801 } 802 else 803 { 804 if (jCheckBox7.isSelected()) 805 { vel = Double.parseDouble(jTextField7 806 .getText()); jLabel7.setText("datos insuficientes 807 "); 808 } 809 else 810 { jLabel7.setText("datos insuficientes 811 José Enrique Cabañas Ceballos 100 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA "); } 812 } 813 } 814 815 } 816 else 817 { 818 if(jCheckBox5.isSelected()) 819 { 820 q = Double.parseDouble(jTextField5.getText ()); 821 if (jCheckBox6.isSelected()) 822 { Re = Double.parseDouble(jTextField6. 823 getText()); 824 if (jCheckBox7.isSelected()) 825 { vel = Double.parseDouble(jTextField7 826 .getText()); jLabel7.setText("necesario dato 827 rugosidad"); 828 } 829 else 830 { jLabel7.setText("necesario dato 831 rugosidad"); } 832 833 } 834 else 835 { 836 if (jCheckBox7.isSelected()) 837 { José Enrique Cabañas Ceballos 101 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA vel = Double.parseDouble(jTextField7 838 .getText()); jLabel7.setText("necesario dato 839 rugosidad"); 840 } 841 else 842 { jLabel7.setText("necesario dato 843 rugosidad"); } 844 } 845 846 } 847 else 848 { 849 if (jCheckBox6.isSelected()) 850 { Re = Double.parseDouble(jTextField6. 851 getText()); 852 if (jCheckBox7.isSelected()) 853 { vel = Double.parseDouble(jTextField7 854 .getText()); jLabel7.setText("necesario dato 855 rugosidad"); 856 } 857 else 858 { jLabel7.setText("necesario dato 859 rugosidad"); } 860 861 } 862 else José Enrique Cabañas Ceballos 102 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA { 863 864 if (jCheckBox7.isSelected()) 865 { vel = Double.parseDouble(jTextField7 866 .getText()); jLabel7.setText("necesario dato 867 rugosidad"); 868 } 869 else 870 { jLabel7.setText("necesario dato 871 rugosidad"); } 872 } 873 } 874 } 875 } 876 877 } 878 else 879 { 880 881 if(jCheckBox3.isSelected()) { 882 D = Double.parseDouble(jTextField3.getText()); 883 if(jCheckBox4.isSelected()) 884 { 885 e = Double.parseDouble(jTextField4.getText()); 886 if(jCheckBox5.isSelected()) 887 { q = 888 Double.parseDouble(jTextField5.getText ()); 889 if (jCheckBox6.isSelected()) 890 { José Enrique Cabañas Ceballos 103 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA Re = Double.parseDouble(jTextField6. 891 getText()); 892 if (jCheckBox7.isSelected()) 893 { vel = Double.parseDouble(jTextField7 894 .getText()); 895 vel1=calculos.getVelocidad(q, D); 896 if(vel!=vel1){ jLabel7.setText("problemas de 897 compatibilidad!!! desmarca alguna variable"); 898 } 899 vis=calculos.getViscosidad(Re,D,vel) ; jTextField2.setText(""+vis); 900 901 } 902 else 903 { 904 vel=calculos.getVelocidad(q, D); 905 jTextField7.setText(""+vel); 906 vis=calculos.getViscosidad(Re, D, vel); jTextField2.setText(""+vis); 907 908 } 909 910 } 911 else 912 { 913 if (jCheckBox7.isSelected()) 914 { vel = Double.parseDouble(jTextField7 915 .getText()); José Enrique Cabañas Ceballos 104 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA jLabel7.setText("datos infuficientes 916 "); 917 } 918 else 919 { jLabel7.setText("datos insuficientes" 920 ); } 921 } 922 923 } 924 else 925 { 926 if (jCheckBox6.isSelected()) 927 { Re = Double.parseDouble(jTextField6. 928 getText()); 929 if (jCheckBox7.isSelected()) 930 { vel = Double.parseDouble(jTextField7 931 .getText()); 932 q=calculos.getCaudal(D, vel); 933 jTextField5.setText(""+q); 934 vis=calculos.getViscosidad(Re, D, vel); jTextField2.setText(""+vis); 935 936 } 937 else 938 { jLabel7.setText("datos insuficientes 939 "); } 940 } 941 José Enrique Cabañas Ceballos 105 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 942 else 943 { 944 if (jCheckBox7.isSelected()) 945 { vel = Double.parseDouble(jTextField7 946 .getText()); jLabel7.setText("datos insuficientes 947 "); 948 } 949 else 950 { jLabel7.setText("datos insuficientes 951 "); } 952 } 953 } 954 955 } 956 else 957 { 958 if(jCheckBox5.isSelected()) 959 { 960 q = Double.parseDouble(jTextField5.getText ()); 961 if (jCheckBox6.isSelected()) 962 { Re = Double.parseDouble(jTextField6. 963 getText()); 964 if (jCheckBox7.isSelected()) 965 { vel = Double.parseDouble(jTextField7 966 .getText()); jLabel7.setText("necesario dato 967 José Enrique Cabañas Ceballos 106 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA rugosidad"); 968 } 969 else 970 { jLabel7.setText("necesario dato 971 rugosidad"); } 972 973 } 974 else 975 { 976 if (jCheckBox7.isSelected()) 977 { vel = Double.parseDouble(jTextField7 978 .getText()); jLabel7.setText("necesario dato 979 rugosidad"); 980 } 981 else 982 { jLabel7.setText("necesario dato 983 rugosidad"); } 984 } 985 986 } 987 else 988 { 989 if (jCheckBox6.isSelected()) 990 { Re = Double.parseDouble(jTextField6. 991 getText()); 992 if (jCheckBox7.isSelected()) 993 { José Enrique Cabañas Ceballos 107 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA vel = Double.parseDouble(jTextField7 994 .getText()); jLabel7.setText("necesario dato 995 rugosidad"); 996 } 997 else 998 { jLabel7.setText("necesario dato 999 rugosidad"); } 1000 1001 } 1002 else 1003 { 1004 if (jCheckBox7.isSelected()) 1005 { vel = Double.parseDouble(jTextField7 1006 .getText()); jLabel7.setText("necesario dato 1007 rugosidad"); 1008 } 1009 else 1010 { jLabel7.setText("necesario dato 1011 rugosidad"); } 1012 } 1013 } 1014 } 1015 1016 } 1017 else 1018 { 1019 if(jCheckBox4.isSelected()) José Enrique Cabañas Ceballos 108 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 1020 { 1021 e = Double.parseDouble(jTextField4.getText()); 1022 if(jCheckBox5.isSelected()) 1023 { q = 1024 Double.parseDouble(jTextField5.getText ()); 1025 if (jCheckBox6.isSelected()) 1026 { Re = Double.parseDouble(jTextField6. 1027 getText()); 1028 if (jCheckBox7.isSelected()) 1029 { vel = Double.parseDouble(jTextField7 1030 .getText()); 1031 D=calculos.getD(q, vel); 1032 jTextField3.setText(""+D); 1033 vis=calculos.getViscosidad(Re, D, vel); jTextField2.setText(""+vis); 1034 1035 } 1036 else 1037 { jLabel7.setText("datos insuficientes 1038 "); } 1039 1040 } 1041 else 1042 { 1043 if (jCheckBox7.isSelected()) 1044 { vel = Double.parseDouble(jTextField7 1045 .getText()); José Enrique Cabañas Ceballos 109 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA jLabel7.setText("datos insuficientes 1046 "); 1047 } 1048 else 1049 { jLabel7.setText("datos insuficientes 1050 "); } 1051 } 1052 1053 } 1054 else 1055 { 1056 if (jCheckBox6.isSelected()) 1057 { Re = Double.parseDouble(jTextField6. 1058 getText()); 1059 if (jCheckBox7.isSelected()) 1060 { vel = Double.parseDouble(jTextField7 1061 .getText()); jLabel7.setText("datos insuficientes 1062 "); 1063 } 1064 else 1065 { jLabel7.setText("datos insuficientes 1066 "); } 1067 1068 } 1069 else 1070 { if (jCheckBox7.isSelected()) 1071 José Enrique Cabañas Ceballos 110 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA { 1072 vel = Double.parseDouble(jTextField7 1073 .getText()); jLabel7.setText("datos insuficientes 1074 "); 1075 } 1076 else 1077 { jLabel7.setText("datos insuficientes 1078 "); } 1079 } 1080 } 1081 1082 } 1083 else 1084 { 1085 if(jCheckBox5.isSelected()) 1086 { 1087 q = Double.parseDouble(jTextField5.getText ()); 1088 if (jCheckBox6.isSelected()) 1089 { Re = Double.parseDouble(jTextField6. 1090 getText()); 1091 if (jCheckBox7.isSelected()) 1092 { vel = Double.parseDouble(jTextField7 1093 .getText()); jLabel7.setText("necesario dato 1094 rugosidad"); 1095 } 1096 else José Enrique Cabañas Ceballos 111 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA { 1097 jLabel7.setText("necesario dato 1098 rugosidad"); } 1099 1100 } 1101 else 1102 { 1103 if (jCheckBox7.isSelected()) 1104 { vel = Double.parseDouble(jTextField7 1105 .getText()); jLabel7.setText("necesario dato 1106 rugosidad"); 1107 } 1108 else 1109 { jLabel7.setText("necesario dato 1110 rugosidad"); } 1111 } 1112 1113 } 1114 else 1115 { 1116 if (jCheckBox6.isSelected()) 1117 { Re = Double.parseDouble(jTextField6. 1118 getText()); 1119 if (jCheckBox7.isSelected()) 1120 { vel = Double.parseDouble(jTextField7 1121 .getText()); jLabel7.setText("necesario dato 1122 José Enrique Cabañas Ceballos 112 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA rugosidad"); 1123 } 1124 else 1125 { jLabel7.setText("necesario dato 1126 rugosidad"); } 1127 1128 } 1129 else 1130 { 1131 if (jCheckBox7.isSelected()) 1132 { vel = Double.parseDouble(jTextField7 1133 .getText()); jLabel7.setText("necesario dato 1134 rugosidad"); 1135 } 1136 else 1137 { jLabel7.setText("necesario dato 1138 rugosidad"); } 1139 } 1140 } 1141 } 1142 } 1143 1144 1145 } if(D!=0&&e!=0&&vel!=0&&q!=0&&Re!=0&&vis!=0){ 1146 double f=calculos.getFactor(Re, D, e);//colebrook 1147 double s=calculos.getFactor1(Re, D, e);//explicita 1148 //double g=Fluido.getFactor2(Re, D, e);//explicita arabe 1149 double k=calculos.getFactor3(Re);//prandtl José Enrique Cabañas Ceballos 113 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 1150 double h=calculos.getFactor4(D,e,Re);//Karman-Nikuradse 1151 double m=calculos.getMedia(f,s,k,Re,D);//Media de los factores de fricción 1152 double PC=calculos.getPC(D, vel, m); 1153 jTextField14.setText(""+formateador.format(PC)); 1154 jTextField8.setText(""+formateador.format(f)); 1155 jTextField9.setText(""+formateador.format(s)); 1156 jTextField11.setText(""+formateador.format(k)); 1157 jTextField12.setText(""+formateador.format(h)); 1158 jTextField13.setText(""+formateador.format(m)); 1159 jLabel7.setText("PARÁMETROS CALCULADOS CORRECTAMENTE"); } 1160 1161 } 1162 1163 private void jComboBox1ActionPerformed(java.awt.event. ActionEvent evt) { 1164 // TODO add your handling code here: 1165 int i = jComboBox1.getSelectedIndex(); 1166 try { 1167 jTextField1.setText(Den[i]); 1168 jTextField2.setText(Vis[i]); 1169 } 1170 catch(ArrayIndexOutOfBoundsException e) { jLabel7.setText("Dicho fluido no existe"); 1171 } 1172 1173 } 1174 1175 private void jCheckBox1ActionPerformed(java.awt.event. ActionEvent evt) { 1176 // TODO add your handling code here: 1177 jTextField1.setEnabled(jCheckBox1.isSelected()); 1178 } José Enrique Cabañas Ceballos 114 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 1179 1180 private void jCheckBox2ActionPerformed(java.awt.event. ActionEvent evt) { 1181 // TODO add your handling code here: 1182 jTextField2.setEnabled(jCheckBox2.isSelected()); 1183 } 1184 1185 private void jCheckBox3ActionPerformed(java.awt.event. ActionEvent evt) { 1186 // TODO add your handling code here: 1187 jTextField3.setEnabled(jCheckBox3.isSelected()); 1188 } 1189 1190 private void jCheckBox4ActionPerformed(java.awt.event. ActionEvent evt) { 1191 // TODO add your handling code here: 1192 jTextField4.setEnabled(jCheckBox4.isSelected()); 1193 } 1194 1195 private void jCheckBox5ActionPerformed(java.awt.event. ActionEvent evt) { 1196 // TODO add your handling code here: 1197 jTextField5.setEnabled(jCheckBox5.isSelected()); 1198 } 1199 1200 private void jCheckBox6ActionPerformed(java.awt.event. ActionEvent evt) { 1201 // TODO add your handling code here: 1202 jTextField6.setEnabled(jCheckBox6.isSelected()); 1203 } 1204 1205 private void jComboBox2ActionPerformed(java.awt.event. José Enrique Cabañas Ceballos 115 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA ActionEvent evt) { 1206 // TODO add your handling code here: 1207 int i = jComboBox2.getSelectedIndex(); 1208 try { jTextField4.setText(Rug[i]); 1209 } 1210 catch(ArrayIndexOutOfBoundsException e) { 1211 jLabel7.setText("Dicho material no existe"); 1212 } 1213 1214 } 1215 1216 private void jCheckBox7ActionPerformed(java.awt.event. ActionEvent evt) { 1217 // TODO add your handling code hre: 1218 jTextField7.setEnabled(jCheckBox7.isSelected()); 1219 } 1220 1221 // Variables declaration - do not modify 1222 private javax.swing.JButton jButton1; 1223 private javax.swing.JCheckBox jCheckBox1; 1224 private javax.swing.JCheckBox jCheckBox2; 1225 private javax.swing.JCheckBox jCheckBox3; 1226 private javax.swing.JCheckBox jCheckBox4; 1227 private javax.swing.JCheckBox jCheckBox5; 1228 private javax.swing.JCheckBox jCheckBox6; 1229 private javax.swing.JCheckBox jCheckBox7; 1230 private javax.swing.JComboBox jComboBox1; 1231 private javax.swing.JComboBox jComboBox2; 1232 private javax.swing.JLabel jLabel1; 1233 private javax.swing.JLabel jLabel10; 1234 private javax.swing.JLabel jLabel11; 1235 private javax.swing.JLabel jLabel12; José Enrique Cabañas Ceballos 116 B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA 1236 private javax.swing.JLabel jLabel2; 1237 private javax.swing.JLabel jLabel3; 1238 private javax.swing.JLabel jLabel4; 1239 private javax.swing.JLabel jLabel5; 1240 private javax.swing.JLabel jLabel6; 1241 private javax.swing.JLabel jLabel7; 1242 private javax.swing.JLabel jLabel8; 1243 private javax.swing.JLabel jLabel9; 1244 private javax.swing.JPanel jPanel1; 1245 private javax.swing.JTextField jTextField1; 1246 private javax.swing.JTextField jTextField10; 1247 private javax.swing.JTextField jTextField11; 1248 private javax.swing.JTextField jTextField12; 1249 private javax.swing.JTextField jTextField13; 1250 private javax.swing.JTextField jTextField14; 1251 private javax.swing.JTextField jTextField2; 1252 private javax.swing.JTextField jTextField3; 1253 private javax.swing.JTextField jTextField4; 1254 private javax.swing.JTextField jTextField5; 1255 private javax.swing.JTextField jTextField6; 1256 private javax.swing.JTextField jTextField7; 1257 private javax.swing.JTextField jTextField8; 1258 private javax.swing.JTextField jTextField9; 1259 private javax.swing.JPanel mainPanel; 1260 private javax.swing.JMenuBar menuBar; 1261 private javax.swing.JProgressBar progressBar; 1262 private javax.swing.JLabel statusAnimationLabel; 1263 private javax.swing.JLabel statusMessageLabel; 1264 private javax.swing.JPanel statusPanel; 1265 // End of variables declaration 1266 private final Timer messageTimer; 1267 private final Timer busyIconTimer; José Enrique Cabañas Ceballos 117 B.6. FACTOR_FRICCIONAPP.JAVA 1268 private final Icon idleIcon; 1269 private final Icon[] busyIcons = new Icon[15]; 1270 private int busyIconIndex = 0; 1271 private JDialog aboutBox; 1272 } B.6. 1 Factor_friccionApp.java /* 2 * Factor_friccionApp.java 3 */ 4 5 package factor_friccion; 6 7 import org.jdesktop.application.Application; 8 import org.jdesktop.application.SingleFrameApplication; 9 10 /** 11 * The main class of the application. 12 */ 13 public class Factor_friccionApp extends SingleFrameApplication { 14 15 /** 16 * At startup create and show the main frame of the application. 17 */ 18 @Override protected void startup() { show(new Factor_friccionView(this)); 19 20 } 21 22 /** José Enrique Cabañas Ceballos 118 B.7. FACTOR_FRICCIONABOUTBOX.JAVA * This method is to initialize the specified window by 23 injecting resources. * Windows shown in our application come fully initialized from 24 the GUI 25 * builder, so this additional configuration is not needed. 26 */ 27 @Override protected void configureWindow(java.awt.Window root) { 28 } 29 /** 30 31 * A convenient static getter for the application instance. 32 * @return the instance of Factor_friccionApp 33 */ public static Factor_friccionApp getApplication() { 34 return Application.getInstance(Factor_friccionApp.class); 35 } 36 37 /** 38 39 * Main method launching the application. 40 */ public static void main(String[] args) { 41 launch(Factor_friccionApp.class, args); 42 } 43 44 } B.7. 1 Factor_friccionAboutBox.java /* 2 * Factor_friccionAboutBox.java 3 */ José Enrique Cabañas Ceballos 119 B.7. FACTOR_FRICCIONABOUTBOX.JAVA 4 5 package factor_friccion; 6 7 import org.jdesktop.application.Action; 8 9 public class Factor_friccionAboutBox extends javax.swing.JDialog { 10 11 public Factor_friccionAboutBox(java.awt.Frame parent) { 12 super(parent); 13 initComponents(); 14 getRootPane().setDefaultButton(closeButton); 15 } 16 17 @Action public void closeAboutBox() { dispose(); 18 19 } 20 21 /** This method is called from within the constructor to 22 * initialize the form. 23 * WARNING: Do NOT modify this code. The content of this method is 24 * always regenerated by the Form Editor. 25 */ 26 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 27 private void initComponents() { 28 29 closeButton = new javax.swing.JButton(); 30 javax.swing.JLabel appTitleLabel = new javax.swing.JLabel(); 31 javax.swing.JLabel versionLabel = new javax.swing.JLabel(); 32 javax.swing.JLabel appVersionLabel = new javax.swing.JLabel (); 33 javax.swing.JLabel vendorLabel = new javax.swing.JLabel(); José Enrique Cabañas Ceballos 120 B.7. FACTOR_FRICCIONABOUTBOX.JAVA 34 javax.swing.JLabel appVendorLabel = new javax.swing.JLabel() ; 35 javax.swing.JLabel appDescLabel = new javax.swing.JLabel(); 36 javax.swing.JLabel imageLabel = new javax.swing.JLabel(); 37 javax.swing.JLabel vendorLabel1 = new javax.swing.JLabel(); 38 javax.swing.JLabel appVendorLabel1 = new javax.swing.JLabel (); 39 40 setDefaultCloseOperation(javax.swing.WindowConstants. DISPOSE_ON_CLOSE); 41 setTitle("CALCULAR FACTOR DE FRICCIÓN Y PÉRDIDA DE CARGA"); 42 setModal(true); 43 setName("aboutBox"); // NOI18N 44 setResizable(false); 45 46 javax.swing.ActionMap actionMap = org.jdesktop.application. Application.getInstance(factor_friccion. Factor_friccionApp.class).getContext().getActionMap( Factor_friccionAboutBox.class, this); 47 closeButton.setAction(actionMap.get("closeAboutBox")); // NOI18N 48 closeButton.setName("closeButton"); // NOI18N 49 50 appTitleLabel.setFont(appTitleLabel.getFont().deriveFont( appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD, appTitleLabel.getFont().getSize()+4)); 51 appTitleLabel.setText("CALCULAR FACTOR DE FRICCIÓN EN TUBERÍAS"); 52 appTitleLabel.setName("appTitleLabel"); // NOI18N 53 54 versionLabel.setFont(versionLabel.getFont().deriveFont( versionLabel.getFont().getStyle() | java.awt.Font.BOLD)); José Enrique Cabañas Ceballos 121 B.7. FACTOR_FRICCIONABOUTBOX.JAVA 55 org.jdesktop.application.ResourceMap resourceMap = org. jdesktop.application.Application.getInstance( factor_friccion.Factor_friccionApp.class).getContext(). getResourceMap(Factor_friccionAboutBox.class); 56 versionLabel.setText(resourceMap.getString("versionLabel. text")); // NOI18N 57 versionLabel.setName("versionLabel"); // NOI18N 58 59 appVersionLabel.setText(" 1.1 "); 60 appVersionLabel.setName("appVersionLabel"); // NOI18N 61 62 vendorLabel.setFont(vendorLabel.getFont().deriveFont( vendorLabel.getFont().getStyle() | java.awt.Font.BOLD)); 63 vendorLabel.setText("Autor"); 64 vendorLabel.setName("vendorLabel"); // NOI18N 65 66 appVendorLabel.setText("José Enrique Cabañas Ceballos"); 67 appVendorLabel.setName("appVendorLabel"); // NOI18N 68 69 appDescLabel.setText("A simple Java desktop application based on Swing Application Framework."); 70 appDescLabel.setName("appDescLabel"); // NOI18N 71 72 imageLabel.setIcon(resourceMap.getIcon("imageLabel.icon")); // NOI18N 73 imageLabel.setName("imageLabel"); // NOI18N 74 75 vendorLabel1.setFont(vendorLabel1.getFont().deriveFont( vendorLabel1.getFont().getStyle() | java.awt.Font.BOLD)); 76 vendorLabel1.setText("Fecha última modidicación"); 77 vendorLabel1.setName("vendorLabel1"); // NOI18N 78 José Enrique Cabañas Ceballos 122 B.7. FACTOR_FRICCIONABOUTBOX.JAVA 79 appVendorLabel1.setText("08/03/2010"); 80 appVendorLabel1.setName("appVendorLabel1"); // NOI18N 81 82 javax.swing.GroupLayout layout = new javax.swing.GroupLayout (getContentPane()); 83 getContentPane().setLayout(layout); 84 layout.setHorizontalGroup( 85 layout.createParallelGroup(javax.swing.GroupLayout. Alignment.LEADING) 86 .addGroup(layout.createSequentialGroup() 87 .addComponent(imageLabel) 88 .addGap(18, 18, 18) 89 .addGroup(layout.createParallelGroup(javax.swing. GroupLayout.Alignment.LEADING) 90 .addComponent(appTitleLabel) 91 .addComponent(appDescLabel, javax.swing. GroupLayout.DEFAULT_SIZE, 280, Short. MAX_VALUE) 92 .addComponent(closeButton, javax.swing. GroupLayout.Alignment.TRAILING) 93 .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax. 94 swing.GroupLayout.Alignment.LEADING) 95 .addComponent(versionLabel) 96 .addComponent(vendorLabel) 97 .addComponent(vendorLabel1)) .addPreferredGap(javax.swing.LayoutStyle. 98 ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax. 99 swing.GroupLayout.Alignment.LEADING) 100 .addComponent(appVendorLabel1) 101 .addComponent(appVersionLabel) José Enrique Cabañas Ceballos 123 B.7. FACTOR_FRICCIONABOUTBOX.JAVA .addComponent(appVendorLabel)) 102 .addGap(110, 110, 110))) 103 .addContainerGap()) 104 105 ); 106 layout.setVerticalGroup( 107 layout.createParallelGroup(javax.swing.GroupLayout. Alignment.LEADING) 108 .addComponent(imageLabel, javax.swing.GroupLayout. PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 109 .addGroup(layout.createSequentialGroup() 110 .addContainerGap() 111 .addComponent(appTitleLabel) 112 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 113 .addComponent(appDescLabel) 114 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 115 .addGroup(layout.createParallelGroup(javax.swing. GroupLayout.Alignment.BASELINE) 116 .addComponent(versionLabel) 117 .addComponent(appVersionLabel)) 118 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 119 .addGroup(layout.createParallelGroup(javax.swing. GroupLayout.Alignment.BASELINE) 120 .addComponent(vendorLabel) 121 .addComponent(appVendorLabel)) 122 .addPreferredGap(javax.swing.LayoutStyle. ComponentPlacement.RELATED) 123 .addGroup(layout.createParallelGroup(javax.swing. GroupLayout.Alignment.BASELINE) José Enrique Cabañas Ceballos 124 B.7. FACTOR_FRICCIONABOUTBOX.JAVA 124 .addComponent(vendorLabel1) 125 .addComponent(appVendorLabel1)) .addPreferredGap(javax.swing.LayoutStyle. 126 ComponentPlacement.RELATED, 33, Short.MAX_VALUE) 127 .addComponent(closeButton) 128 .addContainerGap()) ); 129 130 pack(); 131 }// </editor-fold> 132 133 134 // Variables declaration - do not modify 135 private javax.swing.JButton closeButton; 136 // End of variables declaration 137 138 } José Enrique Cabañas Ceballos 125 ANEXO C. CÁLCULOS MEDIANTE MATLAB Anexo C CÁLCULOS MEDIANTE MATLAB En este apéndice se exponen los programas de Matlab utilizados para la modelización de las ecuaciones, representacion gráfica y cálculo de los parámetros del flujo: C.1. 1 Tratamiento de los datos experimentales. %declaracion de constantes: 2 3 diametro=13.6e-3; %metros 4 volumen=15; %litros 5 longitud=0.915; %metros 6 viscosidad=1e-6; %m^2/s 7 area=3.1415926*(diametro/2)^2; %m^2 8 areamm=3.1415926*(diametro*1000/2)^2; %mm^2 9 10 %definicion de los vectores de los tiempos medidos, y caidas de presion y caudal 11 %calculo de la media y el error cometido(error cuadratico medio, desviacion tipica): José Enrique Cabañas Ceballos 126 C.1. TRATAMIENTO DE LOS DATOS... 12 13 tiempo1=[49.88, 49.43, 49.08, 49.25, 49.13, 49.7, 49.43, 49.63, 49.55, 49.67, 50.58, 50.13, 50.18, 49.91]; 14 tmedio1=sum(tiempo1)/length(tiempo1); 15 caudal1=volumen./tiempo1; 16 cmedio1=sum(caudal1)/length(caudal1); 17 p1a=[525,525,525,525,525,525,525,525,525,525,530,530,530,530]; 18 p1b=[140,140,145,145,145,145,145,145,145,145,150,150,150,150]; 19 AP1=p1a-p1b; 20 P1=sum(AP1)/length(AP1); 21 for i=1:length(caudal1) Z1(i)=(caudal1(i)-cmedio1)^2; 22 23 end 24 ecmc1=sqrt(sum(Z1)/length(caudal1)); 25 for i=1:length(AP1) C1(i)=(AP1(i)-P1)^2; 26 27 end 28 emcpc1=sqrt(sum(C1)/length(AP1)); 29 epc1=std(AP1); 30 e1=std(tiempo1); 31 32 tiempo2=[53, 52.89, 52.78, 52.95, 53.13]; 33 tmedio2=sum(tiempo2)/length(tiempo2); 34 caudal2=volumen./tiempo2; 35 cmedio2=sum(caudal2)/length(caudal2); 36 p2a=[525,525,525,525,530]; 37 p2b=[185,185,185,185,185]; 38 AP2=p2a-p2b; 39 P2=sum(AP2)/length(AP2); 40 for i=1:length(caudal2) Z2(i)=(caudal2(i)-cmedio2)^2; 41 42 end José Enrique Cabañas Ceballos 127 C.1. TRATAMIENTO DE LOS DATOS... 43 ecmc2=sqrt(sum(Z2)/length(caudal2)); 44 for i=1:length(AP2) C2(i)=(AP2(i)-P2)^2; 45 46 end 47 emcpc2=sqrt(sum(C2)/length(AP2)); 48 epc2=std(AP2); 49 e2=std(tiempo2); 50 51 tiempo3=[57.25, 56.7, 56.98, 57.05, 57.13]; 52 tmedio3=sum(tiempo3)/length(tiempo3); 53 caudal3=volumen./tiempo3; 54 cmedio3=sum(caudal3)/length(caudal3); 55 p3a=[520,520,520,520,525]; 56 p3b=[220,220,220,220,220]; 57 AP3=p3a-p3b; 58 P3=sum(AP3)/length(AP3); 59 for i=1:length(caudal3) Z3(i)=(caudal3(i)-cmedio3)^2; 60 61 end 62 ecmc3=sqrt(sum(Z3)/length(caudal3)); 63 for i=1:length(AP3) C3(i)=(AP3(i)-P3)^2; 64 65 end 66 emcpc3=sqrt(sum(C3)/length(AP3)); 67 epc3=std(AP3); 68 e3=std(tiempo3); 69 70 tiempo4=[67.17, 68.48, 67.36, 68.23, 68.01]; 71 tmedio4=sum(tiempo4)/length(tiempo4); 72 caudal4=volumen./tiempo4; 73 cmedio4=sum(caudal4)/length(caudal4); 74 p4a=[510,510,515,510,510]; José Enrique Cabañas Ceballos 128 C.1. TRATAMIENTO DE LOS DATOS... 75 p4b=[290,290,290,290,290]; 76 AP4=p4a-p4b; 77 P4=sum(AP4)/length(AP4); 78 for i=1:length(caudal4) Z4(i)=(caudal4(i)-cmedio4)^2; 79 80 end 81 ecmc4=sqrt(sum(Z4)/length(caudal4)); 82 for i=1:length(AP4) C4(i)=(AP4(i)-P4)^2; 83 84 end 85 emcpc4=sqrt(sum(C4)/length(AP4)); 86 epc4=std(AP4); 87 e4=std(tiempo4); 88 89 tiempo5=[89.86, 91.28, 91.41, 91.86, 90.53]; 90 tmedio5=sum(tiempo5)/length(tiempo5); 91 caudal5=volumen./tiempo5; 92 cmedio5=sum(caudal5)/length(caudal5); 93 p5a=[505,500,500,500,500]; 94 p5b=[370,370,370,370,370]; 95 AP5=p5a-p5b; 96 P5=sum(AP5)/length(AP5); 97 for i=1:length(caudal5) Z5(i)=(caudal5(i)-cmedio5)^2; 98 99 end 100 ecmc5=sqrt(sum(Z5)/length(caudal5)); 101 for i=1:length(AP5) C5(i)=(AP5(i)-P5)^2; 102 103 end 104 emcpc5=sqrt(sum(C5)/length(AP5)); 105 epc5=std(AP5); 106 e5=std(tiempo5); José Enrique Cabañas Ceballos 129 C.1. TRATAMIENTO DE LOS DATOS... 107 108 tiempo6=[131.84, 130.21, 131.97, 130.59, 130.91]; 109 tmedio6=sum(tiempo6)/length(tiempo6); 110 caudal6=volumen./tiempo6; 111 cmedio6=sum(caudal6)/length(caudal6); 112 p6a=[495,495,495,490,490]; 113 p6b=[425,425,425,425,425]; 114 AP6=p6a-p6b; 115 P6=sum(AP6)/length(AP6); 116 for i=1:length(caudal6) Z6(i)=(caudal6(i)-cmedio6)^2; 117 118 end 119 ecmc6=sqrt(sum(Z6)/length(caudal6)); 120 for i=1:length(AP6) C6(i)=(AP6(i)-P6)^2; 121 122 end 123 emcpc6=sqrt(sum(C6)/length(AP6)); 124 epc6=std(AP6); 125 e6=std(tiempo6); 126 127 tiempo7=[155.96, 154.56, 153.28, 154.92, 153.88]; 128 tmedio7=sum(tiempo7)/length(tiempo7); 129 caudal7=volumen./tiempo7; 130 cmedio7=sum(caudal7)/length(caudal7); 131 p7a=[490,490,490,490,495]; 132 p7b=[440,440,440,440,440]; 133 AP7=p7a-p7b; 134 P7=sum(AP7)/length(AP7); 135 for i=1:length(caudal7) Z7(i)=(caudal7(i)-cmedio7)^2; 136 137 end 138 ecmc7=sqrt(sum(Z7)/length(caudal7)); José Enrique Cabañas Ceballos 130 C.1. TRATAMIENTO DE LOS DATOS... 139 for i=1:length(AP7) C7(i)=(AP7(i)-P7)^2; 140 141 end 142 emcpc7=sqrt(sum(C7)/length(AP7)); 143 epc7=std(AP7); 144 e7=std(tiempo7); 145 146 tiempo8=[167.55, 165.36, 166.45, 165.94, 166.91]; 147 tmedio8=sum(tiempo8)/length(tiempo8); 148 caudal8=(volumen./tiempo8); 149 cmedio8=sum(caudal8)/length(caudal8); 150 p8a=[485,485,485,480,485]; 151 p8b=[440,440,440,440,440]; 152 AP8=p8a-p8b; 153 P8=sum(AP8)/length(AP8); 154 for i=1:length(caudal8) Z8(i)=(caudal8(i)-cmedio8)^2; 155 156 end 157 ecmc8=sqrt(sum(Z8)/length(caudal8)); 158 for i=1:length(AP8) C8(i)=(AP8(i)-P8)^2; 159 160 end 161 emcpc8=sqrt(sum(C8)/length(AP8)); 162 epc8=std(AP8); 163 e8=std(tiempo8); 164 165 166 %creacion de los vectores de los parametros: ecmpc=[emcpc1,emcpc2,emcpc3,emcpc4,emcpc5,emcpc6,emcpc7,emcpc8]; % error cuadratico medio perdida de carga 167 ecmc=[ecmc1,ecmc2,ecmc3,ecmc4,ecmc5,ecmc6,ecmc7,ecmc8]; %error cuadratico medio caudal 168 errort=[e1,e2,e3,e4,e5,e6,e7,e8]; %desviacion tipica caudal José Enrique Cabañas Ceballos 131 C.1. TRATAMIENTO DE LOS DATOS... 169 errorpc=[epc1,epc2,epc3,epc4,epc5,epc6,epc7,epc8]; %desviacion tipica perdida de carga 170 pc=[P1,P2,P3,P4,P5,P6,P7,P8]; %milimetros 171 PC=0.001.*pc; %metros 172 PCM=1./longitud.*PC; %perdida de carga por metro de longitud expresada en metros 173 tiempo=[tmedio1,tmedio2,tmedio3,tmedio4,tmedio5,tmedio6,tmedio7, tmedio8]; %vector de tiempos medios 174 caudal=[cmedio1,cmedio2,cmedio3,cmedio4,cmedio5,cmedio6,cmedio7, cmedio8]; %litros/s 175 caudalm3=0.001.*caudal; %m^3/s 176 velocidad=(1/area).*caudalm3; %m/s 177 Re=(diametro/viscosidad).*velocidad; 178 flam=64./Re; 179 180 % Aplicando el modelo de Darcy-Weisbach (1875): 181 cte=(2*9.81*diametro/longitud); 182 for i=1:8 f(i)=PC(i)*cte/(velocidad(i)^2); 183 184 end 185 f; 186 187 % Para el calculo de la rugosidad aplicaremos el modelo de colebrook 188 for i=1:8 189 r(i)=3.71*diametro*(10^(-1/(2*sqrt(f(i))))-2.51/(Re(i)*sqrt(f(i)))); %rugosidad absoluta en metros 190 rr(i)=r(i)/diametro; %rugosidad relativa 191 end 192 r; 193 rr; José Enrique Cabañas Ceballos 132 C.2. REPRESENTACIÓN GRÁFICA DE LA... C.2. Representación gráfica de la dependencia de las variables respecto al número de Reynolds. 1 %VARIABLES 2 3 Re1=[100:100:10000]; 4 Re2=[10000:1000:10e8]; 5 Re=[Re1 Re2]; 6 f=[0:0.001:1]; 7 e1=0.0000001; 8 e3=0.00001; 9 e4=0.0001; 10 e6=0.01; 11 12 %ECUACIONES 13 14 15 %laminar laminar=64./Re; 16 17 %explicita 18 19 explicita1=1./(-2.*log10(e1/3.7065-(5.0272./Re).*log10(e1 /3.827-(4.567./Re).*log10((e1/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 20 21 %=1./(-2.*log10(e2/3.7065-(5.0272./Re).*log10(e2/3.827-(4.567./Re).* log10((e2/7.7918)^0.9924+(5.3326./(Re+208.815)).^0.9345)))).^2; 22 23 explicita3=1./(-2.*log10(e3/3.7065-(5.0272./Re).*log10(e3 /3.827-(4.567./Re).*log10((e3/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; José Enrique Cabañas Ceballos 133 C.3. REPRESENTACIÓN GRÁFICA DE LOS... 24 25 explicita4=1./(-2.*log10(e4/3.7065-(5.0272./Re).*log10(e4 /3.827-(4.567./Re).*log10((e4/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 26 27 %explicita5=1./(-2.*log10(e5/3.7065-(5.0272./Re).*log10(e5 /3.827-(4.567./Re).*log10((e5/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 28 29 explicita6=1./(-2.*log10(e6/3.7065-(5.0272./Re).*log10(e6 /3.827-(4.567./Re).*log10((e6/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 30 31 %GRAFICOS 32 33 plot(Re,laminar,’g’); 34 hold on 35 plot(Re,explicita1,’b’); 36 %plot(Re,explicita2,’r’); 37 plot(Re,explicita3,’k’); 38 plot(Re,explicita4,’c’); 39 %plot(Re,explicita5,’r’); 40 plot(Re,explicita6,’r’); 41 hold off C.3. 1 Representación gráfica de los modelos teóricos. %VARIABLES 2 3 Re1=[100:100:10000]; José Enrique Cabañas Ceballos 134 C.3. REPRESENTACIÓN GRÁFICA DE LOS... 4 Re2=[10000:1000:10e8]; 5 Re=[Re1 Re2]; 6 f=[0:0.001:1]; 7 e1=0.0000001; 8 e3=0.00001; 9 e4=0.0001; 10 e6=0.01; 11 12 %ECUACIONES 13 14 15 %laminar laminar=64./Re; 16 17 %explicita 18 19 explicita1=1./(-2.*log10(e1/3.7065-(5.0272./Re).*log10(e1 /3.827-(4.567./Re).*log10((e1/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 20 21 %=1./(-2.*log10(e2/3.7065-(5.0272./Re).*log10(e2/3.827-(4.567./Re).* log10((e2/7.7918)^0.9924+(5.3326./(Re+208.815)).^0.9345)))).^2; 22 23 explicita3=1./(-2.*log10(e3/3.7065-(5.0272./Re).*log10(e3 /3.827-(4.567./Re).*log10((e3/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 24 25 explicita4=1./(-2.*log10(e4/3.7065-(5.0272./Re).*log10(e4 /3.827-(4.567./Re).*log10((e4/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 26 27 %explicita5=1./(-2.*log10(e5/3.7065-(5.0272./Re).*log10(e5 /3.827-(4.567./Re).*log10((e5/7.7918)^0.9924+(5.3326./(Re José Enrique Cabañas Ceballos 135 C.3. REPRESENTACIÓN GRÁFICA DE LOS... +208.815)).^0.9345)))).^2; 28 29 explicita6=1./(-2.*log10(e6/3.7065-(5.0272./Re).*log10(e6 /3.827-(4.567./Re).*log10((e6/7.7918)^0.9924+(5.3326./(Re +208.815)).^0.9345)))).^2; 30 31 %GRAFICOS 32 33 plot(Re,laminar,’g’); 34 hold on 35 plot(Re,explicita1,’b’); 36 %plot(Re,explicita2,’r’); 37 plot(Re,explicita3,’k’); 38 plot(Re,explicita4,’c’); 39 %plot(Re,explicita5,’r’); 40 plot(Re,explicita6,’r’); 41 hold off José Enrique Cabañas Ceballos 136