141 lines
5.0 KiB
Python
141 lines
5.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Demostración de por qué timesteps más pequeños son mejores para TSNet
|
|
"""
|
|
|
|
def demonstrate_timestep_stability():
|
|
"""
|
|
Demuestra la diferencia entre timesteps grandes y pequeños
|
|
"""
|
|
print("🔬 Demostración: Timestep y Estabilidad Numérica\n")
|
|
|
|
# Simulación de ejemplo: cambio súbito de presión
|
|
print("Escenario: Cambio súbito de velocidad de bomba de 0% a 100%")
|
|
print("=" * 60)
|
|
|
|
# Con timestep grande (problemático)
|
|
print("\n❌ Con TimeStep = 1.0 segundo:")
|
|
print(" t=0.0s → t=1.0s (1 paso)")
|
|
print(" • El cambio es instantáneo en la simulación")
|
|
print(" • No se capturan transientes intermedios")
|
|
print(" • Puede causar inestabilidad numérica")
|
|
print(" • Ecuaciones diferenciales mal resueltas")
|
|
|
|
# Con timestep pequeño (correcto)
|
|
print("\n✅ Con TimeStep = 0.1 segundo:")
|
|
print(" t=0.0s → t=0.1s → t=0.2s → ... → t=1.0s (10 pasos)")
|
|
print(" • Cambio gradual capturado paso a paso")
|
|
print(" • Transientes intermedios modelados")
|
|
print(" • Mayor estabilidad numérica")
|
|
print(" • Ecuaciones resueltas correctamente")
|
|
|
|
print("\n🎯 Beneficios del timestep más pequeño:")
|
|
print(" 1. Mejor convergencia de las ecuaciones")
|
|
print(" 2. Captura de fenómenos transitorios")
|
|
print(" 3. Menor probabilidad de división por cero")
|
|
print(" 4. Resultados más precisos")
|
|
|
|
# Ejemplo numérico
|
|
print("\n📊 Ejemplo numérico:")
|
|
print(" Ecuación: dP/dt = f(P, Q) (cambio de presión)")
|
|
print(" ")
|
|
print(" TimeStep = 1.0s:")
|
|
print(" P(1) = P(0) + 1.0 * f(P(0), Q(0)) ← Gran salto")
|
|
print(" ")
|
|
print(" TimeStep = 0.1s:")
|
|
print(" P(0.1) = P(0) + 0.1 * f(P(0), Q(0))")
|
|
print(" P(0.2) = P(0.1) + 0.1 * f(P(0.1), Q(0.1))")
|
|
print(" ... ← Pasos graduales, más estable")
|
|
|
|
def show_tsnet_configuration():
|
|
"""
|
|
Muestra la configuración actual de TSNet
|
|
"""
|
|
print("\n🔧 Configuración Actual de TSNet:")
|
|
print("=" * 40)
|
|
|
|
print("```csharp")
|
|
print("// En TSNetRealTimeSimulator.cs")
|
|
print("_simulationManager.Configuration.Duration = 1.0; // 1 segundo total")
|
|
print("_simulationManager.Configuration.TimeStep = 0.1; // Pasos de 0.1s")
|
|
print("```")
|
|
|
|
print("\n📋 Esto significa:")
|
|
print(" • Cada ciclo simula exactamente 1 segundo")
|
|
print(" • Internamente usa 10 pasos de 0.1 segundos")
|
|
print(" • Timer ejecuta cada 1 segundo (tiempo real)")
|
|
print(" • TSNet tiene suficiente resolución temporal")
|
|
|
|
print("\n⏱️ Cronología de ejecución:")
|
|
print(" Tiempo Real │ TSNet Interno")
|
|
print(" ─────────────┼─────────────────")
|
|
print(" t=0s │ Inicia simulación")
|
|
print(" │ ├─ 0.0→0.1s")
|
|
print(" │ ├─ 0.1→0.2s")
|
|
print(" │ ├─ 0.2→0.3s")
|
|
print(" │ ├─ ... ")
|
|
print(" │ └─ 0.9→1.0s")
|
|
print(" t=1s │ Completa y devuelve resultados")
|
|
print(" t=2s │ Repite para siguiente segundo")
|
|
|
|
def show_alternatives():
|
|
"""
|
|
Muestra alternativas de configuración
|
|
"""
|
|
print("\n🔄 Alternativas de Configuración:")
|
|
print("=" * 40)
|
|
|
|
configs = [
|
|
{
|
|
"name": "Ultra Rápido (para transientes críticos)",
|
|
"duration": 1.0,
|
|
"timestep": 0.01,
|
|
"steps": 100,
|
|
"use_case": "Golpe de ariete, cavitación"
|
|
},
|
|
{
|
|
"name": "Rápido (configuración actual)",
|
|
"duration": 1.0,
|
|
"timestep": 0.1,
|
|
"steps": 10,
|
|
"use_case": "Simulación general estable"
|
|
},
|
|
{
|
|
"name": "Moderado",
|
|
"duration": 1.0,
|
|
"timestep": 0.5,
|
|
"steps": 2,
|
|
"use_case": "Sistemas muy estables"
|
|
},
|
|
{
|
|
"name": "Problemático (el anterior)",
|
|
"duration": 1.0,
|
|
"timestep": 1.0,
|
|
"steps": 1,
|
|
"use_case": "❌ Puede causar errores"
|
|
}
|
|
]
|
|
|
|
for config in configs:
|
|
print(f"\n📋 {config['name']}:")
|
|
print(f" Duration: {config['duration']}s")
|
|
print(f" TimeStep: {config['timestep']}s")
|
|
print(f" Pasos internos: {config['steps']}")
|
|
print(f" Uso: {config['use_case']}")
|
|
|
|
def main():
|
|
demonstrate_timestep_stability()
|
|
show_tsnet_configuration()
|
|
show_alternatives()
|
|
|
|
print("\n" + "="*60)
|
|
print("🎯 RESPUESTA A TU PREGUNTA:")
|
|
print("="*60)
|
|
print("✅ SÍ, TSNet puede y DEBE usar timesteps < 1 segundo")
|
|
print("✅ La configuración actual (0.1s) es CORRECTA y estable")
|
|
print("✅ Esto NO afecta el timing de 1 segundo del simulador")
|
|
print("✅ Solo mejora la precisión y estabilidad interna")
|
|
print("="*60)
|
|
|
|
if __name__ == "__main__":
|
|
main() |