using System; using CtrEditor.HydraulicSimulator; namespace CtrEditor { /// /// Ejemplo para probar las nuevas funcionalidades de NPSH /// Reproduce el problema original del usuario donde una bomba /// seguía funcionando con tanque vacío y alta presión de descarga /// public class NPSHTestExample { public static void TestNPSHConfiguration() { Console.WriteLine("=== TESTING NPSH VERIFICATION SYSTEM ==="); Console.WriteLine(); // Configuración original problemática del usuario Console.WriteLine("1. TESTING ORIGINAL PROBLEM SCENARIO:"); Console.WriteLine(" - Tanque origen: VACÍO (1.01 bar)"); Console.WriteLine(" - Tanque destino: 34 bar presión"); Console.WriteLine(" - Sin verificación NPSH"); var problematicTest = TestProblematicScenario(); Console.WriteLine($" Resultado SIN NPSH: Bomba funciona = {problematicTest.canOperate}"); Console.WriteLine($" Presión diferencial: {problematicTest.pressureDiff:F2} bar"); Console.WriteLine(); // Test con verificación NPSH habilitada Console.WriteLine("2. TESTING WITH NPSH VERIFICATION ENABLED:"); Console.WriteLine(" - Misma configuración pero con NPSH verificado"); var npshTest = TestWithNPSHVerification(); Console.WriteLine($" Resultado CON NPSH: Bomba puede operar = {npshTest.canOperate}"); Console.WriteLine($" NPSH Disponible: {npshTest.npshAvailable:F2} m"); Console.WriteLine($" NPSH Requerido: {npshTest.npshRequired:F2} m"); Console.WriteLine($" Factor cavitación: {npshTest.cavitationFactor:F2}"); Console.WriteLine(); // Test con condiciones normales de operación Console.WriteLine("3. TESTING NORMAL OPERATING CONDITIONS:"); Console.WriteLine(" - Tanque origen: 5 bar presión"); Console.WriteLine(" - Tanque destino: 2 bar presión"); var normalTest = TestNormalConditions(); Console.WriteLine($" Resultado NORMAL: Bomba puede operar = {normalTest.canOperate}"); Console.WriteLine($" NPSH Disponible: {normalTest.npshAvailable:F2} m"); Console.WriteLine($" Factor cavitación: {normalTest.cavitationFactor:F2}"); Console.WriteLine(); // Test de configuración dinámica Console.WriteLine("4. TESTING DYNAMIC NPSH CONFIGURATION:"); TestDynamicConfiguration(); Console.WriteLine(); Console.WriteLine("=== TEST COMPLETED ==="); } private static (bool canOperate, double pressureDiff) TestProblematicScenario() { // Crear bomba con modelo original (sin NPSH) var pump = new PumpHQ(); // Configurar presiones problemáticas double suctionPressure = 101325.0; // 1.01 bar (atmosférica) double dischargePressure = 3400000.0; // 34 bar double flowRate = 10.0; // L/min // Calcular con modelo original double pressureDiff = pump.Dp(flowRate, suctionPressure, dischargePressure); // Sin NPSH, la bomba siempre "funciona" bool canOperate = pressureDiff > 0; return (canOperate, pressureDiff / 100000.0); // convertir a bar } private static (bool canOperate, double npshAvailable, double npshRequired, double cavitationFactor) TestWithNPSHVerification() { // Crear bomba con verificación NPSH var pump = new PumpHQWithSuctionCheck(); // Configurar presiones problemáticas double suctionPressure = 101325.0; // 1.01 bar (atmosférica) double dischargePressure = 3400000.0; // 34 bar double flowRate = 10.0; // L/min double tankLevel = 0.5; // 50 cm de altura double vaporPressure = 2337.0; // Presión vapor agua a 20°C double suctionLosses = 0.5; // Pérdidas de succión estimadas // Actualizar presiones en la bomba pump.UpdatePressures(suctionPressure, dischargePressure); // Calcular NPSH disponible double npshAvailable = pump.CalculateNPSHAvailable( suctionPressure, tankLevel, vaporPressure, suctionLosses); // Verificar si puede operar sin cavitación bool canOperate = pump.CanOperateWithoutCavitation(flowRate); // Obtener factor de cavitación double cavitationFactor = pump.GetCavitationFactor(flowRate); return (canOperate, npshAvailable, 3.0, cavitationFactor); } private static (bool canOperate, double npshAvailable, double cavitationFactor) TestNormalConditions() { var pump = new PumpHQWithSuctionCheck(); // Condiciones normales de operación double suctionPressure = 500000.0; // 5 bar double dischargePressure = 200000.0; // 2 bar double flowRate = 15.0; // L/min double tankLevel = 2.0; // 2 metros de altura double vaporPressure = 2337.0; double suctionLosses = 0.3; pump.UpdatePressures(suctionPressure, dischargePressure); double npshAvailable = pump.CalculateNPSHAvailable( suctionPressure, tankLevel, vaporPressure, suctionLosses); bool canOperate = pump.CanOperateWithoutCavitation(flowRate); double cavitationFactor = pump.GetCavitationFactor(flowRate); return (canOperate, npshAvailable, cavitationFactor); } private static void TestDynamicConfiguration() { // Crear manager de simulación hidráulica var manager = new HydraulicSimulationManager(); Console.WriteLine(" Configuración inicial - NPSH deshabilitado:"); manager.EnableNPSHVerification = false; Console.WriteLine($" NPSH habilitado: {manager.EnableNPSHVerification}"); Console.WriteLine(" Habilitando NPSH con parámetros personalizados:"); manager.ConfigureNPSHSettings( enableNPSH: true, npshRequired: 2.5, // metros vaporPressure: 2500.0, // Pa suctionLosses: 0.8 // metros ); Console.WriteLine($" NPSH habilitado: {manager.EnableNPSHVerification}"); Console.WriteLine(" Configuración aplicada correctamente"); } /// /// Método para integrar en el UI y probar con bombas reales /// public static void TestWithRealPumpComponent() { Console.WriteLine("=== TESTING REAL PUMP COMPONENT ==="); Console.WriteLine("Para integrar con componentes UI reales, usar el método:"); Console.WriteLine("NPSHTestExample.TestWithRealPumpComponent() desde el UI"); } /// /// Método para verificar el problema original específico del usuario /// public static void VerifyOriginalProblemFixed() { Console.WriteLine("=== VERIFICANDO SOLUCIÓN AL PROBLEMA ORIGINAL ==="); Console.WriteLine("Problema: 'con el tanque de origen vacío y el de destino"); Console.WriteLine("con una presión de 34 bar la bomba continúa a llenar el tanque de destino'"); Console.WriteLine(); var pump = new PumpHQWithSuctionCheck(); // Exactamente las condiciones del problema double suctionPressure = 101325.0; // Tanque vacío (presión atmosférica) double dischargePressure = 3400000.0; // 34 bar como reportó el usuario double flowRate = 5.0; // Flujo típico pump.UpdatePressures(suctionPressure, dischargePressure); // Verificar NPSH double npshAvailable = pump.CalculateNPSHAvailable( suctionPressure, 0.1, 2337.0, 0.5); // Tanque casi vacío bool canOperate = pump.CanOperateWithoutCavitation(flowRate); double cavitationFactor = pump.GetCavitationFactor(flowRate); Console.WriteLine($"Presión succión: {suctionPressure/100000:F2} bar"); Console.WriteLine($"Presión descarga: {dischargePressure/100000:F2} bar"); Console.WriteLine($"NPSH disponible: {npshAvailable:F2} m"); Console.WriteLine($"Factor cavitación: {cavitationFactor:F2}"); Console.WriteLine($"Bomba puede operar: {canOperate}"); Console.WriteLine(); if (!canOperate) { Console.WriteLine("✅ PROBLEMA SOLUCIONADO: La bomba ya no puede operar"); Console.WriteLine(" en condiciones físicamente imposibles!"); } else { Console.WriteLine("❌ PROBLEMA PERSISTE: La bomba aún puede operar"); Console.WriteLine(" en condiciones incorrectas."); } } } }