Aquí tienes la guía completa, lista para entregar a tus estudiantes.
Un equipo de ingenieros civiles y agroindustriales debe diseñar un canal trapezoidal de riego para abastecer cultivos en una zona rural. El canal debe suministrar suficiente caudal para distintas demandas de agua de los cultivos, y además operar en un régimen hidráulico seguro (subcrítico), que evita erosión y daños en la estructura.
Ecuación de Manning — relaciona la geometría del canal con el caudal transportado:
\[Q = \frac{1}{n} \cdot A \cdot R^{2/3} \cdot S^{1/2}\]
Donde: - Q = caudal (m³/s) - n =
coeficiente de rugosidad de Manning (adimensional) - A =
área de la sección transversal (m²) - R = radio hidráulico
(m) = A / P - S = pendiente longitudinal del canal
(m/m)
Geometría del canal trapezoidal:
\[A = (b + z \cdot y) \cdot y \qquad P = b + 2y\sqrt{1+z^2} \qquad T = b + 2 \cdot z \cdot y\]
Donde b = base, y = tirante (profundidad
del agua), z = talud lateral, T = ancho
superficial.
Número de Froude — clasifica el régimen de flujo:
\[Fr = \frac{V}{\sqrt{g \cdot D_h}} \qquad \text{con} \quad D_h = \frac{A}{T}, \quad V = \frac{Q}{A}\]
| Condición | Régimen |
|---|---|
| Fr < 1 | Subcrítico (flujo tranquilo) ✅ recomendado para riego |
| Fr = 1 | Crítico |
| Fr > 1 | Supercrítico (flujo rápido) ⚠️ riesgo de erosión |
Demanda hídrica agroindustrial — Cada cultivo tiene una demanda en mm/día, que se convierte a caudal (m³/s) según el área sembrada:
\[Q_{cultivo} = \frac{ETo \cdot K_c \cdot A_{cultivo}}{86400}\]
Donde ETo = evapotranspiración de referencia (mm/día),
Kc = coeficiente de cultivo, A_cultivo = área
en m².
El estudiante debe construir el programa conversando con Claude, enviando estas instrucciones en orden:
Paso 1 — Funciones geométricas “Escribe en Python tres funciones:
calcular_area(b, z, y),calcular_perimetro(b, z, y)ycalcular_ancho_superficial(b, z, y), con sus respectivos docstrings y usando la fórmula de Manning para canal trapezoidal.”
Paso 2 — Función de caudal y velocidad “Ahora escribe la función
calcular_caudal(b, z, y, n, S)que use las funciones anteriores para calcular Q y V, y retorne ambos valores. Incluye la verificación de que los parámetros sean positivos con condicionales.”
Paso 3 — Clasificación del régimen “Escribe la función
clasificar_regimen(Fr)que use estructuras condicionales (if/elif/else) para retornar un string con el nombre del régimen y una advertencia si es supercrítico.”
Paso 4 — Análisis por rango de tirantes (estructura repetitiva) “Escribe la función
analizar_canal(b, z, n, S, y_min, y_max, paso)que use un cicloforowhilepara iterar sobre distintos valores de tiranteyentrey_minyy_max, calcule Q, V, Fr y régimen para cada tirante, y almacene los resultados en una lista de diccionarios.”
Paso 5 — Demanda agroindustrial “Agrega la función
calcular_demanda_cultivo(nombre, ETo, Kc, area_ha)que convierta la demanda del cultivo a m³/s, y una funciónverificar_abastecimiento(Q_canal, cultivos)que use un cicloforpara evaluar con condicionales si el caudal del canal abastece cada cultivo.”
Paso 6 — Programa principal “Escribe el programa principal que llame todas las funciones con los datos del problema, imprima una tabla de resultados y muestre si cada cultivo es abastecido.”
b = 0.80 m (ancho de plantilla)
z = 1.5 (talud, relación H:V)
n = 0.014 (concreto liso)
S = 0.0008 (pendiente m/m)
y_min = 0.20 m
y_max = 1.20 m
paso = 0.20 m
| y (m) | A (m²) | P (m) | R (m) | Q (m³/s) | V (m/s) | Fr | Régimen |
|---|---|---|---|---|---|---|---|
| 0.20 | 0.220 | 1.521 | 0.145 | 0.0434 | 0.197 | 0.148 | Subcrítico |
| 0.40 | 0.560 | 2.242 | 0.250 | 0.1538 | 0.275 | 0.147 | Subcrítico |
| 0.60 | 1.020 | 2.963 | 0.344 | 0.3538 | 0.347 | 0.152 | Subcrítico |
| 0.80 | 1.600 | 3.684 | 0.434 | 0.6633 | 0.415 | 0.158 | Subcrítico |
| 1.00 | 2.300 | 4.606 | 0.499 | 1.0668 | 0.464 | 0.159 | Subcrítico |
| 1.20 | 3.120 | 5.127 | 0.609 | 1.6474 | 0.528 | 0.171 | Subcrítico |
(Valores redondeados a 3 decimales. Pequeñas diferencias en el último decimal son aceptables.)
Cultivo: Maíz | ETo=5.2 mm/día | Kc=1.05 | Área=40 ha → Q_dem ≈ 0.025 m³/s ✅
Cultivo: Arroz | ETo=6.0 mm/día | Kc=1.20 | Área=350 ha → Q_dem ≈ 0.292 m³/s ✅
Cultivo: Palma | ETo=5.5 mm/día | Kc=1.10 | Área=600 ha → Q_dem ≈ 0.420 m³/s ✅
Cultivo: Caña | ETo=5.8 mm/día | Kc=1.25 | Área=800 ha → Q_dem ≈ 0.671 m³/s ❌
El canal con y = 0.80 m no alcanza a
abastecer la caña de azúcar; el estudiante debe encontrar el tirante
mínimo que sí lo permita (respuesta: y ≈ 0.81 m).
# 🌊 CANAL DE RIEGO — Análisis Hidráulico con Python
## Notebook de Google Colab
### Estructura del Notebook (una celda por sección)
---
### CELDA 1 — Encabezado y bibliotecas
```python
# Análisis Hidráulico de Canal de Riego
# Curso: Programación de Computadores con Python
# Ingenierías Civil y Agroindustrial
import math
print("=" * 55)
print(" ANÁLISIS HIDRÁULICO DE CANAL TRAPEZOIDAL DE RIEGO")
print("=" * 55)
(El estudiante pega aquí las funciones del Paso 1)
def calcular_area(b, z, y):
...
def calcular_perimetro(b, z, y):
...
def calcular_ancho_superficial(b, z, y):
...
(Pasos 2 y 3: caudal, velocidad, Froude y clasificación)
def calcular_caudal(b, z, y, n, S):
...
def clasificar_regimen(Fr):
...
(Paso 4: iterar sobre rango de tirantes)
def analizar_canal(b, z, n, S, y_min, y_max, paso):
...
(Paso 5: demanda y verificación)
def calcular_demanda_cultivo(nombre, ETo, Kc, area_ha):
...
def verificar_abastecimiento(Q_canal, cultivos):
...
# ── Parámetros del canal ──────────────────────────
b = 0.80
z = 1.5
n = 0.014
S = 0.0008
# ── Análisis hidráulico ───────────────────────────
resultados = analizar_canal(b, z, n, S, 0.20, 1.20, 0.20)
print(f"\n{'y(m)':>6} {'A(m²)':>7} {'Q(m³/s)':>9} {'Fr':>7} {'Régimen':>14}")
print("-" * 50)
for r in resultados:
print(f"{r['y']:>6.2f} {r['A']:>7.3f} {r['Q']:>9.4f} {r['Fr']:>7.3f} {r['regimen']:>14}")
# ── Cultivos ──────────────────────────────────────
cultivos = [
{"nombre": "Maíz", "ETo": 5.2, "Kc": 1.05, "area_ha": 40},
{"nombre": "Arroz", "ETo": 6.0, "Kc": 1.20, "area_ha": 350},
{"nombre": "Palma", "ETo": 5.5, "Kc": 1.10, "area_ha": 600},
{"nombre": "Caña", "ETo": 5.8, "Kc": 1.25, "area_ha": 800},
]
Q_diseño = 0.663 # m³/s para y = 0.80 m
verificar_abastecimiento(Q_diseño, cultivos)
# Encontrar el tirante mínimo para abastecer TODOS los cultivos
# Usar un ciclo while e ir aumentando y en pasos de 0.01 m
# hasta que Q_canal >= Q_demanda_total
```
El flujo de construcción guiado con Claude permite que el estudiante
llegue a cada función con una comprensión clara del “¿para qué sirve
este bloque?”. La dependencia entre funciones
(calcular_area → calcular_caudal →
analizar_canal) hace que el alumno experimente de forma
natural la modularidad como ventaja real, no como
abstracción. La celda final de reto (tirante mínimo con
while) es un buen instrumento de evaluación
diferenciada.