El Tanque de Tormentas de Arroyofresno (Grupo 2)

De MateWiki
Saltar a: navegación, buscar
Trabajo realizado por estudiantes
Título El Tanque de Tormentas de Arroyofresno (Grupo 2)
Asignatura Teoría de Campos
Curso 2025-26
Autores Raúl Eiros Fonseca

Aiman Hakimi Nooristani

Carlos Aguado Esparrells

Hugo Caceres Lopez

Héctor Perucho Conde

Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura


El sistema de saneamiento de la ciudad de Madrid constituye una de las redes de ingeniería hidráulica más complejas y avanzadas de Europa. Dentro de este sistema, el Tanque de Tormentas de Arroyofresno desempeña un papel crucial en la protección ambiental del río Manzanares, actuando como un retentor de las primeras aguas pluviales (las más contaminadas) para evitar su vertido directo al cauce durante episodios de precipitaciones intensas.

El objetivo principal de este trabajo es aplicar los principios fundamentales de la teoría de campos para estudiar la presión y fuerzas estructurales sobre las columnas ,la concentración de contaminantes en el agua ,los contaminantes infiltrados en la columna mediante representaciones en matlab y la acumulación de residuos.

Modelo geométrico simplificado será un prisma rectangular con longitud de 290 m, anchura de 140 m, profundidad 𝐻 = 22 m. El tanque está soportado por columnas cilíndricas de hormigón armado de radio 𝜌𝑐 = 0.75 m de las cuales hay 171 columnas. Cada columna contiene armadura ubicada a distancia 𝜌𝑎= 0.65 m del eje.

Interior del estanque de tormentas Arroyofresno

Contenido

1 Investigación sobre el funcionamiento del Tanque de Arroyofresno

El tanque con 400.000 m³ de capacidad es un regulador hidráulico y ambiental que se activa cuando el caudal de lluvia excede la capacidad de la red de alcantarillado. Después de eso el agua no está diseñada para permanecer allí mucho tiempo ,el vaciado comienza tan pronto como es posible tras la tormenta. La Comunidad de Madrid cuenta con una de las redes de tanques de tormentas más extensas del mundo, con más de 70 tanques en total con una capacidad de 1.4 millones de m³. Esta infraestructura masiva dota a Madrid de una capacidad de gestión de aguas pluviales excepcional, siendo un modelo de ingeniería clave para el control de inundaciones y la protección de la calidad del agua en el río Manzanares, cumpliendo con las exigencias medioambientales europeas. Su objetivo primario es doble:

-Prevenir inundaciones en la ciudad.

-Almacenar el agua más contaminada con cloruros y sulfatos para evitar su vertido directo al río Manzanares. Una vez que la tormenta pasa, el agua se bombea a las depuradoras para su tratamiento final.

1.1 Contaminantes Críticos

Los contaminantes arrastrados representan una amenaza química directa para la estructura de hormigón armado, atacándola por varios frentes:

-Cloruros: El contaminante más peligroso, ya que penetra el hormigón e inicia la corrosión electroquímica de la armadura de acero.

-Sulfatos y Acidez: Generan ataque por sulfatos (formaciones expansivas que agrietan el hormigón) y ataque ácido (disolución de la matriz de cemento).

1.2 Soluciones de Ingeniería para la durabilidad

Para lograr la vida útil necesaria en un ambiente tan agresivo, la protección del hormigón se basa en la calidad del material y las barreras externas:

-Diseño del Hormigón: Uso de hormigón de baja permeabilidad y un alto recubrimiento de la armadura ≥ 10 cm para ralentizar la difusión de contaminantes.

-Protección Superficial: Aplicación de revestimientos poliméricos (como resinas epoxi) en las superficies más expuestas, creando una barrera impermeable y resistente químicamente.

2 Representación de el campo de presión como un mapa de colores sobre la superficie de una columna

Para representar la presión ejercida por el agua en la columna vamos a partir de a formula facilitada:

[math] P(z) = P_0 - \rho_{\text{agua}}\, g\, z, \qquad z \in [-H, 0] [/math]

Donde:

-𝑃0 es la presión atmosférica estándar

-𝜚agua es la densidad del agua

-𝑔 es la aceleración de gravedad.

La representación se hará en el programa Matlab , a continuación el código:

Mapa de presiones
% Parámetros físicos
H = 22;              
rho = 1000;          
g = 9.81;            
P0 = 101325;         
R = 0.75; 
           
% Malla cilíndrica (más densa)
theta = linspace(0, 2*pi, 400);
z = linspace(0, -H, 400);    
[Theta, Z] = meshgrid(theta, z);
X = R * cos(Theta);
Y = R * sin(Theta);

% Presión
P = P0 - rho * g .* Z;

% FIGURA GRANDE
figure('Position',[100 100 900 900]); 
surf(X, Y, Z, P, 'EdgeColor', 'none');
colormap('jet');
colorbar;
title('Mapa de presión sobre la superficie de una columna (Pa)');
xlabel('x (m)');
ylabel('y (m)');
zlabel('z (m)');
axis equal tight; 
set(gca,'DataAspectRatio',[1 1 3]);   % El cilindro se ve más grande y proporcionado
view(45, 20);
lighting gouraud;
camlight headlight;


Como era de esperar el mapa de colores indica que la presión es mas grande (colores cálidos) a medida que hay mayor profundidad , por lo que a menor profundidad menor es la presión (colores fríos).

3 Cálculo de el gradiente de presión y representación como campo vectorial

3.1 Cálculo del gradiente de presión

Debemos calcular: F(x,y,z) = -P(z)·n

Para el campo escalar de P(z) usamos la ecuación hidrostática dada en el enunciado:

[math] P(z) = P_0 - \rho_{\text{agua}}\, g\, z, \qquad z \in [-H, 0] [/math]

Como z es negativa (profundidad), el término -ρagua·g·z se vuelve positivo, sumándose a la presión atmosférica P₀. El Vector Normal Unitario “n” para un cilindro vertical centrado en (0,0), el vector normal que "sale" de la superficie es horizontal y radial. En un punto (x,y) de la superficie lateral:

[math]\mathbf{n} = \frac{x}{\rho_c}\,\mathbf{i}+ \frac{y}{\rho_c}\,\mathbf{j} + 0\,\mathbf{k}[/math]


Donde ρc = 0.75 m es el radio de la columna. El Campo Vectorial Resultante F , sustituimos:

[math] F = P_0 - \rho_{\text{agua}}\, g\, z\cdot(\frac{x}{\rho_c}\,\mathbf{i}+ \frac{y}{\rho_c}\,\mathbf{j}) [/math]

El signo negativo es fundamental, invierte el sentido del vector n. En lugar de salir el vector fuerza entra en la columna.

3.2 Representación como campo vectorial sobre la superficie cilíndrica de una columna

Código para la representación en MATLAB:

derecha
%Definición de Parámetros Físicos 
P0 = 101325;        
rho_agua = 1000;    
g = 9.81;           
H = 22;             
Rc = 0.75;          
% Generación de la Malla
theta = linspace(0, 2*pi, 25);
z_vals = linspace(-H, 0, 20);
[THETA, Z] = meshgrid(theta, z_vals);
X = Rc * cos(THETA);
Y = Rc * sin(THETA);
%Cálculo de Vectores
P_magnitud = P0 - rho_agua * g * Z;
% Vector Normal Unitario
Nx = cos(THETA); 
Ny = sin(THETA); 
Nz = zeros(size(Z)); 
% Campo de Fuerza F = -P * n
Fx = -P_magnitud .* Nx;
Fy = -P_magnitud .* Ny;
Fz = -P_magnitud .* Nz;
%Visualización
figure('Name', 'Tarea 3: Fuerza de Presión', 'Color', 'w');
s = surf(X, Y, Z, 'FaceColor', [0.8 0.8 0.8], 'EdgeColor', 'none');
alpha(s, 0.5); 
hold on;
quiver3(X, Y, Z, Fx, Fy, Fz, 0.5, 'b', 'LineWidth', 1.5);
axis equal;
grid on;
view(45, 20); 
title('Tarea 3: Fuerza de Presión Normal');
xlabel('x (m)'); ylabel('y (m)'); zlabel('z (m)');
zlim([-H 0]); 
text(0, 0, 1, 'Compresión Radial', 'HorizontalAlignment', 'center', 'FontWeight', 'bold');
hold off;


Vista desde la planta


Al aplicar la definición de fuerza de presión F = -P(z)·n, obtenemos un campo vectorial radial.

Dirección: Los vectores son perpendiculares a la superficie de la columna y apuntan hacia el eje central. Esto representa físicamente la compresión que ejerce el agua sobre el hormigón.

Magnitud: Observamos que la longitud de las flechas aumenta con la profundidad. En la superficie (z = 0), la fuerza es proporcional a la presión atmosférica. En el fondo (z = -22), la fuerza es máxima debido a la columna de agua .


4 Fuerza total que el agua ejerce sobre una columna

Para calcular la fuerza total que el agua primero hay que establecer los datos para poder resolver la integral:

Po: la presión estándar es igual a 1 atm que a su vez es igual a 101325 Pa

𝜚agua=1000kg/m³

g : gravedad vamos a suponer que es igual a 9,81m²/s

𝜌𝑐 = 0.75 m(radio de la columna)

𝐻=22m

La presión escalar viene dada por :[math] P(z) = P_0 - \rho_{\text{agua}}\, g\, z[/math]

Dado que fuerza es igual a presión por la superficie nos quedaría:

[math]F_t = \int_{S} P(z)\, dS(dS=2\pi\rho_cdz)= \int_{-22}^{0} \left( P_0 - \rho_{\text{agua}} g z \right)\,(2\pi\,r_c\,dz)= \int_{-22}^{0} \left(101325 - 1000 \cdot 9.81\,z\right)\,(2\pi \cdot 0.75)\,dz=[/math]

[math]= \left[101325 \cdot 2\pi \cdot 0.75 \cdot z- \frac{1000 \cdot 9.81 \cdot 2\pi \cdot 0.75}{2} \, z^2\right]_{z=-22}^{z=0}=21691927,58 N[/math]

Como nos piden el resultado en kN y en tnf , hay que pasar el resultado a estas unidades:

[math]F_t(kN)=21691,93kN[/math]
[math]F_t(tnf)=21691927,58N \cdot \frac{1tnf}{9810N}=2211,2 tnf[/math]

5 Representa el campo de concentración infiltrada dentro de una columna como mapa de colores sobre su sección vertical y trasversal de la columna

El hormigón es un material poroso que permite la infiltración de agua contaminada desde la superficie exterior hacia el interior. Los contaminantes (especialmente cloruros y sulfatos) penetran en la columna siguiendo un perfil de difusión radial:

[math]C_{\text{col}}(\rho, z) = C_{\text{agua}}(z) \cdot e^{-\lambda(\rho_c - \rho)}[/math]

Donde:

-[math]C_{\text{agua}}(z) = C_0 \left( 1 + \alpha \frac{|z|}{H} \right)[/math]

-[math]\lambda = 10 \, m^{-1}[/math]

-[math]\alpha = 3 [/math]

-[math]C_0 = 0,3 kg/ \, m^{3}[/math]

% Parámetros del Modelo
H = 22;           
rho_c = 0.75;     
rho_a = 0.65;     
lambda = 10;      
C0 = 0.3;         
alpha = 3;        
%  Dominio cilíndro
N_z = 200;
N_rho = 100;
rho_line = linspace(0, rho_c, N_rho); 
z_line = linspace(-H, 0, N_z);       
[RHO, Z] = meshgrid(rho_line, z_line);
% Cálculo  C_col(rho, z)
C_agua_z = C0 * (1 + alpha * abs(Z) / H);
At = exp(-lambda * (rho_c - RHO));

C_col_RHO_Z = C_agua_z .* At;

figure(1);
hold on;
h = surf(RHO, Z, C_col_RHO_Z, 'EdgeColor', 'none');
view(2);
axis tight;
colormap jet; 
colorbar('Location', 'EastOutside', 'FontSize', 10);
title('Campo de Concentración C_{col}(\rho, z) en la Sección Vertical', 'FontSize', 12);
xlabel('Radio \rho (m)', 'FontSize', 11);
ylabel('Profundidad z (m)', 'FontSize', 11);
set(gca, 'YDir', 'normal'); 
plot3([rho_a, rho_a], [-H, 0], [max(max(C_col_RHO_Z))*1.1, max(max(C_col_RHO_Z))*1.1], 'w--', 'LineWidth', 2);
text(rho_a+0.05, -H/2, max(max(C_col_RHO_Z))*1.1, 'Armadura (\rho_a = 0.65 m)', 'Color', 'w', 'FontSize', 10);
caxis([0, max(C_col_RHO_Z(:))]);
hold off;

z_seccion = -H; 
L_seccion = rho_c;
N_xy = 100;
x_line = linspace(-L_seccion, L_seccion, N_xy);
y_line = linspace(-L_seccion, L_seccion, N_xy);
[X, Y] = meshgrid(x_line, y_line);
RHO_xy = sqrt(X.^2 + Y.^2);
C_agua_seccion = C0 * (1 + alpha * abs(z_seccion) / H);
At_xy = exp(-lambda * (rho_c - RHO_xy));

C_col_XY = C_agua_seccion * At_xy;
C_col_XY(RHO_xy > rho_c) = NaN; 
figure(2);
h = pcolor(X, Y, C_col_XY);
set(h, 'EdgeColor', 'none');
axis equal tight;
hold on;
angulo = linspace(0, 2*pi, 100);
plot(rho_a * cos(angulo), rho_a * sin(angulo), 'w--', 'LineWidth', 2); 
colormap jet;
c = colorbar('Location', 'EastOutside', 'FontSize', 10);
c.Label.String = 'Concentración C_{col} (kg/m^3)';
title(['Concentración C_{col} en Sección Transversal (z = ' num2str(z_seccion) ' m)'], 'FontSize', 12);
xlabel('Eje X (m)', 'FontSize', 11);
ylabel('Eje Y (m)', 'FontSize', 11);
hold off;

Pla6.jpg Trans6.jpg

Como de puede ver el la sección vertical solo cuando las densidad de la concentración es menor o igual a 0,6 kg/m³ es capaz de llegar a la armadura (línea blanca discontinua), mientras que la densidad mayor de 0,6 kg/m³ se queda en los 10 centímetros de hormigón .Con esto podemos concluir que los 10cm de hormigón son efectivos para impedir el paso de la mayoría de contaminantes.

6 Representación de el campo del gradiente de la concentración infiltrada dentro de una columna, sobre una sección vertical que pasa por el eje de la columna

6.1 Cálculo del gradiente

En primer lugar, definimos la función [math]C_{\text{col}}(\rho, z) = C_{\text{agua}}(z) \cdot e^{-\lambda(\rho_c - \rho)}[/math] que nos dice la concentración de contaminantes infiltrados en la columna de hormigón. En segundo lugar, el operador gradiente es un instrumento que podemos utilizar a nuestro favor para saber hacia donde crece la contaminación por lo tanto teniendo en cuenta que la función está definida en coordenadas cilíndricas, el operador queda definida de la siguiente forma:

En coordenadas cilíndricas [math](\rho, \phi, z)[/math], el operador gradiente es:

[math]\nabla = \left( \frac{\partial}{\partial \rho}, \frac{1}{\rho} \frac{\partial}{\partial \phi}, \frac{\partial}{\partial z} \right)[/math]

Como la función [math]C_{\text{col}}(\rho, z)[/math] no depende de la coordenada angular, el gradiente de concentración [math]\nabla C_{\text{col}}(\rho, z)[/math] será:

[math]\nabla C_{\text{col}}(\rho, z) = \frac{\partial C_{\text{col}}}{\partial \rho} e_\rho + \frac{\partial C_{\text{col}}}{\partial z} e_z [/math]

Donde [math]e_\rho[/math] y [math]e_z[/math] son los vectores unitarios en las direcciones radial y vertical, respectivamente.

Haciendo las derivadas parciales respectivas obtenemos lo siguiente:

'1.' Componente Radial [math](e_\rho)[/math]:

Calculamos la derivada parcial respecto a [math]\rho:[/math]

[math] \frac{\partial C_{col}}{\partial \rho} = C_{agua}(z) \cdot \frac{\partial}{\partial \rho} \left( e^{-\lambda(\rho - \rho_c)} \right)[/math]
[math] \frac{\partial C_{col}}{\partial \rho} = C_{agua}(z) \cdot e^{-\lambda(\rho - \rho_c)} \cdot (-\lambda) [/math]
[math] \frac{\partial C_{col}}{\partial \rho} = -\lambda C_{col}(\rho, z) [/math]

'2.' Componente Vertical [math](u_z)[/math]

Calculamos la derivada parcial respecto a [math]z[/math]:

[math] \frac{\partial C_{col}}{\partial z} = e^{-\lambda(\rho-\rho_c)} \cdot \frac{\partial C_{agua}(z)}{\partial z} [/math]
[math] \frac{\partial C_{col}}{\partial z} = \frac{C_{col}(\rho, z)}{C_{agua}(z)} \cdot \frac{\partial C_{agua}(z)}{\partial z} [/math]

Recordemos que la concentración en el agua es [math]C_{agua}(z) = C_0 \left( 1 + \alpha \frac{|z|}{H} \right)[/math]. El fondo del tanque está en [math](z = -H)[/math], y la superficie del agua en [math](z = 0)[/math]. Esto significa que la región relevante para [math](z)[/math] es [math]([-H, 0])[/math]. Dentro de este rango, [math](|z| = -z)[/math]. Por lo tanto, la expresión para [math](C_{agua}(z))[/math] dentro del tanque es:

[math] C_{agua}(z) = C_0 \left( 1 + \alpha \frac{-z}{H} \right) = C_0 \left( 1 - \frac{\alpha}{H} z \right), \quad z \in [-H, 0]. [/math]

Ahora bien, la componente vertical:

[math] \frac{\partial C_{col}}{\partial z} = \left(-C_0 \frac{\alpha}{H}\right) \cdot e^{-\lambda(\rho - \rho_c)} [/math]

Finalmente, el gradiente completo queda tal que:

[math] \nabla C_{col}(\rho, z) = \left[-\lambda C_{col}(\rho, z)\right] \mathbf{e}_{\rho} + \left[-C_0 \frac{\alpha}{H} e^{-\lambda(\rho - \rho_c)}\right] \mathbf{e}_{z} [/math]

6.2 Representación del gradiente en MATLAB

Sección vertical
clear all; close all; clc;

%Parámetros 
C0 = 0.3;     
alpha = 3;    
H = 22;       
rho_c = 0.75; 
rho_a = 0.65; 
lambda = 10;  

% dominio de calculo y componentes del gradiente
r_vals = linspace(0, rho_c, 30);
z_vals = linspace(-H, 0, 60);
[R, Z] = meshgrid(r_vals, z_vals);

C_agua_Z = C0 * (1 + alpha * (Z.^2 / H^2));
C_col = C_agua_Z .* exp(-lambda * (rho_c - R));

V_r = lambda * C_col;
dC_agua_dz = C0 * alpha * (2 * Z / H^2);
V_z = dC_agua_dz .* exp(-lambda * (rho_c - R));

% Preparación para la Representación Simétrica
R_izq = -fliplr(R(:, 2:end));
Z_izq = fliplr(Z(:, 2:end));
V_r_izq = -fliplr(V_r(:, 2:end));
V_z_izq = fliplr(V_z(:, 2:end));

R_plot = [R_izq, R];
Z_plot = [Z_izq, Z];
V_r_plot = [V_r_izq, V_r];
V_z_plot = [V_z_izq, V_z];

% Representación Gráfica 
figure('Name', 'Ejercicio 6: Gradiente de Concentración', 'Position', [100, 100, 850, 700]); 
quiver(R_plot, Z_plot, V_r_plot, V_z_plot, 10.0, 'k', 'LineWidth', 1.2);
hold on;

% Dibujar contorno y armadura de acero
plot([-rho_c, rho_c], [0, 0], 'b-', 'LineWidth', 2);
plot([-rho_c, -rho_c], [-H, 0], 'b-', 'LineWidth', 2);
plot([rho_c, rho_c], [-H, 0], 'b-', 'LineWidth', 2);
plot([-rho_c, rho_c], [-H, -H], 'b-', 'LineWidth', 2);
plot([-rho_a, -rho_a], [-H, 0], 'r--', 'LineWidth', 1);
plot([rho_a, rho_a], [-H, 0], 'r--', 'LineWidth', 1);

% Etiquetas y Título 
title('\nabla C_{col}(\rho,z): Gradiente de Concentración (Vectores Grandes)', 'FontSize', 16);
xlabel('Distancia radial (r) [m]', 'FontSize', 14);
ylabel('Profundidad (z) [m]', 'FontSize', 14);
set(gca, 'FontSize', 14);
legend('Gradiente \nabla C_{col}', 'Contorno Columna', 'Posición Armadura \rho_a', 'Location', 'SouthOutside');
grid on;
ylim([-H, 0]);
xlim([-rho_c, rho_c]);

La conclusión es similar a las anteriores el gradiente del la concentración es mayor cuanto mas profundo estemos y menor cuanto menos profundo.


7 Representación de el gráfico de la función de concentración en la armadura en función de la profundidad

Vamos a representar el grafico de la concentración en la armadura en función d la profundidad:[math]C_{\text{acero}}(z)=C_{\text{col}}(\rho a, z) = C_{\text{agua}}(z) \cdot e^{-\lambda(\rho_c - \rho)}[/math] .También marcaremos el umbral crítico [math]C_{\text{crit}} = 0,05kg/m{3}[/math].


Código para la representación:

7ch.png
%Definición de parámetros 
H = 22; 
C0 = 0.3; 
alpha = 3; 
lambda = 10; 
recubrimiento = 0.10; 
C_crit = 0.05; 
%Cálculo de la función de concentración en la armadura
K = exp(-lambda * recubrimiento); 
z = linspace(-H, 0, 100); 
%Concentración en la armadura C_acero(z)
C_agua = C0 * (1 + alpha * (abs(z) / H));
C_acero = K * C_agua;
% C. Representación Gráfica
figure; 
%Graficar la Concentración en la Armadura
plot(z, C_acero, 'b-', 'LineWidth', 2, 'DisplayName', 'C_{acero}(z)');
hold on;
%Umbral Crítico
plot(z, C_crit * ones(size(z)), 'r--', 'LineWidth', 3.5, 'DisplayName', 'C_{crit} = 0.05 kg/m^3');
% Etiquetas y titulo
title('Concentración en la armadura');
xlabel('Coordenada z (metros)');
ylabel('Concentración C (kg/m^3)');
% ajustes del gráfico
grid on;
legend('Location', 'northwest');
% Inversión del eje X, hace que z=0 (superficie) quede a la izquierda
set(gca, 'XDir', 'reverse');
% identificación de la Zona de riesgo de corrosión
fill([z, fliplr(z)], [C_crit * ones(size(z)), fliplr(C_acero)], 'y', 'FaceAlpha', 0.3, 'DisplayName', 'Zona de Riesgo');
% añadir puntos clave para claridad
% Superficie (z=0)
plot(0, C_acero(end), 'ko', 'MarkerSize', 5, 'HandleVisibility', 'off');
text(-2, C_acero(end) + 0.01, [' Superficie (z=0): ', num2str(C_acero(end), '%.4f')], 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'left');
% Fondo (z=-22): Muevo el texto ligeramente hacia arriba y a la izquierda (negativo)
plot(-H, C_acero(1), 'ks', 'MarkerSize', 5, 'HandleVisibility', 'off');
text(-H + 2, C_acero(1) - 0.01, [' Fondo (z=-22 m): ', num2str(C_acero(1), '%.4f')], 'VerticalAlignment', 'top', 'HorizontalAlignment', 'right');
hold off;


Como se puede observar la concentración el la armadura aumenta linealmente cuanto mas profundidad haya .No obstante ,nunca se supera el [math]C_{\text{crit}}[/math] , siendo la densidad mas cercana en z=0 donde es igual a 0,114kg/m³.


8 Representación de las superficies de isoconcentración dentro de una columna

En este ejercicio vamos a representar la columna con su armadura en 3D con las superficies de isoconcentración para ciertos valores dentro de una de las columnas. Esto nos permitirá saber con qué densidades son capaces de llegar a la armadura de la columna lo que puede iniciar un proceso de corrosión electroquímica del acero.

Esta imagen sería desde un plano cenital de la columna.
Desde una vista normal (cambiando el zoom a 3.5 y la camara a (1.5,-1 ,15)).

Código para la representación en MATLAB:

%Parámetros del problema
H=22;            
rhoc= 0.75;      
rhoa=0.65;      
lambda=10;       
C0=0.3;         
alpha=3;   
legend_entries={};
theta = linspace(0, 1.7*pi, 60);
z = linspace(-H, 0, 100);      
[Z, Theta] = meshgrid(z, theta);
Cagua=C0*(1+alpha*(abs(Z)/H));
figure; hold on; grid on; axis equal;
xlabel('x [m]'); ylabel('y [m]'); zlabel('z [m]');
campos([0, 0,0]);
%Columna
[Zc, Theta_c] = meshgrid(z, linspace(0, 2*pi, 50));
h1 = mesh(rhoc*cos(Theta_c), rhoc*sin(Theta_c), Zc,...
    'EdgeColor', [0.5 0.5 0.5], 'FaceColor', 'none', 'EdgeAlpha', 0.1);
legend_entries{end+1}='Columna (\rho = 0.75 m)';
%Armadura
[Za, Theta_a] = meshgrid(z, linspace(0, 2*pi, 50));
h2 = mesh(rhoa*cos(Theta_a), rhoa*sin(Theta_a), Za,...
    'EdgeColor', [0.5 0.5 0.5], 'FaceColor', 'none');
legend_entries{end+1}='Armadura (\rho = 0.65 m)';
%representar valores de isoconcentracion
valores_C = [0.1, 0.2, 0.3, 0.4];
mis_colores = [
   0.0, 0.0, 1.0; 
   0.0, 0.8, 0.0; 
   1.0, 0.6, 0.0; 
   1.0, 0.0, 0.0];
for i = 1:length(valores_C)
   ccol = valores_C(i);
   Rhoiso = rhoc + (1/lambda) * log(ccol ./ Cagua);
  
   % Filtros de validez física
   Rhoiso(Rhoiso < 0) = NaN;
   Rhoiso(Rhoiso > rhoc) = NaN;
  
   X = Rhoiso .* cos(Theta);
   Y = Rhoiso .* sin(Theta);
  
   surf(X, Y, Z, 'FaceColor', mis_colores(i,:), 'EdgeColor', 'none', 'FaceAlpha', 1);
   legend_entries{end+1} = ['C = ' num2str(ccol) ' kg/m^3'];
end
legend(legend_entries, 'Location', 'bestoutside');
%iluminación
lighting gouraud;     
material dull;        
xlim([-1 1]); ylim([-1 1]);
camzoom(1.5);

No cerramos la columna completamente para mejor visión y entendimiento de lo que ocurre (bastaría con cambiar theta a 2 para poner la columna entera). Como vemos en la gráfica creada todas las densidades pasan el cemento (la primera malla) y eventualmente en lo profundo de la columna acaban pasando también la armadura ,a excepción de la densidad 0.1 km/m3 que desde el principio atraviesa la armadura.

9 Estimación de la vida útil de la columna en la zona crítica

1. Definición de la Pérdida Crítica de Diámetro

La pérdida crítica de capacidad estructural se alcanza cuando se corroe el 25% del diámetro de la barra.

  • Diámetro de la barra: [math]d_{\text{barra}} = 20 \text{ mm}[/math]
  • Pérdida crítica de diámetro: [math]d_{\text{pérdida}} = 0.25 \times d_{\text{barra}}[/math]

[math] d_{\text{pérdida}} = 0.25 \times 20 \text{ mm} = 5 \text{ mm} [/math]


2. Cálculo del Tiempo de Corrosión (Vida Útil)

La corrosión avanza radialmente, es decir, consume el diámetro de la barra desde el exterior hacia el interior, con una velocidad constante [math]v_{\text{corr}}[/math].

  • Velocidad de corrosión: [math]v_{\text{corr}} = 0.1 \text{ mm/año}[/math]
  • Distancia total a corroer (pérdida total del diámetro): [math]D_{\text{corroída}} = 5.0 \text{ mm}[/math]

El tiempo que tarda en corroerse una distancia [math]D_{\text{corroída}}[/math] a una velocidad [math]v_{\text{corr}}[/math] es:

[math] \displaystyle \text{Tiempo } (T) = \frac{\text{Distancia Corroída } (D_{\text{corroída}})}{\text{Velocidad de Corrosión } (v_{\text{corr}})} [/math]

Sustituyendo los valores:

[math] \begin{align} T &= \frac{5.0 \text{ mm}}{0.1 \text{ mm/año}} \\ T &= 50 \text{ años} \end{align} [/math]

En conclsuión, la vida útil de la columna, basada en el criterio de pérdida crítica del 25% del diámetro de las barras de armadura, es de 50 años desde el momento en que inicia la corrosión (es decir, desde que los contaminantes alcanzan el acero y superan el umbral [math]C_{\text{crit}}[/math]).

10 Calculo de la masa total de contaminantes infiltrados en una columna

Para calcular la masa total de contaminantes infiltrados primero hay que establecer los datos para poder resolver la integral:

  • [math]\alpha = 3[/math] (modela el aumento hacia el fondo por sedimentación)
  • [math]C_0 = 0.3 \text{ kg/m}^3[/math]
  • [math]\rho_c = 0.75 \text{ m}[/math] (radio de la columna)
  • [math]H = 22 \text{ m}[/math] (profundidad/altura)
  • [math]\lambda = 10 \text{ m}^{-1}[/math]

La fórmula que vamos a integrar es: [math] C_{\text{col}}(\rho, z) = C_{\text{agua}}(z) \cdot e^{-\lambda (\rho_c - \rho)}, [/math] donde [math] C_{\text{agua}}(z) = C_0 \left( 1 + \alpha \frac{|z|}{H} \right) [/math]

[math] M_{\text{col}} = \iiint_V C_0 \left( 1 + \alpha \frac{|z|}{H} \right) e^{-\lambda (\rho_c - \rho)} dV = \int_0^{2\pi} \int_{-H}^0 \int_{0}^{\rho_c} C_0 \left( 1 + \alpha \frac{|z|}{H} \right) e^{-\lambda (\rho_c - \rho)} \rho d\rho dz d\theta [/math] [math] = \int_0^{2\pi} \int_{-H}^0 \int_{0}^{\rho_c} C_0 \left( 1 + \alpha \frac{|z|}{H} \right) e^{-\lambda (\rho_c - \rho)} \rho d\rho dz d\theta = \int_0^{2\pi} d\theta \int_{-H}^0 C_0 \left( 1 + \alpha \frac{|z|}{H} \right) dz \int_{0}^{\rho_c} e^{-\lambda (\rho_c - \rho)} \rho d\rho [/math] [math] = 2\pi \cdot C_0 \left[ z + \alpha \frac{z^2}{2H} \right]_{-H}^0 \cdot \left[ \frac{\rho e^{\lambda\rho-\lambda\rho_c}}{\lambda} - \frac{e^{\lambda\rho-\lambda\rho_c}}{\lambda^2} \right]_{0}^{\rho_c} [/math] [math] = 2\pi \cdot C_0 \left( H + \alpha \frac{H}{2} \right) \cdot \left( \frac{\lambda \rho_c e^{-\lambda \rho_c} - e^{-\lambda \rho_c} + 1}{\lambda^2 e^{-\lambda \rho_c}} \right) = 6.74 \text{kg} [/math]

[math] {\textbf{La masa de contaminantes en el agua que rodea la columna en un volumen equivalente:}} [/math]


[math]M_{agua} = \iiint_{V} C_0(1+\alpha \frac{|z|}{H}) dV = \int_{0}^{2 \pi} \int_{-H}^{0} \int_{0}^{\rho_c} C_0(1+\alpha \frac{|z|}{H}) \rho d\rho dz d\theta = \int_{0}^{2 \pi} d\theta \int_{-H}^{0} C_0(1+\alpha \frac{|z|}{H}) dz \int_{0}^{\rho_c} \rho d\rho = 2 \pi |\cdot C_0(z+\alpha \frac{z^2}{2 H}) |_{-H}^{0} \cdot \frac{\rho^2}{2} |_{0}^{\rho_c} = 29.16 \text{ kg}[/math]


Calculamos la efectividad:


[math] \text{Efectividad} = \frac{M_{col}}{M_{agua}} \cdot 100 = 23\% [/math]

Como se puede ver con los cálculos si el espacio de la columna estuviera ocupado por agua, habría unos 29.16 kg de contaminantes. Sin embargo, gracias a la barrera física del hormigón,sólo logran penetrar unos 6.74 kg. Esto demuestra que la columna actúa como una barrera efectiva, reduciendo un 77% la carga química.

11 Representación del campo de concentración de contaminantes en el agua [math]Cagua(z)[/math].

Definición Analítica. La función describe la concentración de contaminantes ([math]{\rm kg/m^3}[/math]) en función de la profundidad [math]z[/math].

  • En la superficie ([math]z = 0[/math]), la concentración es [math]C_0[/math].
  • En el fondo ([math]z = -H[/math]), la concentración aumenta debido al factor [math]\alpha[/math].

La ecuación es: [math] C_{agua}(z) = C_0 [1 + \alpha (-z/H)] [/math]

Datos:

  • [math]C_0 = 0.3 {\rm kg/m^3}[/math]
  • [math]\alpha = 3[/math]
  • [math]H = 22 {\rm m}[/math]
  • [math]z \in [-22, 0][/math]

(a) Perfil de Concentración: Un gráfico de línea simple para ver cómo crece C al bajar. Se coloca la profundidad z en el eje vertical para que sea intuitivo (el fondo está abajo).

(b) Mapa de Colores en la Pared: Visualización de una de las paredes largas del tanque (L = 290 m) para observar las "capas" de suciedad.


Representación en MATLAB:

Tcampos3.jpg
% 1. Definición de Parámetros Físicos
L = 290;            
H = 22;             
C0 = 0.3;           
alpha = 3;          

% PARTE (a): Gráfico de la función C_agua(z)
% Definimos el vector de profundidad para el perfil
z_line = linspace(-H, 0, 100);
% Usamos -z_line para que la fracción sea positiva (profundidad absoluta)
C_line = C0 * (1 + alpha * (-z_line / H));
figure('Name', 'Tarea 11: Distribución de Contaminantes', 'Color', 'w');
subplot(1, 2, 1); 
plot(C_line, z_line, 'r-', 'LineWidth', 2);
grid on;
title({'(a) Perfil Vertical de Concentración'; 'C_{agua}(z)'});
xlabel('Concentración (kg/m^3)');
ylabel('Profundidad z (m)');
ylim([-H 0]); 
text(C0, 0.5, '\leftarrow Superficie (0.3 kg/m^3)', 'FontSize', 8);
text(max(C_line), -H, '\leftarrow Fondo (Sedimentación)', 'FontSize', 8, 'HorizontalAlignment', 'right');

% PARTE (b): Mapa de colores sobre una pared del tanque
% Generamos la malla 2D para la pared lateral (Plano X-Z)
x_wall = linspace(0, L, 100);       
z_wall = linspace(-H, 0, 100);      
[X_W, Z_W] = meshgrid(x_wall, z_wall);
C_wall = C0 * (1 + alpha * (-Z_W / H));
subplot(1, 2, 2); 
pcolor(X_W, Z_W, C_wall);
shading interp; 
axis tight;     
box on;         

colormap(jet);      
c = colorbar;       
c.Label.String = 'Concentración de Contaminantes (kg/m^3)';
c.Label.FontWeight = 'bold';
title({'(b) Mapa de Concentración en Pared'; 'Sección Longitudinal'});
xlabel('Longitud del Tanque x (m)');
ylabel('Profundidad z (m)');
sgtitle('Tarea 11: Modelo de Sedimentación en el Tanque de Arroyofresno');


Gráfica (a): Muestra una relación lineal. En la superficie (z = 0), la concentración es mínima (0.3 kg/m³). En el fondo (z = -22), la concentración se multiplica por (1 + α) = 4, llegando a 1.2 kg/m³. Esto representa el fenómeno de decantación: los sólidos suspendidos caen por gravedad y se acumulan abajo.

Gráfica (b): Observamos que las isoclas (líneas de igual concentración) son perfectamente horizontales. Esto es coherente con un modelo simplificado donde asumimos que el agua está "estancada" o que la distribución es uniforme a lo largo y ancho del tanque, variando solo con la altura. Las bandas de color rojo intenso en la parte inferior indican la zona de mayor toxicidad y riesgo para la estructura.

12 Calculo del gradiente de concentración de contaminante en el agua [math]\nabla C_{\text{agua}}[/math].

El campo escalar [math]C_{\text{agua}}[/math] es una función que nos indica la concentración en el agua de las contaminantes.

[math]C_{\text{agua}}(z) = C_0 \left(1 - \alpha \frac{z}{H}\right)[/math]


Siendo los parámetros los definidos anteriormente y con z=0 en la superficie y z=-H en el fondo del tanque. El gradiente de concentración es:

\nabla C_{\text{agua}} = \frac{\partial C_{\text{agua}}}{\partial x} \hat{i} + \frac{\partial C_{\text{agua}}}{\partial y} \hat{j} + \frac{\partial C_{\text{agua}}}{\partial z} \hat{k}

Como [math]C_{\text{agua}}[/math] no depende de "x" ni de "y", las derivadas parciales[math]\frac{\partial C_{\text{agua}}}{\partial x}[/math] y [math]\frac{\partial C_{\text{agua}}}{\partial y}[/math] son cero.

El gradiente se reduce a la componente en "z":

[math] \nabla C_{\text{agua}} = \frac{d}{dz} \left[ C_0 \left( 1 - \alpha \frac{z}{H} \right) \right] k [/math]

[math] \nabla C_{\text{agua}} = C_0 \left( -\frac{\alpha}{H} \right) k [/math]

[math] \nabla C_{\text{agua}} = - \frac{C_0 \alpha}{H} k [/math]

La interpretación física de esta es que el gradiente es un vector constante en todo el volumen del agua y que apunta hacia abajo -k esto tiene sentido y es coherente ya que el gradiente apunta hacia el sentido de máximo crecimiento y la concentración de contaminantes apunta hacia el fondo del tanque. El valor numérico del gradiente:

[math] |\nabla C_{\text{agua}}| = \frac{(0.3 \text{ kg/m}^3)(3)}{22 \text{ m}} \approx 0.0409 \left( \frac{\text{kg}}{\text{m}^3} \right)/\text{m} [/math]

La representación según el código de MATLAB:

Tcampos7.jpg
%  12: Visualización Mejorada del Gradiente de Concentración
 
% 1. Parámetros del problema
C0 = 0.3; 	
alpha = 3;	
H = 22;   	
L_plot = 290;
 
% 2. Cálculo del Gradiente (Vector Constante)
dz_dz = - (C0 * alpha) / H;
Vz = dz_dz;
Vx = 0;
 
% 3. Creación de la malla para el mapa de calor
[X_map, Z_map] = meshgrid(linspace(0, L_plot, 100), linspace(-H, 0, 100));
C_agua_map = C0 * (1 - alpha * Z_map / H);
 
% 4. Creación de la malla para el campo vectorial
NumPuntosX = 20;
NumPuntosZ = 15;
 
Z_max_plot = -H + 0.5;
[X, Z] = meshgrid(linspace(0, L_plot, NumPuntosX), linspace(Z_max_plot, 0, NumPuntosZ));
U = Vx * ones(size(X));
W = Vz * ones(size(Z));
 
% 5. Representación gráfica
figure('Color', 'w');
pcolor(X_map, Z_map, C_agua_map);
shading interp;       	
colormap(jet);        	
colorbar;
c = colorbar('Location', 'EastOutside');
ylabel(c, 'Concentración C_{agua} [kg/m^3]', 'FontSize', 12);
 
hold on;
 
% Superpone el campo vectorial (gradiente)
h = quiver(X, Z, U, W, 0.3, 'LineWidth', 3, 'Color', [0 0 0], 'MaxHeadSize', 0.5);
 
% Ajustes de visualización y BORDES
plot([0 L_plot], [-H -H], 'k-', 'LineWidth', 3);
plot([0 L_plot], [0 0], 'k-', 'LineWidth', 1);  
plot([0 0], [-H 0], 'k-', 'LineWidth', 3);   	
plot([L_plot L_plot], [-H 0], 'k-', 'LineWidth', 3);
 
axis([0 L_plot -H 0]);
grid on;
 
% 7. Titulos y texto
text(L_plot*0.8, -H*0.1, '\bf{Superficie (z=0)}', 'FontSize', 11, 'HorizontalAlignment', 'right', 'FontWeight', 'bold', 'Color', 'w');
text(L_plot*0.8, -H*0.9, '\bf{Fondo (z=-22)}', 'FontSize', 11, 'HorizontalAlignment', 'right', 'FontWeight', 'bold', 'Color', 'w');
text(L_plot*0.5, -H*0.5, ' \leftarrow \nabla C_{agua} apunta en la dirección de máximo crecimiento de la concentración', 'HorizontalAlignment', 'center', 'FontSize', 10, 'FontWeight', 'bold', 'BackgroundColor', [1 1 1 0.7]);
title('\bf{Campo Escalar de Concentración y su Gradiente (\nabla C_{agua})}', 'FontSize', 16);
xlabel('Longitud del Tanque (x) [m]');
ylabel('Profundidad (z) [m]');
 
hold off;


13 Superficies de isoconcentración

Debemos encontrar qué forma tienen las superficies donde la concentración [math]C_{\text{agua}}(x, y, z)[/math] es constante. Recordemos nuestro modelo matemático: [math]C_{agua}(z) = C_0 [1 + \alpha (-z/H)][/math]. La función solo depende de la variable z (profundidad). No aparecen x ni y. Esto significa que si fijamos un valor de concentración [math]C_{\text{cte}}[/math], la única variable que se fija es z.

Cálculo de las Profundidades: Debemos encontrar a qué profundidad (z) se encuentran los valores solicitados: 0.4, 0.6, 0.8, 1.0 kg/m³.

Despejamos z de la ecuación:

[math] \frac{C_{\text{cte}}}{C_0} = 1 - \left( \alpha \frac{z}{H} \right) \implies \left( \alpha \frac{z}{H} \right) = 1 - \frac{C_{\text{cte}}}{C_0} \implies z = \frac{H}{\alpha} \left[ 1 - \frac{C_{\text{cte}}}{C_0} \right] [/math]

Sustituyendo datos (H = 22, α = 3, C₀ = 0.3):

Para C = 0.4: z ≈ -2.44 m

Para C = 0.6: z ≈ -7.33 m

Para C = 0.8: z ≈ -12.22 m

Para C = 1.0: z ≈ -17.11 m

Todas estas profundidades están dentro del tanque (entre 0 y -22 m), por lo que son válidas.

13.1 Representación 3D e intepretación

Código MATLAB

Tcampos13.jpg
% 1. Definición de Parámetros
L = 290;            
W = 140;            
H = 22;             
C0 = 0.3;           
alpha = 3;          
C_targets = [0.4, 0.6, 0.8, 1.0];
% 2. Configuración de la Figura
figure('Name', 'Tarea 13: Isosuperficies 3D', 'Color', 'w');
hold on;
view(3); 
grid on;
axis equal;

xlabel('x (m)', 'FontSize', 12, 'FontWeight', 'bold');
ylabel('y (m)', 'FontSize', 12, 'FontWeight', 'bold');
zlabel('z (m)', 'FontSize', 12, 'FontWeight', 'bold');
title('Superficies de Isoconcentración en el Tanque', 'FontSize', 16, 'FontWeight', 'bold');
set(gca, 'FontSize', 11);
% 3. Dibujar el "esqueleto" del tanque (Caja transparente)
vertices_tanque = [
   0 0 -H; 290 0 -H; 290 140 -H; 0 140 -H; % Fondo
   0 0 0;  290 0 0;  290 140 0;  0 140 0   % Tapa
];
caras_tanque = [
   1 2 3 4; 5 6 7 8; 1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8
];
patch('Vertices', vertices_tanque, 'Faces', caras_tanque, ...
     'FaceColor', 'none', 'EdgeColor', 'k', 'LineStyle', '--');
% 4. Bucle para calcular y dibujar cada plano
colores = jet(length(C_targets));
for i = 1:length(C_targets)
   C_val = C_targets(i);
  
   % Cálculo de profundidad z
   z_plane = (H/alpha) * (1 - C_val/C0);
  
   X_plane = [0, L, L, 0];
   Y_plane = [0, 0, W, W];
   Z_plane = [z_plane, z_plane, z_plane, z_plane];
  
   fill3(X_plane, Y_plane, Z_plane, colores(i,:), ...
         'FaceAlpha', 0.5, 'EdgeColor', 'none');
  
   txt_label = sprintf(' C = %.1f kg/m^3 (z = %.1f m) ', C_val, z_plane);
   text(L, 0, z_plane, txt_label, ...
        'FontSize', 12, ...             
        'FontWeight', 'bold', ...
        'BackgroundColor', 'w', ...
        'Margin', 1);
end

zlim([-H 2]);
view(-30, 20);
hold off;


Se puede apreciar que las superficies de igual concentración son planos horizontales perfectos, paralelos a la superficie del agua y al fondo. Están distribuidos uniformemente: a medida que bajamos, atravesamos "láminas" de suciedad cada vez mayor.

Interpretación Física: El agua está estratificada. Esto confirma que la gravedad es la fuerza dominante: las partículas pesan y caen hacia abajo, sin moverse hacia los lados.Al ser planos perfectos, significa que la suciedad es la misma en cualquier punto a lo largo (x) o ancho (y) del tanque. Si coges agua de la esquina o del centro a la misma profundidad, tendrás la misma cantidad de contaminantes. En cuanto a la estabilidad del modelo no hay turbulencias ni mezclas caóticas; el tanque actúa como un decantador estático muy eficiente.

14 Masa total de contaminantes en el agua

Para calcular la masa total de contaminantes en el agua depositada sobre el fondo del tanque debemos descontar el área que ocupan las columnas en el recinto.

L=290 m

W=140m

H=22m

H=15m

Pc= 0.75m

[math]C_0 = 0.3 \, \mathrm{kg}/\mathrm{m}^3[/math]

[math]\alpha = 3[/math]

[math]N = \left(\frac{L}{15}\right) \times \left(\frac{W}{15}\right) = 180 \text{ columnas}[/math]

[math]\text{Area}_{\text{columnas}} = \pi(r^2) \times H_{\text{agua}} = \pi \times 180 \times (0.75\mathrm{m})^2 \times 15 = 4771.29 \mathrm{m}^3[/math]

[math]\text{Area}_{\text{Agua}} = (290 \times 140) - \pi \times 180 \times (0.75\mathrm{m})^2 = 40281.91 \, \mathrm{m}^2[/math]

A continuación aplicamos la fórmula de la concentración en función de la profundidad