FDS – Un’ultima occhiata al codice
Questo articolo segna la conclusione di una serie di articoli in cui abbiamo esaminato approfonditamente la funzionalità del software FDS (Fire Dynamics Simulator). Nel corso di questi articoli, abbiamo esplorato in dettaglio come FDS opera e come può essere utilizzato per simulare scenari di incendio. In questo ultimo articolo, daremo un’ultima occhiata al codice sorgente di FDS e approfondiremo alcune delle sue caratteristiche chiave.
Il funzionamento di FDS si basa su un singolo file di testo ASCII contenente parametri organizzati in gruppi chiamati “namelist“, che sono parametri che iniziano con “&” e si riferiscono al tipo di grandezza fisica o di un oggetto concreto, ad esempio un muro (“&OBST = Obstruction”). Il file di input fornisce a FDS tutte le informazioni necessarie per descrivere lo scenario di incendio del progetto. Il file di input viene salvato con un nome come “nome_progetto.fds”, dove “nome_progetto” è una qualsiasi stringa di caratteri che aiuta a identificare la simulazione. Se questa stessa stringa viene ripetuta nel gruppo elenco nomi HEAD all’interno del file di input, tutti i file di output risultanti associati al calcolo avranno quindi questo nome con un prefisso comune (ad esempio “nome_progetto.out”).
Esempio di contenuto di un file di INPUT:
&HEAD CHID='WTC_05', TITLE='WTC Phase 1, Test 5' /
&MESH IJK=90,36,38, XB=-1.0,8.0,-1.8,1.8,0.0,3.82 /
&TIME T_END=5400. /
&MISC TMPA=20. /
&DUMP NFRAMES=1800, DT_HRR=10., DT_DEVC=10., DT_PROF=30. /
&REAC FUEL = 'N-HEPTANE' FYI = 'Heptane, C_7 H_16' C = 7. H = 16. CO_YIELD = 0.008 SOOT_YIELD = 0.015 /
&OBST XB= 3.5, 4.5,-1.0, 1.0, 0.0, 0.0, SURF_ID='STEEL FLANGE' / Fire Pan ...
&SURF ID = 'STEEL FLANGE' COLOR = 'BLACK' MATL_ID = 'STEEL' BACKING = 'EXPOSED' THICKNESS = 0.0063 / ...
&VENT MB='XMIN', SURF_ID='OPEN' / ...
&SLCF PBY=0.0, QUANTITY='TEMPERATURE', VECTOR=.TRUE. / ...
&BNDF QUANTITY='GAUGE HEAT FLUX' / ...
&DEVC XYZ=6.04,0.28,3.65, QUANTITY='VOLUME FRACTION', SPEC_ID='OXYGEN', ID='EO2_FDS' / ...
&TAIL / End of file.
Il codice del programma FDS ha delle precise istruzioni per leggere il file di input che è un modulo di FORTRAN chiamato READ_INPUT e si trova nel file ”read.f90”.
Questo modulo ha una serie di subroutine che permettono di leggere il file di input e di verificarne la congruità dei parametri inseriti.
Nella riga 85 di “read.f90” c’è il seguente comando:
IF (MY_RANK==0) WRITE(LU_ERR,'(/A/)') ' Reading FDS input file ...'
Questo comando avvisa l’utente che ha inizio la lettura del file di input.
Se qualche dato inserito risulta non idoneo al calcolo della simulazione dello scenario d’incendio, viene chiamata la subroutine SHUTDOWN con il messaggio di errore, come nel seguente esempio:
CALL SHUTDOWN('ERROR: GRID is no longer a valid NAMELIST group. Read User Guide discussion on MESH.')
Tutti i messaggi di errore sono visualizzati a video e scritti in un file di log all’interno di una sotto-cartella creata da FDS, che dovrebbe contenere i risultati. Se nulla viene riscontrato di anomalo, tutte le variabili necessarie al calcolo della simulazione vengono valorizzate e il programma riprende a eseguire le istruzioni contenute nel file “main.f90”, dove è contenuto il programma principale.
COME FDS CALCOLA LE GRANDEZZE FISICHE
Ogni cella dello scenario d’incendio del progetto è un poliedro cubico o parallelepipedo su cui FDS calcola le grandezze fisiche. Nella Guida Tecnica di riferimento di FDS c’è una figura che rappresenta le grandezze calcolate sulla cella*. Alcune grandezze vengono calcolate sul centro della faccia, altre sul bordo, mentre quelle scalari vengono calcolate al centro della cella.
FDS calcola tutte queste grandezze per ogni time-step (che varia nel tempo) per ogni cella, e il numero delle celle può essere anche di alcuni milioni per le simulazioni più importanti.
Questo programma è stato progettato tra gli anni ’70 e ’90 del secolo scorso e realizzato nei primi anni 2000 da un gruppo di ricercatori del NIST in collaborazione con diversi istituti universitari sparsi per il mondo. Il codice è molto complicato ma ben commentato e scritto bene, con un linguaggio di programmazione in cui non è prevista la programmazione a oggetti e neanche un’interfaccia grafica. Eppure, con l’aiuto di software chiamati PRE-PROCESSORI e POST-PROCESSORI, è possibile creare in modo visivo il file di input e leggere con la stessa modalità i file di output.
Ci sarebbe molto da dire sul codice FDS e sui suoi aspetti, ma crediamo che non basterebbe un libro intero per descriverne tutti gli aspetti, e non è prettamente materia di studio di un professionista antincendio. Tuttavia, il nostro consiglio è di non considerare FDS una “Black–Box“:
- Il codice è aperto e OPEN-SOURCE.
- Capire come funziona può aiutare a migliorare l’efficienza della simulazione dello scenario.
Nel prossimo articolo ci concentreremo su uno dei più importanti software PRE-PROCESSORE utilizzati da noi in FSE Italia SRL: parleremo di Pyrosim della Thunderhead Engineering.