Flujo de Couette entre dos tubos concéntricos (Grupo 29)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Flujo de Couette entre dos tubos concéntricos. Grupo 29 |
| Asignatura | Teoría de Campos |
| Curso | 2024-25 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Vamos a considerar el flujo de un fluido incompresible a través de dos cilindros concéntricos de manera que el interior se mueve con una velocidad angular constante en sentido antihorario mientras que el exterior se encuentra fijo. Suponiendo que ambos cilindros tienen su eje en [math]OX_3[/math] y pintamos la sección transversal [math](x_3 = 0)[/math] el cilindro exterior queda proyectado sobre la circunferencia [math]\rho = 2[/math] y el interior sobre la circunferencia [math]\rho = 1[/math]. La velocidad angular cilindro interior es [math]\omega \gt 0[/math].
Contenido
- 1 Mallado de la sección transversal
- 2 Calculo de velocidades. Ecuación de Navier-Stokes
- 3 Representación del campo de velocidades
- 4 Representación de las líneas de corriente
- 5 Velocidad máxima del fluido
- 6 Representación del rotacional de [math]\vec u[/math]
- 7 Campo de temperaturas
- 8 Gradiente de la temperatura
- 9 Caudal que pasa por una sección longitudinal
1 Mallado de la sección transversal
Para poder representar la sección principal usamos los parámetros proporcionados por el enunciado, que son los siguientes: [math](\rho, \theta) ∈ [0, 3] × [0, 2\pi][/math]
clear all % Limpiar la pantalla, espacio de trabajo y habilitar el modo de retención de gráficos
clc
hold on
radio_malla = 0:0.1:3; % Definir los parámetros para la malla de círculos
angulo_malla = 0:0.1:2*pi;
[R_mesh, A_mesh] = meshgrid(radio_malla, angulo_malla);
x_mesh = R_mesh.*cos(A_mesh); % Generar coordenadas para la malla de círculos
y_mesh = R_mesh.*sin(A_mesh);
mesh(x_mesh, y_mesh, 0*x_mesh); % Dibujar la malla de círculos en el plano xy
axis([-3, 3, -3, 3])
radio_externo = 2; % Parámetros para los cilindros internos y externos
radio_interno = 1;
X_externo = radio_externo.*cos(angulo_malla); % Coordenadas para el cilindro externo
Y_externo = radio_externo.*sin(angulo_malla);
X_interno = radio_interno.*cos(angulo_malla); % Coordenadas para el cilindro interno
Y_interno = radio_interno.*sin(angulo_malla);
plot(X_externo, Y_externo, 'k', 'LineWidth', 3); % Dibujar el cilindro externo
plot(X_interno, Y_interno, 'k', 'LineWidth', 3); % Dibujar el cilindro interno
view(2) % Establecer la vista en 2D
hold off % Desactivar el modo de retención de gráficos
La velocidad de las partículas del fluido viene dada por [math]\vec u(\rho,\theta)=f(\rho)\vec e_\theta[/math] y su presión [math]p[/math] constante. Además [math](\vec u, \rho)[/math] tiene que cumplir la ecuación de Navier-Stokes estacionaria:
Donde el primer término se desprecia y, por lo tanto, obtenemos la siguiente ecuación vectorial: [math]\mu\triangle\vec u=\vec 0[/math], siendo [math]\mu[/math] el coeficiente de viscosidad del fluido y [math]\triangle\vec u[/math] el laplaciano.
En cartesianas, el laplaciano de un campo se define como [math]\triangle\vec u= \triangle u_1\vec i + \triangle u_2\vec j + \triangle u_3\vec k[/math]. Pero como estamos trabajando en coordenadas cilíndricas haremos uso de la siguiente fórmula: [math]\triangle\vec u = \triangledown(\triangledown\cdot\vec u)-\triangledown\times(\triangledown\times\vec u)[/math]
2.1 Cálculo del laplaciano vectorial
2.1.1 Divergencia de [math]\vec u[/math]
[math]\triangledown\cdot\vec u=\frac{1}{\rho}[\frac{\partial}{\partial\rho}(\rho u_\rho)+{\frac{\partial}{\partial\theta}(u_\theta))}+\frac{\partial}{\partial z}(\rho u_z)]=\frac{1}{\rho}[{\frac{\partial}{\partial\theta}(u_\theta))}]=\frac{1}{\rho}[{\frac{\partial}{\partial\theta}(f(\rho))}]=0[/math]
Y, por lo tanto, el gradiente de la divergencia también es nulo. ([math]\triangledown(0)=\vec 0[/math]).
2.1.2 Rotacional del rotacional de [math]\vec u[/math]
Para ello calculamos primero el rotacional de [math]\vec u[/math]:
[math]\ \triangledown \times \vec{u}=\frac{1}{\rho} \left|\begin{matrix} \vec e_\rho & \rho\cdot \vec e_\theta & \vec e_z \\ \frac{\partial}{\partial \rho } & \frac{\partial}{\partial \theta} & \frac{\partial}{\partial z} \\ e_\rho & \rho u_\theta & u_z \end{matrix}\right| =\frac{1}{\rho} \left|\begin{matrix} \vec e_\rho & \rho\cdot \vec e_\theta & \vec e_z \\ \frac{\partial}{\partial \rho } & \frac{\partial}{\partial \theta} & \frac{\partial}{\partial z} \\ 0 & \rho\cdot f(\rho ) & 0 \end{matrix}\right| =\frac{1}{\rho} \left[ \frac{\partial}{\partial \rho} (\rho\cdot f(\rho)) \right] \vec{e_{z}}=\left ( \frac{f\left ( \rho \right )}{\rho } + {f}'\left ( \rho \right )\right ) \bar{e_{z}}[/math]
Ahora calculamos el rotacional del rotacional de [math]\vec u[/math]:
[math]\ \triangledown \times \left ( \triangledown \times \vec{u} \right )=\frac{1}{\rho }\begin{vmatrix} \vec{e}_{\rho }&\rho \cdot \vec{e} _{\theta } & \vec{e}_{z}\\ \frac{\partial }{\partial \rho } & \frac{\partial }{\partial \theta } & \frac{\partial }{\partial z} \\ 0& 0 &\frac{f\left ( \rho \right )}{\rho }+{f}'\left ( \rho \right ) \end{vmatrix}= -\frac{1}{\rho }\left [ -\frac{1}{\rho ^{2}}f\left ( \rho \right ) +\frac{{f}'\left ( \rho \right )}{\rho }+{f}''\left ( \rho \right )\right ] \rho\cdot \vec{e}_{\theta } = \left [\frac{1}{\rho ^{2}}f\left ( \rho \right )-\frac{1}{\rho} {f}'\left ( \rho \right )-{f}''\left ( \rho \right )\right ]\vec{e}_{\theta }[/math]
Finalmente, el laplaciano quedaría de la forma: [math]\ \triangle \vec{u}=0-\triangledown \times \triangledown \times \vec{u} =\left [{f}''(\rho)+\frac{1}{\rho}{f}'(\rho)-\frac{1}{\rho ^{2}}f(\rho)\right]\vec{e}_{\theta }[/math]
Una vez obtenido todos los términos, sustituimos en la ecuación de Navier-Stokes simplificada, obteniendo:
Trabajando solo con los módulos nos queda:
2.2 Ecuación diferencial propuesta
A continuación, el problema nos propone comprobar que [math]f(\rho)[/math] satisface la ecuación diferencial: [math]\frac{\partial}{\partial \rho} \left (\rho \frac {\partial f(\rho)}{\partial \rho} \right )=\frac{f(\rho)}{\rho} [/math]
2.3 Función [math]f(\rho)=a\rho+\frac{b}{\rho}[/math] como solución de la ecuación diferencial
El enunciado nos pide comprobar si la función [math]f(\rho)=a\rho+\frac{b}{\rho}[/math] es solución. Para ello sustituimos la solución dentro de nuestra ecuación diferencial.
Para finalizar, el necesitamos hallar los valores de a y b concretos de nuestro ejercicio. Para ello utilizaremos las condiciones de nuestro enunciado, dando los valores de la frontera interior y exterior a [math]\rho[/math] llegando a un sistema de dos ecuaciones.
- En el interior: [math]\ \rho=1\rightarrow \vec{u}=\vec{0} \rightarrow f(1)=0 \rightarrow \left (a\cdot 1+\frac{b}{1} \right )=0 \rightarrow a+b=0 [/math]
- En el exterior: [math]\ \rho=2\rightarrow \vec{u}=\omega\vec{e_{\theta }} \rightarrow f(2)=\omega \rightarrow \left (a\cdot 2+\frac{b}{2} \right)= \omega \rightarrow 2a+\frac{b}{2}=\omega [/math]
[math]a+b=0 \rightarrow a=-b; 2a+\frac{b}{2}=\omega \rightarrow -2b+\frac{b}{2}=\omega \rightarrow -\frac{3}{2}b = \omega [/math]
- [math]\ a=\frac{2}{3}\omega [/math]
- [math]\ b=-\frac{2}{3}\omega [/math]
2.4 Condición de incompresibilidad
Sabemos que en los fluidos incompresibles, el gradiente del vector velocidad tiene que ser igual a 0. Como hemos demostrado al inicio del apartado 2.1.1, nuestro fluido cumple la condición de incompresibilidad dado que [math]∆\vec{u} =\vec{0}[/math]
3 Representación del campo de velocidades
Cuando [math] \omega = 1 [/math] y [math] \mu = 1 [/math], y los parámetros a y b son [math]\frac{4}{3}[/math] y [math]-\frac{4}{3}[/math] respectivamente, el campo de velocidades es:
3.1 Representación gráfica
Para representarlo, hemos utilizado el siguiente código de Matlab, dando lugar a lo mostrado en la Figura 2.
clear all % Limpiar la pantalla y espacio de trabajo
clc
hold on % Habilitar retención de gráficos
radiodemalla = 1:0.1:2; % Paso 0.1 desde p=1 hasta p=2
angulodemalla = 0:0.1:2*pi; % Intervalo angular
[R_malla, A_malla] = meshgrid(radiodemalla, angulodemalla);% Representacion en la malla
x_malla = R_malla.*cos(A_malla); %Representación en coordenadas cartesianas
y_malla = R_malla.*sin(A_malla);
X = sin(A_malla).*((-4/3)*(R_malla-1./R_malla)); %Representacion del campo vectorial
Y = cos(A_malla).*((4/3)*(R_malla-1./R_malla));
quiver(x_malla, y_malla, X, Y); %Trazado del campo
hold off;4 Representación de las líneas de corriente
Antes de representar las líneas de corriente, hemos de verificar primero la irrotacionalidad del campo, antes de ello lo que haremos será multiplicar vectorialmente por el vector “k”.
4.1 Comprobación de irrotacionalidad
Ahora calcularemos la irrotacionalidad para posteriormente calcular las líneas de corriente (Función Potencial).
Por lo tanto el campo es irrotacional.
4.2 Calculo del potencial escalar
Ahora con la teoría del potencial vectorial procedemos a calcular la función potencial, que es la línea de corriente: (Hacemos uso de la expresión del gradiente en coordenadas cilíndricas)
Igualamos términos y resolvemos la función potencial.
[math]\frac{4}{3}\rho-\frac{4}{3\rho} = \frac{\partial\psi}{\partial\rho} \rightarrow \partial\psi = \left (\frac{4}{3}\rho-\frac{4}{3\rho} \right )\partial\rho \rightarrow \psi = \int\left (\frac{4}{3}\rho-\frac{4}{3\rho} \right )\partial\rho \rightarrow \psi = \frac{4}{6}\rho^2-\frac{4}{3}ln(\rho)+C [/math]
Tenemos la línea de corriente.
4.3 Representación gráfica
Para realizar la representación de las líneas de corriente del campo (Figura 3), hemos utilizado el siguiente código de Matlab.
clear all % Limpiar la pantalla
clc
ptos = 100; % Definir el número de puntos en la malla
densidad_radial = linspace(1, 2, ptos); % Generar valores para la densidad radial (rho) en el rango [1, 2]
theta = linspace(0, 2*pi, ptos); % Generar valores para el ángulo theta en el rango [0, 2*pi]
[RHO, THETA] = meshgrid(densidad_radial, theta); % Crear una malla 2D de coordenadas polares (rho, theta)
funcion_f = ((RHO.^2/6) - ((4*log(RHO))/3)); % Definir una función f en coordenadas polares
X = RHO .* cos(THETA); % Convertir coordenadas polares a coordenadas cartesianas
Y = RHO .* sin(THETA);
view(2); % Establecer la vista en 2D
contour(X, Y, funcion_f, 20); % Crear un gráfico de contorno de la función f en coordenadas cartesianas
colorbar; % Mostrar la barra de colores
axis([-3, 3, -3, 3]); % Establecer los límites del eje
colormap("cool"); % Establecer la colormap a 'cool'5 Velocidad máxima del fluido
Para poder calcular los puntos del fluido donde su módulo de velocidad es máxima tenemos que calcular el módulo del campo de velocidades. Sabiendo que [math]\vec u(\rho,\theta)=f(\rho)\vec e_\theta[/math] (los campos de velocidades se calcularon en el apartado anterior a este) Entonces:
Tras esto calculamos su módulo
Ahora para calcular los puntos máximos derivamos el módulo respecto a \rho y se iguala a 0
Si despejamos \rho nos da un número imaginario.
Por lo tanto, analizamos los extremos del intervalo de la figura (dados por el enunciado) Teniendo que analizar cuando ρ es igual a 1 y cuando ρ es igual a 2
¿Qué podemos afirmar con esto? Que el punto máximo se encuentra cuando ρ tienda a 2. Esto se puede respaldar con el enunciado, que afirma que el cilindro exterior se mueve con velocidad angular constante[math](|u ⃗ (1)|)[/math] y que el cilindro interior está fijo [math](|u⃗ (2)|)[/math]
5.1 Representación gráfica
Para representar el campo escalar utilizaremos el siguiente código de Matlab, siendo la representación la Figura 4
clear all % Limpiar la pantalla, espacio de trabajo
clc
hold on
w = 1; % Parámetros iniciales
a = 2/3*w;
b = -2/3*w;
n = 35; % Número de puntos
r = linspace(1,2,n); % Crear mallas
theta = linspace(0,2*pi,n);
[R, TH] = meshgrid(r,theta);
x = R.*cos(TH); % Coordenadas en el espacio tridimensional
y = R.*sin(TH);
f = a*R+b./R; % Función que define la superficie en función de R y TH
surf(x,y,f); % Crear y visualizar la superficie tridimensional en 2D
colorbar; % Añade una barra de color para representar la magnitud de los vectores
colormap("cool");
axis([-3,3,-3,3]);
view(2);
6 Representación del rotacional de [math]\vec u[/math]
Para calcular la rotacional hay que tener en cuenta que el campo dado en el enunciado se trata de [math]\vec u(\rho,\theta)=f(\rho)\vec e_\theta[/math].
Esto se debe a que el flujo azimutal entre dos cilindros concéntricos (donde el cilindro interno rota y el externo esta fijo) produce un campo puramente azimutal e_θ ya que el movimiento es circular alrededor del eje z.
Ahora podemos realizar la operación:
(En la operación se puede ver que solo influye e_θ) Utilizando los siguientes datos:
- [math]f(\rho)=a\rho+\frac{b}{\rho}[/math]
- [math]f'(\rho)=a-\frac{b}{\rho^2}[/math]
- [math]a=\frac{2}{3}[/math]
- [math]b=-\frac{2}{3}[/math]
Lo sustituimos:
Entonces podemos concluir, utilizando el módulo:
6.1 Representación gráfica
A continuación mostramos la representación gráfica del campo [math]\ \left | \bigtriangledown \times \vec u \right |[/math] (Figura 5).
clear all % Limpiar la pantalla, espacio de trabajo
clc
r_val = 1:0.33:2; % Definición de valores para radio y ángulo
th_val = 0:0.33:2*pi;
[R, TH] = meshgrid(r_val,th_val); % Creación de una malla de putnos en coordenadas polares
x = R.*cos(TH);
y = R.*sin(TH);
z = zeros(size(x));
r_x = zeros(size(x)); % Definición del campo de rotación
r_y = zeros(size(x));
r_z = ones(size(y)).*(-2/3);
quiver3(x,y,z,r_x,r_y,r_z); % Representación gráfica del campo de rotación en 3D
axis([-3,3,-3,3]); % Configuración de límites en los ejes
xlabel('EJE X'); % Etiquetas para los ejes
ylabel('EJE Y');
zlabel('EJE Z');
7 Campo de temperaturas
La temperatura del fluido viene dada por el campo [math] T(\rho,\theta) = log(1+ \rho^2) \cdot cos^2(\theta) \cdot e^{−\left ( \rho − \frac{5}{2} \right )^2}[/math]
7.1 Representación gráfica
Dibujamos el campo de temperaturas y las curvas de nivel utilizando Matlab.
clear all % Limpiar la pantalla y el espacio de trabajo
clc
r=1:0.1:2; % Definición de los parámetros
th=0:0.1:2*pi;
[R,theta]=meshgrid(r,th); % Generación de matriz
Xcord=R.*cos(theta); % Conversión a coordenadas cartesianas
Ycord=R.*sin(theta);
temp=log10(1+R.^2).*(((cos(theta)).^2).*exp(-(R-(5/2)).^2)); % Expresión de la temperatura
figure(1) % Representación del campo 3D
mesh(Xcord,Ycord,temp)
surf(Xcord,Ycord,temp)
colormap("hot")
colorbar, xlabel('coordenada X'), ylabel('coordenada Y'), zlabel('temperatura');
figure(2)
contour(Xcord,Ycord,temp,30,'r');
axis([-3, 3, -3, 3]);
colormap("hot")
xlabel('coordenada X'), ylabel('coordenada Y');
8 Gradiente de la temperatura
8.1 Cálculo del gradiente
El gradiente de la temperatura en coordenadas cilíndricas queda definido por :
8.2 Representación gráfica
Aquí comprobamos que las curvas de nivel de la temperatura y el gradiente son ortogonales. Queda representado en la figura 8.
clear all % Limpiar la pantalla y espacio de trabajo
clc
r=1:0.1:2; % Definición de parámetros
th=0:0.1:2*pi;
[R,theta]=meshgrid(r,th);
temp=log10(1+R.^2).*(((cos(theta)).^2).*exp(-(R-(5/2)).^2)); % Expresión de la temperatura
[Dx,Dy]=gradient(temp,r,th); % Gradiente de la temperatura con respecto r y th
figure; % Crea una figura y dibuja las curvas de nivel de Z
quiver(R,theta,Dx,Dy,'color','r'); % Dibuja un campo de vectores sobre las curvas de nivel
xlabel('r'), ylabel('\theta'), colorbar;
title('curvas de nivel en Coordenadas Polares');
hold on
contour(R,theta,temp,'b');
legend('campo de vectores', 'curvas de nivel'); % Leyenda para indicar el campod e vectores
hold off
9 Caudal que pasa por una sección longitudinal
Para finalizar calcularemos el caudal que atraviesa los dos cilindros por una sección longitudinal producida por el plano [math]\ x_2=0 [/math].
Para ello tendremos en cuenta que los dos cilindros tiene 1 metro de profundidad y la velocidad del fluido (dada en m/s) viene dada por la forma:
Para calcular el caudal de un campo a través de una superficie [math]S[/math] (la sección longitudinal) se integrara según al formula:
[math]\ \int_{S}^{} \vec u \cdot d\vec S = \iint_{D}^{} \vec u \left ( \Phi (u,v) \right )\cdot \left ( \Phi _u\times \Phi _v \right ) du dv [/math]
Para conseguir un caudal positivo se tomara como orientación de la superficie la dirección de [math]\ \vec e_\theta [/math].
clear all % Limpiar la pantalla y espacio de trabajo
clc
r = 0:0.1:1; % Parámetros cilindro interior
th = 0:0.1:2*pi;
[R,TH] = meshgrid(r,th);
x1 = cos(TH); % Paso de coordenadas cilindricas a cartesianas
y1 = sin(TH);
z1 = R;
surf(x1,y1,z1,'FaceAlpha',0.3)
hold on % Habilitar el modo de retención de gráficos
x2 = 2*cos(TH); % Parámetros cilindro exterior
y2 = 2*sin(TH);
z2 = R;
surf(x2,y2,z2,'FaceAlpha',0.2)
m = 1:0.1:2; % Parámetros de la primera superficie
n = 0:0.1:1;
[M, N]=meshgrid(m,n);
x3 = M;
y3 = 0*M;
z3 = N;
surf(x3,y3,z3)
x4 = -M; % Parámetros de la segunda superficie
y4 = 0*M;
z4 = N;
surf(x4,y4,z4)
hold off % Deshabilitar el modo de retención de gráficos
colormap("winter")
xlabel('Eje X'); % Etiquetado de los ejes
ylabel('Eje Y');
zlabel('Eje Z');
9.1 Parametrización de la superficie
Como se puede ver en la figura, la superficie [math]\ S [/math] está compuesta por la suma de dos rectangulos [math]\ S_1 [/math] y [math]\ S_2 [/math]. Comenzamos parametrizando cada una de llas.
La parametrización de [math]\ S_1 [/math] sería:
[math]\ S_1 [/math]: [math]\ \Phi (u,v) = (\rho (u,v),\theta (u,v),z(u,v)) = (u,0,v) [/math] con [math]\ \left\{\begin{matrix} u\in (1,2) \\ v\in (0,1) \end{matrix}\right. [/math]
Los vectores velocidad se calculan con la fórmula:
[math]\ \Phi _t=\rho '(t)\cdot \vec e_\rho + \rho (t)\cdot \vec e_\theta + z (t)\cdot \vec e_z [/math]
[math]\ \left.\begin{matrix} \Phi _u = \vec e_\rho \\ \Phi _v = \vec e_z \end{matrix}\right\} [/math] [math]\ \rightarrow [/math] [math]\ \Phi _u\times \Phi _v = - \vec e_\theta [/math]
Esta orientación no sirve ya que va al contrario a la que se tomo, por lo que en el calculo de la integral habrá que poner un menos para cambiar el sentido.
Y la parametrización de [math]\ S_2 [/math] sería:
[math]\ S_2 [/math]: [math]\ \Phi (u,v) = (\rho (u,v),\theta (u,v),z(u,v)) = (u,\pi,v) [/math] con [math]\ \left\{\begin{matrix} u\in (1,2) \\ v\in (0,1) \end{matrix}\right. [/math]
Para los vectores velocidad se vuelve a usar la misma fórmula:
[math]\ \Phi _t=\rho '(t)\cdot \vec e_\rho + \rho (t)\cdot \vec e_\theta + z (t)\cdot \vec e_z [/math]
[math]\ \left.\begin{matrix} \Phi _u = \vec e_\rho \\ \Phi _v = \vec e_z \end{matrix}\right\} [/math] [math]\ \rightarrow [/math] [math]\ \Phi _u\times \Phi _v = - \vec e_\theta [/math]
Nuevamente la orientación no sirve ya que va al contrario a la que se tomo, por lo que en el calculo de la integral habrá que poner un menos para cambiar el sentido.
9.2 Cálculo del caudal
Para calcular el caudal, pondremos nuestro vector [math] \vec {u}[/math] en función de nuestra parametrización.