UNIVERSIDAD DE CASTILLA - previa.uclm.es · Ecuación de Blasius [1] Ecuación para régimen...

136
UNIVERSIDAD DE CASTILLA - LA MANCHA ESCUELA TÉCNICA SUPERIOR DE INGENIEROS INDUSTRIALES CIUDAD REAL PROYECTO FIN DE CARRERA N o 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

Transcript of UNIVERSIDAD DE CASTILLA - previa.uclm.es · Ecuación de Blasius [1] Ecuación para régimen...

UNIVERSIDAD DE CASTILLA - LA MANCHA

ESCUELA TÉCNICA SUPERIORDE 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. Con-

cretamente 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 em-

bargo, 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 resul-

tados 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 flui-

dos.

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 ac-

tú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 denomi-

na 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 a-

rrojado 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óri-

cos 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, ρU2, 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»:

Efectos de inercia

Efectos viscosos=

ρU2

µU/L=ρUL

µ(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 mo-

vimiento 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 tempera-

tura 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 tem-

peratura 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 propor-

cional al diámetro del tubo, confirmando así que el flujo laminar se empieza a alterar en un

valor definido por el parámetro ρUL/µ.

Estos ensayos, realizados con sumo cuidado en muchísimas condiciones distintas, le per-

mitieron 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 propor-

cional 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 =64

Re. (1.4)

1.3.3. 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√f

= −2,0 log10

(εr

3,7065+

2,5226

Re√f

). (1.5)

1.3.4. 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√f

= 2,0 log10

(Re√f

2, 51

). (1.6)

1.3.5. 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√f

= −2,0 log10

(εr

3, 71

). (1.7)

1.3.6. 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 experi-

mental 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. Habi-

tualmente 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 pro-

cedimiento están detallados en [5] y su expresión es la siguiente:

1√f

= −2,0 log10

(εr

3,7065−

− 5,0272

Relog10

{εr

3,827− 4,567

Relog10

[(εr

7,7918

)0,9924

−(

5,3326

208,815 +Re

)0,9345]}),

(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:

f = 8

[(8

Re

)12

+1

(A+B)1,5

]1/12, (1.9)

donde A y B toman la forma:

A =

{2,457 log

[1

( 7Re

)0,9 + 0,27εr

]}16

, (1.10)

B =

(37530

Re

)16

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 pre-

sentadas. 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 en-

tre 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 ex-

perimento 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 reuti-

lizada.

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 con-

tinuació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 trans-

curre 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

∆t[l/s] (2.1)

La presión relativa es medida por su relación con la altura de columna de agua, una conec-

tada a un punto de la instalación y otra conectada a otro. Esta presión es directamente propor-

cional 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 despla-

zado 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ítica-

mente, 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 25oC.

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 si-

guiente 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 Darcy-

Weisbach, 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] =fLV 2

2Dg

[m3/s2]

[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] =2DghfLV 2

[m3/s2]

[m3/s2]. (2.3)

Para calcular la rugosidad de la tubería, en este proyecto se utiliza la ecuación de Colebrook-

White:

1√f

= −2,0 log10

(εr

3,7065+

2,5226

Re√f

). (2.4)

Como observamos esta ecuación es una función implícita en el factor de fricción, sin em-

bargo se convierte en una función explícita al tener como única incógnita la rugosidad. Operan-

do 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ím-

plemente 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] =ε

D

[m]

[m]. (2.6)

Por lo que calculado directamente se obtiene:

εr =ε

D= 3,7065

(10−1√f − 2,5226

Re√f

). (2.7)

José Enrique Cabañas Ceballos 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, con-

cluyendo que los datos se ajustan de manera precisa al diagrama, por lo tanto se puede com-

parar 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−6m2/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 Número Factor Rugosidad

medio de carga (m/s) de de relativa

(l/s) (mm) Reynolds frición

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

Tabla 3.1: Resultados experimentales

Podemos observar como la instalación experimental del laboratorio tiene unas posibili-

dades 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 uti-

lizando 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 anterior-

mente 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, cuan-

do 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 eleva-

do, 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 turbu-

lento 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 Cole-

brook 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 complica-

dos 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 Cole-

brook 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: in-

terface 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 re-

sultados 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 Darcy-

Weisbach 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 compor-

tamiento 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 mante-

niendo 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 ru-

gosidad 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 fac-

tor 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 apli-

cació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 con-

tí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 aumen-

tando 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 pro-

cede 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 apli-

cació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 rea-

lizació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 fric-

tion 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 Bul-

letin 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écni-

ca 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 in-

tuitiva 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é selec-

cionada. 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 mostran-

do 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 estruc-

tura 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 aproximada-

mente 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 simple-

mente 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){

10 this.nombre = nom;

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(){

18 return this.nombre;

19 }

20 public void setNombre(String nombre){

21 this.nombre = nombre;

22 }

23 public double getDensidad(){

24 return this.densidad;

25 }

26 public void setDensidad(double den){

27 this.densidad = den;

28 }

29 public double getViscosidad(){

30 return this.viscosidad;

31 }

32 public void setViscosidad(double vis){

33 this.viscosidad = vis;

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 }

71 public static double getMedia(double a,double b,double c,double

Re,double e){

72 double media = 0;

73 if (e>0.00001){

74 media=(a+b)/2;

75 }

76 else{

77 media= (a+b+c)/3;

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 {

87 s=64/Re;

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 }

100 while(X>0.000001);

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 {

111 s=64/Re;

112 }

113

114 else //if (Re>2100)

115 {

116 if(e==0)

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))+

120 Math.pow((5.3326/(208.815+Re)),0.9345))));

121 s=1/(a*a);

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))+

125 Math.pow((5.3326/(208.815+Re)),0.9345))));

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 public static double getFactor2(double Re, double D, double e)

133 {

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);

136 a=Math.pow((2.457*Math.log(1/((Math.pow((7/Re),0.9))+(0.27*e

/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));

142 //s=8*Math.pow((Math.pow((8/Re),12)+(1/(Math.pow((a+b),1.5))

)),(1/12));

143 return s;

144 }

145 //Metodo que resuelve la ecuación de Prandtl del factor de

fricción.

146 public static double getFactor3(double Re)

147 {

José Enrique Cabañas Ceballos 58

B.1. CÁLCULOS

148 double f,x,X=0;

149 x=0.000000000001;

150 do

151 {

152 f=Math.pow(1/(2*Math.log10((Re*Math.sqrt(x))/2.51))

,2);

153 X=Math.abs(x-f);

154 x=x+0.000001;

155 }

156 while(X>0.000001);

157 return x;

158 }

159 //Metodo que resuelve la ecuación de Karman-Nikuradse del factor

de fricción.

160 public static double getFactor4(double D, double e,double Re)

161 {

162 double f,x,X=0;

163 f=1/Math.pow((-2*Math.log10(e/(3.71*D))),2);

164

165 return f;

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){

9 this.nombre = nom;

10 this.rugosidad = rugosidad;

11 }

12 public String getNombre(){

13 return this.nombre;

14 }

15 public void setNombre(String nombre){

16 this.nombre = nombre;

17 }

18 public double getRugosidad(){

19 return this.rugosidad;

20 }

21 public void setRugosidad(double vis){

22 this.rugosidad = vis;

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 /*

14 // Apertura del fichero y creacion de BufferedReader para

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 {

26 e.printStackTrace();

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 {

37 fr.close();

38 }

39 }

40 catch (Exception e2)

41 {

42 e2.printStackTrace();

43 }

44 }

45 int y=0;

46 for(int w=0;w<linea.length();w++)

47 {

48 //recorrer el String linea

49 if (linea.charAt(w) == ’;’)//condicion de que caracter

sea ";"

50 {

51 y=y+1;//contador de caracteres ";"para poder

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...

58 W[b]="";

59 }

60 int a=0;

61 for(int t=0;t<linea.length();t++)

62 {

63 //recorrer el String linea

64 if (linea.charAt(t) != ’;’)

65 {

66 W[a] = W[a]+ Character.toString(linea.charAt(t));

67 }

68 else// (linea.charAt(t) == ’;’)

69 {

70 a=a+1;

71 }

72 }

73

74 System.out.println("hay "+y+" ; en el archivo");

75

76 return W;

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 /*

16 // Apertura del fichero y creacion de BufferedReader para

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 {

28 e.printStackTrace();

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 {

39 fr.close();

40 }

41 }

42 catch (Exception e2)

43 {

44 e2.printStackTrace();

45 }

46 }

47 int y=0;

48 for(int w=0;w<linea.length();w++)

49 {

50 //recorrer el String linea

51 if (linea.charAt(w) == ’;’)//condicion de que caracter

sea ";"

52 {

53 y=y+1;//contador de caracteres ";"para poder

subdividir linea

54 }

55 }

56 String [] W=new String [y];

57

58 for(int b=0;b<y;b++)

59 {

60 W[b]="";

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 {

68 W[a] = W[a]+ Character.toString(linea.charAt(t));

69 }

70 else// (linea.charAt(t) == ’;’)

71 {

72 a=a+1;

73 }

74 }

75

76 System.out.println("hay "+y+" ; en el archivo");

77

78 return W;

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

() {

63 public void actionPerformed(ActionEvent e) {

64 statusMessageLabel.setText("");

65 }

66 });

67 messageTimer.setRepeats(false);

68 int busyAnimationRate = resourceMap.getInteger("StatusBar.

busyAnimationRate");

69 for (int i = 0; i < busyIcons.length; i++) {

70 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() {

73 public void actionPerformed(ActionEvent e) {

74 busyIconIndex = (busyIconIndex + 1) % busyIcons.

length;

75 statusAnimationLabel.setIcon(busyIcons[busyIconIndex

]);

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);

100 } else if ("message".equals(propertyName)) {

101 String text = (String)(evt.getNewValue());

102 statusMessageLabel.setText((text == null) ? "" :

text);

103 messageTimer.restart();

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() {

116 if (aboutBox == null) {

117 JFrame mainFrame = Factor_friccionApp.getApplication().

getMainFrame();

118 aboutBox = new Factor_friccionAboutBox(mainFrame);

119 aboutBox.setLocationRelativeTo(mainFrame);

120 }

121 Factor_friccionApp.getApplication().show(aboutBox);

122 }

123

124 /** This method is called from within the constructor to

125 * 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

() {

211 public void actionPerformed(java.awt.event.ActionEvent

evt) {

212 jButton1ActionPerformed(evt);

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() {

219 public void actionPerformed(java.awt.event.ActionEvent

evt) {

220 jComboBox1ActionPerformed(evt);

221 }

222 });

223

224 jCheckBox1.setText("DENSIDAD(kg/m3)");

225 jCheckBox1.setName("jCheckBox1"); // NOI18N

226 jCheckBox1.addActionListener(new java.awt.event.

ActionListener() {

227 public void actionPerformed(java.awt.event.ActionEvent

evt) {

228 jCheckBox1ActionPerformed(evt);

229 }

230 });

231

232 jCheckBox2.setText("VISCOSIDAD(m2/s)");

233 jCheckBox2.setName("jCheckBox2"); // NOI18N

234 jCheckBox2.addActionListener(new java.awt.event.

ActionListener() {

235 public void actionPerformed(java.awt.event.ActionEvent

evt) {

236 jCheckBox2ActionPerformed(evt);

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() {

243 public void actionPerformed(java.awt.event.ActionEvent

evt) {

244 jCheckBox3ActionPerformed(evt);

245 }

246 });

247

248 jCheckBox4.setText("RUGOSIDAD(mm)");

249 jCheckBox4.setName("jCheckBox4"); // NOI18N

250 jCheckBox4.addActionListener(new java.awt.event.

ActionListener() {

251 public void actionPerformed(java.awt.event.ActionEvent

evt) {

252 jCheckBox4ActionPerformed(evt);

253 }

254 });

255

256 jCheckBox5.setText("CAUDAL(m3/s)");

257 jCheckBox5.setName("jCheckBox5"); // NOI18N

258 jCheckBox5.addActionListener(new java.awt.event.

ActionListener() {

259 public void actionPerformed(java.awt.event.ActionEvent

evt) {

260 jCheckBox5ActionPerformed(evt);

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() {

267 public void actionPerformed(java.awt.event.ActionEvent

evt) {

268 jCheckBox6ActionPerformed(evt);

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() {

289 public void actionPerformed(java.awt.event.ActionEvent

evt) {

290 jComboBox2ActionPerformed(evt);

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() {

297 public void actionPerformed(java.awt.event.ActionEvent

evt) {

298 jCheckBox7ActionPerformed(evt);

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 (m)");

336 jLabel12.setName("jLabel12"); // NOI18N

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

()

351 .addGroup(mainPanelLayout.

createParallelGroup(javax.swing.

José Enrique Cabañas Ceballos 78

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

GroupLayout.Alignment.LEADING)

352 .addGroup(mainPanelLayout.

createSequentialGroup()

353 .addGroup(mainPanelLayout.

createParallelGroup(javax.swing.

GroupLayout.Alignment.TRAILING)

354 .addComponent(jCheckBox1, javax.

swing.GroupLayout.Alignment.

LEADING)

355 .addComponent(jCheckBox2, javax.

swing.GroupLayout.Alignment.

LEADING)

356 .addComponent(jCheckBox3, javax.

swing.GroupLayout.Alignment.

LEADING)

357 .addComponent(jCheckBox4, javax.

swing.GroupLayout.Alignment.

LEADING)

358 .addComponent(jCheckBox5, javax.

swing.GroupLayout.Alignment.

LEADING)

359 .addGroup(javax.swing.

GroupLayout.Alignment.LEADING

, mainPanelLayout.

createSequentialGroup()

360 .addComponent(jLabel1, javax

.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))

363 .addComponent(jButton1, javax.

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)

369 .addComponent(jLabel9, javax.swing.

GroupLayout.DEFAULT_SIZE, 397, Short.

MAX_VALUE)

370 .addComponent(jLabel10))

371 .addPreferredGap(javax.swing.LayoutStyle.

ComponentPlacement.RELATED)

372 .addGroup(mainPanelLayout.

createParallelGroup(javax.swing.

GroupLayout.Alignment.LEADING)

373 .addComponent(jLabel7, javax.swing.

GroupLayout.DEFAULT_SIZE, 216, Short.

MAX_VALUE)

José Enrique Cabañas Ceballos 80

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

374 .addGroup(mainPanelLayout.

createParallelGroup(javax.swing.

GroupLayout.Alignment.TRAILING, false

)

375 .addComponent(jTextField13, javax.

swing.GroupLayout.Alignment.

LEADING)

376 .addComponent(jTextField8, javax.

swing.GroupLayout.Alignment.

LEADING)

377 .addComponent(jTextField1, javax.

swing.GroupLayout.Alignment.

LEADING)

378 .addComponent(jTextField2, javax.

swing.GroupLayout.Alignment.

LEADING)

379 .addComponent(jTextField3, javax.

swing.GroupLayout.Alignment.

LEADING)

380 .addComponent(jTextField4, javax.

swing.GroupLayout.Alignment.

LEADING)

381 .addComponent(jTextField5, javax.

swing.GroupLayout.Alignment.

LEADING)

382 .addComponent(jTextField6, javax.

swing.GroupLayout.Alignment.

LEADING)

383 .addComponent(jTextField7, javax.

swing.GroupLayout.Alignment.

LEADING)

384 .addComponent(jTextField9, javax.

José Enrique Cabañas Ceballos 81

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

swing.GroupLayout.Alignment.

LEADING)

385 .addComponent(jTextField11, javax.

swing.GroupLayout.Alignment.

LEADING)

386 .addComponent(jTextField12, javax.

swing.GroupLayout.Alignment.

LEADING)

387 .addComponent(jComboBox2, javax.

swing.GroupLayout.Alignment.

LEADING, 0, 181, Short.MAX_VALUE)

388 .addComponent(jTextField14, javax.

swing.GroupLayout.Alignment.

LEADING))))

389 .addComponent(jLabel2, javax.swing.GroupLayout.

PREFERRED_SIZE, 128, javax.swing.GroupLayout.

PREFERRED_SIZE)

390 .addComponent(jLabel12))

391 .addContainerGap())

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 .addComponent(jLabel8))

446 .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 .addComponent(jLabel10))

454 .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 .addGroup(statusPanelLayout.createSequentialGroup()

504 .addGroup(statusPanelLayout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

José Enrique Cabañas Ceballos 88

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

505 .addGroup(statusPanelLayout.

createSequentialGroup()

506 .addContainerGap()

507 .addComponent(statusMessageLabel))

508 .addGroup(statusPanelLayout.

createSequentialGroup()

509 .addGap(72, 72, 72)

510 .addComponent(jLabel3, javax.swing.

GroupLayout.PREFERRED_SIZE, 142, javax.

swing.GroupLayout.PREFERRED_SIZE)))

511 .addPreferredGap(javax.swing.LayoutStyle.

ComponentPlacement.RELATED, 267, Short.MAX_VALUE)

512 .addComponent(progressBar, javax.swing.GroupLayout.

PREFERRED_SIZE, javax.swing.GroupLayout.

DEFAULT_SIZE, javax.swing.GroupLayout.

PREFERRED_SIZE)

513 .addPreferredGap(javax.swing.LayoutStyle.

ComponentPlacement.RELATED)

514 .addComponent(statusAnimationLabel)

515 .addContainerGap())

516 );

517 statusPanelLayout.setVerticalGroup(

518 statusPanelLayout.createParallelGroup(javax.swing.

GroupLayout.Alignment.LEADING)

519 .addGroup(statusPanelLayout.createSequentialGroup()

520 .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

523 .addGroup(statusPanelLayout.

createSequentialGroup()

524 .addGroup(statusPanelLayout.

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))

528 .addGap(3, 3, 3))

529 .addComponent(jLabel3, javax.swing.GroupLayout.

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(

537 jPanel1Layout.createParallelGroup(javax.swing.

GroupLayout.Alignment.LEADING)

538 .addGap(0, 100, Short.MAX_VALUE)

539 );

540 jPanel1Layout.setVerticalGroup(

541 jPanel1Layout.createParallelGroup(javax.swing.

GroupLayout.Alignment.LEADING)

542 .addGap(0, 100, Short.MAX_VALUE)

543 );

544

José Enrique Cabañas Ceballos 90

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

545 jLabel11.setText(resourceMap.getString("jLabel11.text")); //

NOI18N

546 jLabel11.setName("jLabel11"); // NOI18N

547

548 jTextField10.setText(resourceMap.getString("jTextField10.

text")); // NOI18N

549 jTextField10.setName("jTextField10"); // NOI18N

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 {

570 Den = 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 {

583 q = Double.parseDouble(jTextField5.getText

());

584 if (jCheckBox6.isSelected())

585 {

586 Re = Double.parseDouble(jTextField6.

getText());

587 if (jCheckBox7.isSelected())

588 {

589 vel = Double.parseDouble(jTextField7

.getText());

590 vel1=calculos.getVelocidad(q,D);

591 vel2=calculos.getVel(Re,D,vis);

592 if(vel1!=vel2)

593 {

594 jLabel7.setText("problemas de

compatibilidad!!! necesario

desmarcar alguna variable");

595 }

596 }

597 else

598 {

599 vel1=calculos.getVelocidad(q,D);

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 {

603 jLabel7.setText("sistema

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 {

613 vel = Double.parseDouble(jTextField7

.getText());

614 vel1 = Double.parseDouble(

jTextField7.getText());

615 vel2=calculos.getVelocidad(q,D);

616 if(vel1!=vel2)

617 {

618 jLabel7.setText("sistema

incompatible desmarca alguna

variable");

619 jTextField7.setText(""+vel1);

620

621 }

622 Re=calculos.getReynolds(D, vel, vis)

;

623 jTextField6.setText(""+Re);

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)

;

630 jTextField6.setText(""+Re);

631 }

632 }

633 }

634 else

635 {

636 if (jCheckBox6.isSelected())

637 {

638 Re = Double.parseDouble(jTextField6.

getText());

639 if (jCheckBox7.isSelected())

640 {

641 vel = Double.parseDouble(jTextField7

.getText());

642 Re1=calculos.getReynolds(D, vel, vis

);

643 if(Re!=Re1)

644 {

645 jLabel7.setText("problemas de

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 {

662 vel = Double.parseDouble(jTextField7

.getText());

663 q=calculos.getCaudal(D, vel);

664 jTextField5.setText(""+q);

665 Re=calculos.getReynolds(D, vel, vis)

;

666 jTextField6.setText(""+Re);

667 }

668 else

669 {

670

671 jLabel7.setText("datos insuficientes

");

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 {

683 Re = Double.parseDouble(jTextField6.

getText());

684 if (jCheckBox7.isSelected())

685 {

686 vel = Double.parseDouble(jTextField7

.getText());

687 jLabel7.setText("necesario dato

rugosidad");

688 }

689 else

690 {

691 jLabel7.setText("necesario dato

rugosidad");

692 }

693 }

694 else

695 {

696 if (jCheckBox7.isSelected())

697 {

698 vel = Double.parseDouble(jTextField7

.getText());

699 jLabel7.setText("necesario dato

rugosidad");

700 }

701 else

702 {

703 jLabel7.setText("necesario dato

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 {

711 Re = Double.parseDouble(jTextField6.

getText());

712 if (jCheckBox7.isSelected())

713 {

714 vel = Double.parseDouble(jTextField7

.getText());

715 jLabel7.setText("necesario dato

rugosidad");

716 }

717 else

718 {

719 jLabel7.setText("necesario dato

rugosidad");

720 }

721 }

722 else

723 {

724 if (jCheckBox7.isSelected())

725 {

726 vel = Double.parseDouble(jTextField7

.getText());

727 jLabel7.setText("necesario dato

rugosidad");

728 }

José Enrique Cabañas Ceballos 97

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

729 else

730 {

731 jLabel7.setText("necesario dato

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 {

744 q = Double.parseDouble(jTextField5.getText

());

745 if (jCheckBox6.isSelected())

746 {

747 Re = Double.parseDouble(jTextField6.

getText());

748 if (jCheckBox7.isSelected())

749 {

750 vel = Double.parseDouble(jTextField7

.getText());

751 D1=calculos.getD(Re, vis, vel);

752 D2=calculos.getD(q, vel);

753 if(D1!=D2){

754 jLabel7.setText("problemas de

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 {

772 vel = Double.parseDouble(jTextField7

.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 {

780 jLabel7.setText("datos insuficientes

");

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 {

788 Re = Double.parseDouble(jTextField6.

getText());

789 if (jCheckBox7.isSelected())

790 {

791 vel = Double.parseDouble(jTextField7

.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 {

799 jLabel7.setText("datos insuficientes

");

800 }

801 }

802 else

803 {

804 if (jCheckBox7.isSelected())

805 {

806 vel = Double.parseDouble(jTextField7

.getText());

807 jLabel7.setText("datos insuficientes

");

808 }

809 else

810 {

811 jLabel7.setText("datos insuficientes

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 {

823 Re = Double.parseDouble(jTextField6.

getText());

824 if (jCheckBox7.isSelected())

825 {

826 vel = Double.parseDouble(jTextField7

.getText());

827 jLabel7.setText("necesario dato

rugosidad");

828 }

829 else

830 {

831 jLabel7.setText("necesario dato

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

838 vel = Double.parseDouble(jTextField7

.getText());

839 jLabel7.setText("necesario dato

rugosidad");

840 }

841 else

842 {

843 jLabel7.setText("necesario dato

rugosidad");

844 }

845 }

846 }

847 else

848 {

849 if (jCheckBox6.isSelected())

850 {

851 Re = Double.parseDouble(jTextField6.

getText());

852 if (jCheckBox7.isSelected())

853 {

854 vel = Double.parseDouble(jTextField7

.getText());

855 jLabel7.setText("necesario dato

rugosidad");

856 }

857 else

858 {

859 jLabel7.setText("necesario dato

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 {

866 vel = Double.parseDouble(jTextField7

.getText());

867 jLabel7.setText("necesario dato

rugosidad");

868 }

869 else

870 {

871 jLabel7.setText("necesario dato

rugosidad");

872 }

873 }

874 }

875 }

876 }

877 }

878 else

879 {

880 if(jCheckBox3.isSelected())

881 {

882 D = Double.parseDouble(jTextField3.getText());

883 if(jCheckBox4.isSelected())

884 {

885 e = Double.parseDouble(jTextField4.getText());

886 if(jCheckBox5.isSelected())

887 {

888 q = 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

891 Re = Double.parseDouble(jTextField6.

getText());

892 if (jCheckBox7.isSelected())

893 {

894 vel = Double.parseDouble(jTextField7

.getText());

895 vel1=calculos.getVelocidad(q, D);

896 if(vel!=vel1){

897 jLabel7.setText("problemas de

compatibilidad!!! desmarca

alguna variable");

898 }

899 vis=calculos.getViscosidad(Re,D,vel)

;

900 jTextField2.setText(""+vis);

901 }

902 else

903 {

904 vel=calculos.getVelocidad(q, D);

905 jTextField7.setText(""+vel);

906 vis=calculos.getViscosidad(Re, D,

vel);

907 jTextField2.setText(""+vis);

908

909 }

910 }

911 else

912 {

913 if (jCheckBox7.isSelected())

914 {

915 vel = Double.parseDouble(jTextField7

.getText());

José Enrique Cabañas Ceballos 104

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

916 jLabel7.setText("datos infuficientes

");

917 }

918 else

919 {

920 jLabel7.setText("datos insuficientes"

);

921 }

922 }

923 }

924 else

925 {

926 if (jCheckBox6.isSelected())

927 {

928 Re = Double.parseDouble(jTextField6.

getText());

929 if (jCheckBox7.isSelected())

930 {

931 vel = Double.parseDouble(jTextField7

.getText());

932 q=calculos.getCaudal(D, vel);

933 jTextField5.setText(""+q);

934 vis=calculos.getViscosidad(Re, D,

vel);

935 jTextField2.setText(""+vis);

936 }

937 else

938 {

939 jLabel7.setText("datos insuficientes

");

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 {

946 vel = Double.parseDouble(jTextField7

.getText());

947 jLabel7.setText("datos insuficientes

");

948 }

949 else

950 {

951 jLabel7.setText("datos insuficientes

");

952 }

953 }

954 }

955 }

956 else

957 {

958 if(jCheckBox5.isSelected())

959 {

960 q = Double.parseDouble(jTextField5.getText

());

961 if (jCheckBox6.isSelected())

962 {

963 Re = Double.parseDouble(jTextField6.

getText());

964 if (jCheckBox7.isSelected())

965 {

966 vel = Double.parseDouble(jTextField7

.getText());

967 jLabel7.setText("necesario dato

José Enrique Cabañas Ceballos 106

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

rugosidad");

968 }

969 else

970 {

971 jLabel7.setText("necesario dato

rugosidad");

972 }

973 }

974 else

975 {

976 if (jCheckBox7.isSelected())

977 {

978 vel = Double.parseDouble(jTextField7

.getText());

979 jLabel7.setText("necesario dato

rugosidad");

980 }

981 else

982 {

983 jLabel7.setText("necesario dato

rugosidad");

984 }

985 }

986 }

987 else

988 {

989 if (jCheckBox6.isSelected())

990 {

991 Re = Double.parseDouble(jTextField6.

getText());

992 if (jCheckBox7.isSelected())

993 {

José Enrique Cabañas Ceballos 107

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

994 vel = Double.parseDouble(jTextField7

.getText());

995 jLabel7.setText("necesario dato

rugosidad");

996 }

997 else

998 {

999 jLabel7.setText("necesario dato

rugosidad");

1000 }

1001 }

1002 else

1003 {

1004 if (jCheckBox7.isSelected())

1005 {

1006 vel = Double.parseDouble(jTextField7

.getText());

1007 jLabel7.setText("necesario dato

rugosidad");

1008 }

1009 else

1010 {

1011 jLabel7.setText("necesario dato

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 {

1024 q = Double.parseDouble(jTextField5.getText

());

1025 if (jCheckBox6.isSelected())

1026 {

1027 Re = Double.parseDouble(jTextField6.

getText());

1028 if (jCheckBox7.isSelected())

1029 {

1030 vel = Double.parseDouble(jTextField7

.getText());

1031 D=calculos.getD(q, vel);

1032 jTextField3.setText(""+D);

1033 vis=calculos.getViscosidad(Re, D,

vel);

1034 jTextField2.setText(""+vis);

1035 }

1036 else

1037 {

1038 jLabel7.setText("datos insuficientes

");

1039 }

1040 }

1041 else

1042 {

1043 if (jCheckBox7.isSelected())

1044 {

1045 vel = Double.parseDouble(jTextField7

.getText());

José Enrique Cabañas Ceballos 109

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

1046 jLabel7.setText("datos insuficientes

");

1047 }

1048 else

1049 {

1050 jLabel7.setText("datos insuficientes

");

1051 }

1052 }

1053 }

1054 else

1055 {

1056 if (jCheckBox6.isSelected())

1057 {

1058 Re = Double.parseDouble(jTextField6.

getText());

1059 if (jCheckBox7.isSelected())

1060 {

1061 vel = Double.parseDouble(jTextField7

.getText());

1062 jLabel7.setText("datos insuficientes

");

1063 }

1064 else

1065 {

1066 jLabel7.setText("datos insuficientes

");

1067 }

1068 }

1069 else

1070 {

1071 if (jCheckBox7.isSelected())

José Enrique Cabañas Ceballos 110

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

1072 {

1073 vel = Double.parseDouble(jTextField7

.getText());

1074 jLabel7.setText("datos insuficientes

");

1075 }

1076 else

1077 {

1078 jLabel7.setText("datos insuficientes

");

1079 }

1080 }

1081 }

1082 }

1083 else

1084 {

1085 if(jCheckBox5.isSelected())

1086 {

1087 q = Double.parseDouble(jTextField5.getText

());

1088 if (jCheckBox6.isSelected())

1089 {

1090 Re = Double.parseDouble(jTextField6.

getText());

1091 if (jCheckBox7.isSelected())

1092 {

1093 vel = Double.parseDouble(jTextField7

.getText());

1094 jLabel7.setText("necesario dato

rugosidad");

1095 }

1096 else

José Enrique Cabañas Ceballos 111

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

1097 {

1098 jLabel7.setText("necesario dato

rugosidad");

1099 }

1100 }

1101 else

1102 {

1103 if (jCheckBox7.isSelected())

1104 {

1105 vel = Double.parseDouble(jTextField7

.getText());

1106 jLabel7.setText("necesario dato

rugosidad");

1107 }

1108 else

1109 {

1110 jLabel7.setText("necesario dato

rugosidad");

1111 }

1112 }

1113 }

1114 else

1115 {

1116 if (jCheckBox6.isSelected())

1117 {

1118 Re = Double.parseDouble(jTextField6.

getText());

1119 if (jCheckBox7.isSelected())

1120 {

1121 vel = Double.parseDouble(jTextField7

.getText());

1122 jLabel7.setText("necesario dato

José Enrique Cabañas Ceballos 112

B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA

rugosidad");

1123 }

1124 else

1125 {

1126 jLabel7.setText("necesario dato

rugosidad");

1127 }

1128 }

1129 else

1130 {

1131 if (jCheckBox7.isSelected())

1132 {

1133 vel = Double.parseDouble(jTextField7

.getText());

1134 jLabel7.setText("necesario dato

rugosidad");

1135 }

1136 else

1137 {

1138 jLabel7.setText("necesario dato

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) {

1171 jLabel7.setText("Dicho fluido no existe");

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 {

1209 jTextField4.setText(Rug[i]);

1210 }

1211 catch(ArrayIndexOutOfBoundsException e) {

1212 jLabel7.setText("Dicho material no existe");

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. Factor_friccionApp.java

1 /*

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() {

19 show(new Factor_friccionView(this));

20 }

21

22 /**

José Enrique Cabañas Ceballos 118

B.7. FACTOR_FRICCIONABOUTBOX.JAVA

23 * This method is to initialize the specified window by

injecting resources.

24 * Windows shown in our application come fully initialized from

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 */

34 public static Factor_friccionApp getApplication() {

35 return Application.getInstance(Factor_friccionApp.class);

36 }

37

38 /**

39 * Main method launching the application.

40 */

41 public static void main(String[] args) {

42 launch(Factor_friccionApp.class, args);

43 }

44 }

B.7. Factor_friccionAboutBox.java

1 /*

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() {

18 dispose();

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()

94 .addGroup(layout.createParallelGroup(javax.

swing.GroupLayout.Alignment.LEADING)

95 .addComponent(versionLabel)

96 .addComponent(vendorLabel)

97 .addComponent(vendorLabel1))

98 .addPreferredGap(javax.swing.LayoutStyle.

ComponentPlacement.RELATED)

99 .addGroup(layout.createParallelGroup(javax.

swing.GroupLayout.Alignment.LEADING)

100 .addComponent(appVendorLabel1)

101 .addComponent(appVersionLabel)

José Enrique Cabañas Ceballos 123

B.7. FACTOR_FRICCIONABOUTBOX.JAVA

102 .addComponent(appVendorLabel))

103 .addGap(110, 110, 110)))

104 .addContainerGap())

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))

126 .addPreferredGap(javax.swing.LayoutStyle.

ComponentPlacement.RELATED, 33, Short.MAX_VALUE)

127 .addComponent(closeButton)

128 .addContainerGap())

129 );

130

131 pack();

132 }// </editor-fold>

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. Tratamiento de los datos experimentales.

1 %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)

22 Z1(i)=(caudal1(i)-cmedio1)^2;

23 end

24 ecmc1=sqrt(sum(Z1)/length(caudal1));

25 for i=1:length(AP1)

26 C1(i)=(AP1(i)-P1)^2;

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)

41 Z2(i)=(caudal2(i)-cmedio2)^2;

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)

45 C2(i)=(AP2(i)-P2)^2;

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)

60 Z3(i)=(caudal3(i)-cmedio3)^2;

61 end

62 ecmc3=sqrt(sum(Z3)/length(caudal3));

63 for i=1:length(AP3)

64 C3(i)=(AP3(i)-P3)^2;

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)

79 Z4(i)=(caudal4(i)-cmedio4)^2;

80 end

81 ecmc4=sqrt(sum(Z4)/length(caudal4));

82 for i=1:length(AP4)

83 C4(i)=(AP4(i)-P4)^2;

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)

98 Z5(i)=(caudal5(i)-cmedio5)^2;

99 end

100 ecmc5=sqrt(sum(Z5)/length(caudal5));

101 for i=1:length(AP5)

102 C5(i)=(AP5(i)-P5)^2;

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)

117 Z6(i)=(caudal6(i)-cmedio6)^2;

118 end

119 ecmc6=sqrt(sum(Z6)/length(caudal6));

120 for i=1:length(AP6)

121 C6(i)=(AP6(i)-P6)^2;

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)

136 Z7(i)=(caudal7(i)-cmedio7)^2;

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)

140 C7(i)=(AP7(i)-P7)^2;

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)

155 Z8(i)=(caudal8(i)-cmedio8)^2;

156 end

157 ecmc8=sqrt(sum(Z8)/length(caudal8));

158 for i=1:length(AP8)

159 C8(i)=(AP8(i)-P8)^2;

160 end

161 emcpc8=sqrt(sum(C8)/length(AP8));

162 epc8=std(AP8);

163 e8=std(tiempo8);

164

165 %creacion de los vectores de los parametros:

166 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

183 f(i)=PC(i)*cte/(velocidad(i)^2);

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 vari-

ables 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 %laminar

15 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. Representación gráfica de los modelos teóricos.

1 %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 %laminar

15 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