Files
pinn/app.py
T
davide b663a89abd Allinea PINN alla fisica FDM: sorgente interna e BC Robin bilaterali
- model.py: aggiunge termine sorgente Gaussiana (σ=0.02) nella PDE loss
  per approssimare δ(x − X_SRC); sostituisce BC Neumann a x=0 con Robin
- engine.py: clustering collocation vicino X_SRC anziché x=0;
  downsample FDM su entrambi gli assi spaziale e temporale in evaluate_model()
- visualizer.py: downsample FDM su entrambi gli assi prima del plot
- app.py: aggiorna header con fisica corrente
- CLAUDE.md: aggiorna PDE, BC e note architetturali

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 12:07:14 +02:00

63 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sys
import engine
def print_header():
print("=" * 55)
print(" Heat Equation PINN — ∂T/∂t = α ∂²T/∂x²")
print(" Robin BC (x=0, x=L) + point source @ X_SRC")
print("=" * 55)
def _ask_float(prompt, default):
val = input(prompt).strip()
try:
return float(val)
except ValueError:
return default
def _ask_int(prompt, default):
val = input(prompt).strip()
return int(val) if val.isdigit() else default
def main_menu():
print("\nInitializing collocation points...")
data = engine.prepare_data()
print(f"Ready — device: {data['device']}\n")
while True:
print("\n" + "-" * 30)
print(" MAIN MENU")
print("-" * 30)
print("1. Train New Model")
print("2. Evaluate Model (L2 vs analytical)")
print("3. Visualize Temperature Field")
print("0. Exit")
print("-" * 30)
choice = input("Select an option (0-3): ").strip()
if choice == '1':
epochs = _ask_int("Epochs (default 5000): ", 5000)
engine.train_model(data, epochs=epochs)
elif choice == '2':
engine.evaluate_model(data)
elif choice == '3':
engine.generate_visualization(data)
elif choice == '0':
print("Exiting.")
sys.exit(0)
else:
print("Invalid choice.")
if __name__ == "__main__":
print_header()
main_menu()