{"id":351,"date":"2023-10-05T05:29:39","date_gmt":"2023-10-05T05:29:39","guid":{"rendered":"https:\/\/www.fseitalia.it\/blog\/?p=351"},"modified":"2023-10-05T05:29:39","modified_gmt":"2023-10-05T05:29:39","slug":"fds-unultima-occhiata-al-codice","status":"publish","type":"post","link":"https:\/\/www.fseitalia.it\/blog\/index.php\/2023\/10\/05\/fds-unultima-occhiata-al-codice\/","title":{"rendered":"FDS \u2013 Un\u2019ultima occhiata al codice"},"content":{"rendered":"\n<p><em>Questo articolo segna la conclusione<\/em> di una serie di articoli in cui abbiamo esaminato approfonditamente la funzionalit\u00e0 del software <strong>FDS<\/strong><em> (Fire Dynamics Simulator)<\/em>. Nel corso di questi articoli, abbiamo esplorato in dettaglio come FDS opera e come pu\u00f2 essere utilizzato per simulare scenari di incendio. In questo ultimo articolo, daremo un&#8217;ultima occhiata al codice sorgente di FDS e approfondiremo alcune delle sue caratteristiche chiave.<\/p>\n\n\n\n<p>Il funzionamento di FDS si basa su un singolo file di testo <strong>ASCII <\/strong>contenente parametri organizzati in gruppi chiamati &#8220;<strong>namelist<\/strong>&#8220;, che sono parametri che iniziano con <strong>&#8220;&amp;&#8221;<\/strong> e si riferiscono al tipo di grandezza fisica o di un oggetto concreto, ad esempio un muro <strong><em>(&#8220;&amp;OBST = Obstruction&#8221;)<\/em><\/strong>. 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 <strong>&#8220;nome_progetto.fds&#8221;<\/strong>, dove <strong>&#8220;nome_progetto&#8221;<\/strong> \u00e8 una qualsiasi stringa di caratteri che aiuta a identificare la simulazione. Se questa stessa stringa viene ripetuta nel gruppo elenco nomi <strong>HEAD <\/strong>all&#8217;interno del file di input, tutti i file di output risultanti associati al calcolo avranno quindi questo nome con un prefisso comune <strong>(ad esempio &#8220;nome_progetto.out&#8221;).<\/strong><\/p>\n\n\n\n<p><strong>Esempio di contenuto di un file di INPUT:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&amp;HEAD CHID='WTC_05', TITLE='WTC Phase 1, Test 5' \/\n\n&amp;MESH IJK=90,36,38, XB=-1.0,8.0,-1.8,1.8,0.0,3.82 \/ \n\n&amp;TIME T_END=5400. \/ \n\n&amp;MISC TMPA=20. \/ \n\n&amp;DUMP NFRAMES=1800, DT_HRR=10., DT_DEVC=10., DT_PROF=30. \/ \n\n&amp;REAC FUEL = 'N-HEPTANE' FYI = 'Heptane, C_7 H_16' C = 7. H = 16. CO_YIELD = 0.008 SOOT_YIELD = 0.015 \/ \n\n&amp;OBST XB= 3.5, 4.5,-1.0, 1.0, 0.0, 0.0, SURF_ID='STEEL FLANGE' \/ Fire Pan ... \n\n&amp;SURF ID = 'STEEL FLANGE' COLOR = 'BLACK' MATL_ID = 'STEEL' BACKING = 'EXPOSED' THICKNESS = 0.0063 \/ ... \n\n&amp;VENT MB='XMIN', SURF_ID='OPEN' \/ ... \n\n&amp;SLCF PBY=0.0, QUANTITY='TEMPERATURE', VECTOR=.TRUE. \/ ... \n\n&amp;BNDF QUANTITY='GAUGE HEAT FLUX' \/ ... \n\n&amp;DEVC XYZ=6.04,0.28,3.65, QUANTITY='VOLUME FRACTION', SPEC_ID='OXYGEN', ID='EO2_FDS' \/ ... \n\n&amp;TAIL \/ End of file.<\/code><\/pre>\n\n\n\n<p>Il codice del programma FDS ha delle precise istruzioni per leggere il file di input che \u00e8 un modulo di <strong>FORTRAN <\/strong>chiamato <strong>READ_INPUT <\/strong>e si trova nel file <strong>\u201dread.f90\u201d.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"916\" src=\"https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/codice_sorgente_FDS_01-1024x916.jpg\" alt=\"\" class=\"wp-image-352\" srcset=\"https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/codice_sorgente_FDS_01-1024x916.jpg 1024w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/codice_sorgente_FDS_01-300x268.jpg 300w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/codice_sorgente_FDS_01-768x687.jpg 768w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/codice_sorgente_FDS_01.jpg 1107w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Questo modulo ha una serie di <strong>subroutine <\/strong>che permettono di leggere il file di <strong>input <\/strong>e di verificarne la congruit\u00e0 dei parametri inseriti.<\/p>\n\n\n\n<p><strong>Nella riga 85 di \u201cread.f90\u201d c\u2019\u00e8 il seguente comando:<\/strong><strong><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IF (MY_RANK==0) WRITE(LU_ERR,'(\/A\/)') ' Reading FDS input file ...'<\/code><\/pre>\n\n\n\n<p><em>Questo comando avvisa l&#8217;utente che ha inizio la lettura del file di input.<\/em><em><\/em><\/p>\n\n\n\n<p>Se qualche dato inserito risulta non idoneo al calcolo della simulazione dello scenario d&#8217;incendio, viene chiamata la subroutine <strong>SHUTDOWN <\/strong>con il messaggio di errore, come nel seguente esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CALL SHUTDOWN('ERROR: GRID is no longer a valid NAMELIST group. Read User Guide discussion on MESH.')<\/code><\/pre>\n\n\n\n<p>Tutti i <em>messaggi di errore<\/em> sono visualizzati a video e scritti in un file di <strong>log <\/strong>all&#8217;interno di una<em> sotto-cartella creata da FDS<\/em>, 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 <strong>&#8220;main.f90&#8221;<\/strong>, dove \u00e8 contenuto il programma principale.<\/p>\n\n\n\n<p><strong>COME FDS CALCOLA LE GRANDEZZE FISICHE<\/strong><\/p>\n\n\n\n<p>Ogni cella dello scenario d&#8217;incendio del progetto \u00e8 un <strong>poliedro cubico<\/strong> o <strong>parallelepipedo <\/strong>su cui FDS calcola le grandezze fisiche. Nella <strong>Guida Tecnica <\/strong>di riferimento di <em>FDS <\/em>c&#8217;\u00e8 una <strong>figura <\/strong>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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"785\" src=\"https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/technical_reference_FDS-1024x785.jpg\" alt=\"\" class=\"wp-image-353\" srcset=\"https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/technical_reference_FDS-1024x785.jpg 1024w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/technical_reference_FDS-300x230.jpg 300w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/technical_reference_FDS-768x589.jpg 768w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/technical_reference_FDS-1408x1080.jpg 1408w, https:\/\/www.fseitalia.it\/blog\/wp-content\/uploads\/2023\/10\/technical_reference_FDS.jpg 1510w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>FDS<\/strong> calcola tutte queste grandezze per ogni <strong>time-step<\/strong> (<em>che varia nel tempo<\/em>) per ogni cella, e il numero delle celle pu\u00f2 essere anche di alcuni milioni per le simulazioni pi\u00f9 importanti.<\/p>\n\n\n\n<p>Questo programma \u00e8 stato progettato tra gli anni <em>&#8217;70 e &#8217;90 <\/em>del secolo scorso e realizzato nei primi anni <em>2000 <\/em>da un gruppo di ricercatori del <strong>NIST <\/strong>in collaborazione con diversi istituti universitari sparsi per il mondo. Il codice \u00e8 molto complicato ma ben commentato e scritto bene, con un linguaggio di programmazione in cui non \u00e8 prevista la programmazione a oggetti e neanche un&#8217;interfaccia grafica. Eppure, con l&#8217;aiuto di software chiamati<strong> PRE-PROCESSORI <\/strong>e<strong> POST-PROCESSORI<\/strong>, \u00e8 possibile creare in modo visivo il file di input e leggere con la stessa modalit\u00e0 i file di <strong>output<\/strong>.<\/p>\n\n\n\n<p>Ci sarebbe <em>molto da dire<\/em> sul codice <strong>FDS <\/strong>e sui suoi aspetti, ma crediamo che non basterebbe un libro intero per descriverne tutti gli aspetti, e non \u00e8 prettamente materia di studio di un professionista antincendio. Tuttavia, il nostro <em>consiglio <\/em>\u00e8 di non considerare FDS una &#8220;<strong>Black<\/strong>&#8211;<strong>Box<\/strong>&#8220;:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>Il codice \u00e8 aperto e <strong>OPEN-SOURCE<\/strong>.<\/li>\n\n\n\n<li>Capire come funziona pu\u00f2 aiutare a<strong> migliorare l&#8217;efficienza<\/strong> della simulazione dello scenario.<\/li>\n<\/ol>\n\n\n\n<p><em>Nel prossimo articolo<\/em> ci concentreremo su uno dei pi\u00f9 importanti software <strong>PRE-PROCESSORE<\/strong> utilizzati da noi in <strong>FSE Italia SRL<\/strong>: parleremo di <strong>Pyrosim <\/strong>della<strong><em> Thunderhead Engineering.<\/em><\/strong><strong><em><\/em><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo articolo segna la conclusione di una serie di articoli in cui abbiamo esaminato approfonditamente la funzionalit\u00e0 del software FDS (Fire Dynamics Simulator). Nel corso di questi articoli, abbiamo esplorato in dettaglio come FDS opera e come pu\u00f2 essere utilizzato per simulare scenari di incendio. In questo ultimo articolo, daremo un&#8217;ultima occhiata al codice sorgente&hellip; <br \/> <a class=\"read-more\" href=\"https:\/\/www.fseitalia.it\/blog\/index.php\/2023\/10\/05\/fds-unultima-occhiata-al-codice\/\">Leggi tutto<\/a><\/p>\n","protected":false},"author":1,"featured_media":353,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-351","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-rules"],"_links":{"self":[{"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/posts\/351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=351"}],"version-history":[{"count":1,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/posts\/351\/revisions"}],"predecessor-version":[{"id":354,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/posts\/351\/revisions\/354"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/media\/353"}],"wp:attachment":[{"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fseitalia.it\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}