35. Proyecto integrador: laboratorio interactivo de fluidos y partículas

Un circuito hidráulico resuelve su caudal a partir de bomba y pérdidas; ese caudal alimenta un canal donde partículas trazadoras o inerciales son transportadas, desviadas y depositadas.

35.1 Objetivo del proyecto

Construiremos un laboratorio que conecte dos niveles del curso. Primero resolverá un circuito horizontal donde una bomba compensa pérdidas. Después usará el caudal calculado para transportar partículas por un canal.

El objetivo no es imitar una instalación específica, sino integrar conservación, propiedades, regímenes, pérdidas, fuerzas, estructuras de datos, métodos numéricos y visualización verificable.

35.2 Conceptos integrados

BloqueConceptosSalida principal
Fluidoρ, μ, νPropiedades consistentes
CircuitoContinuidad, Reynolds, Darcy–Weisbach, ColebrookQ, f, pérdidas
PartículaArrastre de Stokes, empuje, τp, RepVelocidad y deposición
Método numéricoPaso fijo, relajación exponencial, fronterasTrayectorias reproducibles
InterfazCanvas, controles, accesibilidadLaboratorio explorable

35.3 Preguntas que debe responder

  • ¿Qué caudal produce una carga de bomba dada?
  • ¿Cuánto se pierde por tubería y cuánto por accesorios?
  • ¿El flujo del conducto es laminar, transitorio o turbulento?
  • ¿Qué velocidad media llega al canal?
  • ¿Las partículas siguen al flujo o muestran inercia?
  • ¿Es válido el arrastre de Stokes?
  • ¿Cuántas partículas se depositan durante el tiempo simulado?

35.4 Alcance y supuestos

El fluido es newtoniano e incompresible; el circuito es horizontal y de diámetro uniforme; la bomba entrega carga constante; las pérdidas localizadas se agrupan en ΣK.

Las partículas son esferas diluidas con acoplamiento de una vía. El arrastre es lineal de Stokes, el eje horizontal es periódico y el fondo del canal captura partículas inerciales. No se modelan colisiones ni realimentación sobre el flujo.

35.5 Arquitectura por módulos

configuración → solver hidráulico → campo del canal → integrador de partículas → diagnósticos → vista

Cada flecha representa datos explícitos. El canvas no calcula la física y los controles no modifican partículas directamente: actualizan una configuración que los módulos consumen.

35.6 Configuración en SI

const configuracion = {
  fluido: { densidad: 1000, viscosidadDinamica: 0.001 },
  circuito: {
    cargaBomba: 2,
    diametro: 0.05,
    longitud: 20,
    rugosidad: 0.00005,
    sumaK: 5,
    areaCanal: 0.02
  },
  particulas: { cantidad: 120, diametro: 20e-6, densidad: 2500 },
  simulacion: { dt: 0.002, semilla: 35 }
};

console.log(configuracion);

La interfaz convierte mm, μm y L/s; el núcleo conserva metros, segundos, kilogramos y pascales.

35.7 Invariantes de la configuración

Densidades, viscosidad, diámetro, longitud, área y paso deben ser positivos. Carga, rugosidad y ΣK pueden ser cero, pero no negativos. La cantidad debe ser un entero no negativo.

Validar antes de resolver evita iteraciones sin significado y resultados no finitos.

35.8 Balance de energía del circuito

Al ser un lazo horizontal cerrado, la bomba compensa las pérdidas:

hP = [f(Re, ε/D)L/D + ΣK] v²/(2g)

El factor depende de v mediante Re = ρvD/μ. Por eso el caudal no se obtiene con una única sustitución.

35.9 Factor de fricción

En laminar usamos f = 64/Re. En turbulento resolvemos Colebrook. En transición no hay relación universal; el laboratorio interpola únicamente para mantener una visualización continua y muestra una advertencia.

Una aplicación de diseño debería reemplazar esa interpolación por un criterio conservador o datos específicos.

35.10 Solver hidráulico iterativo

function factorTurbulento(reynolds, rugosidadRelativa) {
  let f = 0.03;
  for (let i = 0; i < 40; i++) {
    f = 1 / (-2 * Math.log10(
      rugosidadRelativa / 3.7 + 2.51 / (reynolds * Math.sqrt(f))
    )) ** 2;
  }
  return f;
}

function factorDarcy(reynolds, rugosidadRelativa) {
  if (reynolds <= 0) throw new Error("Re debe ser positivo");
  if (reynolds < 2300) return 64 / reynolds;
  if (reynolds > 4000) return factorTurbulento(reynolds, rugosidadRelativa);

  // Interpolación orientativa: la transición no posee una correlación universal.
  const fraccion = (reynolds - 2300) / (4000 - 2300);
  const fLaminar = 64 / 2300;
  const fTurbulento = factorTurbulento(4000, rugosidadRelativa);
  return (1 - fraccion) * fLaminar + fraccion * fTurbulento;
}

function resolverCircuito({ rho, mu, carga, D, L, epsilon, sumaK, g = 9.81 }) {
  let velocidad = 1;
  let f = 0.03;
  for (let i = 0; i < 60; i++) {
    const reynolds = rho * velocidad * D / mu;
    f = factorDarcy(reynolds, epsilon / D);
    const nuevaVelocidad = Math.sqrt(2 * g * carga / (f * L / D + sumaK));
    if (Math.abs(nuevaVelocidad - velocidad) <= 1e-10 * Math.max(1, velocidad)) {
      velocidad = nuevaVelocidad;
      break;
    }
    velocidad = nuevaVelocidad;
  }
  const area = Math.PI * D ** 2 / 4;
  const reynolds = rho * velocidad * D / mu;
  f = factorDarcy(reynolds, epsilon / D);
  const perdida = (f * L / D + sumaK) * velocidad ** 2 / (2 * g);
  return { velocidad, caudal: area * velocidad, reynolds, f, residuo: carga - perdida };
}

console.log(resolverCircuito({ rho: 1000, mu: 0.001, carga: 2, D: 0.05, L: 20, epsilon: 0.00005, sumaK: 5 }));

35.11 Criterio de convergencia

Un número fijo de iteraciones es simple, pero un solver general debería detenerse cuando el cambio relativo de v o f sea menor que una tolerancia, con un máximo de seguridad.

También debe calcular el residuo energético:

r = hP − hf − hm

Convergencia de variables sin residuo pequeño puede ocultar un error de ecuación.

35.12 Del caudal al canal

Si el área transversal efectiva del canal es Ac:

Ucanal = Q/Ac

Esta relación acopla ambos módulos. Cambiar bomba, diámetro o pérdidas modifica Q y, por continuidad, la velocidad base que transporta partículas.

35.13 Campo del canal

Sobre la velocidad base agregamos un vórtice localizado para producir trayectorias curvas:

ux = Ucanal − ω(y−yc)E · uy = ω(x−xc)E

E es una envolvente gaussiana. Este campo educativo no se obtiene de Navier–Stokes, pero es continuo, controlable y útil para probar el integrador.

35.14 Modelo de partícula

Las trazadoras usan vp = u. Las inerciales usan:

dvp/dt = (u − vp)/τp + g(1 − ρf/ρp)

El laboratorio aplica la actualización exponencial del tema 34 y deposita la partícula cuando alcanza el fondo.

35.15 Escalas y validez

El panel calcula:

τp = ρpd²/(18μ) · St = τpUcar/Lcar · Rep,t = ρf|vt|d/μ

Si Rep,t ≥ 1, el laboratorio advierte que el modelo lineal de arrastre puede ser inadecuado.

35.16 Acoplamiento de una vía

Q determina el campo y el campo determina el movimiento de las partículas. Las partículas no cambian Q ni el campo.

Este acoplamiento es adecuado para una fase dispersa diluida. A concentraciones mayores harían falta reacción sobre el fluido, sedimentación impedida y quizá colisiones.

35.17 Depósito en el fondo

Una partícula inercial que llega a y = H se marca como depositada y deja de integrarse. Esto es una condición absorbente ideal.

No representa rebote, erosión ni resuspensión. Al informar porcentaje depositado, el proyecto debe declarar esta regla.

35.18 Bucle de simulación

leer controles → resolver hidráulica → actualizar campo → ejecutar pasos fijos → diagnosticar → dibujar

La hidráulica solo se recalcula cuando cambia una entrada. Las partículas se actualizan muchas veces por segundo. Separar ambas frecuencias evita trabajo innecesario.

35.19 Estado reproducible

Las posiciones iniciales provienen de una semilla fija. Reiniciar con la misma configuración produce el mismo conjunto.

El estado exportado incluye parámetros y partículas. El tiempo de pantalla no forma parte de la física; el tiempo simulado sí.

35.20 Diseño de la interfaz

Los controles se dividen en circuito y partículas. Esta agrupación revela qué módulo consume cada dato.

Los resultados también se separan conceptualmente: Q, Re y f diagnostican la hidráulica; τ, St, Rep y depósito diagnostican la fase dispersa.

35.21 Visualización

El canvas muestra el canal, vectores del campo, partículas activas y un lecho de partículas depositadas. En la parte superior resume bomba, caudal y pérdidas.

El radio se amplifica para visibilidad y no está a escala con el dominio. Esta decisión se indica para evitar interpretar el dibujo como geometría real.

35.22 Escenarios predefinidos

Los presets no son resultados guardados: modifican entradas y ejecutan el mismo solver. Sirven para comparar agua con microesferas, un aceite viscoso y partículas grandes fuera de Stokes.

Un preset debe poder reconstruirse mediante sus parámetros, no mediante condiciones ocultas.

35.23 Verificación hidráulica

  • hf + hm debe coincidir con hP;
  • Q debe coincidir con Av;
  • Re debe usar la misma v y D;
  • f debe corresponder al régimen y a ε/D;
  • potencia hidráulica debe ser ρgQhP;
  • al aumentar ΣK con lo demás fijo, Q debe disminuir.

35.24 Verificación de partículas

  • con ρp = ρf, la sedimentación debe anularse;
  • con St → 0, la trayectoria inercial debe acercarse a la trazadora;
  • en flujo uniforme, el deslizamiento debe tender a vt;
  • el porcentaje depositado debe permanecer entre 0 y 100 %;
  • reducir Δt debe llevar a un resultado convergente.

35.25 Pruebas automáticas

function afirmarCerca(actual, esperado, tolerancia, mensaje) {
  if (Math.abs(actual - esperado) > tolerancia) {
    throw new Error(`${mensaje}: ${actual} no está cerca de ${esperado}`);
  }
}

const rho = 1000;
const g = 9.81;
const Q = 0.003;
const h = 2;
afirmarCerca(rho * g * Q * h, 58.86, 1e-10, "potencia hidráulica");
console.log("Prueba superada");

35.26 Estudio de convergencia

Ejecutar hasta el mismo tiempo con Δt, Δt/2 y Δt/4 permite comparar posiciones, rapidez media y depósito.

El porcentaje depositado puede cambiar bruscamente si muchas partículas están cerca del fondo; además de la métrica global conviene comparar trayectorias o tiempos individuales.

35.27 Sensibilidad física

El proyecto permite explorar relaciones no lineales:

  • aumentar carga de bomba eleva Q, pero también las pérdidas cuadráticas;
  • aumentar D reduce L/D y aumenta área;
  • aumentar μ reduce Re del circuito y alarga o acorta escalas según el régimen;
  • aumentar d eleva τp y vt como d² dentro de Stokes;
  • aumentar el vórtice puede retener partículas y modificar deposición.

35.28 Rendimiento

El solver hidráulico es pequeño; el costo repetido está en partículas y dibujo. El proyecto limita la cantidad y reutiliza objetos.

Para escalar, podrían usarse arreglos tipados, renderizado por lotes, Web Workers o GPU. Cada optimización debe conservar pruebas numéricas equivalentes.

35.29 Accesibilidad

La simulación incluye pausa y avance manual. Inicia pausada si el sistema solicita movimiento reducido. Los resultados numéricos y el estado aparecen fuera del canvas.

Los botones tienen texto, los controles poseen etiquetas y el canvas actualiza una descripción accesible resumida.

35.30 Exportar un experimento

function crearDocumento(configuracion, estado, diagnosticos) {
  return {
    versionFormato: 1,
    unidades: "SI",
    exportadoEn: new Date().toISOString(),
    configuracion,
    estado,
    diagnosticos
  };
}

const documento = crearDocumento(
  { fluido: { densidad: 1000, viscosidadDinamica: 0.001 } },
  { tiempo: 2.5, particulas: [] },
  { caudal: 0.003 }
);
console.log(JSON.stringify(documento, null, 2));

Importar debería validar versión, unidades y rangos antes de reemplazar el estado actual.

35.31 Manejo de errores

Una entrada inválida debe producir un mensaje cercano al control. Un fallo del solver debe pausar la simulación y conservar los datos para diagnóstico.

No se deben reemplazar silenciosamente NaN o infinitos por cero: eso oculta la causa y puede crear una animación engañosa.

35.32 Laboratorio integrador

Ajustá el circuito y observá cómo el caudal resultante cambia el transporte. En modo inercial, las partículas que alcanzan el fondo quedan depositadas.

Circuito y fluido

Partículas y simulación

Caudal Q3,284 L/s
Velocidad del canal0,164 m/s
Reynolds del tubo83 620
Factor de Darcy0,02257
Pérdida distribuida1,287 m
Pérdida localizada0,713 m
Potencia hidráulica64,43 W
Tiempo τp55,56 µs
Número de Stokes0,000067
Reynolds terminal0,00654
Depósito0 / 120
Tiempo simulado0,000 s

hP = hf + hm = 1,287 + 0,713 = 2,000 m;   Ucanal = Q/A = 0,164 m/s

Circuito turbulento y partículas dentro del régimen de Stokes. Simulación en ejecución.

35.33 Interpretar el experimento

No alcanza con observar trayectorias. Compará valores:

  1. modificá carga de bomba y observá Q y potencia;
  2. aumentá ΣK y verificá que Q disminuya;
  3. pasá de trazadoras a inerciales sin cambiar el circuito;
  4. aumentá d y observá τ, St, Rep y depósito;
  5. reducí Δt y compará el porcentaje depositado al mismo tiempo;
  6. exportá el estado para documentar el ensayo.

35.34 Desafío final

Extendé el laboratorio para comparar simultáneamente dos clases de partículas de 20 μm y 60 μm, ambas con ρp = 2500 kg/m³ en agua.

  1. Agregá una propiedad clase y un color por clase.
  2. Calculá τ y vt para cada diámetro.
  3. Informá depósito por clase.
  4. Usá la misma secuencia inicial normalizada para comparar.
  5. Comprobá Rep y explicá la diferencia observada.
Ver una implementación mínima del cálculo por clase
const fluido = { densidad: 1000, viscosidad: 0.001 };
const rhoP = 2500;
const g = 9.81;
const clases = [20e-6, 60e-6].map(diametro => {
  const tau = rhoP * diametro ** 2 / (18 * fluido.viscosidad);
  const velocidadTerminal = tau * g * (1 - fluido.densidad / rhoP);
  const reynolds = fluido.densidad * velocidadTerminal * diametro /
    fluido.viscosidad;
  return { diametro, tau, velocidadTerminal, reynolds, depositadas: 0 };
});

for (const clase of clases) {
  console.log(
    `${clase.diametro * 1e6} µm: ` +
    `tau=${(clase.tau * 1000).toFixed(4)} ms, ` +
    `vt=${(clase.velocidadTerminal * 1000).toFixed(4)} mm/s, ` +
    `Re=${clase.reynolds.toFixed(4)}`
  );
}

Dentro de Stokes, la partícula de 60 μm posee nueve veces τ y nueve veces velocidad terminal que la de 20 μm. Su Reynolds también aumenta y debe comprobarse antes de aceptar el modelo.

35.35 Posibles ampliaciones

  • curva real de bomba y punto de operación;
  • red de varias ramas;
  • campo importado desde una simulación CFD;
  • arrastre no lineal mediante CD(Re);
  • distribución de tamaños y densidades;
  • resuspensión y colisiones;
  • acoplamiento de dos vías;
  • gráficos temporales y exportación CSV;
  • pruebas automatizadas en un módulo separado.

35.36 Lista de comprobación del proyecto

  • ¿Todas las variables internas están en SI?
  • ¿El balance de energía cierra?
  • ¿El régimen usa la correlación correcta?
  • ¿Rep respalda el modelo de arrastre?
  • ¿El resultado converge al reducir Δt?
  • ¿Reiniciar reproduce el estado?
  • ¿La simulación puede pausarse y avanzar manualmente?
  • ¿Los datos importantes aparecen como texto?
  • ¿El archivo exportado incluye versión y unidades?
  • ¿Los límites del modelo están explicados?

35.37 Cierre del curso

El recorrido comenzó con sistemas de partículas y magnitudes colectivas, continuó con el modelo continuo de los fluidos y terminó reuniendo hidrostática, flujo, viscosidad, pérdidas y transporte de partículas en un programa interactivo.

La lección central es metodológica: elegir el sistema, declarar supuestos, conservar magnitudes, comprobar escalas, diseñar datos coherentes, resolver con un método adecuado y verificar antes de interpretar una visualización.