Un problema clásico que unifica de manera natural los intereses de la Ingeniería Civil y la Agroindustrial es el diseño y evaluación de canales abiertos para el transporte de agua.

En Civil, esto aplica al diseño de alcantarillados pluviales y canales de drenaje; en Agroindustrial, es el fundamento de los sistemas de riego por gravedad y el manejo de efluentes en plantas de procesamiento. Este problema requiere tomar decisiones sobre la geometría del canal (estructuras condicionales) y evaluar su comportamiento ante diferentes niveles de agua (estructuras repetitivas).

Aquí tienes la propuesta estructurada para tu curso.

1. Planteamiento de la Situación y Conceptualización

El Problema: Se requiere construir un programa en Python que calcule el caudal (\(Q\)) que puede transportar un canal abierto. El usuario (ingeniero) debe poder elegir si el canal es de sección rectangular o trapezoidal. Además, debido a que el caudal varía según la temporada de lluvias, el programa debe calcular y mostrar el caudal para una serie de diferentes profundidades del agua (tirante) utilizando un ciclo repetitivo, evaluando si el canal se desborda o cumple con el diseño.

Fundamento Teórico (Ecuación de Manning): La velocidad del flujo en un canal abierto se rige por la ecuación de Manning:

\[v = \frac{1}{n} \cdot R_h^{2/3} \cdot S^{1/2}\]

Y el caudal total se obtiene multiplicando la velocidad por el área transversal (\(Q = v \cdot A\)):

\[Q = \frac{1}{n} \cdot A \cdot R_h^{2/3} \cdot S^{1/2}\]

Donde:

  • \(Q\): Caudal (\(m^3/s\))
  • \(n\): Coeficiente de rugosidad de Manning (adimensional, depende del material).
  • \(A\): Área de la sección transversal (\(m^2\)).
  • \(S\): Pendiente longitudinal del canal (\(m/m\)).
  • \(R_h\): Radio hidráulico (\(m\)), definido como el Área dividida por el Perímetro mojado (\(P\)).

\[R_h = \frac{A}{P}\]

Para calcular el Área (\(A\)) y el Perímetro mojado (\(P\)), las ecuaciones dependen de la forma del canal:

  • Canal Rectangular:

  • \(A = b \cdot y\)

  • \(P = b + 2y\)

  • Canal Trapezoidal:

  • \(A = (b + z \cdot y) \cdot y\)

  • \(P = b + 2y \cdot \sqrt{1 + z^2}\)

(Variables geométricas: \(b\) = ancho de la base, \(y\) = tirante o profundidad del agua, \(z\) = relación de talud lateral).


2. Modelo de Solución (Aprendizaje Guiado)

La solución requiere descomponer el problema utilizando funciones. Para fomentar el aprendizaje guiado, los estudiantes no deben programar todo en un solo bloque, sino interactuar con el asistente de IA (Copilot, Gemini o ChatGPT) para construir módulos.

Estructura del Código:

  1. **Función calcular_geometria(tipo_canal, b, y, z=0)**: Usa un bloque if/elif para validar el tipo_canal (“rectangular” o “trapezoidal”) y retorna el Área y el Perímetro.
  2. **Función calcular_caudal(A, P, n, S)**: Recibe la geometría, calcula el Radio Hidráulico y aplica la ecuación de Manning para retornar el Caudal.
  3. Bloque Principal (Ciclo for o while): Define una lista de diferentes profundidades (\(y\)) e itera sobre ellas llamando a las funciones anteriores, imprimiendo una tabla de resultados.

Indicaciones para la interacción Estudiante-IA:

Pide a tus estudiantes que usen los siguientes prompts con su IA para construir el código paso a paso, asegurando que entienden la lógica y no solo copian y pegan:

  • Paso 1 (Condicionales): “Soy estudiante de ingeniería aprendiendo Python. Actúa como mi tutor. Quiero crear una función llamada calcular_geometria que reciba el tipo de canal, la base (b), la profundidad (y) y el talud (z). Usa un if/elif para calcular el Área y el Perímetro mojado según sea rectangular o trapezoidal. No me des el código completo de una vez, muéstrame cómo estructurar el condicional y explícamelo.”
  • Paso 2 (Funciones Matemáticas): “Ahora ayúdame a crear la función calcular_caudal. Necesito usar la raíz cuadrada, ¿debo importar la librería math en Python? Explícame cómo elevar el radio hidráulico a la 2/3 de forma correcta en código.”
  • Paso 3 (Ciclos): “Tengo una lista de profundidades: tirantes = [0.5, 1.0, 1.5, 2.0]. Guíame para hacer un ciclo for que recorra esta lista, llame a mis funciones anteriores y use un print formateado (f-strings) para mostrar el caudal en cada paso.”

3. Valores de Prueba y Resultados de Validación

Para que el estudiante verifique que sus funciones operan correctamente, bríndales estos datos de entrada (basados en un canal de concreto con pendiente suave).

Parámetros fijos:

  • Ancho de base (\(b\)): 2.0 m
  • Rugosidad (\(n\)): 0.015 (Concreto)
  • Pendiente (\(S\)): 0.001 m/m
Profundidad (\(y\)) Caudal Rectangular (\(m^3/s\)) Caudal Trapezoidal (\(z = 1.5\)) (\(m^3/s\))
0.5 m 0.835 1.157
1.0 m 2.656 5.390
1.5 m 4.974 13.064
2.0 m 7.625 24.628

(Nota: Los resultados pueden variar ligeramente en los decimales dependiendo del redondeo, pero deben aproximarse fielmente a estos valores).


4. Guía para el Notebook de Google Colab

Estructura el Colab de la siguiente manera para que los estudiantes sigan un flujo de trabajo ordenado:

  1. Celda de Texto (Markdown): Contexto del Proyecto: Uso de LaTeX para ecuaciones. Pide al estudiante que documente el problema. Deben insertar las ecuaciones de Manning usando sintaxis LaTeX ($$ Q = ... $$) y explicar brevemente las variables. Esto fortalece su habilidad para redactar informes técnicos en herramientas interactivas.

  2. Celda de Código: Importación y Geometría: Definición de la primera función. Aquí importan math y construyen la función calcular_geometria(). Se recomienda que ejecuten esta celda de forma aislada y hagan un print de prueba (ej. print(calcular_geometria("rectangular", 2, 1))) para depurar errores antes de avanzar.

  3. Celda de Código: Ecuación de Manning: Definición de la función calcular_caudal(). Al separar la geometría de la hidráulica, les enseñas el principio de modularidad en programación, muy útil para escalar el código después (ej. si luego quieren añadir tuberías circulares).

  4. Celda de Código: Simulación y Ciclo Repetitivo: Implementación del iterador. En esta celda configuran las constantes (\(n, S, b, z\)) y la lista de profundidades. Construyen el ciclo for que itera sobre los tirantes, invoca las funciones y formatea la salida en consola simulando un reporte técnico.

Agregando Visualización

¿Cómo podemos integrar Matplotlib o Seaborn en este ejercicio para que los estudiantes grafiquen la curva de Profundidad vs. Caudal directamente en el cuaderno de Colab?

Integrar la visualización gráfica es el paso ideal. En hidráulica, a esta gráfica se le conoce como la Curva de Descarga (o curva de calibración) de la sección transversal, y visualizarla permite a los estudiantes de ingeniería comprender de forma intuitiva cómo un pequeño aumento en el nivel del agua genera un incremento exponencial en la capacidad de transporte del canal.

Además, desde el punto de vista computacional, este paso es un puente perfecto hacia las competencias que desarrollarán más adelante en asignaturas como Estadística Aplicada, ya que los obliga a pasar de simplemente imprimir resultados en consola a almacenar datos en estructuras (listas o arreglos) para luego graficarlos.

Aquí tienes la estrategia para integrar Matplotlib o Seaborn en la guía de tu cuaderno interactivo.

1. El Salto Conceptual: De Imprimir a Almacenar

El principal reto para los estudiantes en esta etapa es entender que la función print() no guarda la información. Debes indicarles que antes de iniciar el ciclo repetitivo, necesitan crear “contenedores” vacíos (listas) para guardar los caudales calculados.

El nuevo flujo lógico será:

  1. Crear listas vacías: caudales_rect = [] y caudales_trap = [].
  2. Dentro del ciclo for, calcular el caudal y usar el método .append() para agregarlo a la lista correspondiente.
  3. Llamar a Matplotlib para graficar las listas una vez termine el ciclo.

2. Indicaciones de Aprendizaje Guiado (Prompts para los estudiantes)

Pide a tus estudiantes que interactúen con su asistente de IA utilizando estos prompts para construir la nueva lógica:

  • Paso 1 (Listas y Append): “En mi código de Python tengo un ciclo for que calcula caudales, pero solo los imprime. Actúa como mi profesor de programación y explícame cómo crear listas vacías antes del ciclo y cómo usar .append() para ir guardando los resultados del caudal rectangular y trapezoidal en cada iteración.”
  • Paso 2 (Matplotlib Básico): “Ya tengo una lista llamada tirantes (eje X) y dos listas llamadas caudales_rect y caudales_trap (eje Y). Dame el código básico usando matplotlib.pyplot para graficar ambas líneas en una sola figura. Incluye cómo ponerle título al gráfico, etiquetas a los ejes y una leyenda.”
  • Paso 3 (Personalización con Seaborn - Opcional): “¿Cómo puedo usar la librería seaborn para que mi gráfico de Matplotlib se vea más profesional, con un estilo de cuadrícula (grid) adecuado para un informe de ingeniería?”

3. Actualización de la Guía en Google Colab

Puedes añadir estos pasos a la secuencia de tu cuaderno interactivo:

  1. Celda de Código: Almacenamiento en Listas: Transición de datos. Los estudiantes declaran el arreglo de tirantes (pueden usar numpy.arange si quieres introducir la librería, por ejemplo np.arange(0.5, 3.0, 0.1)) y configuran los ciclos para llenar las listas mediante .append().

  2. Celda de Código: Visualización con Matplotlib/Seaborn: Gráfica comparativa. Se importan las librerías (import matplotlib.pyplot as plt y import seaborn as sns). Configuran el estilo base de Seaborn (sns.set_theme()) y trazan la gráfica usando plt.plot().

  3. Celda de Texto (Markdown): Análisis de la Curva de Descarga: Se le pide al estudiante que observe la gráfica e inserte una celda de texto respondiendo: ¿Por qué la curva del canal trapezoidal crece más rápido que la del rectangular a medida que aumenta la profundidad? (La respuesta teórica es que el área del trapecio se expande lateralmente por el talud, reduciendo el impacto de la fricción relativa).

4. Resultado Visual Esperado

Al ejecutar el código, los estudiantes deben obtener una gráfica parabólica convexa hacia el eje Y (Caudal).

  • Eje Horizontal (X): Profundidad del agua / Tirante (\(m\)).
  • Eje Vertical (Y): Caudal (\(m^3/s\)).
  • Comportamiento: Ambas curvas inician juntas, pero la curva del canal trapezoidal se despega exponencialmente hacia arriba, demostrando visualmente que los canales con taludes inclinados son mucho más eficientes para manejar crecientes pluviales repentinas sin desbordarse.