El tanque de tormentas de Arroyofresno (Grupo 43)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | El tanque de tormentas de Arroyofresno. Grupo 43 |
| Asignatura | Teoría de Campos |
| Curso | 2025-26 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
El tanque de tormentas de Arroyofresno, en funcionamiento desde 2007, es una de las infraestructuras hidráulicas subterráneas más relevantes de Madrid para la gestión de episodios de lluvia intensa. Con una capacidad de almacenamiento cercana a 400 000 m³, actúa como un gran depósito regulador donde se retienen las primeras aguas de escorrentía, suelen ser las más cargadas de contaminantes debido al arrastre de residuos, partículas, metales pesados y materia orgánica acumulada en la superficie urbana antes de ser enviadas a tratamiento.
La función esencial de esta instalación es reducir los caudales punta que llegan al alcantarillado durante las tormentas. Por lo que la retención temporal de estas aguas evita que lleguen de forma directa a los cauces naturales y permite enviarlas posteriormente a la estación depuradora en condiciones controladas. Al amortiguar esos volúmenes excesivos, se minimizan las posibilidades de inundación en superficie y se previene la descarga directa de aguas altamente contaminadas en los cauces receptores. Esto convierte al tanque en un elemento estratégico tanto para la seguridad hidráulica de la ciudad como para la protección medioambiental. Infraestructuras similares pueden encontrarse en grandes ciudades europeas como Barcelona, Berlín o París, donde la gestión de aguas pluviales mediante tanques o colectores subterráneos forma parte esencial de los sistemas de saneamiento modernos.
En este trabajo se construye un modelo geométrico simplificado del tanque de Arroyofresno, con el objetivo de analizar distintos campos escalares relevantes: la presión hidrostática ejercida por la columna de agua, la distribución vertical de contaminantes, los procesos de infiltración en el hormigón y el avance de la corrosión en las armaduras. Todas las representaciones y cálculos se realizarán y analizaran con Matlab, aplicando los conceptos de la asignatura de Teoría de Campos, con el fin de comprender de manera precisa cómo interactúan los procesos hidráulicos y estructurales en una infraestructura esencial para la gestión del agua urbana en Madrid.
Contenido
- 1 Funcionamiento del Tanque de Arroyofresno:
- 2 Presión y fuerzas estructurales sobre columnas
- 3 Infiltración y corrosión en columnas
- 3.1 Representación del campo de concentración infiltrada:
- 3.2 Representación del campo de gradiente de concentración infiltrada:
- 3.3 Representación del campo de la función de concentración de la armadura en función de la profundidad:
- 3.4 Representación de las superficies de isoconcentración dentro de una columna:
- 3.5 Estimación de la vida útil de la columna en la zona crítica:
- 3.6 Cálculo de la masa total de contaminantes infiltrado:
- 3.7 Cálculo del campo de concentración de contaminantes en el agua:
- 3.8 Apartado 10: Cálculo Numérico de Masa de Contaminantes
- 4 Decantación y distribución de contaminantes
- 4.1 Grafico de la función Cagua(z)
- 4.2 Mapa de Colores en Pared del Tanque
- 4.3 Representación de contaminantes del agua
- 4.3.1 Cálculo del Gradiente de Concentración
- 4.3.2 Función de concentración
- 4.3.3 Parámetros del problema
- 4.3.4 Simplificación para el dominio considerado
- 4.3.5 Cálculo del gradiente
- 4.3.6 Sustitución numérica
- 4.3.7 Interpretación física
- 4.3.8 Código MATLAB
- 4.3.9 Descripción de las superficies de isoconcentracion en el agua:
- 4.3.10 Cálculo de la masa total de contaminantes en el agua del tanqu:
- 4.3.11 Preguntas pasadas las 24 horas de decantación:
1 Funcionamiento del Tanque de Arroyofresno:
El funcionamiento del tanque se basa en laminar los caudales punta que llegan al alcantarillado durante una tormenta. Cuando la red unitaria, que transporta tanto aguas residuales como pluviales, supera su capacidad, el tanque se activa automáticamente y comienza a llenarse. De esta forma se evita que se produzcan inundaciones en superficie o vertidos altamente contaminantes al medio natural. Durante el tiempo que el agua permanece retenido en el depósito, se produce una decantación natural que reduce la cantidad de sólidos en suspensión puesto que el agua sucia experimenta una fase de reposo que permite que la parte de los sólidos se depositen en fondo, lo que facilita su posterior tratamiento cuando la depuradora vuelve a estar en condiciones de recibir el caudal. Este proceso, además de regular hidráulicamente la red, genera un entorno químicamente agresivo en el interior del tanque, ya que las aguas contaminadas favorecen la presencia de cloruros y sulfatos que afectan a las estructuras de hormigón armado. Los cloruros pueden penetrar en el hormigón y alcanzar la armadura puesto que si el hormigón se encuentran sometido a un ambiente químico agresivo durante un largo tiempo, se destruye la capa pasivadora del acero y provoca procesos de corrosión que generan fisuras y pérdida de adherencia. Cuando esto ocurre, la humedad y el oxígeno desencadenan procesos de corrosión que aumentan el volumen de acero oxidado y se originan fisuras en el recubrimiento. Por su parte, los sulfatos procedentes de la degradación de la materia orgánica reaccionan con los componentes del cemento, dando lugar a productos expansivos que producen tensiones internas y, a largo plazo, deterioran progresivamente la matriz del hormigón. Para hacer frente a estos mecanismos de daño que son responsables de pérdidas de durabilidad podrían limitan la vida útil de estas instalaciones, dichas estructuras se diseñan con recubrimientos más gruesos, hormigones de baja porosidad, armaduras resistentes a la corrosión e incluso con revestimientos protectores en las superficies en contacto con el agua e incluso se puede llegar a recurrir a recubrimientos superficiales que actúan como barrera frente a la penetración de contaminantes.
En este trabajo se desarrolla un modelo geométrico simplificado del tanque de Arroyofresno para estudiar fenómenos como la presión hidrostática, la distribución de contaminantes, la infiltración en el hormigón y la evolución de la corrosión en la armadura. Todo ello se analiza mediante Matlab, siguiendo los métodos propios de la Teoría de Campos, con el fin de comprender de manera precisa cómo interactúan los procesos hidráulicos y estructurales en una infraestructura esencial para la gestión del agua urbana en Madrid.
2 Presión y fuerzas estructurales sobre columnas
2.1 Cálculo y representación del campo de presiones P(z):
2.2 Cálculo y representación del gradiente de presión y representación como campo vectorial:
2.3 Cálculo de la fuerza total que el agua ejerce sobre una columna:
3 Infiltración y corrosión en columnas
3.1 Representación del campo de concentración infiltrada:
Para una sección vertical que pasa por el eje de la columna, el campo de concentración infiltrada \(C_{\mathrm{col}}(x,z)\) viene dado por \(C_{\mathrm{col}}(r,z) = C_0 \bigl(1+\alpha |z|/H\bigr)\,\exp[-\lambda(\rho_c-r)]\).
H=22;rho_c=0.75;rho_a=0.65;C0=0.3;alpha=3;lambda=10;
n=120;
x=linspace(-rho_c, rho_c, n);z=linspace(-H,0,n);
[X,Z] = meshgrid(x, z);R = abs(X);
% C_col(r,z) = C0*(1 + alpha*|z|/H) * exp(-lambda*(rho_c - r))
C_vert = C0 .* (1 + alpha*abs(Z)/H) .* exp(-lambda*(rho_c - R));
C_vert(R > rho_c) = NaN;
figure
surf(X, Z, C_vert, 'EdgeColor','none');
view(2);
colorbar
xlabel('x [m]');
ylabel('z [m]');
title('C_{col}(x,z) - Seccion');
axis tight
hold on
zTop = max(C_vert(:)) * 1.01;
x1 = rho_a * ones(size(z));x2 = -rho_a * ones(size(z));
plot3(x1, z, zTop*ones(size(z)), 'k--', 'LineWidth', 1.5);
plot3(x2, z, zTop*ones(size(z)), 'k--', 'LineWidth', 1.5);
hold off
|
Representación del campo de concentración infiltrada (sección transversal)
H=22;rho_c=0.75;rho_a=0.65;C0=0.3;alpha=3;lambda=10;
z0 = -H/2;n= 150;
x= linspace(-rho_c, rho_c, n);y= linspace(-rho_c, rho_c, n);
[X,Y] = meshgrid(x, y);R= sqrt(X.^2 + Y.^2);
% C_col(r,z0) = C0*(1 + alpha*|z0|/H) * exp(-lambda*(rho_c - r))
C_cross = C0 .* (1 + alpha*abs(z0)/H) .* exp(-lambda*(rho_c - R));
C_cross(R > rho_c) = NaN;
figure
surf(X, Y, C_cross, 'EdgeColor','none');
view(2);
colorbar
xlabel('x [m]');
ylabel('y [m]');
title('C_{col}(x,y) - Seccion transversal');
axis equal tight
hold on
zTop = max(C_cross(:)) * 1.01;
theta = linspace(0,2*pi,200);
xa = rho_a*cos(theta);
ya = rho_a*sin(theta);
plot3(xa, ya, zTop*ones(size(theta)), 'k--', 'LineWidth', 1.5);
hold off
|
3.2 Representación del campo de gradiente de concentración infiltrada:
H=22;rho_c=0.75;rho_a=0.65;C0=0.3;alpha=3;lambda=10;
n =25;
x =linspace(-rho_c, rho_c, n);
z = linspace(-H,0,n);
[X,Z] = meshgrid(x, z);
R= abs(X);
C_vert = C0 .* (1 + alpha*abs(Z)/H) .* exp(-lambda*(rho_c - R));
C_vert(R > rho_c) = NaN;
dx = x(2) - x(1);
dz = z(2) - z(1);
[dCdz, dCdx] = gradient(C_vert, dz, dx);
dCdx(R > rho_c) = NaN;
dCdz(R > rho_c) = NaN;
M = sqrt(dCdx.^2 + dCdz.^2);
Mval = M(~isnan(M));
Mmax = max(Mval);
Mmin = min(Mval);
dx_plot = dx;dz_plot = abs(dz);
dmin = min(dx_plot, dz_plot);
Lmax = 0.8 * dmin;Lmin = 0.1 * dmin;
L = (M - Mmin) / (Mmax - Mmin);
L = Lmin + (Lmax - Lmin).*L;
Ux_dir = dCdx ./ M;Uz_dir = dCdz ./ M;
Ux = Ux_dir .* L;Uz = Uz_dir .* L;
Ux(isnan(M)) = NaN;Uz(isnan(M)) = NaN;
step = 2;
X2 = X(1:step:end, 1:step:end);Z2 = Z(1:step:end, 1:step:end);
Ux2 = Ux(1:step:end, 1:step:end);Uz2 = Uz(1:step:end, 1:step:end);
figure;
hold on;
quiver(X2, Z2, Ux2, Uz2, 0, 'k', 'LineWidth', 1.2, 'MaxHeadSize', 0.9);
plot([ rho_c rho_c], [-H 0], 'k','LineWidth',1.5);
plot([-rho_c -rho_c], [-H 0], 'k','LineWidth',1.5);
plot([ rho_a rho_a], [-H 0], 'k--','LineWidth',1.3);
plot([-rho_a -rho_a], [-H 0], 'k--','LineWidth',1.3);
xlabel('x [m]');
ylabel('z [m]');
title('\nabla C_{col}(x,z) - Seccion vertical');
xlim([-rho_c rho_c]);
ylim([-H 0]);
grid on;
hold off; |
3.3 Representación del campo de la función de concentración de la armadura en función de la profundidad:
H= 22;rho_c = 0.75;rho_a = 0.65;
C0=0.3;alpha =3;lambda = 10;Ccrit = 0.05;
n = 100;
z = linspace(-H, 0, n);
factor_r = (rho_a / rho_c)^alpha;
Cacero = C0 * factor_r .* exp(lambda * z / H);
figure; hold on;
plot(z, Cacero, 'LineWidth', 1.5);
plot(z, Ccrit * ones(size(z)), 'k--', 'LineWidth', 1.2);
xlabel('Profundidad z (m)');
ylabel('C_{acero}(z) [kg/m^3]');
title('Concentración de contaminantes en la armadura');
legend('C_{acero}(z)', 'C_{crit} = 0.05 kg/m^3', 'Location', 'best');
grid on;
text(-2, Ccrit + 0.01, 'Riesgo de corrosión: C_{acero} > C_{crit}');
|
3.4 Representación de las superficies de isoconcentración dentro de una columna:
H=22;rho_c=0.75;rho_a=0.65;C0=0.3;alpha=3;lambda =10;
Ciso = [0.1 0.2 0.3 0.4]; nx = 40; ny = 40; nz = 40;
x = linspace(-rho_c, rho_c, nx);y = linspace(-rho_c, rho_c, ny);
z = linspace(-H, 0, nz);
[X,Y,Z] = meshgrid(x, y, z);R = sqrt(X.^2 + Y.^2);
Ccol = C0 .* (R./rho_c).^alpha .* exp(lambda .* Z ./ H);Ccol(R > rho_c) = NaN;
figure; hold on;
colores = lines(length(Ciso));
for k = 1:length(Ciso)
cte = Ciso(k);
p = patch(isosurface(X, Y, Z, Ccol, cte));
set(p,'FaceColor', colores(k,:),'EdgeColor','none','FaceAlpha',0.6);
end
n_circ = 80;[Xa,Ya,Za] = cylinder(rho_a, n_circ);Za = -H + Za * H;
surf(Xa, Ya, Za,'FaceColor', 'none','EdgeColor', 'k','LineWidth', 1.2);
axis equal;
xlabel('x (m)');ylabel('y (m)');zlabel('z (m)');
title('Superficies de isoconcentración C_{col} y cilindro de la armadura');
view(40, 25);
|
3.5 Estimación de la vida útil de la columna en la zona crítica:
3.6 Cálculo de la masa total de contaminantes infiltrado:
3.7 Cálculo del campo de concentración de contaminantes en el agua:
3.8 Apartado 10: Cálculo Numérico de Masa de Contaminantes
| Código MATLAB y Resultados | Visualización |
|---|---|
3.8.1 Código MATLAB%% Apartado (10) - Cálculo de masa de contaminantes infiltrados
% Teoría de Campos - Tanque de Tormentas Arroyofresno
clear all; close all; clc;
%% Parámetros del problema
C0 = 0.3; % kg/m³ - Concentración en superficie
alpha = 3; % Coeficiente de aumento con profundidad
H = 22; % m - Altura del tanque
lambda = 10; % m⁻¹ - Coeficiente de atenuación
rho_e = 0.75; % m - Radio exterior de la columna
rho_a = 0.65; % m - Radio de la armadura
%% 1. MASA DE CONTAMINANTES INFILTRADOS EN UNA COLUMNA
% Definir la función de concentración en la columna
C_col = @(rho, z) C_agua(z, C0, alpha, H) .* exp(-lambda .* (rho_e - rho));
% Integración numérica en coordenadas cilíndricas
N_rho = 100; % Puntos en dirección radial
N_theta = 36; % Puntos en dirección angular
N_z = 100; % Puntos en dirección vertical
% Crear mallas
rho_vec = linspace(0, rho_e, N_rho);
theta_vec = linspace(0, 2*pi, N_theta);
z_vec = linspace(-H, 0, N_z);
[rho_grid, theta_grid, z_grid] = meshgrid(rho_vec, theta_vec, z_vec);
% Evaluar la función en toda la malla
C_values = C_col(rho_grid, z_grid);
% Calcular elemento de volumen: dV = ρ dρ dθ dz
dV = rho_grid .* (rho_vec(2)-rho_vec(1)) .* (theta_vec(2)-theta_vec(1)) .* (z_vec(2)-z_vec(1));
% Calcular masa total por integración numérica
M_col = sum(C_values(:) .* dV(:));
%% 2. MASA DE CONTAMINANTES EN AGUA EQUIVALENTE
% Volumen equivalente (desplazado por la columna)
V_equiv = pi * rho_e^2 * H;
% Concentración promedio en el agua
z_samples = linspace(-H, 0, 1000);
C_agua_samples = C_agua(z_samples, C0, alpha, H);
C_promedio = trapz(z_samples, C_agua_samples) / H;
% Masa en agua equivalente
M_agua_equiv = V_equiv * C_promedio;
%% 3. COMPARACIÓN
relacion = M_col / M_agua_equiv * 100;
%% FUNCIÓN AUXILIAR - Concentración en el agua
function C = C_agua(z, C0, alpha, H)
C = C0 .* (1 + alpha .* abs(z) ./ H);
end3.8.2 Resultados NuméricosMasa de contaminantes infiltrados:
Masa en agua equivalente:
Comparación:
|
4 Decantación y distribución de contaminantes
4.1 Grafico de la función Cagua(z)
4.1.1 Gráfico de Concentración vs Profundidad
| Código MATLAB | Gráfica Resultante Función Cagua(z) |
|---|---|
%% (11a) Gráfico de C_agua(z) vs z
% Parámetros del modelo
C0 = 0.3; % Concentración en superficie (kg/m^3)
alpha = 3; % Parámetro de aumento
H = 22; % Profundidad total del tanque (m)
% Vector de profundidad y cálculo de concentración
z = linspace(-H, 0, 100);
C_agua = C0 * (1 + alpha * abs(z) / H);
% Crear gráfico
figure;
plot(C_agua, z, 'b', 'LineWidth', 2);
xlabel('Concentración C_{agua}(z) (kg/m^3)');
ylabel('Profundidad z (m)');
title('(11a) Concentración de contaminantes en el agua vs Profundidad');
grid on;
set(gca, 'YDir', 'reverse');
% Añadir puntos de referencia
hold on;
plot(C0, 0, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'red');
plot(C0*(1+alpha), -H, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'red');
legend('C_{agua}(z)', 'Superficie (z=0)', 'Fondo (z=-H)', 'Location', 'best'); |
4.2 Mapa de Colores en Pared del Tanque
4.2.1 Mapa de Colores en Pared del Tanque
| Código MATLAB (11b) | Gráfica Resultante (11b) |
|---|---|
%% (11b) Mapa de colores sobre una pared del tanque
% Parámetros del modelo
C0 = 0.3; % Concentración en superficie (kg/m^3)
alpha = 3; % Parámetro de aumento
H = 22; % Profundidad total del tanque (m)
W = 140; % Anchura del tanque (m)
% Definir coordenadas para una pared (x fijo, variando y y z)
y_pared = linspace(-W/2, W/2, 100); % Coordenadas y de la pared
z_pared = linspace(-H, 0, 100); % Coordenadas z de la pared
[Y, Z] = meshgrid(y_pared, z_pared); % Malla para la pared
% Calcular concentración en la pared (solo depende de z)
C_pared = C0 * (1 + alpha * abs(Z) / H);
% Crear mapa de colores
figure;
imagesc(y_pared, z_pared, C_pared);
colorbar;
xlabel('Coordenada y (m)');
ylabel('Profundidad z (m)');
title('(11b) Mapa de concentración de contaminantes en una pared del tanque');
axis xy; % Asegurar que el eje z aumente hacia arriba (0 en top, -H en bottom)
% Opcional: añadir líneas de contorno para mayor claridad
hold on;
[C,h] = contour(Y, Z, C_pared, 5, 'k-');
clabel(C, h); |
4.3 Representación de contaminantes del agua
4.3.1 Cálculo del Gradiente de Concentración
| Desarrollo Analítico | Representación Gráfica |
|---|---|
4.3.2 Función de concentraciónLa concentración de contaminantes en el agua viene dada por la expresión: [math]C_{\text{agua}}(z) = C_0 \left(1 + \alpha \frac{|z|}{H}\right)[/math] 4.3.3 Parámetros del problema
4.3.4 Simplificación para el dominio consideradoPara [math]z \leq 0[/math], tenemos que [math]|z| = -z[/math], por lo que: [math]C_{\text{agua}}(z) = C_0 \left(1 + \alpha \frac{-z}{H}\right) = C_0 \left(1 - \alpha \frac{z}{H}\right)[/math] 4.3.5 Cálculo del gradienteEl gradiente de la concentración se define como: [math]\nabla C_{\text{agua}} = \left( \frac{\partial C_{\text{agua}}}{\partial x}, \frac{\partial C_{\text{agua}}}{\partial y}, \frac{\partial C_{\text{agua}}}{\partial z} \right)[/math] Calculamos las derivadas parciales:
Por lo tanto, el gradiente resulta: [math]\nabla C_{\text{agua}} = \left( 0, 0, -\frac{C_0 \alpha}{H} \right)[/math] 4.3.6 Sustitución numérica[math]\nabla C_{\text{agua}} = \left( 0, 0, -\frac{0.3 \times 3}{22} \right) = \left( 0, 0, -0.04091 \right) \text{kg/m}^4[/math] 4.3.7 Interpretación físicaEl gradiente es un vector constante que apunta verticalmente hacia abajo con magnitud [math]0.04091 \text{kg/m}^4[/math]. Esto indica que la concentración de contaminantes aumenta uniformemente con la profundidad, lo cual es consistente con el proceso de sedimentación donde las partículas se depositan en el fondo del tanque. 4.3.8 Código MATLAB%% Apartado (12) - Campo vectorial del gradiente
C0 = 0.3; alpha = 3; H = 22; W = 140;
dC_dz = -C0 * alpha / H;
y = linspace(-W/2, W/2, 15);
z = linspace(-H, 0, 15);
[Y, Z] = meshgrid(y, z);
U = zeros(size(Y));
V = dC_dz * ones(size(Z));
figure;
quiver(Y, Z, U, V, 'b', 'LineWidth', 1.2);
xlabel('Coordenada y (m)'); ylabel('Profundidad z (m)');
title('(12) Campo vectorial del gradiente \nabla C_{agua}');
grid on; axis equal;
magnitud = abs(dC_dz);
text(0, -H/2, sprintf('Magnitud: %.4f kg/m^4', magnitud), ...
'HorizontalAlignment', 'center', 'BackgroundColor', 'white');
xlim([-W/2, W/2]); ylim([-H, 0]); |
