93 lines
4.4 KiB
C#
93 lines
4.4 KiB
C#
using System;
|
|
using CtrEditor.HydraulicSimulator;
|
|
|
|
namespace CtrEditor
|
|
{
|
|
public class TestNPSH
|
|
{
|
|
public static void Main(string[] args)
|
|
{
|
|
Console.WriteLine("Iniciando prueba de verificación NPSH...");
|
|
|
|
try
|
|
{
|
|
// Crear una bomba con curva característica
|
|
var pumpModel = new PumpHQ(
|
|
h0: 50.0, // 50 metros de cabeza a caudal cero
|
|
q0: 100.0, // 100 L/min caudal máximo teórico
|
|
speed: 1750 // 1750 RPM nominal
|
|
);
|
|
|
|
// Configurar NPSH requerido de 3 metros (típico para bombas centrífugas)
|
|
pumpModel.NPSHRequerido = 3.0;
|
|
|
|
Console.WriteLine($"Bomba configurada:");
|
|
Console.WriteLine($" H0: {pumpModel.H0} m");
|
|
Console.WriteLine($" Q0: {pumpModel.Q0} L/min");
|
|
Console.WriteLine($" NPSH Requerido: {pumpModel.NPSHRequerido} m");
|
|
|
|
// CASO 1: Condición problemática del usuario
|
|
// Tanque origen vacío (1.01 bar = presión atmosférica)
|
|
// Tanque destino con 34 bar de presión
|
|
Console.WriteLine("\n=== CASO 1: Condición problemática ===");
|
|
double presionOrigen = 1.01; // bar
|
|
double presionDestino = 34.0; // bar
|
|
double caudal = 50.0; // L/min
|
|
|
|
// Calcular NPSH disponible
|
|
double npshDisponible = pumpModel.CalculateNPSHAvailable(presionOrigen);
|
|
Console.WriteLine($"Presión origen: {presionOrigen} bar");
|
|
Console.WriteLine($"Presión destino: {presionDestino} bar");
|
|
Console.WriteLine($"NPSH Disponible: {npshDisponible:F2} m");
|
|
Console.WriteLine($"NPSH Requerido: {pumpModel.NPSHRequerido} m");
|
|
|
|
bool puedeOperar = pumpModel.CanOperateWithoutCavitation(presionOrigen);
|
|
Console.WriteLine($"¿Puede operar sin cavitación?: {(puedeOperar ? "SÍ" : "NO")}");
|
|
|
|
if (!puedeOperar)
|
|
{
|
|
double factorCavitacion = pumpModel.GetCavitationFactor(presionOrigen);
|
|
Console.WriteLine($"Factor de cavitación: {factorCavitacion:F3}");
|
|
Console.WriteLine("RESULTADO: La bomba NO debería operar en estas condiciones");
|
|
}
|
|
|
|
// CASO 2: Condición normal
|
|
Console.WriteLine("\n=== CASO 2: Condición normal ===");
|
|
presionOrigen = 2.5; // bar (presión adecuada)
|
|
presionDestino = 5.0; // bar (presión razonable)
|
|
|
|
npshDisponible = pumpModel.CalculateNPSHAvailable(presionOrigen);
|
|
Console.WriteLine($"Presión origen: {presionOrigen} bar");
|
|
Console.WriteLine($"Presión destino: {presionDestino} bar");
|
|
Console.WriteLine($"NPSH Disponible: {npshDisponible:F2} m");
|
|
|
|
puedeOperar = pumpModel.CanOperateWithoutCavitation(presionOrigen);
|
|
Console.WriteLine($"¿Puede operar sin cavitación?: {(puedeOperar ? "SÍ" : "NO")}");
|
|
|
|
if (puedeOperar)
|
|
{
|
|
// Calcular presión diferencial normal
|
|
double deltaP = pumpModel.Dp(caudal);
|
|
Console.WriteLine($"Presión diferencial a {caudal} L/min: {deltaP:F2} bar");
|
|
Console.WriteLine("RESULTADO: La bomba puede operar normalmente");
|
|
}
|
|
|
|
Console.WriteLine("\n=== RESUMEN ===");
|
|
Console.WriteLine("La implementación NPSH previene que la bomba opere");
|
|
Console.WriteLine("cuando la presión de succión es insuficiente,");
|
|
Console.WriteLine("solucionando el problema físicamente imposible");
|
|
Console.WriteLine("reportado por el usuario.");
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Error en la prueba: {ex.Message}");
|
|
Console.WriteLine($"Stack trace: {ex.StackTrace}");
|
|
}
|
|
|
|
Console.WriteLine("\nPresione cualquier tecla para salir...");
|
|
Console.ReadKey();
|
|
}
|
|
}
|
|
}
|