# Conceptos Clave: Módulo Bulk y Tiempo Crítico ## ¿Qué es el Módulo Bulk? El **módulo bulk** (o módulo de compresibilidad volumétrica) es una propiedad física que mide la **resistencia de un fluido a la compresión**. Se expresa en Pascales (Pa) o Gigapascales (GPa). **Definición matemática:** ``` K = -V × (dP/dV) ``` - **K**: módulo bulk - **V**: volumen original - **dP**: cambio de presión - **dV**: cambio de volumen **Interpretación:** - Un valor alto de K indica que el fluido es poco compresible (más rígido). - Un valor bajo de K indica que el fluido es más compresible (más flexible). **Ejemplo de valores típicos:** - Agua: 2.2 GPa - Aceite hidráulico: 1.7 GPa - Jarabe: ~2.2 GPa **Importancia en golpe de ariete:** El módulo bulk afecta la **velocidad de propagación de la onda de presión** en la tubería. Un K alto genera transitorios más rápidos y sobrepresiones más severas. --- ## ¿Qué es el Tiempo Crítico? El **tiempo crítico** es el tiempo mínimo de cierre de una válvula para evitar la máxima sobrepresión por golpe de ariete. **Fórmula:** ``` tc = 2L / a ``` - **tc**: tiempo crítico (segundos) - **L**: longitud de la tubería (metros) - **a**: velocidad de onda (m/s) **Interpretación:** - Si el cierre es **más rápido** que el tiempo crítico (`t_cierre < tc`), se produce la máxima sobrepresión. - Si el cierre es **más lento** (`t_cierre > tc`), la sobrepresión se reduce proporcionalmente. **Ejemplo:** - Para una tubería de 300 m y velocidad de onda de 1200 m/s: - `tc = 2 × 300 / 1200 = 0.5 s` **Importancia práctica:** - El tiempo crítico ayuda a definir procedimientos seguros de cierre de válvulas y seleccionar sistemas de protección. - Es fundamental para evitar daños por golpe de ariete en sistemas hidráulicos. --- --- ## ¿Qué es la Sobrepresión Joukowsky? La **sobrepresión Joukowsky** es la máxima sobrepresión teórica que puede ocurrir en un sistema hidráulico durante un golpe de ariete, calculada según la ecuación clásica de Nikolai Joukowsky. **Fórmula:** ``` ΔP = ρ × a × V ``` - **ΔP**: sobrepresión Joukowsky (Pa) - **ρ**: densidad del fluido (kg/m³) - **a**: velocidad de onda (m/s) - **V**: velocidad del fluido (m/s) **Características:** - Representa el **caso más severo** posible - Se produce cuando el cierre es **instantáneo** o muy rápido - Es un valor **teórico máximo** que raramente se alcanza en la realidad - No considera factores de atenuación del sistema **Ejemplo de cálculo:** ```python # Para jarabe con densidad 1300 kg/m³, velocidad onda 1200 m/s, velocidad fluido 0.1 m/s ΔP_joukowsky = 1300 × 1200 × 0.1 = 156,000 Pa = 1.56 bar ``` --- ## ¿Qué es la Sobrepresión Real? La **sobrepresión real** es la sobrepresión que efectivamente se produce en el sistema, considerando todos los factores que reducen la sobrepresión teórica. **Fórmula:** ``` ΔP_real = ΔP_joukowsky × Factor_total ``` Donde: ``` Factor_total = Factor_tiempo × Factor_damper ``` **Factor de tiempo:** - Si `t_cierre ≤ t_crítico`: Factor = 1.0 (sin reducción) - Si `t_cierre > t_crítico`: Factor = t_crítico / t_cierre (reducción proporcional) **Factor de damper** (si está instalado): - Considera la compresibilidad adicional del gas - Depende de la posición y dimensiones del damper - Puede reducir significativamente la sobrepresión --- ## Diferencias Clave | Aspecto | Sobrepresión Joukowsky | Sobrepresión Real | |---------|------------------------|-------------------| | **Naturaleza** | Teórica máxima | Práctica real | | **Factores** | Solo ρ, a, V | Incluye tiempo y protecciones | | **Uso** | Referencia y diseño | Operación real | | **Valor** | Siempre mayor | Menor o igual | **Ejemplos comparativos:** ```python # Sistema típico de jarabe: Joukowsky: 2.5 bar (teórico máximo) # Con cierre lento (t=2s, tc=0.5s): Factor_tiempo = 0.5/2.0 = 0.25 Real_sin_damper: 2.5 × 0.25 = 0.625 bar # Con damper hidropneumático adicional: Factor_damper = 0.7 (30% de eficiencia) Real_con_damper: 0.625 × 0.7 = 0.44 bar ``` --- ## Importancia en el Diseño **Sobrepresión Joukowsky:** - Define el **peor escenario** posible - Establece límites máximos para componentes - Determina necesidad de protecciones **Sobrepresión Real:** - Evalúa condiciones **operacionales** reales - Valida efectividad de protecciones - Optimiza procedimientos de operación --- ## Relación entre ambos conceptos ## Relación entre todos los conceptos El **módulo bulk** determina la **velocidad de onda** (`a`), que a su vez afecta el **tiempo crítico** (`tc`) y la **sobrepresión Joukowsky**. Todos estos parámetros interactúan para determinar la **sobrepresión real** que experimenta el sistema. **Cadena de cálculo:** ``` Módulo Bulk (K) → Velocidad de Onda (a) → Tiempo Crítico (tc) ↓ Sobrepresión Joukowsky (ΔP_j) → Sobrepresión Real (ΔP_real) ``` Estos parámetros son esenciales para el análisis y diseño seguro de sistemas hidráulicos sujetos a transitorios. --- ## Interpretación de Resultados TSNET vs Joukowsky ### ⚠️ **Punto Crítico: Presión Absoluta vs Sobrepresión** Cuando veas que **TSNET muestra 25 bar** mientras la **sobrepresión Joukowsky es 18 bar**, esto es **NORMAL** y se debe a que miden cosas diferentes: **TSNET (Evolución de Presiones):** - Muestra **presión absoluta total** en el sistema - Incluye presión base + sobrepresión transitoria - **Ejemplo**: `P_total = P₀ + ΔP = 7 bar + 18 bar = 25 bar` **Sobrepresión Joukowsky:** - Muestra solo el **incremento de presión** debido al transitorio - **No incluye** la presión base del sistema - **Ejemplo**: `ΔP_joukowsky = 18 bar` (solo el incremento) ### Cómo Interpretar Correctamente: ```python # En tu código del simulador: P0 = 7.0 bar # Presión base de la bomba delta_P_joukowsky = 18.0 bar # Sobrepresión por transitorio P_transitorio = P0 + delta_P_joukowsky # = 25 bar (lo que ve TSNET) ``` ### Gráfico de Presiones TSNET: ``` Presión (bar) │ 25 ─┤ ← Pico máximo (Presión base + Sobrepresión) │ 18 ─┤ ← Sobrepresión Joukowsky (incremento) │ 7 ─┤ ← Presión base de operación (P₀) │ 0 ─┴─────────────── Tiempo (s) ``` ### Lo que cada valor significa: - **7 bar**: Presión normal de operación de tu bomba - **18 bar**: Sobrepresión adicional por golpe de ariete - **25 bar**: Presión total máxima que experimenta el sistema ### Para validar que está correcto: ✅ **P_total_máxima = P_base + ΔP_joukowsky** ✅ **25 bar = 7 bar + 18 bar** ← ¡Correcto! ### Puntos importantes: 1. **La tubería experimenta 25 bar total**, no solo 18 bar 2. **Los componentes deben resistir 25 bar**, no solo la sobrepresión 3. **Las válvulas de alivio** deben configurarse considerando la presión total 4. **El análisis de seguridad** debe usar la presión absoluta máxima ### En términos de seguridad: ```python # Si tu sistema está diseñado para 10 bar: P_diseño = 10 bar P_máxima_real = 25 bar Factor_seguridad = P_diseño / P_máxima_real = 10/25 = 0.4 # ¡PELIGROSO! # Necesitas componentes para al menos: P_diseño_requerida = 25 bar × 1.5 = 37.5 bar # Con factor de seguridad ``` ## ⚠️ Corrección del Error en el Simulador ### Problema detectado: La función `generar_datos_hibridos_tsnet()` estaba usando la **sobrepresión Joukowsky teórica** en lugar de la **sobrepresión real** para generar los gráficos. ### Error original: ```python # INCORRECTO: Usaba delta_P_joukowsky sin factores de reducción P_transitorio = P0 + delta_P_joukowsky * (1 - factor_cierre) # Resultado: 7 + 18 = 25 bar (incorrecto) ``` ### Corrección aplicada: ```python # CORRECTO: Usa delta_P_real que ya incluye factores de reducción delta_P_real = self.resultados["sobrepresion_real"] # 4.74 bar P_transitorio = P0 + delta_P_real * (1 - factor_cierre) # Resultado: 7 + 4.74 = 11.74 bar (correcto) ``` ### Ahora la gráfica TSNET mostrará: - **Presión máxima real**: 11.74 bar ✅ - **Presión base**: 7 bar - **Sobrepresión efectiva**: 4.74 bar ### Factores ya incluidos en la sobrepresión real: 1. **Factor de tiempo**: Reducción por cierre lento 2. **Factor de damper**: Reducción por protección hidropneumática 3. **Eficiencia de posición**: Ubicación óptima del damper --- ## Interpretación de Resultados TSNET vs Joukowsky ### ✅ **Ahora es correcto: TSNET muestra ~11.74 bar** **TSNET (Evolución de Presiones Corregida):** - Muestra **presión absoluta real** en el sistema - Incluye presión base + sobrepresión real (con factores) - **Ejemplo**: `P_total = P₀ + ΔP_real = 7 bar + 4.74 bar = 11.74 bar` **Sobrepresión Joukowsky:** - Sigue mostrando el **incremento teórico máximo** - **No incluye** factores de reducción - **Ejemplo**: `ΔP_joukowsky = 18 bar` (solo referencia teórica) ### Cómo Interpretar Correctamente: ```python # Valores corregidos en el simulador: P0 = 7.0 bar # Presión base de la bomba delta_P_joukowsky = 18.0 bar # Sobrepresión teórica (referencia) delta_P_real = 4.74 bar # Sobrepresión real (con factores) P_transitorio = P0 + delta_P_real # = 11.74 bar (lo que ve TSNET) ``` ### Gráfico de Presiones TSNET Corregido: ``` Presión (bar) │ 11.74─┤ ← Pico máximo REAL (Presión base + Sobrepresión real) ✅ │ 7 ─┤ ← Presión base de operación (P₀) │ 4.74─┤ ← Sobrepresión real (solo el incremento) │ 0 ─┴─────────────── Tiempo (s) ``` ### Lo que cada valor significa: - **7 bar**: Presión normal de operación de tu bomba - **4.74 bar**: Sobrepresión real considerando factores de reducción - **11.74 bar**: Presión total máxima real que experimenta el sistema - **18 bar**: Sobrepresión teórica Joukowsky (solo para diseño/referencia) ### Para validar que está correcto: ✅ **P_total_real = P_base + ΔP_real** ✅ **11.74 bar = 7 bar + 4.74 bar** ← ¡Ahora correcto! ### En términos de seguridad: ```python # Los componentes deben resistir la presión real: P_diseño_requerida = 11.74 bar × 1.5 = 17.6 bar # Con factor de seguridad # En lugar de los 37.5 bar que calculamos antes con el error ``` **Conclusión**: Ahora el simulador muestra la presión real que experimenta el sistema, no la teórica máxima. --- ## Parámetros del Damper Hidropneumático ### Comprensión del Sistema Damper Un **damper hidropneumático** es un acumulador de presión que contiene gas comprimido (normalmente N₂) separado del fluido por una membrana o pistón. Su función es absorber las sobrepresiones del golpe de ariete mediante la compresión del gas. ### 📊 Parámetros Explicados #### 1. **Volumen Total (50 L)** - **Qué es**: Capacidad total física del tanque damper - **Incluye**: Espacio para gas + espacio para fluido - **Analogía**: Como el tamaño de una botella #### 2. **Volumen Gas N₂ (30 L)** ⭐ **Tu pregunta clave** - **Qué es**: Volumen de gas a la **presión de precarga** (4 bar) - **Importante**: Es el volumen **inicial** del gas, no el operacional - **Relación**: Volumen líquido = 50L - 30L = 20L (aproximado) #### 3. **Presión de Precarga (4 bar)** - **Qué es**: Presión del gas N₂ **antes** de conectar al sistema - **Cuándo**: Durante la fabricación/mantenimiento del damper - **Estado**: Sistema sin presión hidráulica #### 4. **Posición en tubería (280 m)** - **Qué es**: Distancia desde el inicio donde se instala el damper - **Efecto**: Afecta la presión hidrostática local - **Cálculo presión local**: P_local = P_bomba + ρgh (si hay diferencia de altura) ### 🔧 Cálculo Real en Tu Sistema **Tu observación es CORRECTA**: A 280m, el damper no está a 4 bar, sino a ~6-7 bar. ```python # Estado inicial (damper desconectado): V_gas_inicial = 30 L P_precarga = 4 bar # Al conectar al sistema en operación: P_operacion = 7 bar # Presión del sistema en esa posición ``` ### 📐 Aplicación de la Ley de Boyle El código usa correctamente la **Ley de Boyle** (proceso isotérmico): ```python # P₀ × V₀ = P₁ × V₁ # 4 bar × 30 L = 7 bar × V_nuevo V_efectivo = (30 L × 4 bar) / 7 bar = 17.14 L ``` ### 💡 Lo que realmente sucede: 1. **Estado fabricación**: 30L de N₂ a 4 bar 2. **Al conectar**: El sistema presuriza el damper a 7 bar 3. **Gas comprimido**: Se reduce a ~17L efectivos 4. **Espacio disponible**: ~17L para absorber sobrepresiones ### 📈 Durante el Golpe de Ariete: ``` Presión normal: 7 bar → Gas: 17.14 L Presión pico: 11.74 bar → Gas: (4×30)/11.74 = 10.22 L Volumen absorbido: 17.14 - 10.22 = 6.92 L ``` ### 🎯 Efectividad del Damper: ```python # Factores que influyen en la efectividad: # 1. Volumen efectivo disponible V_efectivo = (V_gas_precarga × P_precarga) / P_operacion # 2. Compresibilidad relativa Compresibilidad = V_efectivo / (V_tuberia × K_fluido) # 3. Posición en la tubería Eficiencia_posicion = f(distancia_desde_valvula) ``` ### ⚠️ Consideraciones de Diseño: 1. **Presión de precarga**: Debe ser ~60-80% de la presión operacional 2. **Volumen gas**: Debe ser suficiente para el rango operacional esperado 3. **Posición**: Cerca de la válvula es más efectivo (90% de L es óptimo) 4. **Volumen total**: Debe acomodar el gas comprimido + fluido desplazado ### 🔍 En tu configuración actual: ``` Volumen total: 50 L Volumen gas (a 4 bar): 30 L Presión operación: 7 bar → Gas efectivo: 17.14 L → Espacio líquido: ~33 L disponibles → Capacidad absorción: Buena para sobrepresiones moderadas ``` ### 📝 Recomendación: Tu configuración actual es **adecuada** para el sistema. El damper puede absorber efectivamente las sobrepresiones porque: - Tiene volumen suficiente - La precarga es apropiada (4 bar vs 7 bar operacional) - La posición es buena (280m de 300m total) --- ## ⚠️ Redundancia en Parámetros del Damper ### 🎯 **Tu observación es CORRECTA** Efectivamente hay **redundancia** en la parametrización actual del damper. Analicemos: #### Parámetros actuales (redundantes): ```python "damper_volumen": 50.0, # Volumen total del tanque (L) "damper_volumen_gas": 30.0, # Volumen gas a presión precarga (L) "damper_presion_precarga": 4.0 # Presión de precarga (bar) ``` ### 🔧 **¿Qué determina realmente la capacidad?** **Solo necesitamos 2 parámetros**, no 3: #### Opción A - Enfoque por volumen total: ```python "damper_volumen_total": 50.0, # Volumen físico del tanque "damper_presion_precarga": 4.0, # Presión inicial del gas # El volumen de gas se calcula automáticamente según el diseño ``` #### Opción B - Enfoque por volumen gas efectivo: ```python "damper_volumen_gas": 30.0, # Volumen gas a presión precarga "damper_presion_precarga": 4.0, # Presión inicial del gas # El volumen total se infiere como mayor al gas ``` ### 💡 **En la realidad industrial:** Los fabricantes especifican el damper como: - **Volumen total**: 50 L (capacidad física del tanque) - **Presión de precarga**: 4 bar (carga inicial de N₂) - **Volumen gas**: Se calcula según el % de llenado recomendado (~60-80% del total) ### 📊 **Relación real:** ```python # En un damper real: V_total = 50 L # Capacidad física P_precarga = 4 bar # Carga inicial N₂ V_gas_inicial = V_total × 0.6 # ~30 L (60% típico) V_fluido_max = V_total - V_gas_min # Espacio para fluido ``` ### 🔄 **Propuesta de simplificación:** #### Configuración simplificada: ```python # Parámetros esenciales: "damper_volumen_total": 50.0, # Volumen físico real (L) "damper_presion_precarga": 4.0, # Presión inicial N₂ (bar) "damper_factor_gas": 0.6, # % del volumen ocupado por gas (0-1) "damper_posicion": 280.0, # Posición en tubería (m) # Calculados automáticamente: V_gas_precarga = V_total × factor_gas V_efectivo = (V_gas_precarga × P_precarga) / P_operacion ``` ### ✅ **Ventajas de la simplificación:** 1. **Menos confusión**: Solo parámetros físicos reales 2. **Más realista**: Coincide con especificaciones de fabricantes 3. **Menos errores**: No se pueden introducir valores inconsistentes 4. **Más flexible**: El factor_gas puede ajustarse según aplicación ### 🎛️ **Implementación sugerida:** ```python def calcular_damper_simplificado(self): V_total = self.params["damper_volumen_total"].get() # 50 L P_precarga = self.params["damper_presion_precarga"].get() # 4 bar factor_gas = self.params["damper_factor_gas"].get() # 0.6 P_operacion = self.params["presion_bomba"].get() # 7 bar # Cálculos derivados: V_gas_precarga = V_total * factor_gas # 30 L V_gas_efectivo = (V_gas_precarga * P_precarga) / P_operacion # 17.14 L V_fluido_disponible = V_total - V_gas_efectivo # 32.86 L return V_gas_efectivo ``` ### 📋 **Recomendación:** **Mantener solo:** - `damper_volumen_total` (parámetro físico real) - `damper_presion_precarga` (especificación técnica) - `damper_factor_gas` (configuración de diseño) **Eliminar:** - `damper_volumen_gas` (se calcula automáticamente) Esto haría el simulador más intuitivo y alineado con las especificaciones reales de equipos industriales. --- ## ✅ Mejora Implementada: Porcentaje de Gas ### 🎯 **Cambio aplicado al simulador:** **Parámetro eliminado (redundante):** ```python "damper_volumen_gas": 30.0 # ❌ Eliminado ``` **Parámetro nuevo (más intuitivo):** ```python "damper_porcentaje_gas": 60.0 # ✅ Implementado ``` ### 🔧 **Cálculo automático:** ```python # Ahora el simulador calcula automáticamente: V_total = 50 L # Volumen físico del tanque porcentaje_gas = 60% # Parámetro configurable V_gas_precarga = 50 L × 0.60 = 30 L # Calculado automáticamente ``` ### 💡 **Ventajas de usar porcentaje:** 1. **Más intuitivo**: "60% de gas" es más claro que "30 L de gas" 2. **Escalable**: Funciona para cualquier tamaño de damper 3. **Profesional**: Coincide con especificaciones técnicas reales 4. **Configurable**: Fácil ajustar según el tipo de aplicación ### 📊 **Rangos típicos del porcentaje de gas:** ```python # Aplicaciones típicas: - Sistemas de agua: 50-70% gas - Sistemas de alta presión: 60-80% gas - Sistemas críticos: 70-90% gas - Tu jarabe: 60% gas (óptimo) ``` ### 🎛️ **Configuración del simulador:** **Parámetros finales del damper:** - `damper_volumen`: 50.0 L (volumen total físico) - `damper_presion_precarga`: 4.0 bar (carga inicial N₂) - `damper_porcentaje_gas`: 60.0% (configurable 40-90%) - `damper_posicion`: 280.0 m (ubicación en tubería) **Valores calculados automáticamente:** - Volumen gas inicial: 30.0 L - Volumen gas efectivo: 17.14 L (a presión operacional) - Volumen disponible para fluido: 32.86 L ### ✅ **Resultado:** El simulador ahora es **más profesional** y **menos propenso a errores** de configuración, eliminando la redundancia que identificaste correctamente. --- ## 🆕 Nuevos Parámetros Agregados al Simulador ### 🌡️ **Temperatura del Fluido** **Parámetro agregado:** ```python "temperatura_fluido": 20.0 # °C (configurable -10 a 80°C) ``` **Importancia:** - **Viscosidad**: Afecta las pérdidas de carga y comportamiento del flujo - **Densidad**: Pequeñas variaciones con la temperatura - **Módulo bulk**: Ligeras variaciones según temperatura (para cálculos avanzados) - **Operación**: Importante para sistemas de procesamiento de alimentos ### 📊 **Combo de Módulo Bulk Predefinido** **Valores predefinidos disponibles:** ```python valores_bulk = { "Agua (20°C)": 2.2 GPa, "Jarabe concentrado": 2.2 GPa, "Aceite hidráulico": 1.7 GPa, "Glicerina": 4.5 GPa, "Alcohol etílico": 1.0 GPa, "Gasolina": 1.3 GPa, "Leche": 2.0 GPa, "Personalizado": entrada manual } ``` **Ventajas:** - **Más rápido**: Selección directa de fluidos comunes - **Menos errores**: Valores técnicamente correctos - **Educativo**: Muestra la variación entre fluidos - **Flexible**: Opción personalizada para casos especiales ### 🔧 **Parámetros de Material Visible** **Ahora se muestran:** #### Rugosidad de tubería: ```python "rugosidad": 1.5e-6 m # Configurable 0.001-0.5 mm ``` **Valores típicos:** - Acero inoxidable nuevo: 0.002 mm - Acero comercial: 0.045 mm - Hierro galvanizado: 0.15 mm - PVC: 0.0015 mm #### Módulo de Young: ```python "modulo_young": 200e9 Pa # Configurable 150-250 GPa ``` **Valores típicos:** - Acero: 200 GPa - Acero inoxidable: 195 GPa - Hierro fundido: 170 GPa - PVC: 3 GPa ### 🎯 **Beneficios de los nuevos parámetros:** 1. **Mayor precisión**: Cálculos más exactos considerando material real 2. **Más educativo**: Visualiza cómo afectan los diferentes materiales 3. **Práctico**: Combos para selección rápida de valores comunes 4. **Profesional**: Interfaz más completa y realista ### 📋 **Configuración mejorada:** **Sección FLUIDO:** - Densidad (configurable) - Temperatura (nuevo) - Módulo bulk (combo predefinido) **Sección TUBERÍA (nueva):** - Rugosidad (ahora visible) - Módulo Young (ahora visible) **Resultado:** El simulador ahora permite configurar todos los parámetros importantes que afectan el golpe de ariete, con una interfaz más intuitiva y educativa.