Fire Dynamics Simulator: un’altra occhiata al codice sorgente

Fire Safety Engineering in ITALIA

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.