Fire Dynamics Simulator: un’altra occhiata al codice sorgente
DISCLAIMER:
Questa spiegazione che stiamo affrontando sul codice sorgente di FDS non ha una rilevanza sulle capacità professionali del professionista antincendio, perché non è compito suo cercare di entrare nell’analisi del codice. Questo software è stato sviluppato dalla comunità scientifica del NIST ed è riconosciuto come uno dei software più importanti in ambito antincendio. Conoscere il funzionamento del software, tuttavia non è un incentivo a manometterlo. Qualsiasi manomissione del codice sorgente porterebbe con ogni probabilità ad invalidare i risultati scientifici e quindi non potrebbe essere considerata valida una simulazione con il software manomesso.
Come abbiamo detto nell’articolo precedente, il codice sorgente di FDS è stato scritto in FORTRAN90. Questo linguaggio è stato inventato nella metà degli anni 50 del secolo scorso da un gruppo di matematici e informatici guidati da John Backus. FORTRAN fu il primo linguaggio ad ALTO LIVELLO ovvero con dei comandi scritti per essere più comprensibili dagli esseri umani tant’è che se diamo un occhiata al codice noteremo delle parole (istruzioni) che hanno un significato anche nella lingua scritta: parliamo dell’inglese ovviamente.
I calcoli in FDS vengono fatti per lo più tramite dei cicli (LOOP) che iniziano per esempio:
PRESSURE_ITERATION_LOOP: DO
… Esecuzione dei calcoli
IF (.NOT. ITERATE_PRESSURE) EXIT PRESSURE_ITERATION_LOOP //
Quando si verifica una determinata condizione il ciclo si interrompe!
ENDDO PRESSURE_ITERATION_LOOP
Questo esempio è un ciclo di iterazione per calcolare la pressione dell’aria in una simulazione d’incendio e lo troviamo nel file “main.f90” alla riga 1414 e termina alla riga 1530, mentre una delle condizioni affinché il programma esca dal ciclo si trova alla riga 1473. Il ciclo espone delle chiamate a delle SUBROUTINE che possono anche trovarsi in uno degli altri 31 file in FORTRAN del codice sorgente.
Le grandezze fisiche, una volta calcolate vengono esposte dentro dei file che il compilatore FORTRAN li scrive in formato binario. Il fatto di scrivere in forma binaria è dovuto essenzialmente a questioni di performance e di accuratezza, quindi FDS riesce a fare calcoli molto complessi e molto velocemente, e la fase di scrittura contribuisce a mantenere alte le prestazioni in termini di velocità di esecuzione di calcoli.
Anche se FDS può impiegare giorni a calcolare una simulazione di scenario d’incendio di progetto, bisogna tenere conto della complessità dei calcoli e di quanto questi vengono eseguiti per ogni cella in cui e suddiviso lo scenario e molte volte l’ordine di grandezza del numero di celle è intorno al milione.
Il file “dump.f90” contiene tutte le SUBROUTINE per scrivere i file, per esempio alla riga 2479 troviamo un frammento di codice che scrive in un file i dati ottenuti.
Questo file è uno dei pochi che vengono scritti in formato ASCII, ovvero in caratteri leggibili e il file in questione è il file “nome_progetto.out”
Un file “.out” tipico generato da FDS fornisce una serie di informazioni chiave sulla simulazione. Questi dati includono la data corrente, la revisione del software, il numero di processi MPI coinvolti, la presenza di OpenMP e le informazioni sulla libreria MPI utilizzata.
Inoltre, il file fornisce dettagli sulla griglia, come le dimensioni in direzione X, Y e Z, così come le dimensioni fisiche della simulazione. Questi dati sono fondamentali per comprendere la configurazione della simulazione e possono essere cruciali per una corretta interpretazione dei risultati.
Ecco un esempio del contenuto di un file “.out”:
Current Date : April 14, 2023 10:18:10
Revision : FDS6.7.9-0-gec52dee42-release
Revision Date : Sun Jun 26 14:36:40 2022 -0400
Compiler :
Compilation Date : Tue 06/28/2022 11:11 PM
MPI Enabled; Number of MPI Processes: 16
OpenMP Disabled
MPI version: 3.1
MPI library version: Intel(R) MPI Library 2021.6 for Windows* OS
Job TITLE :
Job ID string : nome_progetto
Grid Dimensions, Mesh 1
Cells in the X Direction 40
Cells in the Y Direction 33
Cells in the Z Direction 31
Number of Grid Cells 40920
Physical Dimensions, Mesh 1
Length (m) 10.000
Width (m) 8.250
Height (m) 7.750
Initial Time Step (s) 0.094
….
Miscellaneous Parameters
Simulation Start Time (s) 0.0
Simulation End Time (s) 1400.0
Background Pressure (Pa) 101325.00
Ambient Temperature (C) 20.00
3D Cartesian
VLES Calculation
Eddy Viscosity: Deardorff Model (C_DEARDORFF = 0.10)
Surface INERT Eddy Viscosity: WALE Model (C_WALE = 0.60)
Surface BURNER Eddy Viscosity: WALE Model (C_WALE = 0.60)
Surface WARKSTATION Eddy Viscosity: WALE Model (C_WALE = 0.60)
Turbulent Prandtl Number: 0.50
Turbulent Schmidt Number: 0.50
…
Background Stratification
Z (m) P_0 (Pa) TMP_0 (C)
————————————
7.12 101241.46 20.00
6.88 101244.41 20.00
6.62 101247.32 20.00
6.38 101250.27 20.00
6.12 101253.18 20.00
5.88 101256.14 20.00
5.62 101259.05 20.00
5.38 101261.96 20.00
5.12 101264.91 20.00
4.88 101267.82 20.00
4.62 101270.77 20.00
4.38 101273.68 20.00
4.12 101276.64 20.00
3.88 101279.55 20.00
3.62 101282.46 20.00
3.38 101285.41 20.00
3.12 101288.32 20.00
2.88 101291.28 20.00
2.62 101294.19 20.00
2.38 101297.14 20.00
2.12 101300.05 20.00
1.88 101302.97 20.00
1.62 101305.92 20.00
1.38 101308.83 20.00
1.12 101311.78 20.00
0.88 101314.70 20.00
0.62 101317.65 20.00
0.38 101320.56 20.00
0.12 101323.48 20.00
-0.12 101326.43 20.00
-0.38 101329.34 20.00
…termine del file
Time Stepping Wall Clock Time (s): 31589.304
Total Elapsed Wall Clock Time (s): 31605.884
STOP: FDS completed successfully (CHID: nome_progetto)
Inizializzazione del file di output diagnostico
IF (APPEND) THEN INQUIRE(FILE=FN_OUTPUT,EXIST=EX) IF (EX) OPEN(LU_OUTPUT,FILE=FN_OUTPUT,FORM='FORMATTED',STATUS='OLD',POSITION='APPEND') ELSE OPEN(LU_OUTPUT,FILE=FN_OUTPUT,FORM='FORMATTED',STATUS='REPLACE') ENDIF
Questo codice gestisce l’apertura del file di output diagnostico in base alla modalità di esecuzione. Se la modalità è impostata su “APPEND,” il programma verifica se il file esiste già. In caso affermativo, il file viene aperto in modalità “APPEND,” consentendo di aggiungere ulteriori dati. In caso contrario, se la modalità non è “APPEND,” il file viene aperto in modalità “REPLACE,” sovrascrivendo i dati esistenti.
In questo articolo, abbiamo esaminato ulteriormente il codice sorgente di Fire Dynamics Simulator ed esplorato come vengono gestiti i dati di output diagnostico. Questo software è fondamentale per la prevenzione e la comprensione degli incendi, e il suo codice sorgente rivela la complessità e l’efficienza dei calcoli che sono alla base delle simulazioni antincendio.
Nel prossimo articolo, approfondiremo come FDS legge i dati di input per avviare le simulazioni degli scenari d’incendio di progetto.