Académique Documents
Professionnel Documents
Culture Documents
Sixth Edition
http://dx.doi.org/10.6028/NIST.SP.1019
http://dx.doi.org/10.6028/NIST.SP.1019
February 4, 2019
Revision: FDS6.7.1-0-g14cc738
E N T OF C O M
TM M
AR
ER
D EP
CE
ICA
UN
IT
ER
D
E
ST AM
ATES OF
The Fire Dynamics Simulator and Smokeview are the products of an international collaborative effort led by
the National Institute of Standards and Technology (NIST) and VTT Technical Research Centre of Finland.
Its developers and contributors are listed below.
Contributors
i
About the Developers
Kevin McGrattan is a mathematician in the Fire Research Division of NIST. He received a bachelor of
science degree from the School of Engineering and Applied Science of Columbia University in 1987
and a doctorate at the Courant Institute of New York University in 1991. He joined the NIST staff
in 1992 and has since worked on the development of fire models, most notably the Fire Dynamics
Simulator.
Simo Hostikka is an associate professor of fire safety engineering at Aalto University School of Engineer-
ing, since January 2014. Before joining Aalto, he worked as a Principal Scientist and Team Leader at
VTT Technical Research Centre of Finland. He received a master of science (technology) degree in 1997
and a doctorate in 2008 from the Department of Engineering Physics and Mathematics of the Helsinki
University of Technology. He is the principal developer of the radiation and solid phase sub-models
within FDS.
Randall McDermott joined the Fire Research Division at NIST in 2008. He received a B.S. from the
University of Tulsa in Chemical Engineering in 1994 and a Ph.D. from the University of Utah in 2005.
His research interests include subgrid-scale models and numerical methods for large-eddy simulation,
turbulent combustion, immersed boundary methods, and Lagrangian particle methods.
Jason Floyd is a Senior Engineer at JENSEN HUGHES, in Baltimore, Maryland. He received a bachelor
of science and a doctorate in the Nuclear Engineering Program of the University of Maryland. After
graduating, he was awarded a National Research Council Post-Doctoral Fellowship at the Building and
Fire Research Laboratory of NIST. He is a principal developer of the combustion, control logic, and
HVAC sub-models within FDS.
Marcos Vanella is a visiting researcher in the Department of Mathematics at the University of Maryland
and guest researcher in the Fire Research Division at NIST. He received diplomas in Mechanical and
Aeronautical Engineering from the National University of Cordoba, Argentina, and M.S. and Ph.D. de-
grees in Mechanical Engineering from the University of Maryland, College Park. His research inter-
ests include computer simulation and scientific software development applied to engineering systems,
mainly in the areas of fluid flow and multiphysics interaction problems.
Glenn Forney is a computer scientist in the Fire Research Division of NIST. He received a bachelor of
science degree in mathematics from Salisbury State College and a master of science and a doctorate in
mathematics from Clemson University. He joined NIST in 1986 (then the National Bureau of Standards)
and has since worked on developing tools that provide a better understanding of fire phenomena, most
notably Smokeview, an advanced scientific software tool for visualizing Fire Dynamics Simulation data.
Timo Korhonen is a Senior Scientist at VTT Technical Research Centre of Finland. He received a master
of science (technology) degree in 1992 and a doctorate in 1996 from the Department of Engineering
Physics and Mathematics of the Helsinki University of Technology. He is the principal developer of the
evacuation sub-model within FDS.
iii
Daniel Haarhoff did his masters work at the Jülich Supercomputing Centre in Germany, graduating in
2015. His thesis is on providing and analyzing a hybrid parallelization of FDS. For this, he implemented
OpenMP into FDS 6.
Susan Kilian is a mathematician with numerics and scientific computing expertise. She received her
diploma from the University of Heidelberg and received her doctorate from the Technical University
of Dortmund in 2002. Since 2007 she has been a research scientist for hhpberlin, a fire safety engineer-
ing firm located in Berlin, Germany. Her research interests include high performance computing and
the development of efficient parallel solvers for the pressure Poisson equation.
Vivien Lecoustre is a Research Associate at the University of Maryland. He received a master of science
in Aerospace Engineering from ENSMA (France) in 2005 and a doctorate in Mechanical Engineering
from the University of Maryland in 2009. His research interests include radiation properties of fuels and
numerical turbulent combustion.
Anna Matala is a Research Scientist at VTT Technical Research Centre of Finland and a Ph.D. candidate at
Aalto University School of Science. She received her M.Sc. degree in Systems and Operations Research
from Helsinki University of Technology in 2008. Her research concentrates on pyrolysis modelling and
parameter estimation in fire simulations
William (Ruddy) Mell is an applied mathematician currently at the U.S. Forest Service in Seattle, Wash-
ington. He holds a B.S. degree from the University of Minnesota (1981) and doctorate from the Uni-
versity of Washington (1994). His research interests include the development of large-eddy simula-
tion methods and sub-models applicable to the physics of large fires in buildings, vegetation, and the
wildland-urban interface.
Kristopher Overholt is a software engineer at Continuum Analytics, developers of the Anaconda Python
distribution. He received a B.S. in Fire Protection Engineering Technology from the University of
Houston-Downtown in 2008, an M.S. in Fire Protection Engineering from Worcester Polytechnic In-
stitute in 2010, and a Ph.D. in Civil Engineering from The University of Texas at Austin in 2013. He
worked in the Fire Research Division at NIST from 2013 to 2015, where he was central to the develop-
ment of the FDS continuous integration framework, Firebot. He also worked on aspects of FDS related
to verification and validation and quality metrics. His research interests include inverse fire modeling
problems, soot deposition in fires, and the use of fire models in forensic applications.
Topi Sikanen is a Research Scientist at VTT Technical Research Centre of Finland and a graduate student
at Aalto University School of Science. He received his M.Sc. degree in Systems and Operations Re-
search from Helsinki University of Technology in 2008. He works on the Lagrangian particle and liquid
evaporation models.
Ben Trettel is a graduate student at The University of Texas at Austin. He received a B.S. in Mechanical
Engineering in 2011 and an M.S. in Fire Protection Engineering in 2013, both from the University
of Maryland. He develops models for the transport of Lagrangian particles for the Fire Dynamics
Simulator.
Julio Cesar Silva is a Lieutenant in the Naval Engineers Corps of the Brazilian Navy. He worked in the Fire
Research Division of NIST as a Guest Researcher from National Council for Scientific and Technologi-
cal Development, Brazil. He received a M.Sc. in 2010 and a doctorate in 2014 from Federal University
of Rio de Janeiro in Civil Engineering. His research interests include fire-structure interaction and he
develops coupling strategies between FDS and finite-element codes.
iv
Benjamin Ralph is a fire safety engineer and Ph.D. student at the BRE Centre for Fire Safety Engineering
at University of Edinburgh, UK. He received his M.Eng. in Civil Engineering from the University of
Southampton, UK in 2008 and his P.G.Dip. in Fire Safety Engineering from the University of Ulster, UK
in 2014. He was a Guest Researcher in the Engineered Fire Safety Group at NIST in 2016. His research
interests include coupled hybrid modeling and performance-based design in fire safety engineering. He
is a developer of the HVAC sub-model - specifically the transient mass and energy transport solver.
Salah Benkorichi is a researcher and Graduate CFD Engineer at the Omega Fire Engineering, in Manch-
ester, UK. He received his M.Sc. in 2016 from the University of Poitiers. His research activities focus
on flame spread and pyrolysis modeling using multi-scale methods.
v
Preface
This Guide describes how to use the Fire Dynamics Simulator (FDS). Because new features are added
periodically, check the current version number on the inside front jacket of this manual.
Note that this Guide does not provide the background theory for FDS. A four volume set of companion
documents, referred to collectively as the FDS Technical Reference Guide [1], contains details about the
governing equations and numerical methods, model verification, experimental validation, and configuration
management. The FDS User’s Guide contains limited information on how to operate Smokeview, the com-
panion visualization program for FDS. Its full capability is described in the Smokeview User’s Guide [2].
vii
Disclaimer
The US Department of Commerce makes no warranty, expressed or implied, to users of the Fire Dynamics
Simulator (FDS), and accepts no responsibility for its use. Users of FDS assume sole responsibility under
Federal law for determining the appropriateness of its use in any particular application; for any conclusions
drawn from the results of its use; and for any actions taken or not taken as a result of analysis performed
using these tools.
Users are warned that FDS is intended for use only by those competent in the fields of fluid dynamics,
thermodynamics, heat transfer, combustion, and fire science, and is intended only to supplement the in-
formed judgment of the qualified user. The software package is a computer model that may or may not have
predictive capability when applied to a specific set of factual circumstances. Lack of accurate predictions
by the model could lead to erroneous conclusions with regard to fire safety. All results should be evaluated
by an informed user.
Throughout this document, the mention of computer hardware or commercial software does not con-
stitute endorsement by NIST, nor does it indicate that the products are necessarily those best suited for the
intended purpose.
ix
Acknowledgments
The Fire Dynamics Simulator, in various forms, has been under development for almost 25 years. It was first
released to the public in 2000. Since then, continued improvements have been made to the software based
largely on feedback from its users. Included below are some who made important contributions related to
the application of FDS.
• At NIST, Dan Madrzykowski, Doug Walton, Bob Vettori, Dave Stroup, Steve Kerber, Nelson Bryner,
and Adam Barowy have used FDS and Smokeview as part of several investigations of fire fighter line
of duty deaths. They have provided valuable information on the model’s usability and accuracy when
compared to large scale measurements made during fire reconstructions.
• Bryan Klein of Thunderhead Engineering assisted in adding cross-referencing functionality to this doc-
ument, making it easier to view electronically. He also designed the on-line services for revision control,
bug reporting, and general discussion of topics related to FDS.
• The US Nuclear Regulatory Commission has provided financial support for the verification and vali-
dation of FDS, along with valuable insights into how fire models are used as part of probabilistic risk
assessments of nuclear facilities. Special thanks to Mark Salley and Dave Stroup.
• The Society of Fire Protection Engineers (SFPE) sponsors a training course on the use of FDS and
Smokeview. Chris Wood of ArupFire, Dave Sheppard of the US Bureau of Alcohol, Tobacco and
Firearms (ATF), and Doug Carpenter of Combustion Science and Engineering developed the materials
for the course, along with Morgan Hurley of the SFPE.
• David McGill of Seneca College, Ontario, Canada has conducted a remote-learning course on the use
of FDS, and he has also maintained a web site that has provided valuable suggestions from users.
• Paul Hart of Swiss Re, GAP Services, and Pravinray Gandhi of Underwriters Laboratories provided
useful suggestions about water droplet transport on solid objects.
• François Demouge of the Centre Scientifique et Technique du Bâtiment (CSTB) in France assisted with
implementation of synthetic turbulence inflow boundary conditions.
• Max Gould, Summer Undergraduate Research Fellow, assisted in the testing and verification of non-
standard boundary treatment methods.
Finally, on the following pages is a list of individuals and organizations who have volunteered their time
and effort to “beta test” FDS and Smokeview prior to its official release. Their contribution is invaluable
because there is simply no other way to test all of the various features of the model.
xi
FDS 6 Beta Testers
Mohammed Assal CFD Algeria
Choon-Bum Choi Building and Tunnel Technologies Inc. (BNTTEK), Korea
William J. Ferrante Roosevelt Fire District, Hyde Park, New York, USA
Emanuele Gissi Corpo nazionale dei Vigili del Fuoco, Italy
Timothy M. Groch Engineering Planning and Management, Inc., Framingham, Massachusetts, USA
Georges Guigay Mannvit Engineering, Iceland
Simon J. Ham Fire Safety Engineering Consultants Limited, UK
Chris Lautenberger Reax Engineering, Berkeley, California, USA
Tim McDonald Endress Ingenieurgesellschaft mbH, Germany
Dave McGill Seneca College, Ontario, Canada
Adrian Milford Sereca Fire Consulting Ltd., British Columbia, Canada
Luca Nassi National Fire Department, Italy
Stephen Olenick Combustion Science and Engineering, Inc., Columbia, Maryland, USA
Natalie Ong Arup Fire Singapore
Chris Salter Hoare Lea and Partners, UK
Joakim Sandström LTU/Brandskyddslaget, Sweden
Julio Cesar Silva Federal University of Rio de Janeiro, Brazil
Boris Stock BFT Cognos GmbH, Aachen, Germany
Csaba Szilagyi OPTOMM Ltd., Budapest, Hungary
Giacomo Villi Università di Padova, Italy
Andreas Vischer Wijnveld//Ingenieure, Osnabrück, Germany
Christopher Wood FireLink, LLC, Tewksbury, Massachusetts, USA
xii
Contents
FDS Developers i
Preface vii
Disclaimer ix
Acknowledgments xi
Contents xiii
1 Introduction 3
1.1 Features of FDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 What’s New in FDS 6? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Changes to Input Parameters in FDS 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 A Note on Longer Run Times in FDS 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Getting Started 11
2.1 How to Acquire FDS and Smokeview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Computer Hardware Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Computer Operating System (OS) and Software Requirements . . . . . . . . . . . . . . . . 12
2.4 Installation Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Running FDS 13
3.1 Computer Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 A Brief Primer on Computer Hardware . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2 Two Ways to Use Multiple Processors . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Launching an FDS Job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Strategies for Running FDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3.1 Using MPI and OpenMP Together . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3.2 Running Very Large Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
xiii
3.4 Efficiency of Multi-Process Simulations . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4.1 MPI Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5 Monitoring Progress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 User Support 23
4.1 The Version Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Common Error Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3 Support Requests and Bug Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
xiv
7.12 Setting Limits: The CLIP Namelist Group (Table 21.3) . . . . . . . . . . . . . . . . . . . 52
8 Initial Conditions 55
8.1 Gas Species . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.2 Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.3 Density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.4 Heat Release Rate Per Unit Volume (HRRPUV) . . . . . . . . . . . . . . . . . . . . . . . 56
8.5 Velocity Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
9 Pressure 59
9.1 Accuracy of the Pressure Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
9.2 Optional Pressure Solver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
9.3 Pressure Considerations in Long Tunnels . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.4 Breaking Pressure Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
xv
11.3.6 Special Topic: Specified Internal Heat Source . . . . . . . . . . . . . . . . . . . 92
11.3.7 Special Topic: Non-Planar Walls and Targets . . . . . . . . . . . . . . . . . . . . 92
11.3.8 Special Topic: Solid Phase Numerical Gridding Issues . . . . . . . . . . . . . . 93
11.3.9 Solid Heat Transfer 3D (Beta) . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
11.4 Simple Pyrolysis Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
11.4.1 A Gas Burner with a Specified Heat Release Rate . . . . . . . . . . . . . . . . . 95
11.4.2 Special Topic: A Radially-Spreading Fire . . . . . . . . . . . . . . . . . . . . . 95
11.4.3 Solid Fuels that Burn at a Specified Rate . . . . . . . . . . . . . . . . . . . . . . 96
11.5 Complex Pyrolysis Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
11.5.1 Reaction Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
11.5.2 Reaction Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
11.5.3 Shrinking and swelling materials . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.5.4 Multiple Solid Phase Reactions . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.5.5 The Heat of Reaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.5.6 Special Topic: The “Threshold” Temperature . . . . . . . . . . . . . . . . . . . 104
11.5.7 Liquid Fuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
11.5.8 Fuel Burnout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11.5.9 Solid Pyrolysis 3D (Beta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
11.6 Thermal Degradation Model for Vegetation . . . . . . . . . . . . . . . . . . . . . . . . . . 111
11.7 Testing Your Pyrolysis Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
11.7.1 Simulating the Cone Calorimeter . . . . . . . . . . . . . . . . . . . . . . . . . . 115
11.7.2 Simulating Bench-scale Measurements like the TGA, DSC, and MCC . . . . . . 116
12 Ventilation 119
12.1 Simple Vents, Fans and Heaters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
12.1.1 Simple Supply and Exhaust Vents . . . . . . . . . . . . . . . . . . . . . . . . . 119
12.1.2 Total Mass Flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
12.1.3 Heaters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
12.1.4 Louvered Vents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
12.1.5 Specified Normal Velocity Gradient . . . . . . . . . . . . . . . . . . . . . . . . 121
12.1.6 Species and Species Mass Flux Boundary Conditions . . . . . . . . . . . . . . . 122
12.1.7 Tangential Velocity Boundary Conditions at Solid Surfaces . . . . . . . . . . . . 122
12.1.8 Synthetic Turbulence Inflow Boundary Conditions . . . . . . . . . . . . . . . . . 123
12.1.9 Random Mass Flux Variation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
12.2 HVAC Systems: The HVAC Namelist Group (Table 21.11) . . . . . . . . . . . . . . . . . . 125
12.2.1 HVAC Duct Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
12.2.2 HVAC Dampers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12.2.3 HVAC Node Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12.2.4 HVAC Fan Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12.2.5 HVAC Filter Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12.2.6 HVAC Aircoil Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.2.7 Louvered HVAC Vents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
12.2.8 HVAC Mass Transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
12.3 Pressure-Related Effects: The ZONE Namelist Group (Table 21.34) . . . . . . . . . . . . . 135
12.3.1 Specifying Pressure Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
12.3.2 Leaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
12.4 Pressure Boundary Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
12.5 Special Flow Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
xvi
13 Atmospheric Effects and Wind 145
13.1 Wind Method 1: Monin-Obukhov Similarity . . . . . . . . . . . . . . . . . . . . . . . . . 145
13.1.1 Basic Equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
13.1.2 Adding a Wind to FDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
13.1.3 Temporal and Spatial Variation of the Wind . . . . . . . . . . . . . . . . . . . . 149
13.1.4 Aerodynamic Roughness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
13.1.5 Sensible Heat Flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
13.1.6 Shielding Indoor Volumes from the Wind . . . . . . . . . . . . . . . . . . . . . 150
13.1.7 The Mean Forcing Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
13.2 Wind Method 2: Letting the Wind Develop Naturally . . . . . . . . . . . . . . . . . . . . 151
13.3 Wind Method 3: The “Wall of Wind” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
13.4 Temperature Stratification without Wind . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
13.4.1 Stack Effect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
16 Combustion 169
16.1 Single-Step, Mixing-Controlled Combustion . . . . . . . . . . . . . . . . . . . . . . . . . 169
16.1.1 Simple Chemistry Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
16.1.2 Heat of Combustion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.1.3 Special Topic: Two-Step Simple Chemistry . . . . . . . . . . . . . . . . . . . . 173
16.1.4 Special Topic: Complete Heat of Combustion . . . . . . . . . . . . . . . . . . . 174
16.1.5 Special Topic: Turbulent Combustion . . . . . . . . . . . . . . . . . . . . . . . 174
16.1.6 Special Topic: Flame Extinction . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.1.7 Special Topic: Piloted Ignition Zone . . . . . . . . . . . . . . . . . . . . . . . . 177
16.1.8 Special Topic: Time Ramp of Ignition Temperature . . . . . . . . . . . . . . . . 177
16.2 Complex Stoichiometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
16.2.1 Balancing the Atoms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
16.2.2 Complex Fuel Molecules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
16.2.3 Multiple Fast Reactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
16.2.4 Multiple Fuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
16.2.5 Special Topic: Using the EQUATION input parameter . . . . . . . . . . . . . . . 184
16.3 Finite Rate Combustion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
16.3.1 Multiple Step Reaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
xvii
16.3.2 Catalysts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
16.3.3 Special Topic: Chemical Time Integration . . . . . . . . . . . . . . . . . . . . . 188
16.4 Special Topic: Aerosol Deposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
16.4.1 Example Case: Soot Deposition from a Propane Flame . . . . . . . . . . . . . . 189
16.4.2 Soot Surface Oxidation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
16.5 Special Topic: Aerosol Agglomeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
17 Radiation 193
17.1 Basic Radiation Parameters: The RADI Namelist Group . . . . . . . . . . . . . . . . . . . 193
17.1.1 Radiation Option 1. No Radiation Transport . . . . . . . . . . . . . . . . . . . . 193
17.1.2 Radiation Option 2. Optically-Thin Limit; Specified Radiative Fraction . . . . . 194
17.1.3 Radiation Option 3. Optically-Thick; Specified Radiative Fraction (LES Default) 195
17.1.4 Radiation Option 4. Optically-Thick; Unspecified Radiative Fraction (DNS De-
fault) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
17.2 Spatial and Temporal Resolution of the Radiation Transport Solver . . . . . . . . . . . . . 195
17.3 Other Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
17.4 Radiative Absorption and Scattering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
17.4.1 RadCal Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
17.4.2 Radiative Absorption and Scattering by Particles . . . . . . . . . . . . . . . . . . 197
17.4.3 Wide Band Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
xviii
19 Devices and Control Logic 225
19.1 Device Location and Orientation: The DEVC Namelist Group (Table 21.7) . . . . . . . . . 225
19.2 Device Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
19.3 Special Device Properties: The PROP Namelist Group (Table 21.23) . . . . . . . . . . . . 228
19.3.1 Sprinklers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
19.3.2 Nozzles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
19.3.3 Special Topic: Specified Entrainment (Velocity Patch) . . . . . . . . . . . . . . . 233
19.3.4 Heat Detectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
19.3.5 Smoke Detectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
19.3.6 Beam Detection Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
19.3.7 Aspiration Detection Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
19.4 Basic Control Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
19.4.1 Creating and Removing Obstructions . . . . . . . . . . . . . . . . . . . . . . . . 239
19.4.2 Activating and Deactivating Vents . . . . . . . . . . . . . . . . . . . . . . . . . 240
19.5 Advanced Control Functions: The CTRL Namelist Group . . . . . . . . . . . . . . . . . . 240
19.5.1 Control Functions: ANY, ALL, ONLY, and AT_LEAST . . . . . . . . . . . . . . 241
19.5.2 Control Function: TIME_DELAY . . . . . . . . . . . . . . . . . . . . . . . . . . 243
19.5.3 Control Function: DEADBAND . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
19.5.4 Control Function: RESTART and KILL . . . . . . . . . . . . . . . . . . . . . . 243
19.5.5 Control Function: CUSTOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
19.5.6 Control Function: Math Operations . . . . . . . . . . . . . . . . . . . . . . . . 245
19.5.7 Control Function: PID Control Function . . . . . . . . . . . . . . . . . . . . . . 245
19.5.8 Combining Control Functions: A Deluge System . . . . . . . . . . . . . . . . . 245
19.5.9 Combining Control Functions: A Dry Pipe Sprinkler System . . . . . . . . . . . 246
19.5.10 Example Case: activate_vents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
19.6 Controlling a RAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
19.6.1 Changing the Independent variable . . . . . . . . . . . . . . . . . . . . . . . . . 248
19.6.2 Freezing the Output Value, Example Case: hrr_freeze . . . . . . . . . . . . . . . 248
19.7 Visualizing FDS Devices in Smokeview . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
19.7.1 Devices that Indicate Activation . . . . . . . . . . . . . . . . . . . . . . . . . . 249
19.7.2 Devices with Variable Properties . . . . . . . . . . . . . . . . . . . . . . . . . . 251
19.7.3 Objects that Represent Lagrangian Particles . . . . . . . . . . . . . . . . . . . . 253
20 Output 257
20.1 Output Control Parameters: The DUMP Namelist Group . . . . . . . . . . . . . . . . . . . 257
20.2 Device Output: The DEVC Namelist Group . . . . . . . . . . . . . . . . . . . . . . . . . . 258
20.2.1 Single Point Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
20.2.2 Linear Array of Point Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
20.2.3 Quantities at Certain Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
20.2.4 Back Surface Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
20.3 In-Depth Profiles within Solids: The PROF Namelist Group . . . . . . . . . . . . . . . . . 261
20.4 Animated Planar Slices: The SLCF Namelist Group . . . . . . . . . . . . . . . . . . . . . 262
20.5 Animated Boundary Quantities: The BNDF Namelist Group . . . . . . . . . . . . . . . . . 262
20.6 Animated Isosurfaces: The ISOF Namelist Group . . . . . . . . . . . . . . . . . . . . . . 263
20.7 Plot3D Static Data Dumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
20.8 SMOKE3D: Realistic Smoke and Fire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
20.9 Particle Output Quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
20.9.1 Liquid Droplets that are Attached to Solid Surfaces . . . . . . . . . . . . . . . . 264
xix
20.9.2 Solid Particles on Solid Surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 265
20.9.3 Droplet and Particle Densities and Fluxes in the Gas Phase . . . . . . . . . . . . 266
20.9.4 Coloring Particles and Droplets in Smokeview . . . . . . . . . . . . . . . . . . . 266
20.9.5 Detailed Properties of Solid Particles . . . . . . . . . . . . . . . . . . . . . . . . 267
20.10 Special Output Quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
20.10.1 Heat Release Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
20.10.2 Mass Loss Rates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
20.10.3 Zone Pressures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
20.10.4 Visibility and Obscuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
20.10.5 Layer Height and the Average Upper and Lower Layer Temperatures . . . . . . . 270
20.10.6 Thermocouples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
20.10.7 Heat Flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
20.10.8 Adiabatic Surface Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
20.10.9 Extracting Detailed Radiation Data . . . . . . . . . . . . . . . . . . . . . . . . . 273
20.10.10 Detailed Spray Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
20.10.11 Output Associated with Thermogravimetric Analysis (TGA) . . . . . . . . . . . 277
20.10.12 Fractional Effective Dose (FED) and Fractional Irritant Concentration (FIC) . . . 278
20.10.13 Spatially-Integrated Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
20.10.14 Temporally-Integrated Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
20.10.15 Wind and the Pressure Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . 285
20.10.16 Dry Volume and Mass Fractions . . . . . . . . . . . . . . . . . . . . . . . . . . 285
20.10.17 Aerosol and Soot Concentration . . . . . . . . . . . . . . . . . . . . . . . . . . 286
20.10.18 Gas Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
20.10.19 Enthalpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
20.10.20 Computer Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
20.10.21 Output File Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
20.10.22 A Posteriori Mesh Quality Metrics . . . . . . . . . . . . . . . . . . . . . . . . . 287
20.10.23 Extinction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
20.11 Extracting Numbers from the Output Data Files . . . . . . . . . . . . . . . . . . . . . . . 292
20.12 Summary of Frequently-Used Output Quantities . . . . . . . . . . . . . . . . . . . . . . . 293
20.13 Summary of Infrequently-Used Output Quantities . . . . . . . . . . . . . . . . . . . . . . 298
20.14 Summary of HVAC Output Quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
xx
21.15 MESH (Mesh Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
21.16 MISC (Miscellaneous Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
21.17 MOVE (Coordinate Transformation Parameters) . . . . . . . . . . . . . . . . . . . . . . . . 312
21.18 MULT (Multiplier Function Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
21.19 OBST (Obstruction Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
21.20 PART (Lagrangian Particles/Droplets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
21.21 PRES (Pressure Solver Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
21.22 PROF (Wall Profile Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
21.23 PROP (Device Properties) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
21.24 RADF (Radiation Output File Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
21.25 RADI (Radiation Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
21.26 RAMP (Ramp Function Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
21.27 REAC (Reaction Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
21.28 SLCF (Slice File Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
21.29 SPEC (Species Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
21.30 SURF (Surface Properties) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
21.31 TABL (Table Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
21.32 TIME (Time Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
21.33 TRNX, TRNY, TRNZ (MESH Transformations) . . . . . . . . . . . . . . . . . . . . . . 324
21.34 VENT (Vent Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
21.35 WIND (Wind and Atmospheric Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . 325
21.36 ZONE (Pressure Zone Parameters) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Bibliography 343
xxi
List of Figures
xxiii
12.8 Results of the pressure_rise test case . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
12.9 Results of the zone_break test cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
12.10 Results of the zone_shape test case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
12.11 Results of the door_crack test case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
12.12 Snapshots of the pressure_boundary test case . . . . . . . . . . . . . . . . . . . . . . 142
12.13 Results of the parabolic_profile test case . . . . . . . . . . . . . . . . . . . . . . . . 143
12.14 Boundary layer profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
xxiv
20.8 Haar wavelet transforms on four typical signals . . . . . . . . . . . . . . . . . . . . . . . . 291
xxv
List of Tables
xxvii
20.3 Frequently used output quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
20.4 Infrequently used output quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
20.5 HVAC output quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
xxviii
Part I
1
Chapter 1
Introduction
The software described in this document, Fire Dynamics Simulator (FDS), is a computational fluid dynamics
(CFD) model of fire-driven fluid flow. FDS solves numerically a form of the Navier-Stokes equations
appropriate for low-speed (Ma < 0.3), thermally-driven flow with an emphasis on smoke and heat transport
from fires. The formulation of the equations and the numerical algorithm are contained in the FDS Technical
Reference Guide [3]. Verification and Validation of the model are discussed in the FDS Verification [4] and
Validation [5] Guides.
Smokeview is a separate visualization program that is used to display the results of an FDS simulation.
A detailed description of Smokeview is found in a separate user’s guide [2].
Hydrodynamic Model FDS solves numerically a form of the Navier-Stokes equations appropriate for low-
speed, thermally-driven flow with an emphasis on smoke and heat transport from fires. The core algo-
rithm is an explicit predictor-corrector scheme, second order accurate in space and time. Turbulence is
treated by means of Large Eddy Simulation (LES). It is possible to perform a Direct Numerical Simu-
lation (DNS) if the underlying numerical mesh is fine enough. LES is the default mode of operation.
Combustion Model For most applications, FDS uses a single step, mixing-controlled chemical reaction
which uses three lumped species (a species representing a group of species). These lumped species are
air, fuel, and products. By default the last two lumped species are explicitly computed. Options are
available to include multiple reactions and reactions that are not necessarily mixing-controlled.
Radiation Transport Radiative heat transfer is included in the model via the solution of the radiation trans-
port equation for a gray gas, and in some limited cases using a wide band model. The equation is solved
using a technique similar to finite volume methods for convective transport, thus the name given to it
is the Finite Volume Method (FVM). Using approximately 100 discrete angles, the finite volume solver
requires about 20 % of the total CPU time of a calculation, a modest cost given the complexity of radi-
ation heat transfer. The absorption coefficients of the gas-soot mixtures are computed using the RadCal
narrow-band model [6]. Liquid droplets can absorb and scatter thermal radiation. This is important in
3
cases involving mist sprinklers, but also plays a role in all sprinkler cases. The absorption and scattering
coefficients are based on Mie theory.
Geometry FDS approximates the governing equations on a rectilinear mesh. Rectangular obstructions are
forced to conform with the underlying mesh.
Multiple Meshes This is a term used to describe the use of more than one rectangular mesh in a calculation.
It is possible to prescribe more than one rectangular mesh to handle cases where the computational
domain is not easily embedded within a single mesh.
Parallel Processing FDS employs OpenMP [7], a programming interface that exploits multiple process-
ing units on a single computer. For clusters of computers, FDS employs Message Passing Interface
(MPI) [8]. Details can be found in Section 3.1.2.
Boundary Conditions All solid surfaces are assigned thermal boundary conditions, plus information about
the burning behavior of the material. Heat and mass transfer to and from solid surfaces is usually handled
with empirical correlations, although it is possible to compute directly the heat and mass transfer when
performing a Direct Numerical Simulation (DNS).
• Improved models for the turbulent viscosity are implemented: Deardorff (default), Dynamic Smagorin-
sky, and Vreman. These models provide more dynamic range to the flow field for coarse resolution and
converge to the correct solution at fine resolution.
• The conservative form of the sensible enthalpy equation is satisfied by construction in the FDS 6 for-
mulation, eliminating temperature anomalies and energy conservation errors due to numerical mixing.
• Improvements are made to the wall functions for momentum and heat flux. An optional wall heat flux
model accounts for variable Prandtl number fluids.
• Jarrin’s Synthetic Eddy Method (SEM) is implemented for turbulent boundary conditions at vents.
4
• Turbulent combustion is handled with a new partially-stirred batch reactor model. At the subgrid level,
species exist in one of two states: unmixed or mixed. The degree of mixing evolves over the FDS time
step by the interaction by exchange with the mean (IEM) mixing model. Chemical kinetics may be
considered infinitely fast or obey an Arrhenius rate law.
• It is now possible to transport, produce, and consume product species such as CO and soot. Chemical
mechanisms must be provided by the user and may include reversible reactions.
• There are an increased number of predefined species that now include liquid properties.
Lagrangian Particles
• The functionality of Lagrangian particles has expanded to include the same heat transfer and pyrolysis
models that apply to solid walls. In other words, you can now assign a set of surface properties to planar,
cylindrical, or spherical particles much like you would for a solid surface.
• More alternatives and user-defined option are available for the liquid droplet size distribution.
• Drag effects of thin porous media (i.e., window screens) can be simulated using planes of particles.
• The pyrolysis model allows for the surface to shrink or swell, based on the specified material densities.
HVAC
• Filters, louvered vents, and heating/cooling capability has been added for HVAC systems.
Radiation
• RadCal database has been extended to include additional fuel species.
• In cells with heat release, the emission term is based on a corrected σ T 4 such that when this term is
integrated over the flame volume the specified radiative fraction (default 0.35) is recovered. This differs
from FDS 5 and earlier where the radiative fraction times the heat release rate was applied locally as the
emission term.
Multi-Mesh Computations
• By default, FDS now iterates pressure and velocity at mesh and solid boundaries. You can control the
error tolerance and maximum number of iterations via parameters on the PRES line.
5
Control Functions
• CTRL functions have been extended to include math operations.
• The evaluation of RAMPs and DEVCs can be stopped, freezing their value, based upon the activation of a
device or control function.
• A line of devices can be specified using a number of POINTS on one DEVC line.
• Statistical outputs for RMS, covariance, and correlation coefficient are available.
• If you want to model a fire, you must include a REAC line with a specified FUEL. See Chapter 16 for
details.
• The output quantity ’MIXTURE_FRACTION’ has been replaced with ’MIXTURE FRACTION’ and is
only usable if there is a single REAC input of the form A + B → C and INITIAL_UNMIXED_FRACTION=0.
• There is no longer a STATE_FILE because there is no longer a simple mixture fraction model.
• PRESSURE_CORRECTION has been eliminated. See Section 9 for ways to improve the performance of
the pressure solver.
• Species mass and volume fraction outputs are no longer invoked using QUANTITY=’species name’.
Use QUANTITY=’MASS FRACTION’ or QUANTITY=’VOLUME FRACTION’ along with SPEC_ID in-
stead. Also note that all predefined species (Table 15.1) are now referenced with all uppercase letters.
• The output quantity ’SOOT VOLUME FRACTION’ is now ’AEROSOL VOLUME FRACTION’ along with
SPEC_ID to identify the name of the species.
6
Table 1.1: Changes to input parameters, FDS version 5 to 6.
7
MISC CO_PRODUCTION New procedure Section 16.3
MISC CSMAG MISC C_SMAGORINSKY Section 7.6
MISC MW SPEC MW Section 15
MISC PRESSURE_CORRECTION PRES VELOCITY_TOLERANCE Section 9
MISC RADIATION RADI RADIATION Section 17.1
MISC EVAC_SURF_DEFAULT SURF EVAC_DEFAULT Section 10.1
MISC SURF_DEFAULT SURF DEFAULT Section 10.1
MISC VISCOSITY SPEC VISCOSITY Section 15
OBST SAWTOOTH SURF Eliminated Section 12.1.7
PART FUEL PART SPEC_ID=’[FUEL]’ Section 18.3.1
PART HEAT_OF_VAPORIZATION SPEC HEAT_OF_VAPORIZATION Section 18.3.1
PART H_V_REFERENCE_TEMPERATURE SPEC H_V_REFERENCE_TEMPERATURE Section 18.3.1
PART MELTING_TEMPERATURE SPEC MELTING_TEMPERATURE Section 18.3.1
PART NUMBER_INITIAL_DROPLETS INIT N_PARTICLES Section 18.5.3
PART PARTICLES_PER_SECOND PROP PARTICLES_PER_SECOND Section 18.5.2
Table 1.2: Changes to input parameters, FDS version 5 to 6 (continued).
Namelist FDS 5 Parameter Namelist FDS 6 Parameter Notes
PART SPECIFIC_HEAT SPEC SPECIFIC_HEAT_LIQUID Section 18.3.1
PART VAPORIZATION_TEMPERATURE SPEC VAPORIZATION_TEMPERATURE Section 18.3.1
PART WATER PART SPEC_ID=’WATER VAPOR’ Section 18.1
PROP CABLE_DIAMETER New procedure Section 18.4.10
PROP CABLE_FAILURE_TEMPERATURE New procedure Section 18.4.10
PROP CABLE_JACKET_THICKNESS New procedure Section 18.4.10
PROP CABLE_MASS_PER_LENGTH New procedure Section 18.4.10
PROP CONDUIT_DIAMETER New procedure Section 18.4.10
PROP CONDUIT_THICKNESS New procedure Section 18.4.10
PROP DROPLETS_PER_SECOND PROP PARTICLES_PER_SECOND Section 18.5.2
PROP DROPLET_VELOCITY PROP PARTICLE_VELOCITY Section 19.3.1
PROP DT_INSERT New procedure Section 18.5
8
RADI CH4_BANDS Eliminated
RADI RADIATIVE_FRACTION REAC RADIATIVE_FRACTION Section 17.1
REAC BOF REAC A Section 16.3
REAC ID REAC FUEL Section 16.1.1
REAC MASS_EXTINCTION_COEFFICIENT SPEC MASS_EXTINCTION_COEFFICIENT Section 20.10.4
REAC MAXIMUM_VISIBILITY MISC MAXIMUM_VISIBILITY Section 20.10.4
REAC OXIDIZER New procedure Section 16.2
REAC VISIBILITY_FACTOR MISC VISIBILITY_FACTOR Section 20.10.4
SPEC ABSORBING SPEC RADCAL_ID Section 15.1.3
SURF H_FIXED SURF HEAT_TRANSFER_COEFFICIENT Section 11.2.2
SURF POROUS New procedure Section 12.2.4
SURF VOLUME_FLUX SURF VOLUME_FLOW Section 12.1.6
TIME TWFIN TIME T_END Section 6.2
VENT MASS_FRACTION Eliminated
1.4 A Note on Longer Run Times in FDS 6
A number of changes made in FDS 6 are aimed at improving the robustness and accuracy of the simulations.
However, these improvements come at increased cost in both CPU time and memory usage. Some of this
increased cost is offset by increasingly faster computers and improved parallel processing. In particular,
starting with FDS 6.1.0, the default released version of FDS will employ OpenMP [7] by default. OpenMP
is a programming interface that enables FDS to exploit multiple processing units on a given computer.
Most Windows-based personal computers now come with multi-core processors, but past versions of FDS
could only exploit a single core for a given calculation. With this new release and the increasingly faster
processors available on the market, FDS 6 ought to maintain and eventually surpass the computing speed of
past versions.
Listed below are suggested ways to decrease CPU time, but these options should be considered very
carefully. The default parameter settings are designed to address a wide range of fire scenarios, but there
are scenarios for which approximations used in past versions of FDS may still be appropriate. The best way
to determine if one or more of these time-saving assumptions is appropriate, run identical simulations with
and without the assumption to determine if the difference in results is acceptable.
1. The improved turbulence model in FDS 6 has been found to produce comparable results to older versions
of FDS using slightly less refined numerical grids. Section 6.3.6 introduces a dimensionless parameter,
D∗ /δ x, that indicates the number of grid cells of dimension δ x that span the characteristic width of the
fire, D∗ . A grid resolution study should be performed to determine the loss of accuracy caused by a
reduced value of D∗ /δ x.
2. One reason for the increased CPU cost of FDS 6 is the more precise treatment of gas species prop-
erties. Previous versions of FDS assumed that the specific heat of a gas species is solely dependent
on its molecular weight, and that the ratio of specific heats, c p /cv , is equal to 1.4, a value appro-
priate for a diatomic gas like nitrogen, N2 . Section 15.1.3 provides more details. FDS 6 now as-
sumes that gas species are temperature-dependent, and this assumption increases the cost of the cal-
culation in a number of different routines, in particular the calculation of the divergence. If you set
CONSTANT_SPECIFIC_HEAT_RATIO=.TRUE. on the MISC line together with STRATIFICATION=.FALSE.
on the WIND line and EXTINCTION_MODEL = ’EXTINCTION 1’ or SUPPRESSION=.FALSE. on the
COMB line, you can once again assume that the gas species are all diatomic. For scenarios where the
overall compartment temperature does not approach flashover conditions, this assumption might be ap-
propriate.
3. In situations where you are simulating a relatively small fire in a relatively large space and you are
not interested in heat fluxes to surrounding structures, it might be reasonable to turn off the radiation
transport calculation by setting RADIATION equal to .FALSE. on the RADI line. FDS will still assume
that a fixed fraction of the fire’s energy is radiated away, only now the energy is simply removed from
the calculation.
4. In situations where the heat transfer conditions are stationary or change only gradually, you can reduce
the cost of the radiation solution by reducing the temporal resolution. More details in Section 17.2. A
sensitivity study should be performed to determine the loss of accuracy.
9
Chapter 2
Getting Started
FDS is a computer program that solves equations that describe the evolution of fire. It is a Fortran program
that reads input parameters from a text file, computes a numerical solution to the governing equations, and
writes user-specified output data to files. Smokeview is a companion program that reads FDS output files
and produces animations on the computer screen. Smokeview has a simple menu-driven interface. FDS
does not. However, there are various third-party programs that have been developed to generate the text file
containing the input parameters needed by FDS.
This guide describes how to obtain FDS and Smokeview and how to use FDS. A separate document [2]
describes how to use Smokeview.
https://pages.nist.gov/fds-smv/
The typical FDS/Smokeview distribution consists of an installation package or compressed archive, which
is available for MS Windows, Mac OS X, and Linux.
If you ever want to keep an older version of FDS and Smokeview, copy the installation directory to some
other place so that it is not overwritten during the updated installation.
11
Running FDS using MPI requires shared disk access to each computer where cases will be run. On
Windows systems this involves a domain network with the ability to share folders. On a Linux or Mac OS X
system this involves NFS cross mounted files systems with ssh keys setup for passwordless login. For Multi-
Mesh calculations, the FDS can operate over standard 100 Mb/s networks. A gigabit (1000 Mb/s) network
will further reduce network communication times improving data transfer rates between instances of FDS
running the parallel cases.
MS Windows An installation package is available for the 64 bit Windows operating system. It is not
recommended to run FDS/Smokeview under any version of MS Windows released prior to Windows 7.
Mac OS X Pre-compiled executables are installed into a user selected directory using an installation script.
Mac OS X 10.4.x or better is recommended. You can always download the latest version of FDS source
and compile FDS for other versions of OS X (See Appendix 23 for details).
Linux Pre-compiled executables are installed into a user selected directory using an installation script. If
the pre-compiled FDS executable does not work (usually because of library incompatibilities), the FDS
Fortran source code can be downloaded and compiled (See Appendix 23 for details). If Smokeview
does not work on the Linux workstation, you can use the Windows version to view FDS output.
12
Chapter 3
Running FDS
Each FDS simulation is controlled by a single text-based input file, typically given a name that helps identify
the particular case, and ending with the file extension .fds. This input file can be written directly with a
text editor or with the help of a third-party graphical user interface (GUI). The simulation is started directly
via the command prompt or through the GUI. The creation of an input file is covered in detail in Part II. This
chapter describes how the simulation is run once the input file is written.
If you are new to FDS and Smokeview, it is strongly suggested that you start with an existing input file,
run it as is, and then make the appropriate changes to the file for your desired scenario. By running a sample
case, you become familiar with the procedure, learn how to use Smokeview, and ensure that your computer
is up to the task before embarking on learning how to create new input files.
Sample input files are included as part of the standard installation. A good case for a first time user is lo-
cated in the subfolder called Fires within the folder called Examples. Find the file called
simple_test.fds and copy it to a folder on your computer that is not within the installation folder.
The reason for doing this is to avoid cluttering up the installation folder with a lot of output files. Follow
the instructions in Section 3.1.2 to run this simple single mesh case. The simulation should only take a few
minutes. Once the simulation is completed, use Smokeview to examine the output. In this way, you will
quickly learn the basics of running and analyzing simulations.
processor. These terms might vary with different versions of Windows and different processors.
13
by a core. For the purpose of running FDS on a Windows computer, the number of logical processors is
your most important consideration.
If you are running FDS under any variety of Linux or Mac OS X, you can determine the number of
logical processors using the command “lscpu” for Linux or “sysctl hw” for OS X. These operating systems
might use slightly different terms, but the processors are similar if not the same as those on a Windows
computer.
What is OpenMP?
If your simulation involves only one mesh, you can only run it on one computer, but you can exploit its
multiple processors or cores using OpenMP. When you install FDS, it will query your computer to determine
the number of available cores. By default, FDS will use approximately half of the available cores3 on a
single computer. This is done for two reasons: (1) so as not to take over your entire machine when you run a
simulation, and (2) because using all cores for a single simulation may not minimize the run time. OpenMP
works best when exploiting multiple (logical) cores associated with a single (physical) processor or “socket”.
For example, if your computer has two processors, each with 4 cores, it may not be worthwhile to use all 8
cores in an OpenMP simulation. You need to experiment with your own machine to determine the strategy
that is best for you. To change the number of cores that are available for a given FDS simulation, you can
set an environment variable called OMP_NUM_THREADS. The way to do this depends on the operating system
and will be explained below.
When the job is started, FDS will print the number of cores that will be used for that job. Note that
this setting only applies until you log out or restart your machine. To set the default value of available cores
upon startup, the OMP_NUM_THREADS environment variable can also be set in the startup configuration
scripts on the machine. Refer to the documentation for your operating system for more information on how
to configure environment variables upon startup.
What is MPI?
MPI (Message-Passing Interface) [8] enables multiple computers, or multiple cores on one computer, to run
a multi-mesh FDS job. The main idea is that you must break up the FDS domain into multiple meshes, and
then the flow field in each mesh is computed as an MPI process. The process can be thought of as a “task”
2 Previous releases of FDS contained two executables, one that ran on a single processor and one that ran on multiple processors.
Starting with FDS 6.2.0, these two executables have been combined into one, and it can run either in serial or parallel mode.
3 To determine the number of cores used by OpenMP, just type fds at the command prompt.
14
that you would see in the Windows Task Manager or by executing the “top” command on a Linux/Unix
machine. MPI handles the transfer of information between the meshes, i.e. MPI processes. Usually, each
mesh is assigned its own process in an MPI calculation, although it is also possible to assign multiple meshes
to a single MPI process. In this way, large meshes can be computed on dedicated cores, while smaller meshes
can be clustered together in a single process running on a single core, without the need for MPI message
passing.
Also note that FDS refers to its meshes by the numbers 1, 2, 3, and so on, whereas MPI refers to its
processes by the numbers 0, 1, 2, and so on. Thus, Mesh 1 is assigned to Process 0; Mesh 2 to Process 1,
and so on. You do not explicitly number the meshes or the processes yourself, but error statements from
FDS or from MPI might refer to the meshes or processes by number. As an example, if a FDS case with five
meshes, the first printout (usually to the screen unless otherwise directed) is:
This means that 5 MPI processes (numbered 0 to 4) have started and that each mesh is being handled by its
own process. The processes may be on the same or different computers. Each computer has its own memory
(RAM), but each individual MPI process has its own independent memory, even if the processes are on the
same computer.
There are different implementations of MPI, much like there are different Fortran and C compilers. Each
implementation is essentially a library of subroutines called from FDS that transfer data from one process to
another across a fast network. The format of the subroutine calls has been widely accepted in the community,
allowing different vendors and organizations the freedom to develop better software while working within
an open framework. For Mac OS X, we use Open MPI, an open source implementation that is developed
and maintained by a consortium of academic, research, and industry partners (www.open-mpi.org). For
Windows and Linux, we use Intel MPI 4 .
MPI and OpenMP can be used together. For example, 4 MPI processes can be assigned to 4 different
computers, and each MPI process can be supported by, say, 8 OpenMP threads, assuming each computer
has 8 cores. Most of the speed up is achieved by the MPI. For a reasonably fast network, you can expect 4
MPI processes to speed up the computation time by a factor of about 0.9 times 4. The OpenMP can provide
an extra factor up to about 2, regardless of the number of cores used beyond about 4.
MS Windows
The files needed to run an FDS simulation on a single Windows computer or across a Windows domain
network are bundled in with the FDS download. There is no need to install MPI or any redistributable
libraries. The following procedure is intended for a Windows domain network; that is, a network where user
4 Priorto FDS version 6.1.2, the Windows version of FDS used MPICH, a free implementation of MPI developed by Argonne
National Laboratory. The MPICH developers have announced that they are no longer supporting the Windows version.
15
accounts are centrally managed such that any user can log in to any machine using the same credentials. If
you are not on a domain network, you can still run FDS locally, and instructions are given below.
Open up the special FDS command prompt, CMDfds, which should appear on your desktop when you
install FDS. By opening this special command prompt, a script is run automatically ensuring that the FDS
commands and libraries are all consistent. Change directories (“cd”) to where the input file for the case is
located. Decide how many logical processes you want to devote to the simulation. Next, decide if you want
to run the job solely on your own computer or on multiple computers on the network.
If you decide you want to run the case solely on your own computer, and suppose you have 8 logical
processors (cores) available, and you have an FDS job that uses 4 meshes, type the following at the command
prompt:
fds_local -p 4 -o 2 job_name.fds
This job will exploit all 4 × 2 = 8 logical processors, which you can confirm by opening the Task Manager.
The -p parameter indicates the number of MPI processes, and the -o indicates the number of OpenMP
threads.
The progress of the simulation is indicated by diagnostic output that is written onto the screen. Detailed
diagnostic information is automatically written to a file job_name.out. Screen output can be redirected to
a file via the alternative command:
Note that it is also possible to associate the .fds extension with the FDS executable directly, thereby making
FDS run by double-clicking on the input file. However, we do not recommend this because of complications
associated with the mpiexec program.
Also, you can automatically set the number of OpenMP threads via the command:
set OMP_NUM_THREADS=N
where N is the number of OpenMP threads to assign to each MPI process for all jobs launched during that
particular session. You can change OMP_NUM_THREADS permanently by changing the system environment
variable of the same name.
If you wish to run FDS on more than one computer, do the following:
2. Share (with both read and write privilege) a working directory on your machine. Do not put this direc-
tory within the “Program Files” folder because it is write-protected. Share the working directory with
everybody so that all other computers can see it. Note how this directory is defined on the other com-
puters. Sometimes it is \\<my_computer>\<my_shared_directory>\ and sometimes it is defined
via the numerical IP address, like \\129.6.129.87\<my_shared_directory>\. The definition
depends on the way your domain name server (DNS) works. In any case, do not leave blank spaces
within any directory or file names. We have found that blanks create all sorts of trouble. Unless you are
a DOS/Windows expert, avoid them.
16
3. Within the command prompt, cd to the working directory. Find or create within the working directory
a relatively small, simple, two mesh FDS input file. At the command prompt, type:
mpiexec -hosts 2 fred 1 ethel 1 -wdir \\...\... fds job_name.fds
where fred and ethel are the names of two computers on your network. Remember to add the
argument -env OMP_NUM_THREADS N to set the number of OpenMP threads per MPI process on all
computers. The default is not 1, but rather depends on the number of logical processors your computer
has. If you accidently set too many OpenMP threads, you can overload your logical processors and
reduce the job efficiency.
4. If successful, you should see the usual FDS printout indicating the processes being assigned to the
computers. If unsuccessful, try running the case on your own computer:
mpiexec -hosts 1 fred 2 -wdir \\...\... fds job_name.fds
If this is not successful, check with your network administrator or monitor the FDS help forums for
advice.
5. If you plan to use more than just a few computers to run the job, create a text file, say, hostfile.txt,
and list, line by line, the name of each computer, followed by the number of MPI processes per computer.
mpiexec -hostfile hostfile.txt -env ... -wdir ... fds job_name.fds
#!/bin/bash
#PBS -N job_name
#PBS -e <pwd>/job_name.err
#PBS -o <pwd>/job_name.log
#PBS -l nodes=4:ppn=2
#PBS -l walltime=24:0:0
export OMP_NUM_THREADS=2
export I_MPI_PIN_DOMAIN=omp
cd <pwd>
mpiexec -n 8 <full_path>/fds job_name.fds
The first line invokes the bash shell. The second line provides a name for the job. The third and fourth
lines provide file names for standard error and standard out. The fifth line requests 2 processors per node
on 4 nodes. The sixth line requests 24 h of time. The seventh line sets the number of OpenMP threads.
The eighth line is a specific Intel MPI parameter that indicates how the OpenMP threads are to be “pinned”.
The ninth line establishes the working directory. The tenth line launches FDS. You will probably have to
supplement this script with additional options unique to your compute environment. Consult the man pages
for mpiexec and the chosen job scheduler for details.
If you opt to run the job without using a job scheduler, you can issue the commands directly at the
command prompt:
export OMP_NUM_THREADS=M
17
mpiexec -n N -hostfile my_hosts.txt /home/username/.../fds job_name.fds >&
job_name.err &
comp1 slots=2
comp2 slots=1
comp3 slots=2
where compX are the names of available nodes and slots indicate the number of available cores on each
node. The parameter slots is optional. On a cluster shared by others, you should not run long jobs without
a job scheduler because it is possible for multiple jobs to share the same nodes/cores when a scheduler is
not used. If you are using a single Linux or Mac OS X workstation, there is no need to define a host file.
You just need to invoke the previously described mpiexec line with a number of processors suitable to your
case and computer.
1. Use MPI only. OpenMP will probably not speed up the run time appreciably, and it will consume cores
that could be put to better use running more MPI processes.
18
thousands of meshes, the initialization routines can take hours. When the job completes, you can recon-
struct the Smokeview file by appending the numbered files, CHID_n.smv, to the main Smokeview file,
CHID.smv.
3. Set DT_CPU to some convenient time interval on the DUMP line. This parameter directs FDS to periodi-
cally write out a file (CHID_cpu.csv) that records the wall clock time that each MPI process consumes
in the major subroutines. This can help you determine if any of the MPI processes spend an inordinate
amount of time idling.
4. Run your job for a short amount of time to estimate the time required for the full job. Most large compute
clusters will limit you to a certain amount of wall clock time, after which your job is simply stopped. If
you have to use the restart feature in FDS, practice first with a short job to make sure that the job can be
continued properly.
5. Do a strong scaling study for your particular case. That is, run the job a fixed number of time steps with
the least number of meshes that can fit within the machine’s memory. Then divide the mesh by factors
of 2, 4, or 8 until you reach a point where the increased number of meshes/processes does not provide a
significant speed up.
19
The second way to assess MPI efficiency is known as “strong scaling.” Here, you simulate a given
scenario on a single mesh, and then you divide the mesh so that the cell size and the overall number of cells
does not change. Ideally, if you divide a given mesh into two and run the case with two MPI processes
instead of one, you would expect your computation time to decrease by a factor of two. But as you increase
the number of MPI processes, you increase the amount of communication required among the processes.
You also increase the overall number of boundary cells to compute, even though the overall number of gas
phase cells remains the same. The efficiency of such a set of calculations is given by:
t1
Es = (3.2)
N tN
In the strong study demonstrated here, a single mesh of dimension 180 by 160 by 120 is divided into a
range of smaller meshes, with the smallest partitioning being 432 meshes of dimension 20 by 20 by 20. The
resulting decrease in the CPU time of the entire calculation and the major subroutines is shown in the right
hand plot of Fig. 3.1. Ideally, the CPU time should be inversely proportional to the number of meshes (MPI
processes); that is, the relative CPU times ought to follow the black dotted lines. The one notable exception
to this rule is for “COMM” or COMMunications. This curve represents the time spent in communicating
information across the network.
FDS6.7.1-156-gfadd2c0-master FDS6.7.1-156-gfadd2c0-master
1.2 10 0
Strong Scaling Test Total
Weak Scaling Test DIVG
MASS
1 -1 VELO
10
Relative Wall Clock Time
PRES
COMM
0.8 RADI
MAIN
10 -2
Efficiency
0.6
10 -3
0.4
0.2 FDS 10 -4
Ideal
0 10 -5
1 10 100 1000 1 10 100 1000
MPI Processes MPI Processes
Figure 3.1: Example of a weak (left) and strong (right) scaling study.
OpenMP Efficiency
To confirm the speedup provided by OpenMP, a series of test cases5 are run for two mesh sizes (643 and
1283 ), varying the number of OpenMP threads. The setup is a simple channel flow carrying two extra
species to mimic the scalar transport performed in typical fire problems. The results are shown in Fig. 3.2.
Generally, users can expect a factor of 2 speedup using 4 cores (default setting).
20
FDS6.7.1-0-g14cc738-master
100
3
64
3
128
80
40
20
0
1 2 3 4 5 6 7 8
Number of OpenMP threads
Figure 3.2: Benchmark timing comparison for the OpenMP test cases. The computer that ran these jobs has
2 (physical) sockets, and each socket has 4 (logical) cores. This explains the decrease in efficiency beyond
4 OpenMP threads.
&DUMP SUPPRESS_DIAGNOSTICS=.TRUE. /
Be aware the output file will not monitor mesh boundary velocity errors in this case; it will echo only
the simulation time and time step. You could still output a BNDF of QUANTITY=’VELOCITY_ERROR’, if
necessary.
To stop a calculation before its scheduled time, create a file in the same directory as the output files
called CHID.stop. The existence of this file stops the program gracefully, causing it to dump out the latest
flow variables for viewing in Smokeview.
Since calculations can be hours or days long, there is a restart feature in FDS. Details of how to use this
feature are given in Section 7.3. Briefly, specify at the beginning of calculation how often a “restart” file
should be saved. Should something happen to disrupt the calculation, like a power outage, the calculation
can be restarted from the time the last restart file was saved.
It is also possible to control the stop time and the dumping of restart files by using control functions as
described in Section 19.5.
21
Chapter 4
User Support
It is not unusual over the course of a project to run into various problems, some related to FDS, some related
to your computer. FDS is an CPU and memory intensive calculation that can push your computer’s processor
and memory to its limits. In fact, there are no hardwired bounds within FDS that prevent you from starting
a calculation that is too large for your hardware. Even if your machine has adequate memory (RAM), you
can still easily set up calculations that can require weeks or months to complete. It is difficult to predict at
the start of a simulation just how long and how much memory will be required. Learn how to monitor the
resource usage of your computer. Start with small calculations and build your way up.
Although many features in FDS are fairly mature, there are many that are not. FDS is used for practical
engineering applications, but also for research in fire and combustion. As you become more familiar with the
software, you will inevitably run into areas that are of current research interest. Indeed, burning a roomful
of ordinary furniture is one of the most challenging applications of the model. So be patient, and learn to
dissect a given scenario into its constitutive parts. For example, do not attempt to simulate a fire spreading
through an entire floor of a building unless you have simulated the burning of the various combustibles with
relatively small calculations.
Along with the FDS User’s Guide, there are resources available on the Internet. These resources include
an “Issue Tracker” for reporting bugs and requesting new features, a “Discussion Group” for clarifying
questions and discussing more general topics rather than just specific problems, and “Wiki Pages” that
provide supplementary information about FDS-SMV development, third-party tools, and other resources.
Before using these on-line resources, it is important to first try to solve your own problems by performing
simple test calculations or debugging your input file. The next few sections provide a list of error statements
and suggestions on how to solve problems.
23
recover the exact source code files that were used to build that executable.
Get in the habit of checking the version number of your executable, periodically checking for new
releases which might already have addressed your problem, and telling us what version you are using if you
report a problem.
Input File Errors: The most common errors in FDS are due to mis-typed input statements. These errors
result in the immediate halting of the program and a statement like, “ERROR: Problem with the HEAD
line.” For these errors, check the line in the input file named in the error statement. Make sure the
parameter names are spelled correctly. Make sure that a / (forward slash) is put at the end of each
namelist entry. Make sure that the right type of information is being provided for each parameter, like
whether one real number is expected, or several integers, or whatever. Make sure there are no non-ASCII
characters being used, as can sometimes happen when text is cut and pasted from other applications or
word-processing software. Make sure zeros are zeros and O’s are O’s. Make sure 1’s are not !’s. Make
sure apostrophes are used to designate character strings. Make sure the text file on a Unix/Linux machine
was not created on a Windows machine, and vice versa. Make sure that all the parameters listed are still
being used – new versions of FDS often drop or change parameters forcing you to re-examine old input
files.
Numerical Instability Errors: It is possible that during an FDS calculation the flow velocity at some loca-
tion in the domain can increase due to numerical error causing the time step size to decrease to a point1
where logic in the code decides that the results are unphysical and stops the calculation with an error
message in the file CHID.out. In these cases, FDS ends by dumping out one final Plot3D file giving
you a hint as to where the error is occurring within the computational domain. Usually, a numerical
instability can be identified by fictitiously large velocity vectors emanating from a small region within
the domain. Common causes of such instabilities are:
There are various ways to solve the problem, depending on the situation. Try to diagnose and fix the
problem before reporting it. It is difficult for anyone but the originator of the input file to diagnose the
problem.
1 By default, the calculation is stopped when the time step drops below 0.0001 of the initial time step. This factor can be changed
24
Inadequate Computer Resources: The calculation might be using more RAM than the machine has (you
will see an error message like “ERROR: Memory allocation failed for ZZ in the routine INIT”) , or the
output files could have used up all the available disk space. In these situations, the computer may or
may not produce an intelligible error message. Sometimes the computer is just unresponsive. It is your
responsibility to ensure that the computer has adequate resources to do the calculation. Remember, there
is no limit to how big or how long FDS calculations can be – it depends on the resources of the computer.
For any new simulation, try running the case with a modest-sized mesh, and gradually make refinements
until the computer can no longer handle it. Then back off somewhat on the size of the calculation so that
the computer can comfortably run the case. Trying to run with 90 % to 100 % of computer resources is
risky; using MPI and mulitple machines would be better. If you are using a Linux/Unix machine, make
sure that the stacksize is unlimited, which will allow FDS to access as much of the RAM as possible.
Changing the stacksize limit differs with each shell type, so it is best to do an on-line search to find out
how to ensure that your stacksize is unlimited.
Run-Time Errors: An error occurs either within the computer operating system or the FDS program. An
error message is printed out by the operating system of the computer onto the screen or into the diag-
nostic output file. This message is most often unintelligible to most people, including the programmers,
although occasionally one might get a small clue if there is mention of a specific problem, like “stack
overflow,” “divide by zero,” or “file write error, unit=...” Sometimes the error message simply refers to a
“Segmentation Fault.” These errors may be caused by a bug in FDS, for example if a number is divided
by zero, or an array is used before it is allocated, or any number of other problems. Before reporting
the error to the Issue Tracker, try to systematically simplify the input file until the error goes away. This
process usually brings to light some feature of the calculation responsible for the problem and helps in
the debugging.
File Writing Errors: Occasionally, especially on Windows machines, FDS fails because it is not permitted
to write to a file. A typical error statement reads:
forrtl: severe (47): write to READONLY file, unit 8598, file C:\Users\...\
The unit, in this case 8598, is just a number that FDS has associated with one of the output files. If this
error occurs just after the start of the calculation, you can try adding the phrase
FLUSH_FILE_BUFFERS=.FALSE.
on the DUMP line of the input file (see Section 20.1). This will prevent FDS from attempting to flush
the contents of the internal buffers, something it does to make it possible to view the FDS output in
Smokeview during the FDS simulation. On some Windows machines, you might encounter security
settings that prevent command line programs such as FDS from writing to system folders that contain
program files. In this case, try to rerun the case in a non-system folder (i.e., a location within your home
directory).
Poisson Initialization: Sometimes at the very start of a calculation, an error appears stating that there is a
problem with the “Poisson initialization.” The equation for pressure in FDS is known as the Poisson
equation. The Poisson solver consists of large system of linear equations that must be initialized at the
start of the calculation. Most often, an error in the initialization step is due to a mesh IJK dimension
being less than 4 (except in the case of a two-dimensional calculation). It is also possible that something
is fundamentally wrong with the coordinates of the computational domain. Diagnose the problem by
checking the MESH lines in the input file.
25
4.3 Support Requests and Bug Tracking
Because FDS development is on-going, problems will inevitably occur with various routines and features.
The developers need to know if a certain feature is not working, and reporting problems is encouraged.
However, the problem must be clearly identified. The best way to do this is to simplify the input file as
much as possible so that the bug can be diagnosed (i.e., create and submit a minimal working example).
Also, limit the bug reports to those features that clearly do not work. Physical problems such as fires that do
not ignite, flames that do not spread, etc., may be related to the mesh resolution or scenario formulation, and
you need to investigate the problem first before reporting it. If an error message originates from the operating
system as opposed to FDS, first investigate some of the more obvious possibilities, such as memory size,
disk space, etc.
If that does not solve the problem, report the problem with as much information about the error message
and circumstances related to the problem. The input file should be simplified as much as possible so that the
bug occurs early in the calculation. Attach the simplified input file if necessary, following the instructions
provided at the web site. In this way, the developers can quickly run the problematic input file and hopefully
diagnose the problem.
Note: Reports of specific bugs, problems, feature requests, and enhancements should be posted to the
Issue Tracker and not the Discussion Group.
26
Part II
27
Chapter 5
sets various values of parameters contained in the DUMP namelist group. The meanings of these various
parameters will be explained in subsequent chapters. The namelist records can span multiple lines in the
input file, but just be sure to end the record with a slash or else the data will not be understood. Do not add
anything to a namelist line other than the parameters and values appropriate for that group. Otherwise, FDS
will stop immediately upon execution.
Parameters within a namelist record can be separated by either commas, spaces, or line breaks. It is
recommended that you use commas or line breaks, and never use tab stops because they are not explicitly
defined in the namelist data structure. Comments and notes can be written into the file so long as nothing
comes before the ampersand except a space and nothing comes between the ampersand and the slash except
appropriate parameters corresponding to that particular namelist group.
1 ASCII – American Standard Code for Information Interchange. There are 256 characters that make up the standard ASCII text.
2A namelist is a Fortran input record.
29
The parameters in the input file can be integers, reals, character strings, or logical parameters. A logical
parameter is either .TRUE. or .FALSE. – the periods are a Fortran convention. Character strings that are
listed in this User’s Guide must be copied exactly as written – the code is case sensitive and underscores do
matter. The maximum length of most character input parameters is 60.
Most of the input parameters are simply real or integer scalars, like DT=0.02, but sometimes the in-
puts are multidimensional arrays. For example, when describing a particular solid surface, you need to
express the mass fractions of multiple materials that are to be found in multiple layers. The input array
MATL_MASS_FRACTION(IL,IC) is intended to convey to FDS the mass fraction of component IC of layer
IL. For example, if the mass fraction of the second material of the third layer is 0.5, then write
MATL_MASS_FRACTION(3,2)=0.5
MATL_MASS_FRACTION(1,1:3)=0.5,0.4,0.1
which means that the first three materials of layer 1 have mass fractions of 0.5, 0.4, and 0.1, respectively.
The notation 1:3 means array elements 1 through 3, inclusive.
Note that character strings can be enclosed either by single or double quotation marks. Be careful not
to create the input file by pasting text from something other than a simple text editor, in which case the
punctuation marks may not transfer properly into the text file.
Some text file encodings may not work on all systems. If file reading errors occur and no typographical
errors can be found in the input file, try saving the input file using a different encoding. For example, the
text file editor Notepad works fine on a Windows PC, but a file edited in Notepad may not work on Linux or
Mac OS X because of the difference in line endings between Windows and Unix/Linux operating systems.
The editor Wordpad typically works better, but try a simple case first.
&TAIL /
as the last line at the end of the input file. This completes the file from &HEAD to &TAIL. FDS does not even
look for this last line. It just forces the “end of file” character past relevant input.
Another general rule of thumb when writing input files is to only add parameters that make a change
from the default value. That way, you can more easily distinguish between what you want and what FDS
wants. Add comments liberally to the file, so long as these comments do not fall within the namelist records.
The general structure of an input file is shown below, with many lines of the original validation input
3
file removed for clarity.
3 The actual input file, WTC_05.fds, is part of the FDS Validation Suite
30
&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. /
&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.
It is recommended that when looking at a new scenario, first select a pre-written input file that resembles
the case, make the necessary changes, then run the case at fairly low mesh resolution to determine if the
geometry is set up correctly. It is best to start off with a relatively simple file that captures the main features
of the problem without getting tied down with too much detail that might mask a fundamental flaw in the
calculation. Initial calculations ought to be meshed coarsely so that the run times are less than an hour and
corrections can easily be made without wasting too much time. As you learn how to write input files, you
will continually run and re-run your case as you add in complexity.
Table 5.1 provides a quick reference to all the namelist parameters and where you can find the reference
to where it is introduced in the document and the table containing all of the keywords for each group.
31
Table 5.1: Namelist Group Reference Table
32
5.4 Concatenating input files
The namelist group &CATF allows for the inclusion of input information from different files into a simulation.
Consider an FDS input file couch2.fds4 which contains
&HEAD CHID='couch2', TITLE='Single Couch Test Case using two meshes & CATF files.' /
&MESH IJK=12,10,24, XB=1.1,2.3,3.6,4.6,0.0,2.4, MULT_ID='mesh' /
&MULT ID='mesh', DX=1.2, I_UPPER=1 /
&TIME T_END=600. /
...
&CATF OTHER_FILES='upholstery_matl.tpl','gypsum_walls.tpl' / #Upholstery & gypsum.
# Couch OBSTS:
&OBST XB= 1.50, 3.10, 3.80, 4.60, 0.00, 0.40 /
&OBST XB= 1.50, 3.10, 3.80, 4.60, 0.40, 0.60, SURF_ID='UPHOLSTERY', BULK_DENSITY=... /
&OBST XB= 1.30, 1.50, 3.80, 4.60, 0.00, 0.90, SURF_ID='UPHOLSTERY', BULK_DENSITY=... /
&OBST XB= 3.10, 3.30, 3.80, 4.60, 0.00, 0.90, SURF_ID='UPHOLSTERY', BULK_DENSITY=... /
&OBST XB= 1.50, 3.10, 4.40, 4.60, 0.60, 1.20, SURF_ID='UPHOLSTERY', BULK_DENSITY=... /
We note that the &CATF group is defined in two lines. In the first line, two files upholstery_matl.tpl,
gypsum_walls.tpl are defined on the namelist OTHER_FILES field. These contain information in the
form of templates, on a typical upholstery material for the couch, and gypsum wall defined for the back
wall and roof of the case. Up to 20 files can be listed in one &CATF line. For example, for the gypsum wall
template, the material and surface information is provided in FDS input format as:
&SURF ID = 'WALL'
DEFAULT = .TRUE.
RGB = 200,200,200
MATL_ID = 'GYPSUM PLASTER'
THICKNESS = 0.012 /
In the second &CATF line, a file couch2_devices.dat defines in FDS input format a set of sensor device
lines, potentially produced by an automated script.
When FDS is invoked with the couch2.fds input file, it will concatenate the input contents of this
file and all files defined in its &CATF lines, into a simulation input file called couch2_cat.fds (here
CHID=’couch2’ is the case ID in the original couch2.fds input file). Then FDS will proceed to run the
case defined by the concatenated input file generated.
4 Referenced files can be found in the Examples/Fires directory of the FDS bundle.
33
Chapter 6
This chapter describes global input parameters that affect the general scope of the simulation, like the simu-
lation time and the size and extent of the computational domain. Essentially, these parameters establish the
spatial and temporal coordinate systems that are used by all other components of the simulation, which is
why these parameters are usually listed at the top of the input file and why they are described here first.
6.1 Naming the Job: The HEAD Namelist Group (Table 21.9)
The first thing to do when setting up an input file is to give the job a name. The name of the job is important
because often a project involves numerous simulations in which case the names of the individual simulations
should be meaningful and help to organize the project. The namelist group HEAD contains two parameters,
as in this example:
CHID stands for Character ID, it is a string of 40 characters or less used to tag the output files. If, for
example, CHID=’WTC_05’, it is convenient to name the input data file WTC_05.fds so that the input
file can be associated with the output files. No periods or spaces are allowed in CHID because the output
files are tagged with suffixes that are meaningful to certain computer operating systems. If CHID is not
specified, then it will be set to the name of the input file minus everything at and beyond the first period.
TITLE is a string of 256 characters or less that describes the simulation. It is simply a descriptive text that
is passed to various output files.
6.2.1 Basics
Usually, only the duration of the simulation is required on this line, via the parameter T_END. The default is
1 s. For example, the following line will instruct FDS to run the simulation for 5400 s.
&TIME T_END=5400. /
35
If T_END is set to zero, only the set-up work is performed, allowing you to quickly check the geometry in
Smokeview.
If you want the time line to start at a number other than zero, you can use the parameter T_BEGIN
to specify the time written to file for the first time step. This would be useful for matching time lines of
experimental data or video recordings.
Time-based RAMPs are evaluated using the actual time if the RAMP activation time is the same as
T_BEGIN; otherwise, they are evaluated using the time from when the RAMP activates. Therefore, if you
are setting T_BEGIN in order to test a time-based CTRL or DEVC that is ultimately linked to a RAMP, then you
should set T_BEGIN to be slightly less than the time the RAMP will activate. For example if you are testing a
VENT that is to open at 10 s whose SURF_ID uses a RAMP, T_BEGIN should be set slightly less than 10 s.
36
Note that when TIME_SHRINK_FACTOR is used a device with QUANTITY=’TIME’ or a device or control
function with a DELAY will have those values adjusted by the value of TIME_SHRINK_FACTOR. For example
if a 10 s DELAY is specified for a CTRL input with a TIME_SHRINK_FACTOR of 10, then FDS will adjust the
DELAY to 1 s.
37
6.3 Computational Meshes: The MESH Namelist Group (Table 21.15)
All FDS calculations must be performed within a domain that is made up of rectilinear volumes called
meshes. Each mesh is divided into rectangular cells, the number of which depends on the desired resolution
of the flow dynamics. MESH is the namelist group that defines the computational domain.
6.3.1 Basics
A mesh is a single right parallelepiped, i.e., a box. The coordinate system within a mesh conforms to the
right hand rule. The origin point of a mesh is defined by the first, third and fifth values of the real number
sextuplet, XB, and the opposite corner is defined by the second, fourth and sixth values. For example,
defines a mesh that spans the volume starting at the origin and extending 1 m in the positive x direction, 2 m
in the positive y direction, and 3 m in the positive z direction. The mesh is subdivided into uniform cells
via the parameter IJK. In this example, the mesh is divided into 10 cm cubes. It is best if the mesh cells
resemble cubes; that is, the length, width and height of the cells ought to be roughly the same. If it is desired
that the mesh cells in a particular direction not be uniform in size, then the namelist groups TRNX, TRNY
and/or TRNZ may be used to alter the uniformity of the mesh (See Section 6.3.5).
Any obstructions or vents that extend beyond the boundary of the mesh are cut off at the boundary. There
is no penalty for defining objects outside of the mesh, and these objects will not appear in Smokeview.
The pressure solver in FDS employs Fast Fourier Transforms (FFTs) in the y and z directions, and this
algorithm works most efficiently if the number of cells in these directions (the J and K of IJK) can be
factored into low primes, like 2, 3, and 5. The number of cells in the x direction (the I in IJK) is not affected
by this restriction because the pressure solver does not use an FFT in the x direction. However, since the
pressure solver uses less than 10 % of the total CPU time, the gains in using low prime dimensions are
usually negligible. Experiment with different mesh dimensions to ensure that those that are ultimately used
do not unduly slow down the calculation.
38
Figure 6.1: An example of a multiple-mesh geometry.
at all. In the last case, essentially two separate calculations are performed with no communication at all
between them. Obstructions and vents are entered in terms of the overall coordinate system and need not
apply to any one particular mesh. Each mesh checks the coordinates of all the geometric entities and decides
whether or not they are to be included.
To run FDS in parallel using MPI (Message Passing Interface), you must break up the computational
domain into multiple meshes so that the workload can be divided among the computers. In general, it is
better to run multiple mesh cases using MPI if you have the computers available, but be aware that two
computers will not necessarily finish the job in half the time as one. For MPI to work well, there has to be
a comparable number of cells assigned to each MPI process, or otherwise most of the processes will sit idle
waiting for the one with the largest number of cells to finish processing each time step. You can use multiple
meshes on a single processor without using MPI , in which case one CPU will serially process each mesh,
one by one.
Usually in a MPI calculation, each mesh is assigned its own process, and each process its own processor.
However, it is possible to assign more than one mesh to a single process, and it is possible to assign more
than one process to a single processor. Consider a case that involves six meshes:
The parameter MPI_PROCESS instructs FDS to assign that particular mesh to the given process. In this case,
only four processes are to be started, numbered 0 through 3. Note that the processes need to be invoked in
39
ascending order, starting with 0. Why would you do this? Suppose you only have four processors available
for this job. By starting only four processes instead of six, you can save time because ‘mesh2’ and ‘mesh3’
can communicate directly with each other without having to transmit data using MPI calls over the network.
Same goes for ‘mesh5’ and ‘mesh6’. In essence, it is as if these mesh pairs are neighbors and need not send
mail to each other via the postal system. The letters can just be walked next door.
Additionally to the mesh assignment to individual MPI processes, the number of OpenMP threads for
each MPI process may be specified. The parameter N_THREADS instructs FDS to set this number of threads
and must be consistent for all meshes on the same MPI process, but may vary between them:
Notes: An unspecified value will result in the default number of threads (see 3.1.2) on the MPI process.
Some cluster systems do not support a heterogeneous distribution of resources, here computational cores,
per MPI process. Therefore, the number of OpenMP threads may change, but not the amount of cores
assigned to the MPI process.
For cases involving many meshes, you might want to assign them colors using either the character string
COLOR or the integer triplet RGB. You may also want to consider using the multiplying feature to easily create
a 3-D array of meshes. See Section 10.5 for details.
Some parallel computing environments do not have a centralized file system, in which case FDS must
write the output files for each process to a separate disk. If your computing cluster does not have a
SHARED_FILE_SYSTEM, then set this parameter to .FALSE. on the MISC line. This parameter is also handy
for MPI jobs involving hundreds or thousands of processes, in which case writing a single Smokeview file is
time-consuming. When SHARED_FILE_SYSTEM is set to .FALSE., the file that Smokeview reads is broken
into pieces, one for each MPI process. By doing this, you avoid serially writing to the Smokeview file. One
other useful parameter for larger MPI jobs is called VERBOSE on the MISC line. This logical parameter sup-
presses information related to MPI process and OpenMP thread assignments that is printed to the diagnostic
output files. By default, its value is .TRUE. for MPI jobs involving 50 or less processes, and .FALSE. for
larger jobs.
• Avoid putting mesh boundaries where critical action is expected, especially fire. Sometimes fire spread
from mesh to mesh cannot be avoided, but if at all possible try to keep mesh interfaces relatively free of
complicated phenomena since the exchange of information across mesh boundaries is not yet as accurate
as cell to cell exchanges within one mesh.
• In general, there is little advantage to overlapping meshes because information is only exchanged at
exterior boundaries. This means that a mesh that is completely embedded within another receives infor-
mation at its exterior boundary, but the larger mesh receives no information from the mesh embedded
40
This is the ideal kind of mesh to mesh
alignment.
41
within. Essentially, the larger, usually coarser, mesh is doing its own simulation of the scenario and
is not affected by the smaller, usually finer, mesh embedded within it. Details within the fine mesh,
especially related to fire growth and spread, may not be picked up by the coarse mesh. In such cases,
it is preferable to isolate the detailed fire behavior within one mesh, and position coarser meshes at the
exterior boundary of the fine mesh. Then the fine and coarse meshes mutually exchange information.
• Be careful when using the shortcut convention of declaring an entire face of the domain to be an OPEN
vent. Every mesh takes on this attribute. See Section 10.3 for more details.
• If a planar obstruction is close to where two meshes abut, make sure that each mesh “sees” the obstruc-
tion. If the obstruction is even a millimeter outside of one of the meshes, that mesh does not account for
it, in which case information is not transferred properly between meshes.
If you would like to check the mesh alignment without running the case, set CHECK_MESH_ALIGNMENT to
.TRUE. on any MESH line. If the job stops with no errors, the meshes obey the alignment rules. This check
can sometimes take a few tens of seconds, but you can open Smokeview after launching the job to check the
alignment by eye.
6.3.5 Mesh Stretching: The TRNX, TRNY and TRNZ Namelist Groups (Table 21.33)
By default the mesh cells that fill the computational domain are uniform in size. However, it is possible
to specify that the cells be non-uniform in one or two1 of the three coordinate directions. For a given
coordinate direction, x, y or z, a function can be prescribed that transforms the uniformly-spaced mesh to a
non-uniformly spaced mesh. Be careful with mesh transformations! If you shrink cells in one region you
must stretch cells somewhere else. When one or two coordinate directions are transformed, the aspect ratio
of the mesh cells in the 3D mesh will vary. To be on the safe side, transformations that alter the aspect ratio
of cells beyond 2 or 3 should be avoided. Keep in mind that the large eddy simulation technique is based
on the assumption that the numerical mesh should be fine enough to allow the formation of eddies that are
responsible for the mixing. In general, eddy formation is limited by the largest dimension of a mesh cell,
thus shrinking the mesh resolution in one or two directions may not necessarily lead to a better simulation
if the third dimension is large. Transformations, in general, reduce the efficiency of the computation, with
two coordinate transformations impairing efficiency more than a transformation in one coordinate direction.
Experiment with different meshing strategies to see how much of a penalty you will pay.
Here is an example of how to do a mesh transformation. Suppose your mesh is defined
1 Ifyou are stretching the mesh in two coordinate directions, limit the number of cells to approximately 1 million. The Poisson
solver that is used for two-coordinate stretching exhibits floating point overflow errors during the initialization phase when very
large meshes are used. If you require more than a million cells, consider using multiple meshes instead of one large mesh.
42
1.5 1.5
1.2 1.2
0.9 0.9
x
x
0.6 0.6
0.3 0.3
0 0
0 0.3 0.6 0.9 1.2 1.5 0 0.3 0.6 0.9 1.2 1.5
Figure 6.3: Piecewise-linear mesh transformation. Figure 6.4: Polynomial mesh transformation.
and you want to alter the uniform spacing in the x direction. First, refer to the figures above. You need
to define a function x = f (ξ ) that maps the uniformly-spaced Computational Coordinate (CC) 0 ≤ ξ ≤ 1.5
to the Physical Coordinate (PC) 0 ≤ x ≤ 1.5. The function has three mandatory constraints: it must be
monotonic (always increasing), it must map ξ = 0 to x = 0, and it must map ξ = 1.5 to x = 1.5. The default
transformation function is f (ξ ) = ξ for a uniform mesh, but you need not do anything in this case.
Two types of transformation functions are allowed. The first, and simplest, is a piecewise-linear func-
tion. Figure 6.3 gives an example of a piecewise-linear transformation. The graph indicates how 15 uni-
formly spaced mesh cells along the horizontal axis are transformed into 15 non-uniformly spaced cells along
the vertical axis. In this case, the function is made up of straight line segments connecting points (CC,PC),
in increasing order, as specified by the following lines in the input file:
The integer MESH_NUMBER indicates which mesh to apply the transformation. If you want the transforma-
tion to be applied to all meshes, set MESH_NUMBER to 0. The parameter CC refers to the Computational
Coordinate, ξ , located on the horizontal axis; PC is the Physical Coordinate, x, located on the vertical axis.
The slopes of the line segments in the plot indicate whether the mesh is being stretched (slopes greater
than 1) or shrunk (slopes less than 1). The tricky part about this process is that you usually have a desired
shrinking/stretching strategy for the Physical Coordinate on the vertical axis, and must work backwards to
determine what the corresponding points should be for the Computational Coordinate on the horizontal axis.
Note that the above transformation is applied to the second mesh in a multiple mesh job. It should be also
noted that the start and endpoints should not be specified in this linear grid transformation.
The second type of transformation is a polynomial function whose constraints are of the form
dn f (CC)
= PC
dξ n
Figure 6.4 gives an example of a polynomial transformation, for which the parameters are specified (assum-
ing that this is the third mesh):
43
&TRNX IDERIV=0, CC=0.75, PC=0.75, MESH_NUMBER=3 /
&TRNX IDERIV=1, CC=0.75, PC=0.50, MESH_NUMBER=3 /
df
which correspond to the constraints f (0.75) = 0.75 and dξ (0.75) = 0.5, or, in words, the function maps 0.75
into 0.75 and the slope of the function at ξ = 0.75 is 0.5 . The transform function must also pass through
the points (0,0) and (1.5,1.5), meaning that FDS must compute the coefficients for the cubic polynomial
f (ξ ) = c0 + c1 ξ + c2 ξ 2 + c3 ξ 3 . More constraints on the function lead to higher order polynomial functions,
so be careful about too many constraints which could lead to non-monotonic functions. The monotonicity
of the function is checked by the program and an error message is produced if it is not monotonic.
Do not specify either linear transformation points or IDERIV=0 points at coordinate values correspond-
ing to the mesh boundaries. This is done automatically by FDS.
and δ x is the nominal size of a mesh cell2 . The quantity, Q̇, is the total heat release rate of the fire. If it
changes over time, you should consider the corresponding change in resolution. The quantity D∗ /δ x can be
thought of as the number of computational cells spanning the characteristic (not necessarily the physical)
diameter of the fire. The more cells spanning the fire, the better the resolution of the calculation. It is better
to assess the quality of the mesh in terms of this non-dimensional parameter, rather than an absolute mesh
cell size. For example, a cell size of 10 cm may be “adequate,” in some sense, for evaluating the spread
of smoke and heat through a building from a sizable fire, but may not be appropriate to study a very small,
smoldering source.
The FDS Validation Guide [5] contains a table of the values of D∗ /δ x used in the simulation of the vali-
dation experiments. The table is near the end of the chapter that describes all the experiments. These values
range over two orders of magnitude and were chosen based on a grid resolution study and the particular
attributes of the given fire scenario. It would be inappropriate to take any of these values as an “acceptable”
minimum.
There are a number of special output quantities that provide local measures of grid resolution. See
Section 20.10.22 for details.
2 The characteristic fire diameter is related to the characteristic fire size via the relation Q∗ = (D∗ /D)5/2 , where D is the physical
44
Chapter 7
MISC is the namelist group of input parameters that do not fall into any one category (Table 21.16). They
are typically global in extent, like the ambient temperature. Only one MISC line should be entered in the
data file. For example, the input line
&MISC TMPA=25. /
sets the ambient temperature at 25 ◦ C. The following sections describe the various miscellaneous parameters.
P_INF Background pressure (at the ground) in Pa. The default is 101325 Pa.
TMPA Ambient temperature, the temperature of everything at the start of the simulation. The default is
20 ◦ C.
45
Table 7.1: Parameters effected by SIMULATION_MODE.
the job was stopped. If you want the output files to be appended without clipping off any existing data, even though some duplicate
output will be left over, then set CLIP_RESTART_FILES to .FALSE. on the DUMP line.
46
7.4 Gravity
By default, gravity points in the negative z direction, or more simply, downward. However, to change the
direction of gravity to model a sloping roof or tunnel, for example, specify the gravity vector on the MISC
line with a triplet of numbers of the form GVEC=0.,0.,-9.81, with units of m/s2 . This is the default, but
it can be changed to be any direction.
There are a few special applications where you might want to vary the gravity vector as a function of
time or as a function of the first spatial coordinate, x. For example, on board space craft, small motions can
cause temporal changes in the normally zero level of gravity, an effect known as “g-jitter.” More commonly,
in tunnel fire simulations, it is sometimes convenient to change the direction of gravity to mimic the change
in slope. The slope of the tunnel might change as you travel through it; thus, you can tell FDS where to
redirect gravity. For either a spatially or temporally varying direction and/or magnitude of gravity, do the
following. First, on the MISC line, set the three components of gravity, GVEC, to some “base” state like
GVEC=1.,1.,1., which gives you the flexibility to vary all three components. Next, designate “ramps” for
the individual components, RAMP_GX, RAMP_GY, and RAMP_GZ, all of which are specified on the MISC line.
There is more discussion of RAMPs in Section 14, but for now you can use the following as a simple template
to follow:
Note that both the x and z components of gravity are functions of x. FDS has been programmed to only allow
variation in the x coordinate. Note also that F is just a multiplier of the “base” gravity vector components,
given by GVEC. This is why using the number 1 is convenient – it allows you to specify the gravity compo-
nents on the RAMP lines directly. The effect of these lines is to model the first 50 m of a tunnel without a
slope, but the second 50 m with a 5 % slope upwards. Note that the angle from vertical of the gravity vector
due to a 5 % slope is tan−1 0.05 = 2.86◦ and that 0.49 and 9.80 are equal to the magnitude of the gravity
vector, 9.81 m/s2 , multiplied by the sine and cosine of 2.86◦ , respectively. To check your math, the square
root of the sum of the squares of the gravity components ought to equal 9.81. Notice in this case that the y
direction has been left out because there is no y variation in the gravity vector. To vary the direction and/or
magnitude of gravity in time, follow the same procedure but replace the X in the RAMP lines with a T.
Note that in a case with sprinklers, changing GVEC will change how droplets move in the gas but not
how droplets move on solid sufaces. On solid surfaces droplet movement will always consider down to be
the negative-z direction.
1 p̃ 1
∇ p̃ = ∇ − p̃ ∇ (7.1)
ρ ρ ρ
47
The pressure term is written like this so that a separable elliptic partial differential equation can be solved
for the “total” pressure, H ≡ |u|2 /2 + p̃/ρ, using a direct solver. The second term is calculated based on the
pressure field from the previous time step, a slight approximation necessary to render the pressure equation
separable. This term is sometimes referred to as the baroclinic torque, and it is responsible for generating
vorticity due to the non-alignment of pressure and density gradients. In versions of FDS prior to 6, the in-
clusion of the baroclinic torque term was found to sometimes cause numerical instabilities. If it is suspected
that the term is responsible for numerical problems, it can be removed by setting BAROCLINIC=.FALSE.
on the MISC line. For example, in the simple helium plume test case below, neglecting the baroclinic torque
changes the puffing behavior noticeably. In other applications, however, its effect is less significant. For
further discussion of its effect, see Ref. [9].
where Cν = 0.1 and the subgrid scale (sgs) kinetic energy is taken from an algebraic relationship based on
scale similarity (see the FDS Technical Reference Guide [3]). The LES filter width is taken as the geometric
mean of the local mesh spacing in each direction, ∆ = (δ x δ y δ z)(1/3) .
Options for the TURBULENCE_MODEL on the MISC line are listed in Table 7.2. Note that the model used
in FDS versions 1-5 is ’CONSTANT SMAGORINSKY’. The thermal conductivity and material diffusivity are
related to the turbulent viscosity by:
µLES c p µLES
kLES = ; (ρD)LES = (7.3)
Prt Sct
48
The turbulent Prandtl number Prt and the turbulent Schmidt number Sct are assumed to be constant for
a given scenario. Although it is not recommended for most calculations, you can modify Prt = 0.5, and
Sct = 0.5 via the parameters PR, and SC on the MISC line. A more detailed discussion of these parameters
is given in the FDS Technical Reference Guide [3].
kuk
CFL = δt <1 (7.4)
∆
places a restriction on the time step due to the advection velocity. The limits for the CFL are set by CFL_MIN
(default 0.8) and CFL_MAX (default 1) on MISC. Physically, the constraint says that a fluid element should
not traverse more than one cell width, ∆, within one time step, δt. For LES, this constraint has the added
advantage of keeping the implicit temporal and spatial filters consistent with each other. In other words, in
order to resolve an eddy of size ∆, the time step needs to obey the CFL constraint. If one were to employ
an implicit scheme for the purpose of taking time steps ten times larger than the CFL limit, the smallest
resolvable turbulent motions would then be roughly ten times the grid spacing, which would severely limit
49
the benefit of using LES. In most cases, if you want the simulation to run faster, a better strategy is to coarsen
the grid resolution while keeping the CFL close to 1.
The exact CFL needed to maintain stability depends on the order (as well as other properties) of the
time integration scheme and the choice of velocity norm. Four choices for velocity norm are available in
FDS (set on MISC):
CFL_VELOCITY_NORM=3 (SVLES default, least restrictive, corresponds to L∞ norm of velocity vector with-
out the velocity divergence)
kuk |u| |v| |w|
= max , , (7.8)
∆ δx δy δz
The last listed form of the constraint is the least restrictive, but also the most dangerous in the sense that a
numerical instability is more likely to occur when the CFL constraint is least restrictive. This option is akin
to a high optimization level of a computer program compiler—there is a trade-off between added speed and
added risk of failure.
Notice that the CFL norms 0-2 include the divergence of the velocity field. This is an added safeguard
because often numerical instabilities arise when there is a sudden release of energy and a corresponding
increase in the divergence within a single grid cell. In an explicit Euler update of the continuity equation, if
the time increment is too large the grid cell may be totally drained of mass, which, of course, is not physical.
The constraint ρ n+1 > 0 therefore leads to the following restriction on the time step:
ρn
δt < (7.9)
un · ∇ρ n + ρ n ∇ · un
We can argue that the case we are most concerned with is when ρ n is near zero. A reasonable approximation
to (7.9) then becomes
−1
ρ ui
δt < = +∇·u (7.10)
u ρ−0 + ρ∇ · u δ xi
i δ xi
Eq. (7.10) basically adds the effect of thermal expansion to the CFL constraint.
µ 1 1 1
VN ≡ 2 δt max , Dα + 2+ 2 <1 (7.11)
ρ δx 2 δy δz
50
The limits for VN may be adjusted using VN_MIN (default 0.8 for all forms of LES, 0.4 for DNS) and
VN_MAX (default 1.0 for all forms of LES, 0.5 for DNS) on MISC. We can understand this constraint in
a couple of different ways. First, we could consider the model for the diffusion velocity of species α in
direction i, Vα,iYα = −Dα ∂Yα /∂ xi , and we would then see that VN is simply a CFL constraint due to
diffusive transport.
We can also think of VN in terms of a total variation diminishing (TVD) constraint. That is, if we have
variation (curvature) in the scalar field, we do not want to create spurious oscillations that can lead to an
instability by overshooting the smoothing step. Consider the following explicit update of the heat equation
for u in 1-D. Here subscripts indicate grid indices and ν is the diffusivity.
δt ν n
un+1 = uni + (u − 2uni + uni+1 ) (7.12)
i
δ x2 i−1
Very simply, notice that if δt ν/δ x2 = 1/2 then un+1i = (uni−1 + uni+1 )/2. If the time step is any larger we
overshoot the straight line connecting neighboring cell values. Of course, this restriction is only guaranteed
to be TVD if the u field is “smooth”; otherwise, the neighboring cell values may be shifted in the opposite
direction. Unfortunately, in LES there is no such guarantee and so the VN constraint can be particularly
devilish in generating instabilities. For this reason, some practitioners like to employ implicit methods for
the diffusive terms.
51
7.8 Special Topic: Flux Limiters
FDS employs total variation diminishing (TVD) schemes for scalar transport. The default for VLES (FDS
default SIMULATION_MODE) is Superbee [19], so chosen because this scheme does the best job preserving
the scalar variance in highly turbulent flows with coarse grid resolution. The default scheme for DNS and
LES is CHARM [20] because the gradient steepening used in Superbee forces a stair step pattern at high
resolution, while CHARM is convergent. A few other schemes (including Godunov and central differencing)
are included for completeness; more details can be found in the Tech Guide [1]. Table 7.3 below shows the
character strings which may be used to invoke the various limiter schemes.
Scheme FLUX_LIMITER
Central differencing ’CENTRAL’
Godunov ’GODUNOV’
Superbee (VLES, SVLES default) ’SUPERBEE’
MINMOD ’MINMOD’
CHARM (DNS, LES default) ’CHARM’
MP5 ’MP5’
52
temperature-dependent look-up tables. By default, FDS determines the lowest and highest values of the
variables based on your input, but it is not possible in all cases to anticipate just how low or high a given
value might be. Thus, on rare occasions you might need to set upper or lower bounds on the density or tem-
perature. Temperature and density bounds are input under the namelist group called CLIP. The parameters
are listed in Table 21.3. You only need to set these values if you notice that one of them appears to be “cut
off” when examining the results in Smokeview. For typical fire scenarios, you need not set these values, but
if you anticipate relatively low or high values in an unusual case, take a look at the calculation results to
determine if a change in the bounds is needed.
53
Chapter 8
Initial Conditions
Typically, an FDS simulation begins at time t = 0 with ambient conditions. The air temperature is assumed
constant with height, and the density and pressure decrease with height (the z direction). This decrease is
not noticed in most building scale calculations, but it is important in large outdoor simulations.
There are some scenarios for which it is convenient to change the ambient conditions within rectangular
regions of the domain using the namelist keyword INIT (Table 21.12). There can be multiple INIT lines.
IF two rectangular regions defined by INIT overlap, it is the second of the overlapping regions that takes
precedence, including default conditions. That is, it is possible to overwrite the initial conditions explicitly
specified by the first INIT line with the default initial conditions implied by the second INIT line.
&INIT XB=0.0,0.1,0.0,0.025,0.0,0.1,
MASS_FRACTION(1)=0.21, SPEC_ID(1)='OXYGEN',
MASS_FRACTION(2)=0.06, SPEC_ID(2)='PROPANE' /
Here, within the region whose bounds are given by the sextuplet XB, the initial mass fractions of oxygen and
propane will be initialized to 0.21 and 0.06, respectively. You must specify the gas species using the SPEC
namelist group. See Section 15 for details.
VOLUME_FRACTION can be substituted for MASS_FRACTION.
8.2 Temperature
To modify the local initial temperature, add lines of the form,
This indicates that the temperature shall be 60 ◦ C instead of the ambient within the bounds given by XB. The
INIT construct may be useful in examining the influence of stack effect in a building, where the temperature
55
is different inside and outside. If you wanted to initialize both temperature and species in the same volume,
both quantities would use the same INIT line,
&INIT XB=0.0,0.1,0.0,0.025,0.0,0.1,
MASS_FRACTION(1)=0.21, SPEC_ID(1)='OXYGEN',
MASS_FRACTION(2)=0.06, SPEC_ID(2)='PROPANE',
TEMPERATURE=60. /
8.3 Density
When specifying an initial density it is important to recognize the order in which FDS solves the govern-
ing equations. In the following example, initial species mass fractions, temperature, and density are all
initialized in the same volume.
&INIT XB=0.0,0.1,0.0,0.025,0.0,0.1,
MASS_FRACTION(1)=0.21, SPEC_ID(1)='OXYGEN',
MASS_FRACTION(2)=0.06, SPEC_ID(2)='PROPANE',
TEMPERATURE=60., DENSITY=1.13 /
This example is a case where we have over-defined the problem. Since the temperature is computed from
the equation of state using the specified density, the specified temperature will not, in general, satisfy the
equation of state, and FDS will overwrite the specified temperature.
indicates that the region bounded by XB shall generate 1000 kW/m3 . This feature is mainly useful for
diagnostics, or to model a fire in a very simple way.
&DUMP UVW_TIMER(1)=600 /
FDS will then write CHID_uvw_nn.csv for each time index and mesh. The format for this file is
WRITE(LU_UVW) IMIN,IMAX,JMIN,JMAX,KMIN,KMAX
56
DO K=KMIN,KMAX
DO J=JMIN,JMAX
DO I=IMIN,IMAX
WRITE(LU_UVW,*) U(I,J,K),',',V(I,J,K),',',W(I,J,K)
ENDDO
ENDDO
ENDDO
You may read in the 3-D velocity field using a CSVF line. For example:
&CSVF UVWFILE='my_velocity_field.csv' /
If multiple meshes are involved, it is assumed that the CSVF lines are provided in the input file in the same
order as the meshes. For two meshes you might have the following:
&CSVF UVWFILE='CHID_t001_m001.csv' /
&CSVF UVWFILE='CHID_t001_m002.csv' /
&MISC PROJECTION=.TRUE. /
It is recommended that you also specify PROJECTION=.TRUE. on MISC if the specified velocity field does
not satisfy the divergence constraint to machine precision on a staggered grid (this may not even be true if an
analytical solution to the Navier-Stokes equations is sampled at the staggered velocity component locations).
57
Chapter 9
Pressure
Normally, you need not set any parameters related to the solution of the Poisson equation for pressure.
However, there are circumstances when you might need to change default numerical values. This is done
through the PRES namelist group (Table 21.21).
59
MAX_PRESSURE_ITERATIONS.
If .TRUE., the parameter CHECK_POISSON tells FDS to check that the left-hand and right-hand sides
of the Poisson equation for H are equivalent (see the FDS Tech Guide [3]). The error is printed to the
CHID.out file.
&PRES SOLVER='UGLMAT' /
As seen in Fig. 9.1, the volume flow matches perfectly and the number of required pressure iterations is one.
Whether this pressure solver strategy is most efficient likely depends on the problem and the required error
tolerance. In this particular case, the UGLMAT case runs about 25 % faster than the default FFT case, and
it is more accurate—easy choice.
60
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1.5 100
Volume Flow (duct_flow) Pressure Iterations (duct_flow)
/s)
3 80
1
Volume Flow (m
60
Iterations
Ideal (Iterations)
FFT IBM (iter)
UGLMAT (iter)
40
0.5 Ideal (Flow)
FFT IBM (flow_in)
FFT IBM (flow_out) 20
UGLMAT (flow_in)
UGLMAT (flow_out)
0 0
0 10 20 30 40 50 60 0 10 20 30 40 50 60
Time (s) Time (s)
Figure 9.1: (Left) Volume flow into and out of a square duct. (Right) The number of pressure iterations as a
function of time.
61
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
0.2 0.2
Pressure (dancing_eddies_default) Pressure (dancing_eddies_tight)
Pressure (Pa) 0.1 0.1
Pressure (Pa)
0 0
-0.1 -0.1
-0.2 -0.2
FDS, 1 mesh FDS, 1 mesh
FDS, 4 mesh, tol=5E-4 m/s FDS, 4 mesh, tol=1E-5 m/s
-0.3 -0.3
0 0.5 1 1.5 2 0 0.5 1 1.5 2
Time (s) Time (s)
FDS6.7.1-0-g14cc738-master
0.2
Pressure (dancing_eddies_uglmat)
0.1
Pressure (Pa)
-0.1
-0.2
FDS, 1 mesh
FDS, 4 mesh, tol=1E-15 m/s
-0.3
0 0.5 1 1.5 2
Time (s)
Figure 9.2: (Top) Comparison of pressure traces in the channel for three different settings of
VELOCITY_TOLERANCE, the default value (upper-left), a tighter tolerance (upper-right), machine precision
from the UGLMAT solver with a single iteration (middle). (Bottom) A contour plot of the pressure after 2 s
with the default tolerance.
is only possible for a single mesh. If you want to implement true periodic boundaries for a single mesh case,
set the appropriate FISHPAK_BC value to zero on the PRES line. For example,
&PRES FISHPAK_BC(1:3)=0,0,0 /
62
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
100 400
Pressure Iterations (dancing_eddies) CPU Time (dancing_eddies)
80
300
Pressure Iterations
100
20
0 0
0 0.5 1 1.5 2 0 0.5 1 1.5 2
Time (s) Simulated Time (s)
Figure 9.3: The number of pressure iterations (left) and the total CPU time (right) for overlapped and non-
overlapped meshes.
drops below the value of PRESSURE_TOLERANCE which is specified on the PRES line. Its default value is
20/δ x2 s−2 , where δ x is the characteristic grid cell size.
If a numerical instability occurs in a simulation involving a tunnel, you might try the following remedies:
1 Keep in mind that the pressure equation iterations continue until three criteria are satisfied. The first deals with the decomposi-
tion of the pressure term, the second deals with the normal component of velocity at internal solid surfaces, and the third deals with
the mismatch of normal velocity components at mesh interfaces.
63
1. Reduce the value of PRESSURE_TOLERANCE on the PRES line to alleviate the mismatch between old
and new pressure fields.
2. If you are using multiple meshes, reduce the value of VELOCITY_TOLERANCE on the PRES line to force
a tighter match of velocities at the mesh boundaries. The default value of VELOCITY_TOLERANCE (with
units of m/s) is one-half the grid cell size (with units of m). You may also want to increase the value of
MAX_PRESSURE_ITERATIONS which has a default value of 10.
3. Create OPEN vents at various points along the length of the tunnel, near or at the floor. This models
natural leakage in the tunnel, and alleviates wild oscillations in pressure.
6
Error (m/s)
Error (1/s
0.5
2
0 0
3000 3010 3020 3030 3040 3050 3000 3010 3020 3030 3040 3050
Iteration Iteration
Figure 9.4: Reduction in velocity and pressure error due to iteration of the pressure solver.
2 Caution: the velocity error file can be quite large. Use it only for relatively short simulations only.
3 The velocity error is the maximum value of the difference between normal velocity components at mesh interfaces or at solid
internal boundaries.
64
Special Case: Pressure Drop in Long Tunnels
In this section, we develop a set of cases to extract the implied friction factor from an FDS simulation of
flow down a long tunnel (Validation/Moody_Chart/FDS_Input_Files/tunnel_pressure_drop
series). Note that a more complete mapping of the Moody Chart is provided in the FDS Verification Guide
[4], but that series uses a mean pressure gradient to force the flow, which is not a typical user case. Here
we force the flow from a VENT and we monitor the pressure using planar averaged DEVCs. The tunnel is 1.6
km (approximately one mile) long with a square cross-section 10 m × 10 m for Cases A, B, C, and D. The
cross section for Case E is 12.8 m (width) × 5 m (height), giving a hydraulic diameter of 7.2 m. We push
air from the entrance at 2, 4, or 10 m/s for sand-grain roughness heights of 0.0001, 0.01, or 0.1 m. We run
two grid resolutions with uniform cells in the vertical direction corresponding to 10 and 20 cells across the
tunnel height. Streamwise grid resolution is twice the wall-normal resolution. The case matrix and friction
factor results are given in Table 9.1. The target friction factor is taken from the Colebrook equation (see
[22]). FDS results for the 10 and 20 resolution cases are also shown along with the max relative error as
compared to the Colebrook value. The pressure profiles are shown in Fig. 9.5.
A word of caution: To achieve sensible results for tunnel cases you must take care to eliminate any mesh-
to-mesh mass conservation errors and you must ensure that the time step stability criterion is never violated.
For the first, you should simply use the ’GLMAT’ solver. To remain stable, use CFL_VELOCITY_NORM=1,
which employs a more restrictive definition of the cell velocity magnitude. Without this setting, even slight
violations of the stability limits (which are precisely unknown for the Navier-Stokes equations, in general)
may lead to dramatic spurious pressure oscillations. We also find that improved results for friction factor are
obtained if the ’WALE’ near-wall eddy-viscosity is used. Both these settings can be achieved using ’LES’
mode.
&MISC SIMULATION_MODE='LES'/
&PRES SOLVER='GLMAT'/
While reasonable grid resolution is important, as you can see, the wall models in FDS are capable of
giving the correct mean wall stress even at rather coarse resolution. For example, the y+ for Case C with 10
cells is, in fact, 5000 (this is the location of the middle of the first grid cell divided by the roughness height).
Note that this resolution may not be sufficient if other complexities exist and it is the user’s responsibility to
ensure grid convergence for their application.
Also, note that a roughness of 0.1 mm is used here only for completeness in testing the code. While this
is indeed the value one finds in the literature for the roughness of concrete, a real-world tunnel may have
geometric features along the walls that are unresolved by the grid and may act as roughness elements. These
elements should be considered when specifying the roughness in FDS.
65
FDS6.7.1-52-gc8df932-master FDS6.7.1-52-gc8df932-master
6
DEVC Pressure 10 DEVC Pressure 10
Case A Case B
5 Least squares fit 10
15 Least squares fit 10
U = 2 m/s, s = 0.0001 m DEVC Pressure 20 U = 2 m/s, s = 0.1 m DEVC Pressure 20
4 Least squares fit 20 Least squares fit 20
Gauge Pressure (Pa)
3 10
2
1 5
-1 0
0 400 800 1200 1600 0 400 800 1200 1600
Distance (m) Distance (m)
FDS6.7.1-52-gc8df932-master FDS6.7.1-52-gc8df932-master
120
DEVC Pressure 10 DEVC Pressure 10
Case C Case D
Least squares fit 10 Least squares fit 10
100 U = 10 m/s, s = 0.0001 m 400 U = 10 m/s, s = 0.1 m
DEVC Pressure 20 DEVC Pressure 20
Least squares fit 20 Least squares fit 20
Gauge Pressure (Pa)
0 0
0 400 800 1200 1600 0 400 800 1200 1600
Distance (m) Distance (m)
FDS6.7.1-52-gc8df932-master
60
DEVC Pressure 10
Case E
Least squares fit 10
50 U = 4 m/s, s = 0.01 m DEVC Pressure 20
Least squares fit 20
Gauge Pressure (Pa)
30
20
10
0
0 400 800 1200 1600
Distance (m)
Figure 9.5: Tunnel pressure drop for cases listed in Table 9.1.
66
9.4 Breaking Pressure Zones
There are two parameters on the PRES line that control iterative procedures related to the coupling of velocity
and pressure. One is called RELAXATION_FACTOR and its default value is 1. When there is an error in the
normal component of velocity at a solid boundary, this parameter dictates that the correction be applied in 1
time step. If its value were 0.5, the correction would be applied in 2 time steps.
A similar parameter is the PRESSURE_RELAX_TIME. It controls the rate at which the pressures in ad-
jacent compartments are brought into equilibrium following a breach. Its default value is 1 s, meaning that
equilibrium is achieved in roughly a second.
67
Chapter 10
A considerable amount of work in setting up a calculation lies in specifying the geometry of the space to
be modeled and applying boundary conditions to the solid surfaces. The geometry is described in terms of
rectangular obstructions that can heat up, burn, conduct heat, etc.; and vents from which air or fuel can be
either injected into, or drawn from, the flow domain. A boundary condition needs to be assigned to each
obstruction and vent describing its thermal properties. A fire is just one type of boundary condition. This
chapter describes how to build the model.
69
10.2.1 Basics
Each OBST line contains the coordinates of a rectangular solid within the flow domain. This solid is defined
by two points (x1 ,y1 ,z1 ) and (x2 ,y2 ,z2 ) that are entered on the OBST line in terms of the real sextuplet XB. In
addition to the coordinates, the boundary conditions for the obstruction can be specified with the parameter
SURF_ID, which designates which SURF line (Section 10.1) to apply at the surface of the obstruction. If the
obstruction has different properties for its top, sides and bottom, do not specify only one SURF_ID. Instead,
use SURF_IDS, an array of three character strings specifying the boundary condition IDs for the top, sides
and bottom of the obstruction, respectively. If the default boundary condition is desired, then SURF_ID or
SURF_IDS need not be set. However, if at least one of the surface conditions for an obstruction is the inert
default, it can be referred to as ’INERT’, but it does not have to be explicitly defined. For example:
puts a fire on top of the obstruction. This is a simple way of prescribing a burner.
In addition to SURF_ID and SURF_IDS, you can also use the sextuplet SURF_ID6 as follows:
&OBST XB=2.3,4.5,1.3,4.8,0.0,9.2,
SURF_ID6='FIRE','INERT','HOT','COLD','BLOW','INERT' /
where the six surface descriptors refer to the planes x = 2.3, x = 4.5, y = 1.3, y = 4.8, z = 0.0, and z = 9.2,
respectively. Note that SURF_ID6 should not be used on the same OBST line as SURF_ID or SURF_IDS.
Obstructions may be created or removed during a simulation. See Section 19.4.1 for details.
70
for this is to “shrink” the obstruction you do not wish to take precedence by slightly by adjusting its coor-
dinates (XB) accordingly. Then, in Smokeview, toggle the “q” key to show the obstructions as you specified
them, rather than as FDS rendered them.
10.2.6 Creating Holes in Obstructions: The HOLE Namelist Group (Table 21.10)
The HOLE namelist group defines parameters that carve a hole out of an existing obstruction or set of ob-
structions. To do this, add lines of the form
&HOLE XB=2.0,4.5,1.9,4.8,0.0,9.2 /
Any solid mesh cells within the volume 2.0 < x < 4.5, 1.9 < y < 4.8, 0.0 < z < 9.2 are removed. Obstruc-
tions intersecting the volume are broken up into smaller blocks. If the hole represents a door or window, a
good rule of thumb is to punch more than enough to create the hole. This ensures that the hole is created
through the entire obstruction. For example, if the OBST line denotes a wall 0.1 m thick:
&OBST XB=1.0,1.1,0.0,5.0,0.0,3.0 /
&HOLE XB=0.99,1.11,2.0,3.0,0.0,2.0 /
The extra centimeter added to the x coordinates of the hole make it clear that the hole is to punch through
the entire obstruction.
When a HOLE is created, the affected obstruction(s) are either rejected, or created or removed at pre-
determined times. See Section 19.4.1 for details. To allow a hole to be controlled with either the CTRL or
71
DEVC namelist groups, you will need to add the CTRL_ID or DEVC_ID parameter respectively, to the HOLE
line1 . When the state of the HOLE evaluates to .FALSE., an obstruction will be placed in the HOLE. By de-
fault the obstruction filling the HOLE will take the color of the surrounding OBST that the HOLE was punched
through. To make the obstruction filling the HOLE a different color than the original obstruction, set the
COLOR or integer triplet RGB on the HOLE line (see Section 10.4). If you want the obstruction filling the HOLE
to be invisible, then set COLOR=’INVISIBLE’. Additionally, you may use the keyword TRANSPARENCY,
real number from 0 to 1, to make the obstruction filling the HOLE transparent. See Section 19.4.1 for an
example.
If an obstruction is not to be punctured by a HOLE, add PERMIT_HOLE=.FALSE. to the OBST line. Note
that a HOLE has no effect on a VENT or a mesh boundary. It only applies to OBSTructions.
It is a good idea to inspect the geometry by running either a setup job (T_END=0 on the TIME line) or a
short-time job to test the operation of devices and control functions.
10.3 Applying Surface Properties: The VENT Namelist Group (Table 21.34)
Whereas the OBST group is used to specify obstructions within the computational domain, the VENT group
(Table 21.34) is used to prescribe planes adjacent to obstructions or external walls. Note that the label VENT
is used for historical reasons – this group of parameters has evolved well beyond its initial role as simply
allowing for air to be blown into, or sucked out of, the computational domain.
10.3.1 Basics
The vents are chosen in a similar manner to the obstructions, with the sextuplet XB denoting a plane abutting
a solid surface. Two of the six coordinates must be the same, denoting a plane as opposed to a solid. Note
that only one VENT may be specified for any given wall cell. If additional VENT lines are specified for a
given wall cell, FDS will output a warning message and ignore redundant VENT lines.
The term “VENT” is somewhat misleading. Taken literally, a VENT can be used to model components of
the ventilation system in a building, like a diffuser or a return. In these cases, the VENT coordinates form a
plane on a solid surface forming the boundary of the duct. No holes need to be created through the solid; it
is assumed that air is pushed out of or sucked into duct work within the wall. Less literally, a VENT is used
simply as a means of applying a particular boundary condition to a rectangular patch on a solid surface.
A fire, for example, is usually created by first generating a solid obstruction via an OBST line, and then
specifying a VENT somewhere on one of the faces of the solid with a SURF_ID with the characteristics of
the thermal and combustion properties of the fuel. For example, the lines
specify a large obstruction (with the properties given elsewhere in the file under the name ’big block’)
with a “patch” applied to one of its faces with alternative properties under the name ’hot patch’. This
latter surface property need not actually be a “vent,” like a supply or return duct, but rather just a patch with
different boundary conditions than those assumed for the obstruction. Note that the surface properties of a
VENT over-ride those of the underlying obstruction.
A VENT must always be attached to a solid obstruction. See Section 12.1 for instructions on specifying
different types of fans that allow gases to flow through.
1 If you add a CTRL_ID or DEVC_ID to the HOLE line, do not overlap this HOLE with another. The control logic can fail.
72
An easy way to specify an entire external wall is to replace XB with MB (Mesh Boundary), a character
string whose value is one of the following: ’XMAX’, ’XMIN’, ’YMAX’, ’YMIN’, ’ZMAX’ or ’ZMIN’ de-
noting the planes x = XMAX, x = XMIN, y = YMAX, y = YMIN, z = ZMAX or z = ZMIN, respectively. Like
an obstruction, the boundary condition index of a vent is specified with SURF_ID, indicating which of the
listed SURF lines to apply. If the default boundary condition is desired, then SURF_ID need not be set.
Be careful when using the MB shortcut when doing a multiple mesh simulation; that is, when more than
one rectangular mesh is used. The plane designated by the character string MB may be mistakenly applied
to more than one mesh, possibly leading to confusion about whether a plane is a solid wall or an open
boundary. Check the geometry in Smokeview to assure that the VENTs are properly specified. Use color as
much as possible to double-check the set-up. More detail on color in Section 10.4 and Table 10.1. Also, the
parameter OUTLINE=.TRUE. on the VENT line causes the VENT to be drawn as an outline in Smokeview.
Open Vents
The first special VENT is invoked by the parameter SURF_ID=’OPEN’. This is used only if the VENT is
applied to the exterior boundary of the computational domain, where it denotes a passive opening to the
outside. By default, FDS assumes that the exterior boundary of the computational domain (the XBs on the
MESH line) is a solid wall. To create a totally or partially open domain, use OPEN vents on the exterior
mesh boundaries. It is sometimes convenient to specify doors or windows that open out to the exterior of the
computational domain by simply specifying it to be OPEN. However, keep in mind that the pressure boundary
condition on such an opening is imperfect, and it is recommended that if the flow through the doorway or
window is important, you should extend the domain a few meters rather than use an OPEN boundary. You
would still have to use the OPEN boundary to open up one or more sides of the computational domain, but
these openings would be far enough away from the modeled door or window that they would not affect the
flow pattern.
By default, it is assumed that ambient conditions exist beyond the ’OPEN’ vent. However, in some cases,
you may want to alter this assumption, for example, the temperature. If you assume a temperature other than
ambient, specify TMP_EXTERIOR along with SURF_ID=’OPEN’. You can modify the time history of this
parameter using a ramp function, TMP_EXTERIOR_RAMP. Use this option cautiously – in many situations if
you want to describe the exterior of a building, it is better to include the exterior explicitly in your calculation
because the flow in and out of the doors and windows will be more naturally captured. See Section 13.4.1
for more details. If you want to specify a non-ambient pressure at the OPEN boundary, see Section 12.4.
The OPEN pressure boundary condition is most stable for flows that are predominantly normal to the
vent, either mostly in or mostly out. This is because the prescribed pressure at an OPEN boundary is ill-
conditioned (a small perturbation to the input may lead to large change in the output) if the flow is parallel
to the vent. Suppose, for example, that an outdoor flow is 10 m/s in the x direction and ±0.001 m/s in the
z direction with an OPEN top boundary. The kinetic energy of this flow is roughly k = 50 m2 /s2 . When the
vertical velocity is positive (+0.001 m/s) then the prescribed boundary condition for the stagnation pressure
is set to H = k = 50 m2 /s2 . But when the vertical velocity is negative (-0.001 m/s) then H = 0 (see [1]). For
this reason, OPEN vents should be used with care in outdoor applications. See Section 13.1 for an alternative
approach.
73
Vents to the outside of the computational domain (OPEN vents) can be opened or closed during a sim-
ulation. It is best done by creating or removing a thin obstruction that covers the OPEN VENT. See Sec-
tion 19.4.2 for details.
Mirror Vents
A VENT with SURF_ID=’MIRROR’ denotes a symmetry plane. Usually, a MIRROR spans an entire face of
the computational domain, essentially doubling the size of the domain with the MIRROR acting as a plane
of symmetry. The flow on the opposite side of the MIRROR is exactly reversed2 . From a numerical point
of view, a MIRROR is a no-flux, free-slip boundary. As with OPEN, a MIRROR can only be prescribed at an
exterior boundary of the computational domain. Often, OPEN or MIRROR VENTs are prescribed along an
entire side of the computational domain, in which case the “MB” notation is handy.
In conventional RANS (Reynolds-Averaged Navier-Stokes) models, symmetry boundaries are often
used as a way of saving on computation time. However, because FDS is an LES (Large Eddy Simulation)
model, the use of symmetry boundaries should be considered carefully. The reason for this is that an LES
model does not compute a time-averaged solution of the N-S equations. In other words, for a RANS model,
a fire plume is represented as an axially-symmetric flow field because that is what you would expect if you
time-averaged the actual flow field over a sufficient amount of time. Thus, for a RANS model, a symmetry
boundary along the plume centerline is appropriate. In an LES model, however, there is no time-averaging
built into the equations, and there is no time-averaged, symmetric solution. Putting a MIRROR boundary
along the centerline of a fire plume will change its dynamics entirely. It will produce something very much
like the flow field of a fire that is adjacent to a vertical wall. For this reason, a MIRROR boundary condition
is not recommended along the centerline of a turbulent fire plume. If the fire or burner is very small, and
the flow is laminar, then the MIRROR boundary condition makes sense. In fact, in 2-D calculations, MIRROR
boundary conditions are employed in the third coordinate direction (this is done automatically, you need not
specify it explicitly).
Periodic Vents
A VENT with SURF_ID=’PERIODIC’ may be used in combination with another periodic vent on the oppo-
site side of the domain. If the domain consists of only a single mesh, the lines:
designate that the simulation is periodic in the x-direction. For multi-mesh domains where PERIODIC
boundary conditions are applied, the entire domain must be a single large block and the VENT planes must
be specified using PBX, PBY, or PBZ. If xmin = 0 and xmax = 1, for example, use
For additional information related to periodic boundaries and the pressure solver see Section 9.2.
Periodic vents may not be used to connect offset vents or vents in different coordinate directions. For
such cases, you must employ HVAC capabilities (see Section 12.2).
Note that, by default, particles are not recycled at periodic boundaries. See Section 18.4.1 if periodic
particles are desired.
2 Note that the mirror image of a scene is not shown in Smokeview.
74
HVAC Vents
A VENT with SURF_ID=’HVAC’ denotes that the vent is connected to an HVAC system. See Section 12.2
for a description of inputs for HVAC systems.
Circular Vents
Circular or semi-circular vents may be specified as the intersection of a rectangle with coordinates XB
and a circle with center XYZ and radius RADIUS. The rectangular surface cells that are assigned the cor-
responding SURF_ID will be those whose centroid falls within the intersection. In the example case called
Fires/circular_burner.fds, the following two lines create a circular vent that is 1 m in diameter and
flows propane gas at a rate of 0.02 kg/m2 /s:
The XB coordinates designate the orientation of the vent. In this case, the extent of the area specified by
XB is large enough to contain the entire circle. Note also in this example that the parameter SPREAD_RATE
causes the fire to spread outward at a rate of 0.05 m/s. The mass flux of propane through the vent is plotted
in Fig. 10.1. Notice that the mass flux increases following a “t-squared” profile. This is what is expected
of a fire which spreads radially at a linear rate. In this case, the fire reaches the RADIUS of the circle in
10 s, as expected. Note also that the parameter TAU_MF indicates that the fuel should ramp up quickly once
the flame front reaches a given grid cell. In other words, TAU_MF controls the local ramp-up of fuel; the
SPREAD_RATE controls the global ramp-up. Following the ramp-up, the fuel flows at a rate equal to the area
of the circle times the mass flux of fuel per unit area. Even if the circle is crudely resolved on a coarse grid,
the fuel flow rate will be adjusted to produce the desired value governed by the circular vent.
FDS6.7.1-0-g14cc738-master
0.02
Burning Rate (circular_burner)
0.015
Burning Rate (kg/s)
0.01
0.005
Ideal (Mdot)
FDS (MLR_FUEL)
0
0 5 10 15 20
Time (s)
75
10.3.4 Trouble-Shooting Vents
Unlike most of the entries in the input file, the order that you specify VENTs can be important. There might
be situations where it is convenient to position one VENT atop another. For example, suppose you want to
designate the ceiling of a compartment to have a particular set of surface properties, and you designate the
entire ceiling to have the appropriate SURF_ID. Then, you want to designate a smaller patch on the ceiling
to have another set of surface properties, like an air supply. In this case, you must designate the supply
VENT first because for that area of the ceiling, FDS will ignore the ceiling properties and apply the supply
properties. FDS processes the first VENT, not the second as it did in versions prior to FDS 5. Now, the rule
for VENTs is “first come, first served.” Keep in mind, however, that the second VENT is not rejected entirely
– only where there is overlap. FDS will also print out a warning to the screen (or to standard error) saying
which VENT has priority. Also, be careful if any of the VENTs are applying OPEN boundary conditions –
OPEN boundaries disable pressure ZONEs, which will change the solutio of the problem.
Smokeview can help identify where two VENTs overlap, assuming each has a unique COLOR. Because
Smokeview draws VENTs on top of each other, areas of overlap will have a grainy, awkward appearance
that changes pattern as you move the scene. In situations where you desire the overlap for the sake of
convenience, you might want to slightly adjust the coordinates of the preferred VENT so that it is slightly
offset from the solid surface. Make the offset less than about a tenth of a cell dimension so that FDS snaps
it to its desired location. Then, by toggling the “q” key in Smokeview, you can eliminate the grainy color
overlap by showing the VENT exactly where you specified it, as opposed to where FDS repositioned it. This
trick also works where the faces of two obstructions overlap.
If an error message appears requesting that the orientation of a vent be specified, first check to make sure
that the vent is a plane. If the vent is a plane, then the orientation can be forced by specifying the parameter
IOR. If the normal direction of the VENT is in the positive x direction, set IOR=1. If the normal direction
is in the negative x direction, set IOR=-1. For the y and z direction, use the number 2 and 3, respectively.
Setting IOR may sometimes solve the problem, but it is more likely that if there is an error message about
orientation, then the VENT is buried within a solid obstruction, in which case the program cannot determine
the direction in which the VENT is facing.
10.4.1 Colors
Colors for many items within FDS can be prescribed in two ways; a triplet of integer color values, RGB, or
a character string, COLOR. The three RGB integers range from 0 to 255, indicating the amount of Red, Green
and Blue that make up the color. If you define the COLOR by name, it is important that you type the name
exactly as it is listed in the color tables. Color parameters can be specified on a SURF line, in which case
all surfaces of that type will have that color, or color parameters can be applied directly to obstructions or
vents. For example, the lines:
76
will color all UPHOLSTERY green and this particular obstruction blue. Table 10.1 provides a small sampling
of RGB values and COLOR names for a variety of colors3 . It is highly recommended that colors be assigned
to surfaces via the SURF line. As the geometries of FDS simulations become more complex, it is very useful
to use color as a spot check to determine if the desired surface properties have been assigned throughout the
geometry.
Obstructions and vents may be colored individually, over-riding the color designated by the SURF line.
The special case COLOR=’INVISIBLE’ causes the vent or obstruction not to be drawn by Smokeview.
Another special case COLOR=’RAINBOW’ causes the color of the vent, obstruction or mesh to be randomly
selected from the full range of RGB values; this can be useful if you are using the MULT namelist group and
want to differentiate between the multiplied obstruction, vent or mesh.
Assuming that a JPEG file called paneling.jpg exists in the working directory, Smokeview should read it
and display the image wherever the paneling is used. Note that the image does not appear when Smokeview
is first invoked. It is an option controlled by the Show/Hide menu. The parameters TEXTURE_WIDTH and
TEXTURE_HEIGHT are the physical dimensions of the image. In this case, the JPEG image is of a 1 m wide
by 2 m high piece of paneling. Smokeview replicates the image as often as necessary to make it appear that
the paneling is applied where desired. Consider carefully how the image repeats itself when applied in a
scene. If the image has no obvious pattern, there is no problem with the image being repeated. If the image
has an obvious direction, the real triplet TEXTURE_ORIGIN should be added to the VENT or OBST line to
which a texture map should be applied. For example,
applies paneling to an obstruction whose dimensions are 1 m by 1 m by 2 m, such that the image of the
paneling is positioned at the point (1,3,5). The default value of TEXTURE_ORIGIN is (0,0,0), and the global
default can be changed by added a TEXTURE_ORIGIN statement to the MISC line.
3A complete listing of all 500+ colors can be found by searching the FDS source code file data.f90.
77
Table 10.1: A sample of color definitions.
Name R G B Name R G B
AQUAMARINE 127 255 212 MAROON 128 0 0
ANTIQUE WHITE 250 235 215 MELON 227 168 105
BEIGE 245 245 220 MIDNIGHT BLUE 25 25 112
BLACK 0 0 0 MINT 189 252 201
BLUE 0 0 255 NAVY 0 0 128
BLUE VIOLET 138 43 226 OLIVE 128 128 0
BRICK 156 102 31 OLIVE DRAB 107 142 35
BROWN 165 42 42 ORANGE 255 128 0
BURNT SIENNA 138 54 15 ORANGE RED 255 69 0
BURNT UMBER 138 51 36 ORCHID 218 112 214
CADET BLUE 95 158 160 PINK 255 192 203
CHOCOLATE 210 105 30 POWDER BLUE 176 224 230
COBALT 61 89 171 PURPLE 128 0 128
CORAL 255 127 80 RASPBERRY 135 38 87
CYAN 0 255 255 RED 255 0 0
DIM GRAY 105 105 105 ROYAL BLUE 65 105 225
EMERALD GREEN 0 201 87 SALMON 250 128 114
FIREBRICK 178 34 34 SANDY BROWN 244 164 96
FLESH 255 125 64 SEA GREEN 84 255 159
FOREST GREEN 34 139 34 SEPIA 94 38 18
GOLD 255 215 0 SIENNA 160 82 45
GOLDENROD 218 165 32 SILVER 192 192 192
GRAY 128 128 128 SKY BLUE 135 206 235
GREEN 0 255 0 SLATEBLUE 106 90 205
GREEN YELLOW 173 255 47 SLATE GRAY 112 128 144
HONEYDEW 240 255 240 SPRING GREEN 0 255 127
HOT PINK 255 105 180 STEEL BLUE 70 130 180
INDIAN RED 205 92 92 TAN 210 180 140
INDIGO 75 0 130 TEAL 0 128 128
IVORY 255 255 240 THISTLE 216 191 216
IVORY BLACK 41 36 33 TOMATO 255 99 71
KELLY GREEN 0 128 0 TURQUOISE 64 224 208
KHAKI 240 230 140 VIOLET 238 130 238
LAVENDER 230 230 250 VIOLET RED 208 32 144
LIME GREEN 50 205 50 WHITE 255 255 255
MAGENTA 255 0 255 YELLOW 255 255 0
78
10.5 Repeated Objects: The MULT Namelist Group (Table 21.18)
Sometimes obstructions, holes and vents are repeated over and over in the input file. This can be tedious to
create and make the input file hard to read. However, if a particular set of objects repeats itself in a regular
pattern, you can use a utility known as a multiplier. If you want to repeat an obstruction, for example, create
a line in the input file as follows:
This has the effect of making an array of obstructions according to the following formulae:
In situations where the position of the obstruction needs shifting prior to the multiplication, use the param-
eters DX0, DY0, and DZ0.
A variation of this idea is to replace the parameters, DX, DY, and DZ, with a sextuplet called DXB. The
six entries in DXB increment the respective values of the obstruction coordinates given by XB. For example,
the x coordinates are transformed as follows:
Notice that we use N_LOWER and N_UPPER to denote the range of N. This more flexible input scheme allows
you to create, for example, a slanted roof in which the individual roof segments shorten as they ascend to
the top. This feature is demonstrated by the following short input file that creates a hollowed out pyramid
using the four perimeter obstructions that form the outline of its base:
The end result of this input file is to create a pyramid by repeating long, rectangular obstructions at the base
of each face in a stair-step pattern. Note in this case the use of N_LOWER and N_UPPER which automatically
cause FDS to repeat the obstructions in sequence rather than as an array.
79
Figure 10.2: An example of the multiplier function.
Note that the MULTiplication functionality works for MESH, OBST, HOLE, VENT, and INIT lines. For a
MESH, it only applies to the bounds (XB) of the mesh, not the number of cells.
Note also that if a COLOR is specified on a line that includes a MULT_ID, this color will be applied to
all replicates of the object. However, you can set COLOR=’RAINBOW’ which will instruct FDS to randomly
choose a color for each replicate object.
80
Figure 10.3: Using MULT for mesh refinement.
created from the intersection of the OBST array, created using a MULT_ID, and the SHAPE defined on the
OBST line. Note that this method may be memory intensive since each grid cell can be its own OBST, similar
to the way OBST are decomposed when using BURN_AWAY for pyrolysis.
The first step in carving out the shape is to create a MULT line that defines the replication of the OBST.
Then a SHAPE is entered on the OBST line together with whatever parameters are required; parameters are
listed in Table 10.2.
Table 10.2: OBST SHAPE parameters.
An example of a sphere is given below. By default, the center of the sphere is at (0,0,0), so only the
RADIUS is required. If the RADIUS is larger than the half-width the OBST array, this is not a problem, but
the end result will not be a sphere. If the RADIUS is smaller than the half-width, this is also permissible, but
it is inefficient.
81
Figure 10.4: Creating an OBST sphere using MULT and SHAPE.
To create a cylinder we need a height and orientation in addition to the radius. The position of the center
of the bottom face of the cylinder XYZ defaults to (0,0,0). An example of a vertically oriented (default)
cylinder is shown below in Fig. 10.5. Note that the magnitude of the orientation vector is not important; the
vector is only used to specify the direction.
A word of caution when using ORIENTATION with the SHAPE feature: Changing the orientation from
the default (0,0,1) voids the area adjustment algorithm. As a result, FDS cannot achieve the exact mass flux
out of the surface as prescribed by the SURF line and the precise area given by the geometry parameters for
the SHAPE on the OBST line. The mass flux FDS generates will be determined by SURF line and the size of
the grid cells the OBST snaps to. If reorientation is required, first run a sample case to see what total flow
rate the surface is achieving (usually found in the CHID_hrr.csv file). Then manually adjust your mass
flux (or HRRPUA) on the appropriate SURF line.
A cone needs basically the same input parameters as a cylinder. The position of the center of the bottom
face is specified using XYZ and the RADIUS of the bottom face, the HEIGHT, and the ORIENTATION must
be specified. An example is shown below in Fig 10.6.
82
Figure 10.5: Creating an OBST cylinder using MULT and SHAPE.
SURF_ID='shape'
SHAPE='CONE'
RADIUS=0.05
HEIGHT=0.2
XYZ=0,0,-0.1
ORIENTATION=0,0,1/
Finally, the box shape allows to define rotated cuboids. A box shape is defined locally by its HEIGHT,
WIDTH and LENGTH. The location of the box center is provided in XYZ. The angle THETA in degrees specifies
a rotation of the box respect to the global z axis, following right hand rule. Subsequently, the ORIENTATION
direction vector allows for an orientation change respect to the THETA rotated reference frame. This direction
83
vector changes the box orientation such that the local HEIGHT direction matches it. A simple example is
shown Fig 10.7.
Figure 10.7: Creating an OBST rotated box using MULT and SHAPE.
84
Chapter 11
This chapter describes how to specify the thermal properties of solid objects. This is the most challenging
part of setting up the simulation. Why? First, for both real and simulated fires, the growth of the fire
is very sensitive to the thermal properties of the surrounding materials. Second, even if all the material
properties are known to some degree, the physical phenomena of interest may not be simulated properly
due to limitations in the model algorithms or resolution of the numerical mesh. It is your responsibility to
supply the thermal properties of the materials, and then assess the performance of the model to ensure that
the phenomena of interest are being captured.
11.1 Basics
By default, the outer boundary of the computational domain is assumed to be a solid boundary that is
maintained at ambient temperature. The same is true for any obstructions that are added to the scene. To
specify the properties of solids, use the namelist group SURF (Section 10.1). Solids are assumed to consist
of layers that can be made of different materials. The properties of each material required are designated via
the MATL namelist group (Section 11.3). These properties indicate how rapidly the materials heat up, and
how they burn. Each MATL entry in the input file must have an ID, or name, so that they may be associated
with a particular SURF via the parameter MATL_ID. For example, the input file entries:
define a brick wall that is 4.9 m long, 1 m high, and 20 cm thick. Note that the thickness of the wall indicated
by the OBST line is independent of the THICKNESS specified by the SURF line. The OBST line defines the
geometry of the obstruction (i.e., how the obstruction is seen by the flow solver). The SURF line defines
the heat transfer characteristics of the obstruction (i.e., how the obstruction is seen by the 1D solid phase
solver). This allows an obstruction to snap to the local grid but still have the heat transfer solution reflect the
actual thickness.
85
known, it is better to specify these properties and let the model compute the heat flux to, and temperature
of, the walls and other solid surfaces.
Note that there is no need to specify a MATL_ID or THICKNESS. Because the wall is to be maintained at the
given temperature, there is no need to say anything about its material composition or thickness.
86
Specified Convective Heat Transfer Coefficient
If you want to specify the convective heat transfer coefficient, you can set it to a constant using
HEAT_TRANSFER_COEFFICIENT on the SURF line in units of W/(m2 · K). If the back side of the solid
obstruction faces the exterior of the computational domain and the solid conducts heat, you can specify
the heat transfer coefficient of the back side using HEAT_TRANSFER_COEFFICIENT_BACK. This back side
condition is appropriate for a SURF line with BACKING=’VOID’ or BACKING=’EXPOSED’.
Refer to the FDS Tech Guide [1] for further details of the formulation. To specify this heat transfer model
for a particular surface, set HEAT_TRANSFER_MODEL equal to ’LOGLAW’ on the SURF line.
where Nu is the Nusselt number, k is the thermal conductivity of the gas, D is the diameter of the cylinder,
Ra is the Rayleigh number, Pr is the Prandtl number, Ts is the surface temperature, T∞ is the ambient or
surrounding gas temperature, g is the acceleration of gravity, ν = µ/ρ is the kinematic viscosity of the gas,
and α = k/(ρc p ) is the thermal diffusivity. To specify this heat transfer model for a particular surface, set
HEAT_TRANSFER_MODEL equal to ’FREE HORIZONTAL CYLINDER’ on the SURF line.
87
11.2.3 Special Topic: Adiabatic Surfaces
For some special applications, it is often desired that a solid surface be adiabatic, that is, there is no net heat
transfer (radiative and convective) from the gas to the solid. For this case, all that must be prescribed on the
SURF line is ADIABATIC=.TRUE., and nothing else. FDS will compute a wall temperature so that the sum
of the net convective and radiative heat flux is zero. Specifying a surface as ADIABATIC will result in FDS
defining NET_HEAT_FLUX=0 and EMISSIVITY=1.
No solid surface is truly adiabatic; thus, the specification of an adiabatic boundary condition should be
used for diagnostic purposes only.
&MATL ID = 'INSULATOR'
CONDUCTIVITY = 0.041
SPECIFIC_HEAT = 2.09
DENSITY = 229. /
Without arguments, the parameter MATL_ID is assumed to be a list of the materials in multiple layers, with
each layer consisting of only a single material component.
When a set of SURF parameters is applied to the face of an OBST, the first MATL_ID defines the first
layer of solid material. The other MATL_IDs are applied in succession. If BACKING=’EXPOSED’, the last
MATL_ID is applied to the opposite face of the OBST, assuming that the OBST is zero or one grid cells thick.
If the OBST is thicker than one grid cell, then BACKING=’EXPOSED’ is not defined, and it will be treated as
if the condition BACKING=’VOID’ was set. If in the example above, BRICK WALL was applied to the entire
OBST using SURF_ID, then when doing a heat transfer calculation from the +x face to the −x face, FDS
would consider the OBST to be BRICK followed by INSULATOR and the same for a heat transfer calculation
from the −x face to the +x face. To avoid this, specify a second SURF that has the reverse MATL_ID and use
SURF_ID6 to apply the two SURF definitions to opposite faces of the OBST.
1 The maximum number of material layers is 20. The maximum number of material components is 20.
88
Mixtures of solid materials within the same layer can be defined using the MATL_MASS_FRACTION
keyword. This parameter has the same two indices as the MATL_ID keyword. For example, if the brick layer
contains some additional water, the input could look like this:
&MATL ID = 'WATER'
CONDUCTIVITY = 0.60
SPECIFIC_HEAT = 4.19
DENSITY = 1000. /
In this example, the first layer of material, Layer 1, is composed of a mixture of brick and water. This is
given by the MATL_ID array which specifies Component 1 of Layer 1 to be brick, and Component 2 of
Layer 1 to be water. The mass fraction of each is specified via MATL_MASS_FRACTION. In this case, brick
is 95 %, by mass, of Layer 1, and water is 5 %.
It is important to notice that the components of the solid mixtures are treated as pure substances with no
voids. The density of the mixture is
!−1
Yi
ρ= ∑ (11.5)
i ρi
where Yi are the material mass fractions and ρi are the material bulk densities defined on the MATL lines.
In the example above, the resulting density of the wall would be about 1553 kg/m3 . The fact that the wall
density is smaller than the density of pure brick may be confusing, but can be explained easily. If the wall
can contain water, the whole volume of the wall can not be pure brick. Instead there are voids (pores) that
are filled with water. If the water is taken away, there is only about 1476 kg/m3 of brick left. To have a
density of 1600 kg/m3 for a partially void wall, a higher density should be used for the pure brick.
&MATL ID = 'MARINITE'
EMISSIVITY = 0.8
DENSITY = 737.
SPECIFIC_HEAT_RAMP = 'c_ramp'
CONDUCTIVITY_RAMP = 'k_ramp' /
&RAMP ID='k_ramp', T= 24., F=0.13 /
&RAMP ID='k_ramp', T=149., F=0.12 /
&RAMP ID='k_ramp', T=538., F=0.12 /
2 The EMISSIVITY of a MATL component of a SURF takes precedence over the EMISSIVITY specified on the SURF
line. This is true even if no EMISSIVITY is explicitly specified on the MATL line. Its default value still takes precedence over
whatever might be specified on the SURF line.
89
&RAMP ID='c_ramp', T= 93., F=1.172 /
&RAMP ID='c_ramp', T=205., F=1.255 /
&RAMP ID='c_ramp', T=316., F=1.339 /
&RAMP ID='c_ramp', T=425., F=1.423 /
Notice that with temperature-dependent quantities, the RAMP parameter T means Temperature, and F is the
value of either the specific heat or conductivity. In this case, neither CONDUCTIVITY nor SPECIFIC_HEAT
is given on the MATL line, but rather the RAMP names.
The solid material can be given an ABSORPTION_COEFFICIENT (1/m) that allows the radiation to pen-
etrate and absorb into the solid. Correspondingly, the emission of the material is based on the internal tem-
peratures, not just the surface. Note that you can only apply materials with an ABSORPTION_COEFFICIENT
to planar surfaces, not cylinders or spheres.
90
Note that the parameters TMP_INNER and TMP_BACK are only meaningful for solids with specified
THICKNESS and material properties (via the MATL_ID keyword).
For example, take the SURF definition below and assume that the grid spacing is 10 cm. On the -x side
of the OBST, layer 1 will be MATERIAL A, layer 2 will be MATERIAL B, and layer 3 will be MATERIAL C.
On the +x side, the SURF will be applied in the same manner, layer 1 will be MATERIAL A, layer 2 will be
MATERIAL B, and layer 3 will be MATERIAL C. This means that both sides of the OBST will compute heat
transfer assuming MATERIAL A is the first layer.
Therefore, if you apply the attribute BACKING=’EXPOSED’ on a SURF line that is applied to a zero
or one-cell thick obstruction, you should be careful of how you specify multiple layers. If the layering is
symmetric, the same SURF line can be applied to both sides. However, if the layering is not symmetric, you
must create two separate SURF lines and apply one to each side. For example, a hollow box column that is
made of steel and covered on the outside by a layer of insulation material and a layer of plastic on top of the
insulation material, would have to be described with two SURF lines like the following:
91
If, in addition, the insulation material and plastic are combustible, and their burning properties are specified
on the appropriate MATL lines, then you need to indicate which side of the column would generate the fuel
vapor. In this case, the steel is impermeable; thus you should add the parameter LAYER_DIVIDE=2.0 to
the SURF line labeled ’COLUMN EXTERIOR’ to indicate that fuel vapors formed by the heating of the two
first layers (’PLASTIC’ and ’INSULATION’) are to be driven out of that surface. You need to also specify
LAYER_DIVIDE=0.0 on the SURF line labeled ’COLUMN INTERIOR’ to indicate that no fuel vapors are
to driven into the interior of the column. In fact, values from 0.0 to 1.0 would work equally because the
material ’STEEL’ would not generate any fuel vapors.
By default, LAYER_DIVIDE is 0.5 times the number of layers for surfaces with EXPOSED backing, and
equal to the number of layers for other surfaces.
&SURF ID = 'Cable'
THICKNESS = 0.002,0.008
MATL_ID(1,1) = 'PLASTIC'
MATL_ID(2,1) = 'METAL'
GEOMETRY = 'CYLINDRICAL'
LENGTH = 0.1
INTERNAL_HEAT_SOURCE = 0.,300. /
can be used to model a power cable that is 5 m long, cylindrical in cross section, 2 cm in diameter. The
heat transfer calculation is still one-dimensional; that is, it is assumed that there is a uniform heat flux
all about the object. This can be somewhat confusing because the cable is represented as an obstruction of
square cross section, with a separate heat transfer calculation performed at each face, and no communication
among the four faces. Obviously, this is not an ideal way to do solid phase heat transfer, but it does provide a
reasonable bounding surface temperature for the gas phase calculation. More detailed assessment of a cable
would require a two or three-dimensional heat conduction calculation, which is not included in FDS. Use
GEOMETRY=’SPHERICAL’ to describe a spherical object.
92
11.3.8 Special Topic: Solid Phase Numerical Gridding Issues
To compute the temperature and reactions inside the solids, FDS solves the one-dimensional heat transfer
equation numerically. The size of the mesh cells on the surface of the solid is automatically chosen using a
rule that makes the cell size smaller than the square root of the material diffusivity (k/ρc). By default, the
solid mesh cells increase towards the middle of the material layer and are smallest on the layer boundaries.
The default parameters are usually appropriate for simple heat transfer calculations but sometimes the
use of pyrolysis reactions makes the temperatures and burning rate fluctuate. Adjustments may also be
needed in case of extremely transient heat transfer situations. The numerical accuracy and stability of the
solid phase solution may be improved by one of the following methods:
Make the mesh density more uniform inside the material by setting STRETCH_FACTOR(NL)=1. on the
SURF line. This will generate a perfectly uniform mesh for layer number NL. (This happens automati-
cally if the layer contains one or more reacting materials.) Values between 1 and 2 give different levels
of stretching. Note that STRETCH_FACTOR needs to be specified for all the layers.
Make the mesh cells smaller by setting CELL_SIZE_FACTOR less than 1.0. For example, a value of 0.5
makes the mesh cells half the size. The scaling always applies to all layers.
Improve the time resolution by setting WALL_INCREMENT=1 on the TIME line. This forces the solid phase
temperatures to be solved on every time step.
Limit the number of cells in a layer by setting N_LAYER_CELLS_MAX. This array input has a default of
1000.
If all the material components of the surface are reacting, and the pyrolysis reactions have no solid residue,
the thickness of the surface is going to shrink when the surface reacts. Each of the shrinking layers will
vanish from the computation when its thickness gets smaller than a prescribed limiting value. This value
can be set on a SURF line via MINIMUM_LAYER_THICKNESS keyword, defaulting to 1 × 10−6 m. When all
the material of a shrinking surface is consumed but BURN_AWAY is not prescribed, the surface temperature
is set to TMP_BACK, convective heat flux to zero and burning rate to zero.
See Section 11.7 for ways to check and improve the accuracy of the solid phase calculation.
93
The thermal boundary conditions for the solid are taken from a SURF associated with the faces of the
OBST. The usual rules for associating SURF_ID with an OBST apply: if only one SURF_ID is given, it applies
to all six faces of the OBST, if different thermal conditions apply to different faces SURF_IDS or SURF_ID6
must be used.
The exception to this rule is that an EXTERNAL_FLUX may be applied together with HT3D=.TRUE. on SURF.
The user should make sure that the SURF does not also have an associated MATL_ID, which implements the
1D heat conduction model.
You can also use INTERNAL_HEAT_SOURCE in kW/m3 on the OBST line as shown in the example below.
In this case, the heat source is applied to each cell of the OBST.
Internal Radiation
The parameters affecting in-depth radiation absorption are the material’s refractive index and absorption
coefficient. They are specified on the MATL line:
94
11.4.1 A Gas Burner with a Specified Heat Release Rate
Solids and liquid fuels can be modeled by specifying their relevant properties via the MATL namelist group.
However, if you simply want to specify a fire of a given heat release rate (HRR), you need not specify any
material properties. A specified fire is basically modeled as the ejection of gaseous fuel from a solid surface
or vent. This is essentially a burner, with a specified Heat Release Rate Per Unit Area, HRRPUA, in units of
kW/m2 . For example
applies 500 kW/m2 to any surface with the attribute SURF_ID=’FIRE’. See the discussion of time-dependent
quantities in Chapter 14 to learn how to ramp the heat release rate up and down.
An alternative to HRRPUA with the exact same functionality is MLRPUA, except this parameter specifies
the Mass Loss Rate of fuel gas Per Unit Area in kg/(m2 · s). Do not specify both HRRPUA and MLRPUA on
the same SURF line. Neither of them can be used if the model contains multiple reactions.
create a rectangular area via the VENT line on which the fire starts at the point (1.5,4.0,0.0) and spreads out-
wards at a rate of 0.03 m/s. Each surface cell burns for 30 s as the fire spreads outward, creating a widening
ring of fire. Note that the RAMP_Q is used to turn the burning on and off to simulate the consumption of fuel
as the fire spreads radially. It should not be used to mimic a t-squared fire growth rate – the whole point of
the exercise is to mimic this curve in a more natural way. Eventually, the fire goes out as the ring grows past
the boundary of the rectangle. Some trial and error is probably required to find the SPREAD_RATE that leads
to a desired time history of the heat release rate.
If you desire that the fire spread over an area that is not confined to a flat plane, specify XYZ and
SPREAD_RATE on the SURF line directly and then apply that SURF line to the obstructions or particles over
which you want the fire to spread. This technique can be useful for simulating the spread of fire through
a cluttered space when the detailed properties of the materials are unknown, or when the uncertainties
associated with modeling the pyrolysis of the solid fuels directly are too great.
If the starting time of the simulation, T_BEGIN, is not zero, be aware that the default start time of the
radially spreading fire is T_BEGIN, not zero. This is also true of TAU_Q, but it is not true of RAMP_Q. Because
this might be confusing, if you start the calculation at a time other than zero, do a quick test to ensure that
the ramps or fire spread behave as expected.
95
11.4.3 Solid Fuels that Burn at a Specified Rate
Real objects, like furnishings, office equipment, and so on, are often difficult to describe via the SURF and
MATL parameters. Sometimes the only information about a given object is its bulk thermal properties, its
“ignition” temperature, and its subsequent burning rate as a function of time from ignition. For this situation,
add lines similar to the following:
&MATL ID = 'stuff'
CONDUCTIVITY = 0.1
SPECIFIC_HEAT = 1.0
DENSITY = 900.0 /
An object with surface properties defined by ’my surface’ shall burn at a rate of 1000 kW/m2 after a
linear ramp-up of 10 s following its “ignition” when its surface temperature reaches 500 ◦ C. Burning shall
continue for 5 min, and then ramp-down in 10 s. Note that the time T in the RAMP means time from ignition,
not the time from the beginning of the simulation. Note also that now the “ignition temperature” is a surface
property, not material property.
After the surface has ignited, the heat transfer into the solid is still calculated, but there is no coupling
between the burning rate and the surface temperature. As a result, the surface temperature may increase too
much. To account for the energy loss due to the vaporization of the solid fuel, HEAT_OF_VAPORIZATION
can be specified for the surface. For example, when using the lines below, the net heat flux at the material
surface is reduced by a factor 1000 kJ/kg times the instantaneous burning rate.
Finally, if you desire that the burning stop if the surface temperature drops below a specified value, set
EXTINCTION_TEMPERATURE on the SURF line. This value should be less than or equal to the
IGNITION_TEMPERATURE.
The parameters HRRPUA, IGNITION_TEMPERATURE, EXTINCTION_TEMPERATURE, and
HEAT_OF_VAPORIZATION are all telling FDS that you want to control the burning rate yourself, but you
still want to simulate the heating up and “ignition” of the fuel. When these parameters appear on the SURF
line, they are acting in concert. If HRRPUA appears alone, the surface will begin burning at the start of the
simulation, like a piloted burner. The addition of an IGNITION_TEMPERATURE delays burning until your
96
specified temperature is reached. The addition of HEAT_OF_VAPORIZATION tells FDS to account for the
energy used to vaporize the fuel. For any of these options, if a MATL line is invoked by a SURF line con-
taining a specified HRRPUA, then that MATL ought to have only thermal properties. The MATL line should
have no reaction parameters, product yields, and so on, like those described in the previous sections. By
specifying HRRPUA, you are controlling the burning rate rather than letting the material pyrolyze based on
the conditions of the surrounding environment. Also note that this simple model assumes that the solid acts
like a typical thermoplastic material, i.e. it pyrolyzes near the surface leaving relatively little char.
97
In the example below, the pyrolysis of wood is included within a simulation that uses a finite-rate
reaction instead of the default mixing-controlled model. Notice in this case that all of the gas species
(except for the background nitrogen) are explicitly defined, and as a result, FDS needs to be told explicitly
what gaseous species are produced by the solid phase reactions. In this case, 82 % of the mass of wood is
converted to gaseous ’PYROLYZATE’ and 18 % is converted to solid ’CHAR’.
&MATL ID = 'WOOD'
EMISSIVITY = 0.9
CONDUCTIVITY = 0.2
SPECIFIC_HEAT = 1.3
DENSITY = 570.
N_REACTIONS = 1
A(1) = 1.89E10
E(1) = 1.51E5
N_S(1) = 1.0
MATL_ID(1,1) = 'CHAR'
NU_MATL(1,1) = 0.18
SPEC_ID(1:4,1) = 'OXYGEN','WATER VAPOR','CARBON DIOXIDE','PYROLYZATE'
NU_SPEC(1:4,1) = 0.82,0,0,0
HEAT_OF_REACTION(1) = 430.
HEAT_OF_COMBUSTION(4,1) = 14500. /
Note that the indices associated with the parameters are not needed in this case, but they are shown to em-
phasize that, in general, there can be multiple reactions with corresponding kinetic parameters and products.
where
Ei j ρs,i
n nO ,i j
ri j = Ai j Ys,is,i j exp − XO2 2 ; Ys,i = (11.7)
R Ts ρs (0)
The term, ri j , defines the rate of reaction at the temperature, Ts , of the ith material undergoing its jth reaction.
The second term on the right of the equation (11.6) represents the contributions of other materials producing
the ith material as a residue with a yield of νs,i0 j . This term is denoted by NU_MATL(:,j) on the i0 -th MATL
line. ρs,i is the density of the ith material component of the layer, defined as the mass of the ith material
component divided by the volume of the layer. ρs (0) is the initial density of the layer. Thus, Ys,i = ρs,i /ρs (0)
is a quantity that increases if the ith material component is produced as a residue of some other reaction, or
decreases if the ith component decomposes. If the layer is composed of only one material, then ρs,i /ρs (0) is
initially 1. ns,i j is the reaction order and prescribed under the name N_S(j), and is 1 by default. If the value
of ns is not known, it is a good starting point to assume it is 1.
The pre-exponential factor, Ai j , is prescribed under the name A(j) on the MATL line of the ith material,
with units of s−1 . Ei j , the activation energy, is prescribed via E(j) in units of J/mol. Remember that 1 kcal
98
is 4,184 J, and be careful with factors of 1000. For a given reaction, specify both A and E, or neither. Do
not specify only one of these two parameters. Typically, these parameters only have meaning when both are
derived from a common set of experiments, like TGA (thermogravimetric analysis).
The fourth term of the reaction rate equation (11.7) can be used to simulate oxidation reactions. If the
heterogeneous reaction order nO2 ,i j is greater than zero, the reaction rate is affected by the local oxygen
volume fraction, XO2 . It is calculated from the gas phase (first grid cell) oxygen volume fraction XO2 ,g by
assuming simultaneous diffusion and consumption so that the concentration profile is in equilibrium, and
the concentration at depth x is given by
where Lg is the gas diffusion length scale. nO2 ,i j is prescribed under the name N_O2(j) on the MATL line of
the ith material. It is zero by default. Lg is prescribed under the name GAS_DIFFUSION_DEPTH(j), and it
is 0.001 m by default.
where Tp,i and rp,i /Ys,i (0) are the reference temperature and rate, respectively. The REFERENCE_RATE is the
reaction rate, in units of s−1 , at the given REFERENCE_TEMPERATURE divided by the mass fraction, Ys,i (0),
of material in the original sample undergoing the reaction. For a single component, single reaction material,
Ys,1 (0) = 1. The HEATING_RATE (Ṫ ) is the rate at which the temperature of the TGA (or equivalent) test
apparatus was increased. It is input into FDS in units of K/min (in the formula, it is expressed in K/s). Its
default value is 5 K/min. In Fig. 11.1, the area under the green curve (Reaction Rate) is equal to the heating
99
FDS6.7.1-0-g14cc738-master
dYs
1
= −AYs exp(−E/RTs ) Ys (0) = 1
2
10 3
dt
0.8 1.6
)
Mass Fraction
-1
0.6 1.2 Tp = 300 ◦ C
Reaction Rate (s
0.4 0.8 rp = 0.002 s−1
0.2 0.4
Ṫ = 5 K/min
νs = 0
0 0
0 100 200 300 400
Temperature ( °C)
Figure 11.1: The blue curve represents the normalized mass, Ys = ρs /ρs (0), of a solid material undergoing
heating at a rate of 5 K/min. The green curve represents the reaction rate, − dYs / dt. The ordinary differential
equation that describes the transformation is shown at right. Note that the parameters Tp , rp , and νs represent
the “reference” temperature, reaction rate, and residue yield of the single reaction. From these parameters,
values of A and E can be estimated using the formulae in (11.9). The full set of parameters for this case are
listed in pyrolysis_1.fds.
rp,i 2 Ṫ
= (1 − νs,i ) (11.10)
Ys,i (0) ∆T
3 The term “reference temperature” is used simply to maintain backward compatibility with earlier versions of FDS.
4 These formulas have been derived from an analysis that considers a first-order reaction. When using the proposed method, do
not specify non-unity value for the reaction order N_S on the MATL line.
100
Note that the indices have been added to the reaction parameters to emphasize the fact that these param-
eters are stored in arrays of length equal to N_REACTIONS. If there is only one reaction, you need not
include the (1), but it is a good habit to get into. Note also that if the default combustion model is
used, you can denote that the reaction produces fuel gas using the appropriate SPEC_ID. Note also that
the HEAT_OF_COMBUSTION is the energy released per unit mass of fuel gas that mixes with oxygen and
combusts. This has nothing to do with the pyrolysis process, so why is it specified here? The answer is
that when using the default combustion model in FDS there is only one gas phase reaction of fuel and
oxygen, but there can be dozens of different materials and dozens of solid phase reactions. To ensure that
the fuel vapors from different materials combust to produce the proper amount of energy, it is very impor-
tant to specify a HEAT_OF_COMBUSTION for each material. That way, the mass loss rate of fuel gases is
automatically adjusted so that the effective mass loss rate multiplied by the single, global, gas phase heat
of combustion produces the expected heat release rate. This adjustment uses the value of HOC_COMPLETE,
see Section 16.1.4, on the REAC line. If, for example, the HOC_COMPLETE specified on the REAC line is
twice that specified on the MATL line, the mass of contained within wall cell will be decremented by that
determined by the pyrolysis model, but the mass added to gas phase would be reduced by 50 %. A differ-
ent value of heat of combustion can be specified for each species, i, in each reaction, j, via the parameter
HEAT_OF_COMBUSTION(i,j).
&MATL ID = 'FOAM'
SPECIFIC_HEAT = 1.0
CONDUCTIVITY = 0.05
DENSITY = 40.0
N_REACTIONS = 1
SPEC_ID = 'FUEL'
NU_SPEC = 1.
REFERENCE_TEMPERATURE = 350.
HEAT_OF_REACTION = 1500.
HEAT_OF_COMBUSTION = 30000. /
Note that these properties are completely made up. Both the fabric and the foam decompose into fuel gases
via single-step reactions. The fuel gases from each have different composition and heats of combustion.
FDS automatically adjusts the mass loss rate of each so that the “effective” fuel gas is that which is specified
on the REAC line. Figure 11.2 shows the fire after 10 min. Only the reaction zone of the fire is shown; the
smoke is hidden so that you can see the fire progressing along the couch.
• Non-charring materials will shrink as material is removed from the condensed phase to the gas phase.
101
Figure 11.2: Output of couch test case showing fire on the couch at 10 min.
• Porous materials like foams would shrink when the material melts and forms a non-porous layer.
• Some charring materials swell, i.e., get thicker, when a porous char layer is formed.
• Intumescent fire protection materials would swell significantly, creating an insulating layer.
In FDS, the layer thickness is updated according to the ratio of the instantaneous material density and the
density of the material in its pure form, i.e., the DENSITY on the MATL line. In cases involving several
material components, the amount of swelling and shrinking is determined by the maximum and sum of
these ratios, respectively. In mathematical terms, this means that in each time step the size of each condensed
phase cell is changed according to the ratio δ
For example, if the original material with a DENSITY of 500 kg/m3 is completely converted into a residue
with a DENSITY of 1000 kg/m3 , the thickness of the material layer will be half of the original.
You can prevent shrinking by setting ALLOW_SHRINKING to .FALSE. on the MATL line. You can pre-
vent swelling by specifying ALLOW_SWELLING to .FALSE. on the MATL line. By default, these flags are
102
true. Shrinking/swelling does not take place if any of the materials with non-zero density has the corre-
sponding flag set to false.
dYs,1
1 2 = −A1,1 Ys,1 exp(−E1,1 /RTs ) Ys,1 (0) = 0.1
dt
10 3
dYs,2
0.8 1.6
= −A2,1 Ys,2 exp(−E2,1 /RTs ) Ys,2 (0) = 0.9
dt
)
Mass Fraction
-1
dt dt
0.4 0.8
0.2 0.4
Tp,1,1 = 100 + 273 K Tp,2,1 = 300 + 273 K
−1
rp,1,1 = 0.0016 s rp,2,1 = 0.0012 s−1
0 0
0 100 200 300 400 νs,1,1 = 0 νs,2,1 = 0.2
Temperature ( °C)
Ṫ = 5 K/min
Figure 11.3: The blue curve represents the combined mass fraction, ∑ Ys,i , and the green curve the net reac-
tion rate, − d/dt(∑ Ys,i ), for a material that contains 10 % water (by mass) that evaporates at a temperature
of 100 ◦ C, and 90 % solid material that pyrolyzes at 300 ◦ C, leaving a 20 % (by mass) residue behind. Note
that the numbered subscripts refer to the material component and the reaction, respectively. In this case,
there are three material components, and the first two each undergo a single reaction. The third material
component is formed as a residue of the reaction of the second material. The system of ordinary differential
equations that governs the transformation of the materials is shown at right.
103
11.5.6 Special Topic: The “Threshold” Temperature
In FDS, the reaction rate expression in Eq. (11.7) includes an optional term:
Ei j
n n
ri j = Ai j Ys,is,i j exp − max 0, Sthr,i j (Ts − Tthr,i j ) t,i j (11.12)
R Ts
Tthr,i j is an optional “threshold” temperature that allows the definition of non-Arrhenius pyrolysis functions
and ignition criteria, and is prescribed by THRESHOLD_TEMPERATURE(j). Sthr,i j is the “threshold direction”
that allows the triggering of reaction when temperature gets “above” Tthr,i j (Sthr,i j = +1) or “below” Tthr,i j
(Sthr,i j = −1). nt, j is prescribed under the name N_T(j) and Sthr,i j under THRESHOLD_SIGN. By default,
Tthr,i j is -273.15 degrees Celsius, nt, j is zero and Sthr,i j = +1; thus, the last term of Equation 11.12 does not
affect the pyrolysis rate. The term can be used to describe a threshold temperature for the pyrolysis reaction
by setting Tthr,i j and nt, j = 0. Then the term is equal to 0 at temperatures below Tthr,i j and 1 at temperatures
above.
The threshold temperature can be used to simulate simple phase change reactions, such as melting and
freezing. To make the reaction rate controlled by available energy, i.e., not kinetics, another optional term
should be included in the reaction rate formula
1 n
ri j = Ai j max 0, Sthr,i j (Ts − Tthr,i j ) t,i j (11.13)
Hr,i j ∆t
This form of reaction rate can be implemented by setting a logical parameter PCR(j)=.TRUE.. The pre-
exponental factor Ai j should then be given a value that is close or slightly smaller than the specific heat
(kJ/(kg · K)) of the material mixture at phase change temperature.
The input file water_ice_water.fds demonstrates the use of the “threshold” temperature. A small
amount of liquid water at 10 ◦ C is cooled down to -10 ◦ C in 10 min, and then heated up again to 10 ◦ C. The
concentration of the liquid water as a function of temperature is plotted in Fig. 11.4. The cooling phase is
indicated by the blue line and heating phase by the red line.
FDS6.7.1-0-g14cc738-master
1000
)
Cooling (freezing)
3
Heating (melting)
800
Liquid concentration (kg/m
600
400
200
0
-10 -5 0 5 10
Temperature ( °C)
104
&REAC FUEL = 'ETHANOL'
CO_YIELD = 0.001
SOOT_YIELD = 0.008 /
The inclusion of BOILING_TEMPERATURE on the MATL line tells FDS to use its liquid pyrolysis model.
It also automatically sets N_REACTIONS=1, that is, the only “reaction” is the phase change from liquid
to gaseous fuel. Thus, HEAT_OF_REACTION in this case is the latent heat of vaporization. The thermal
conductivity, density and specific heat are used to compute the loss of heat into the liquid via conduction
using the same one-dimensional heat transfer equation that is used for solids. Obviously, the convection of
the liquid is important, but is not considered in the model. The ABSORPTION_COEFFICIENT denotes the
absorption in depth of thermal radiation into the liquid. Liquids do not just absorb radiation at the surface,
but rather over a thin layer near the surface. Its effect on the burning rate can be significant.
In this example, ’ETHANOL’ is a known species; that is, it is listed in Table 15.1. For this reason, you
only need to specify its CO and soot yield. If it is not known, then you must furnish additional information.
Section 15.1.3 contains details, but in brief, only the molecular weight of the gas species is of relevance for
the liquid pool evaporation model.
ρs δs
tb = (11.14)
ṁ00
However, each type of pyrolysis model handles fuel burnout in a slightly different way. These differences
will be highlighted in the individual sections below.
ρs δs ∆H
tb = (11.15)
q̇00f
105
The burnout time is not calculated and applied automatically because there are instances where the underly-
ing solid is not considered fuel; that is, the burning rate and duration are not determined by the composition
of the solid surface.
• Use BURN_AWAY parameter cautiously. If an object has the potential of burning away, a significant
amount of extra memory has to be set aside to store additional surface information as the mesh cells
disappear.
• If BURN_AWAY is prescribed, the SURF should be applied to the entire object, not just a face of the object
because it is unclear how to handle edges of solid obstructions that have different SURF_IDs on different
faces.
• If the volume of the obstruction changes because it has to conform to the uniform mesh, FDS does not
adjust the burning rate to account for this as it does with various quantities associated with areas, like
HRRPUA.
• A parameter called BULK_DENSITY (kg/m3 ) can be applied to the OBST rather than the SURF line.
This parameter is used to determine the combustible mass of the solid object. The calculation uses
the user-specified object dimensions, not those of the mesh-adjusted object. This parameter over-
rides all other parameters from which a combustible mass would be calculated. Note that without a
BULK_DENSITY specified, the total amount of mass burned will depend upon the grid resolution. The
use of the BULK_DENSITY parameter ensures a specific fuel mass per unit volume that is independent of
the grid resolution. Note that in the event that the solid phase reaction involves the production of solid
residue (like char or ash), the BULK_DENSITY refers to the mass of the solid that is converted to gas
upon reaction.
• The mass of the object is based on the densities of all material components (MATL), but it is only con-
sumed by mass fluxes of the known species. If the sum of the gaseous yields is less than one, it will take
longer to consume the mass.
Simple examples demonstrating how solid fuels can be forced to disappear from the domain are labeled
Fires/box_burn_away. These are examples of a solid block of solid material that is pyrolyzed until
it is completely consumed. The heat flux is generated by placing hot surfaces around the box. There
106
is no combustion. In the first example, box_burn_away1, the released gas is (’METHANE’), and in the
second example, box_burn_away2, it is an additional species called ’GAS’. In the third and fourth ex-
amples box_burn_away3 and box_burn_away4, the released gas is fuel but the pyrolysis rate is spec-
ified. In the fourth case, the heat of combustion for the foam material is set different from that of the
gas, with a ratio of 0.75. In the fifth example, box_burn_away2, the first example is repeated using with
N_SIMPLE_CHEMSITRY_REACTIONS=2. The results should match the first case as the creation of fuel
should be based upon the total heat of combustion for ’METHANE’ and not the heat of combustion for the
first reaction. The sixth case, box_burn_away6, has two fuels with the second fuel defined with half the
heat of combustion of the second. On the MATL input the two fuels are given equal NU and are assigned
the same HEAT_OF_COMBUSTION. As a result, the second fuel will have twice as much mass in the gas
phase. The properties of the solid material were chosen simply to assure a quick calculation. The objective
of the test is to check that the released mass and the integrated burning rate are consistent with the material
properties of the block. The block is 0.4 m on a side, with a density of 20 kg/m3 . The integrated densities
of the pyrolysis product gases (written to box_burn_away#_devc.csv), as well as the integrated burning
rate (written to box_burn_away#_hrr.csv) at the end of the 30 s calculation ought to be:
(0.4)3 m3 × 20 kg/m3 = 1.28 kg (11.16)
except for the fourth case, where the amount of released gas is affected by the ratio of heats of combustion
0.75 × 1.28 kg = 0.96 kg (11.17)
The same case is tested in two dimensions (box_burn_away_2D and box_burn_away_2D_residue). In
the latter case, only half of the mass is converted to fuel, leaving behind a residue that is 50 % of the original
mass. The box is forced to burn away by setting the BULK_DENSITY to 10 kg/m3 . This is the combustible
mass. These two cases exhibit a fictitious increase in solid mass when new unburned surfaces are exposed as
entire mesh cells disappear. The increased mass is just an artifact of reporting the residual solid mass as the
product of surface density and surface area. Both the final solid mass and the gaseous degradation products
should match the expected values at the end of the simulation.
Since the 3D pyrolysis model does not have an internal “thickness” that shrinks from the bottom up, it is
usually necessary to add BURN_AWAY=T.
By default, like the 1D model, the current 3D pyrolysis model uses a very simple form of mass transfer—
any mass that is pyrolyzed is instantly transported to a surface cell to be injected into the gas phase. Unless
otherwise specified, the 3D solver sends the pyrolyzate to the nearest wall cell (PYRO3D_IOR=0). You can
change this behavior by setting PYRO3D_IOR on the OBST line. The pyrolyzate is ejected via the nearest
wall cell in the direction of the orientation index. For example, to send the gas to nearest cell in the vertical
direction use something like this,
107
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1.5 1.5
Pyrolyzed Mass (box_burn_away1) Pyrolyzed Mass (box_burn_away2)
1 1
Mass (kg)
Mass (kg)
Ideal Ideal
FDS (fuel) FDS (GAS)
0.5 0.5
0 0
0 5 10 15 20 25 30 0 5 10 15 20 25 30
Time (s) Time (s)
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1.5 1.5
Pyrolyzed Mass (box_burn_away3) Pyrolyzed Mass (box_burn_away4)
1 1
Mass (kg)
Mass (kg)
Ideal
FDS (fuel)
0.5 0.5
Ideal
FDS (fuel)
0 0
0 5 10 15 20 25 30 0 5 10 15 20 25 30
Time (s) Time (s)
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1.5 1.5
Pyrolyzed Mass (box_burn_away5) Pyrolyzed Mass (box_burn_away6)
1 1
Mass (kg)
Mass (kg)
0.5 0.5
Ideal Fuel 1
Ideal Fuel 2
Ideal FDS (fuel 1)
FDS (fuel) FDS (fuel 2)
0 0
0 5 10 15 20 25 30 0 5 10 15 20 25 30
Time (s) Time (s)
108
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1.5 1.5
Pyrolyzed Mass (box_burn_away_2D) Pyrolyzed Mass (box_burn_away_2D_residue)
1 1
Mass (kg)
Mass (kg)
Ideal (fuel) Ideal (fuel)
Ideal (solid) Ideal (solid)
FDS (fuel) FDS (fuel)
FDS(solid) FDS(solid)
0.5 0.5
0 0
0 5 10 15 20 25 30 0 5 10 15 20 25 30
Time (s) Time (s)
As an alternative to direct mass ejection, a diffusion approximation may be used to transport gas from
the cell where it was generated to the surface of the solid. To invoke this model, use
Useful Outputs
With the 3D pyrolysis model you no longer have to “view” output through DEVCs only. An SLCF that passes
through the OBST may be viewed in Smokeview (use Show/Hide > Geometry > Obstacles > Hidden or
Outline Only to view slices inside obstructions [toggle with ALT + O]). The solid cell temperatures can be
viewed using the gas phase output
With 3D pyrolysis it is also useful to view the solid density, both in total and for individual components,
and the solid-volume-to-cell-volume ratio:
To output the volumetric heat source term [kW/m3 ] in the 3D heat transfer equation use
When using 3D mass transport, view the fuel gas density inside the solid using
109
All the above also work as DEVC output, which does not require CELL_CENTERED=T.
110
11.6 Thermal Degradation Model for Vegetation
FDS contains a separate pyrolysis model that was developed specifically for vegetation [25, 26, 27]. The
solid-phase thermal degradation process consists of three reactions:
1. Endothermic drying
M 1
Wet Vegetation → H2 O + Dry Vegetation (11.18)
1+M 1+M
2. Endothermic pyrolysis
Char + νO2 ,char O2 → (1 + νO2 ,char − χash ) CO2 + χash Ash (11.20)
M is the vegetation moisture content determined on a dry weight basis. M is related to the vegetation mass
fraction of water, Yw , via the relation:
M
Yw = (11.21)
1+M
χchar is the mass fraction of dry vegetation that is converted to char during pyrolysis; νO2 ,char is the stoi-
chiometric coefficient of oxygen; and χash is the mass fraction of char that is converted to ash during char
oxidation.
In the equations to follow, the subscript b denotes bulk quantities that are resolved on the computational
grid. For example, the mass of dry vegetation per unit volume is denoted ρb,dry (kg/m3 ). In the notation of
Mell et al. [28], ρb,dry = hm000
dry iVb where the angled brackets denote the explicit LES filtering over the grid
cell volume Vb . The initial total mass of vegetation per unit volume is ρb,0 .
The Arrhenius rate equations for drying, pyrolysis, and char oxidation are:
ρb,H2 O EH2 O
− 12
rH2 O = AH2 O Tv exp − (11.22)
ρb,0 R Tv
ρb,dry Epyr
rpyr = Apyr exp − (11.23)
ρb,0 R Tv
0 √
ρb,char Echar ρg YO2 σv βv (1 + βchar Rev )
rchar = Achar exp − (11.24)
ρb,0 R Tv νO2 ,char ρb,0
where Tv is the temperature of the vegetation. The default values of the kinetic constants are given in
Table 11.1. The Reynolds number is Rev = ρg Dv /µ with Dv = 4/σv for a cylinder, where σv is the surface
area to volume ratio of the cylinder. βv is the packing ratio; that is, the ratio of the vegetation volume to the
overall volume containing the vegetation. The term containing Rev is included to account for the oxygen
blowing effects on char oxidation and the constant βchar is equal to 0.2 by default, which is the value used
by Porterie et al. [25].
The equation governing the temperature of a thermally thin fuel element is
dTv
ρb cp,v = −ρb,0 ∆hvap rH2 O + ∆hpyr rpyr + αchar ∆hchar rchar + h∇ · q00c,b iVb + h∇ · q00r,b iVb (11.25)
dt
111
Table 11.1: Default vegetation kinetic constants (from Porterie et al. [25])
The first three terms on the right-hand-side are, respectively, endothermic drying, endothermic pyrolysis,
exothermic char oxidation. The non-dimensional weighting parameter, αchar , is the fraction of the heat
generated by heterogeneous char oxidation that is deposited in the fuel element and (1-αchar ) in the gas
phase. By default, αchar = 0.5, which has been used by others (e.g., Porterie et al. [25]). The fourth and
fifth terms on the right-hand-side of Eq. (11.25) are the bulk contributions of convective and radiative heat
transfer, respectively [28]. The heats in Eq. (11.25) are ∆hvap = 2259 kJ/kg; ∆hpyr = 418 kJ/kg [29]; ∆hchar =
−32000 kJ/kg [30].
In the condensed phase model, the bulk density and specific heat have contributions from dry virgin
vegetative fuel, char, ash, and moisture:
where, initially, ρb,H2 O = Mdw ρb,dry . The specific heats (J kg−1 K−1 ) in the equations above are
cp,char = 420 + 2.09 Tv + 6.85 × 10−4 Tv2 (Park et al. 2010) (11.29)
d ρb
= −rH2 O − (1 − χchar ) rpyr − (1 − χash ) rchar (11.32)
dt ρb,0
The rate of change for the components of the vegetative mass during thermal degradation are:
d ρb,H2 O
= −rH2 O (11.33)
dt ρb,0
d ρb,dry
= −rdry (11.34)
dt ρb,0
112
d ρb,char
= −χchar rpyr − rchar (11.35)
dt ρb,0
Gaseous products created during the thermal degradation process are water vapor (during drying), fuel vapor
(during pyrolysis), and CO2 (during char oxidation). The source terms (kg m−3 s−1 ) for these species are,
respectively, ρb,0 rH2 O , (1 − χchar ) ρb,0 rpyr , and (1 + νO2 ,char − χash ) ρb,0 rchar . In addition, the char oxidation
process consumes oxygen in the gas phase at a rate of −νO2 ,char ρb,0 rchar .
Figure 11.7 includes sample input lines demonstrating how the vegetation model can be applied to
particles that represent pine needles that are 1 mm in diameter and 5 cm long. Note that each MATL line
contains the flag VEGETATION=.TRUE. to indicate that the special vegetation model is to be invoked. All
parameters described above must be explicitly specified in the input file—there are no hard-wired default
values.
113
&PART ID='pine needles', SURF_ID='vegetation', STATIC=.TRUE. /
&SURF ID = 'vegetation'
MATL_ID = 'WET VEGETATION'
THICKNESS = 0.0005
LENGTH = 0.05
GEOMETRY = 'CYLINDRICAL' /
&MATL ID = 'CHAR'
VEGETATION = .TRUE.
DENSITY = 134.
CONDUCTIVITY = 0.1
SPECIFIC_HEAT = 2.0
N_S = 0.
NU_O2 = 1.65
BETA_CHAR = 0.2
A = 430.
E = 74800.
NU_MATL = 0.5
MATL_ID = 'ASH'
NU_SPEC = 2.15
SPEC_ID = 'CARBON DIOXIDE'
HEAT_OF_REACTION= -32000. /
&MATL ID = 'ASH'
VEGETATION = .TRUE.
DENSITY = 67.
CONDUCTIVITY = 0.1
SPECIFIC_HEAT = 2.0 /
115
Compare your results to measurements made in a bench-scale device, like the cone calorimeter. Keep in
mind, however, that the calculation and the experiment are not necessarily perfectly matched. The cal-
culation is designed to eliminate uncertainties related to convection, combustion, and apparatus-specific
phenomena. Below is an FDS input file that demonstrates how you can test a candidate pyrolysis model
by running very short calculations. The simulation only involves the solid phase model. Essentially, the
gas phase calculation is shut off except for the imposition of a 50 kW/m2 “external” heat flux. The solid in
this example is a 8.5 mm thick slab of PMMA. For more details, see the FDS Validation Guide under the
heading “FAA Polymers.”
11.7.2 Simulating Bench-scale Measurements like the TGA, DSC, and MCC
There are a number of techniques to measure the thermo-physical properties of a solid material. Most of
these involve heating a very small sample at a relatively slow, linear rate. In this way, thermal conduction
is minimized and the sample can be considered thermally-thin. FDS has a special feature that mimics ther-
mogravimetric analysis (TGA), differential scanning calorimetry (DSC), and micro-combustion calorime-
try (MCC) measurements. To use it, set up your input file as you normally would. Then, add the flag
TGA_ANALYSIS=.TRUE. to the SURF line you want to analyze. You can only analyze one SURF line at
a time. Optionally, you can specify TGA_HEATING_RATE (K/min) and TGA_FINAL_TEMPERATURE (◦ C)
to indicate the linear heating rate and the final temperature of the sample. The default values are 5 K/min
and 800 ◦ C. The initial temperature is TMPA. Note that this feature is only appropriate for a SURF line that
describes a thermally-thick sample consisting of a single layer with multiple reacting components. For
example, the following SURF line describes a material that consists of three components:
116
&SURF ID = 'Cable Insulation'
TGA_ANALYSIS = .TRUE.
TGA_HEATING_RATE = 60.
THICKNESS = 0.005
MATL_ID(1,1) = 'Component A',
MATL_ID(1,2) = 'Component B',
MATL_ID(1,3) = 'Component C',
MATL_MASS_FRACTION(1,1:3) = 0.26,0.33,0.41 /
The two TGA entries will force FDS to perform a numerical version of the TGA, DSC and MCC measure-
ments. The THICKNESS and other boundary conditions on the SURF line will be ignored. After running the
analysis, which only takes a second or two, FDS will then shut down without running the actual simulation.
To run the simulation, either remove the TGA entries or set TGA_ANALYSIS to .FALSE.
The result of the TGA_ANALYSIS is a single comma-delimited file called CHID_tga.csv. The first and
second columns of the file consist of the time and sample temperature. The third column is the normalized
sample mass; that is, the sample mass divided by its initial mass. The following columns list the mass
fractions of the individual material components. The next column is the total mass loss rate, in units of s−1 ,
followed by the mass loss rates of the individual material components. The next column is the heat release
rate per unit mass of the sample in units of W/g, typical of an MCC measurement. The final column is the
heat absorbed by the sample normalized by its mass, also in units of W/g, typical of a DSC measurement.
Results for a typical analysis of wood are shown in Fig. 11.8. In this case, a sample of wood containing
about 10 % water by mass heats up and undergoes three reactions, including the evaporation of water. Note
that the TGA plots include both fuel and water vapor, while the MCC results only show fuel.
Details of the output quantities are discussed in Section 20.10.11. Further details on these measurement
techniques and how to interpret them are found in the FDS Verification Guide [4].
117
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1.2 1.2
TGA Results (tga_analysis) TGA Results (tga_analysis)
1 1
0.8 0.8
Component 1
Component 2
0.6 0.6 Residue
Water
0.4 0.4
0.2 0.2
0 0
0 100 200 300 400 500 600 0 100 200 300 400 500 600
Temperature ( °C) Temperature ( °C)
10 -3 FDS6.7.1-0-g14cc738-master 10 -3 FDS6.7.1-0-g14cc738-master
2 2
Component 1
Component 2
1 1 Residue
Water
0 0
-1 -1
0 100 200 300 400 500 600 0 100 200 300 400 500 600
Temperature ( °C) Temperature ( °C)
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
30 4
MCC Results (tga_analysis) DSC Results (tga_analysis)
25
Heat Release Rate (W/g)
3
Heating Rate (W/g)
20
15 2
10
1
5
0 0
0 100 200 300 400 500 600 0 100 200 300 400 500 600
Temperature ( °C) Temperature ( °C)
118
Chapter 12
Ventilation
This chapter explains how to model a ventilation system. There are two ways to do this. First, if you only
want to specify air flow rates into and out of compartments, read Section 12.1 for a description of simple
velocity boundary conditions. However, if you want to model the entire HVAC system, read Section 12.2.
create a VENT that supplies air at a velocity of 1.2 m/s through an area of nominally 0.16 m2 , depending
on the realignment of the VENT onto the FDS mesh. Regardless of the orientation of the plane x = 5,
the flow will be directed into the room because of the sign of VEL. In this example the VENT may not
be exactly 0.16 m2 in area because it may not align exactly with the computational mesh. If this is the
case then VOLUME_FLOW can be prescribed instead of VEL. The units are m3 /s. If the flow is entering the
computational domain, VOLUME_FLOW should be a negative number, the same convention as for VEL. Note
that a SURF with a VOLUME_FLOW prescribed can be invoked by either a VENT or an OBST, but be aware that
in the latter case, the resulting velocity on the face or faces of the obstruction will be given by the specified
VOLUME_FLOW divided by the area of that particular face. For example:
119
dictates that the forward x-facing surface of the obstruction is to have a velocity equal to 5 m3 /s divided by
the area of the face (as approximated within FDS) flowing into the computational domain.
Note that VEL and VOLUME_FLOW should not be specified on the same SURF line. The choice depends
on whether an exact velocity is desired at a given vent, or whether the given volume flow is desired.
Note also that if the VENT or OBST crosses mesh boundaries, the specified VOLUME_FLOW will be recom-
puted in each mesh so that the desired volume flow is achieved. This was not the case in FDS version 6.3
and earlier. The sample cases called volume_flow_1.fds and volume_flow_2.fds in the Flowfields
folder demonstrate that a VENT or an OBST can be divided among several meshes. In both cases, air is drawn
from a 1 m by 1 m by 1 m box at a rate of 0.01 m3 /s. These cases also ensure that the VENT or OBST need not
be aligned with the mesh to yield the desired flow rate. Figure 12.1 displays the volume flow drawn though
an OPEN boundary on an opposite face of the box with either a VENT (left) or OBST (right) with a specified
volume flow.
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
0.015 0.015
Flow Test (volume_flow_1) Flow Test (volume_flow_2)
Volume Flow (m 3 /s)
0.005 0.005
Expected Expected
FDS FDS
0 0
0 20 40 60 80 100 0 20 40 60 80 100
Time (s) Time (s)
Figure 12.1: Flow rate of air drawn through a unit cube via a VENT (left) and OBST (right) with specified
VOLUME_FLOW.
12.1.3 Heaters
You can create a simple heating vent by changing the temperature of the incoming air
The VENT with SURF_ID=’BLOWER’ would blow 50 ◦ C air at 1.2 m/s into the flow domain. Making VEL
positive would suck air out, in which case TMP_FRONT would not be necessary.
120
Note that if HRRPUA or solid phase reaction parameters are specified, no velocity should be prescribed.
The combustible gases are ejected at a velocity computed by FDS.
is a boundary condition for a louvered vent that pushes air into the space with a normal velocity of 2 m/s
and a tangential velocity of 3 m/s in the first of the two tangential directions. Note that the negative sign
of the normal component of velocity indicates that the fluid is injected into the computational domain.
The tangential velocity of 3 m/s indicates that the flow is in the positive y direction. Both the normal and
tangential velocity components are ramped up with either TAU_V or RAMP_V, as shown in Fig. 12.2.
FDS6.7.1-0-g14cc738-master
4
Velocity Components (tangential_velocity)
3
Velocity (m/s)
Exact (u)
1
Exact (v)
FDS (u)
FDS (v)
0
0 5 10 15 20
Time (s)
Figure 12.2: Normal and tangential velocity components at a louvered vent, compared to the ideal curve.
In cases of limited mesh resolution, it may not be possible to describe a louvered vent or slot diffuser
using VEL_T because there may not be enough mesh cells spanning the opening. In these cases, you might
consider simply specifying a flat plate obstruction in front of the VENT with an offset of one mesh cell. The
plate will simply redirect the air flow in all lateral directions.
If the louvered vent is part of an HVAC system, see 12.2.7 for details on how to specify the louver.
121
&SURF ID = 'sky', COLOR = 'INVISIBLE', VEL_GRAD=0., FREE_SLIP=.TRUE. /
&VENT MB='ZMAX', SURF_ID='sky' /
&SPEC ID='METHANE' /
&SURF ID='METHANE BURNER', SPEC_ID(1)='METHANE', MASS_FLUX(1)=0.025 /
&VENT XB=..., SURF_ID='METHANE BURNER' /
Here is example of how to specify a surface that blows methane with a velocity of 0.1 m/s:
&SPEC ID='METHANE' /
&SURF ID='METHANE BLOWER', MASS_FRACTION(1)=1.0, SPEC_ID(1)='METHANE', VEL=-0.1 /
&VENT XB=..., SURF_ID='METHANE BLOWER' /
Note that specifying a combination of VEL and MASS_FRACTION can lead to inaccurate results if the speci-
fied velocity is small because diffusion will dominate the mass transport. To obtain an accurate species mass
flux at a boundary, use MASS_FLUX.
Alternatively, add CONVERT_VOLUME_TO_MASS=.TRUE. for velocity boundaries (VEL, VOLUME_FLOW,
or MASS_FLUX_TOTAL), which converts volume flow to a mass flux based on the specified boundary com-
position (MASS_FRACTION) and temperature (TMP_FRONT):
p∞W Q̇
ṁ00α = ρZα u = Zα (12.1)
RT A
where ρ is the density, Zα is the mass fraction of α, u is the velocity normal to the surface, p∞ is the ambient
pressure, W is the mixture molecular weight, R is the ideal gas constant, T is the surface temperature, Q̇ is
the volume flow rate, and A is the area of the vent. Note that using CONVERT_VOLUME_TO_MASS=.TRUE.
converts the SURF into a mass flux boundary condition and so velocity profiles may not be applied.
122
(NO_SLIP=.TRUE. by default). For an LES (Large Eddy Simulation), a “log law” wall model is applied.
The “sand grain” surface roughness1 (in meters) is set by ROUGHNESS on SURF. See the FDS Technical
Reference Guide [3] for wall model details. To force a solid boundary to have a free-slip condition, set
FREE_SLIP=.TRUE.2 on the SURF line. In LES, to override the wall model and force a no-slip boundary
condition, set NO_SLIP=.TRUE. on the SURF line.
Note that the Reynolds stress is symmetric and only the lower triangular part needs to bep specified. The
RMS velocity fluctuation is isotropic (equivalent for each component). Thus, VEL_RMS ≡ 2k/3, where
k ≡ h 12 u0i u0i i is the turbulent kinetic energy per unit mass. Below is an example illustrating the equivalence
between the RMS velocity fluctuation and the diagonal components of the Reynolds stress. Note that if
VEL_RMS is specified, this is equivalent to
REYNOLDS_STRESS(1,1) = VEL_RMS**2
REYNOLDS_STRESS(2,2) = VEL_RMS**2
REYNOLDS_STRESS(3,3) = VEL_RMS**2
and all other components of REYNOLDS_STRESS are zero. If the fluctuations are not isotropic, then the
Reynolds stresses must be specified componentwise.
In Chapter 7 of Jarrin’s thesis [33], he introduces the Modified Synthetic Eddy Method in which the
eddy length scales are anisotropic. This allows more realistic characterization of streamwise vortices in a
turbulent boundary layer. To specify the length scales corresponding to the σi j values in Jarrin’s Eq. (7.1)
1 Note the sand grain roughness, s, is different than the aerodynamic roughness, z0 , used in atmospheric flows (see Sec. 13.1.4).
2 Thisparameter sets the wall stress to zero (removes viscous friction). It is not equivalent to the SAWTOOTH=.FALSE.
functionality from versions of FDS prior to Version 6.
3 SEM only applies to velocity boundary conditions and so may not be used for HVAC vents, which are strict mass flux bound-
aries.
123
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1 1
Prescribed mean
Prescribed rms
0.8 FDS mean 0.8
FDS rms
z (m)
Prescribed rms
FDS mean
0.4 0.4 FDS rms
0.2 0.2
0 0
0.4 0.6 0.8 1 1.2 0 0.2 0.4 0.6 0.8 1 1.2
u (m/s) u (m/s)
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1 1
Prescribed mean Prescribed mean
0.8 Prescribed rms 0.8 Prescribed rms
FDS mean FDS mean
FDS rms FDS rms
0.6 0.6
z (m)
z (m)
0.4 0.4
0.2 0.2
0 0
0 0.2 0.4 0.6 0.8 1 1.2 0 0.2 0.4 0.6 0.8 1 1.2
u (m/s) u (m/s)
Figure 12.3: Synthetic Eddy Method vent profiles: flat (upper left), parabolic (upper right), atmospheric
(lower left), and linear ramp (lower right).
use L_EDDY_IJ(3,3). Here is an example with random values for the eddy length scales and Reynolds
stress components:
124
&SURF ID='burner', HRRPUA=100., MASS_FLUX_VAR=0.1 /
It may be helpful to use the boundary file output quantity MASS FLUX WALL CELL to visualize the
variation. For example,
TYPE_ID is a character string that indicates the type of component that the namelist group is defining.
TYPE_ID can be DUCT, NODE, FAN, FILTER, AIRCOIL, or LEAK (see Section 12.3.2).
ID is a character string giving a name to the component. The name must be unique amongst all other
components of that type; however, the same name can be given to components of different types (i.e., a
duct and a node can have the same name but two ducts cannot).
A number of examples of simple HVAC systems are given in the HVAC folder of the sample cases and are
discussed in the FDS Verification Guide.
As described in the Technical Reference Manual, the HVAC pressure solution is not directly coupled to
the FDS pressure solution. Rather there is implicit coupling using the wall boundary condition for HVAC
vents. At times this can result in stability problems. There are two methods of attempting to resolve this.
The first method is the keyword HVAC_PRES_RELAX on the MISC line with a default value of 0.5. At
each time step FDS evaluates the average pressure in the FDS gas cells adjacent to nodes connecting the
125
FDS domain to the HVAC network. The node pressure at time step n+1 is taken as:
n+1 n
Pnode = PFDS (1 − HVAC_PRES_RELAX) + Pnode HVAC_PRES_RELAX (12.2)
Setting this parameter closer to 1 reduces the sensitivity of the HVAC solution to short, transient pressure
changes in the FDS domain; however, doing so will also result in the HVAC solution lagging for longer
duration pressure changes.
The second method is setting the keyword HVAC_LOCAL_PRESSURE on the MISC line. When set, this
will cause FDS to use the ZONE pressure at a vent plus the stagnation pressure of any flow normal to the vent
to determine the pressure boundary condition for a node connected to the FDS domain rather than the ZONE
pressure plus the the pressure derived from the local value of H. Note this means a sealed room must have
a ZONE assigned to it.
where:
AIRCOIL_ID is the ID of an aircoil located in the duct. The operation of the aircoil can be controlled by
either a device or a control function.
DAMPER is a logical parameter indicating the presence of a damper in the duct. The state of the damper is
controlled by either a device or a control function (see Section 12.2.2).
DIAMETER is the diameter of the duct in m. If only DIAMETER is specified, the AREA will be computed
assuming a round duct. Do not specify both DIAMETER and PERIMETER.
DEVC_ID is the ID of a DEVC for a damper, fan, or aircoil in the duct. An alternative is CTRL_ID.
FAN_ID is the ID of a fan located in the duct. Instead of specifying a FAN_ID, you could specify the
VOLUME_FLOW rate (m3 /s) through the duct. The operation of the fan can be controlled by either a
device or a control function.
LENGTH is the LENGTH of the duct in m. Note that LENGTH is not computed automatically as the difference
between the XYZ of the duct’s endpoints.
126
LOSS is a pair of real numbers giving the forward and reverse dimensionless "minor losses" loss coefficient
(Kminor ) in the duct. Minor losses are pressure losses through components such as tees, valves and bends.
However, you can use LOSS to represent wall friction losses if you want - in this case ensure you leave
ROUGHNESS unset so that the HVAC solver does not compute a friction factor. The forward direction is
defined as flow from the first node listed in NODE_ID to the second node listed in NODE_ID.
MASS_FLOW is a fixed mass flow rate (kg/s) through the duct. Only specify one of MASS_FLOW or VOLUME_FLOW.
You can change its value in time either using the characteristic time, TAU_VF, to define a tanh (TAU_VF>0)
or t2 ramp (TAU_VF<0); or you can specify a RAMP_ID. MASS_FLOW should only be specified for con-
ditions where the upstream node density will not change during the solution process.
N_CELLS Used when HVAC_MASS_TRANSPORT=.TRUE.. It defines the number of cells used in a dis-
cretized duct.
NODE_ID gives the IDs of the nodes on either end of the duct segment. Positive velocity in a duct is defined
as flow from the first node to second node.
PERIMETER is used along with AREA to specify a duct with non-circular cross-section. The DIAMETER will
be computed as the hydraulic diameter.
REVERSE is a logical parameter that when .TRUE. indicates that the specified FAN_ID blows from the
second node to the first. REVERSE has no effect on VOLUME_FLOW or MASS_FLOW as a duct input. If
VOLUME_FLOW or MASS_FLOW is specified for a duct and the reverse flow direction is needed, change
the sign of the input to negative.
ROUGHNESS is the absolute roughness in m of the duct that is used to compute the friction factor for the duct.
If ROUGHNESS is not set, the HVAC solver will not compute the friction factor and the wall friction will
be zero - if this is the case you may want to account for wall friction losses in LOSS. "Perfectly smooth"
ducts and pipes still have wall losses and therefore setting ROUGHNESS to zero will tell the HVAC solver
to compute the minimum friction factor (which is non-zero) - this is not the same as leaving ROUGHNESS
unset.
VOLUME_FLOW is a fixed flow rate (m3 /s) through the duct. Only specify one of MASS_FLOW or VOLUME_FLOW.
If you specify VOLUME_FLOW, you can change its value in time either using the characteristic time,
TAU_VF, to define a tanh (TAU_VF>0) or t2 ramp (TAU_VF<0); or you can specify a RAMP_ID. This
cannot be controlled by a device or control function; however, a constant volume flow FAN can be.
Note that only one of AIRCOIL_ID, DAMPER, or FAN_ID should be specified for a duct. Also note that if
one of these is specified, but no device or control function is provided, then the item will be assumed to be
on or open as appropriate.
To reduce the computational cost of the HVAC solver, a duct should be considered as any length of duct
that connects two items that must be defined as nodes (i.e., a connection to the FDS domain, a filter, or a
location where more than two ducts join). That is, a duct should be considered as any portion of the HVAC
system where flow can only be in one direction at given point in time (flow can reverse direction over time).
For example the top of Figure 12.4 shows a segment of an HVAC system where flow from a tee goes through
an expansion fitting, two elbows, an expansion fitting, and a straight length of duct before it terminates as a
connection to the FDS domain.
127
Figure 12.4: An example of simplifying a complex duct.
This could be input as each individual fitting or duct with its associated area and loss as shown in the
middle of the figure; however, this would result in five duct segments (one for each component) with six
node connections resulting in eleven parameters (five velocities and six pressures) which must be solved for.
This is not needed since whatever the flow rate is in any one segment of the duct, that same flow rate exists in
all other segments; thus, the velocities in any segment can be found by taking the area ratios, v1 /v2 = A2 /A1 .
Since flow losses are proportional to the square of the velocity, an equivalent duct can be constructed using
the total length of the duct, and a representative area (Aeff ) or diameter. The pressure losses associated with
all the segments of the duct can be collapsed to a single effective loss (Keff ) by summing all of the fitting
losses (Kminor ) through the duct as follows:
Aeff
Keff = ∑ (Kminor )i (12.3)
i Ai
where i is a fitting and Ai is the area associated with the fitting loss.
128
&HVAC TYPE_ID='DUCT',ID='EXHAUST 2',NODE_ID='TEE','EXHAUST 2',AREA=0.01,
LENGTH=1.0,LOSS=0,0,DAMPER=.TRUE.,DEVC_ID='TIMER'/
&DEVC QUANTITY='TIME',ID='TIMER',SETPOINT=10,INITIAL_STATE=.TRUE.,XYZ=0,0,0/
If you want the damper to start in the closed position and then open at a later time, the INITIAL_STATE
of the DEVC should not be set to .TRUE.. The following example shows a duct with a damper which starts
closed and then opens at 10 s. For further details see the HVAC_damper example case, which is documented
in the Verification Guide.
The second method is to specify a RAMP_LOSS for the duct. This approach multiplies the LOSS array
for the duct by the output of the RAMP. This allows for dampers that have leakage and/or dampers that have
a variable position other than fully open or fully closed. An example is shown below where the LOSS in the
duct changes from 1,1 at 10 s to 2000,2000 at 11 s.
where:
AMBIENT is a logical value. If .TRUE., then the node is connected to the ambient (i.e., it is equivalent to
the OPEN boundary condition on a SURF line).
DUCT_ID gives the IDs of the ducts connected to the node. Up to 10 ducts can be connected to a node.
FILTER_ID gives the ID a filter located at the node. A node with a filter can only have two connected
ducts.
LOSS is an n by n array of real numbers giving the dimensionless loss coefficients for the node. LOSS(I,J)
is the loss coefficient for flow from duct I to duct J expressed in terms of the downstream duct area (see
discussion in 12.2.1 on how to adjust losses for area changes). For a terminal node (e.g., a node
connected to the ambient or to a VENT) the LOSS is entered as a pair of numbers representing loss
coefficient for flow entering the HVAC system and for flow exiting the HVAC system.
VENT_ID is the name of the VENT where the node connects to the FDS computational domain. No two
VENTs should be defined with the same VENT_ID.
129
XYZ is a triplet of real numbers giving the coordinates of the node. This location is used to compute
buoyancy heads. If the node is connected to the FDS domain, then do not specify XYZ. FDS will
compute it as the centroid of the VENT. Note that if you do not specify an XYZ for an interior node, then
FDS will use the default value of 0,0,0.
A duct node must either have two or more ducts attached to it or it must have either AMBIENT=.TRUE. or a
specified VENT_ID. When defining a VENT as a component of an HVAC system you must set SURF_ID to
’HVAC’ and you must set the VENT_ID.
It is permissible to have individual VENT lines for an HVAC system span multiple meshes.
where:
LOSS is the loss coefficient for flow through the fan when it is not operational.
MAX_FLOW is the maximum volumetric flow of the fan in m3 /s. This input activates a quadratic fan model.
MAX_PRESSURE is the stall pressure of the fan in units of Pa. This input activates a quadratic fan model.
RAMP_ID identifies the RAMP that contains a table of pressure drop across the fan (Pa) versus the volumetric
flow rates (m3 /s) for a user-defined fan curve.
TAU_FAN defines a tanh (TAU_FAN > 0) or t2 ramp (TAU_FAN < 0) for the fan. This is applied to the flow
rate computed by any of the three types (constant flow, quadratic, or user-defined ramp) of fans.
VOLUME_FLOW is the fixed volumetric flow of the fan (m3 /s). If you wish to have a time dependent flow use
the VOLUME_FLOW input for a duct rather than for a fan.
Note that only one set of fan model inputs (VOLUME_FLOW, RAMP_ID, or MAX_FLOW + MAX_PRESSURE)
should be specified. Also note that FAN defines a class of fans rather than one specific fan. Therefore, more
than one duct can reference a single FAN.
Fan Curves
In Section 12.1 there is a discussion of velocity boundary conditions, in which a fan is modeled simply as a
solid boundary that blows or sucks air, regardless of the surrounding pressure field. In the HVAC model, this
approach to modeling a fan occurs when the fan is specified with a VOLUME_FLOW. In reality, fans operate
based on the pressure drop across the duct or manifold in which they are installed. A very simple “fan curve”
is given by: s
|∆p − ∆pmax |
V̇fan = V̇max sign(∆pmax − ∆p) (12.4)
∆pmax
This simple “fan curve” is the “quadratic” fan model as the pressure is proportional to the square of the
volume flow rate.
130
The volume flow in the absence of a pressure difference, MAX_FLOW, is given by V̇max . The pressure
difference, ∆p = p1 − p2 , indicates the difference in pressure between the downstream compartment, or
“zone,” and the upstream. The subscript 1 indicates downstream and 2 indicates upstream. The term,
∆pmax , is the maximum pressure difference, MAX_PRESSURE, the fan can operate upon, and it is assumed to
be a positive number. The flow through a fan will decrease from V̇max at zero pressure difference to 0 m3 /s
at ∆pmax . If the pressure difference increases beyond this, air will be forced backwards through the fan.
If the downstream pressure becomes negative, then the volume flow through the fan will increase beyond
MAX_FLOW. More complicated fan curves can be specified by defining a RAMP. In the example inputs below,
one fan of each type is specified. A constant volume flow fan with a VOLUME_FLOW of 10 m3 /s, a quadratic
fan with MAX_FLUX=10 and MAX_PRESSURE=500, and a user-defined fan with the RAMP set to the values
of the quadratic fan in 200 Pa increments,
Figure 12.5 displays the fan curves for the inputs shown above. Additional examples can be found in
the ashrae7 and fan_test example cases, which are documented in the Verification Guide.
1000
500
Static Pressure (Pa)
-500
constant volume
quadratic
user fan curve
-1000
-10 -5 0 5 10 15 20
3
Volume Flow Rate (m /s)
Figure 12.5: Fan curves corresponding to a constant fan with VOLUME_FLOW=10, a quadratic fan with
MAX_FLOW=10 and MAX_PRESSURE=500, and a user-defined RAMP equivalent to the quadratic fan.
131
Jet Fans
Fans do not have to be mounted on a solid wall, like a supply or an exhaust fan. If you just want to blow gases
in a particular direction, create an obstruction OBST, at least one cell thick, and apply to it VENT lines that
are associated with a simple HVAC system. This allows hot, smokey gases to pass through the obstruction,
much like a free-standing fan. See the example case jet_fan.fds which places a louvered fan (blowing
diagonally down) near a fire (see Fig. 12.6).
You may also want to construct a shroud around the fan using four flat plates arranged to form a short
passageway that draws gases in one side and expels them out the other. The obstruction representing the fan
can be positioned about halfway along the passage (if a louvered fan is being used, place the fan at the end
of the passage).
where:
CLEAN_LOSS is the dimensionless loss coefficient for flow through the filter when it is clean (zero loading).
EFFICIENCY is an array of the species removal efficiency from 0 to 1 where 0 is no removal of that species
and 1 is complete filtration of the species. The species are identified using SPEC_ID.
LOADING is an array of the initial loading (kg) of the filter for each species being filtered.
LOADING_MULTIPLIER is an array of the species multiplier, Mi , used in computing the total filter loading
when computing the loss coefficient of the filter.
LOSS invokes a linear loss coefficient model where the dimensionless loss coefficient, K, is given as a linear
function of the total loading, KFILTER = KCLEAN_LOSS + KLOSS ∑ (Li Mi ), where Li is the species loading
and Mi is a multiplier. Only one of LOSS or RAMP_ID should be specified.
132
RAMP_ID identifies the RAMP that contains a table of pressure drop across the filter as a function of total
loading (the summation term given in the definition of LOSS above). Only one of LOSS or RAMP_ID
should be specified.
SPEC_ID identifies the tracked species for the inputs of LOADING_MULTIPLIER and LOADING.
A sample set of filter inputs is shown below. These lines define a filter that removes the species PARTICULATE
with 100 % efficiency. The filter has an initial loss coefficient of 1 and that loss increases by a factor of 7332
for each kg of PARTICULATE captured by the filter. For further details see the sample case HVAC_filter,
which is documented in the Verification Guide.
&SPEC ID='PARTICULATE',MW=28.,MASS_FRACTION_0=0.001,SPECIFIC_HEAT=1./
&HVAC TYPE_ID='NODE',ID='FILTER',DUCT_ID='DUCT1','DUCT2',XYZ(3)=0.55,
FILTER_ID='FILTER'/
&HVAC TYPE_ID='FILTER',ID='FILTER',CLEAN_LOSS=1.,SPEC_ID='PARTICULATE',EFFICIENCY=1.,
LOSS=7732.446,LOADING_MULTIPLIER=1./
Note that a filter input refers to a class of filters and that multiple ducts can reference the same filter
definition.
where:
EFFICIENCY is the heat exchanger efficiency, η, from 0 to 1. A value of 1 indicates the exit temperatures
on both sides of the heat exchanger will be equal.
FIXED_Q is the constant heat exchange rate. A negative value indicates heat removal from the duct. The
heat exchange rate can be controlled by either RAMP_ID or by TAU_AC.
TAU_AC defines a tanh (TAU_AC>0) or t2 ramp (TAU_AC<0) for the aircoil. This is applied to the FIXED_Q
of the aircoil. Alternatively, a RAMP_ID can be given.
133
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
60 60
Coil Heat Addition (HVAC_aircoil) Duct Exit Temperature (HVAC_aircoil)
50 50
40 40
30 30
Ideal Q Ideal T
FDS Q FDS T
20 20
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
Time (s) Time (s)
Figure 12.7: (Left) Heat addition and (Right) duct exit temperature for the HVAC_aircoil case.
&OBST XB=1.0,2.0,0.0,1.0,0.0,1.0 /
&VENT XB=1.0,1.0,0.0,1.0,0.0,1.0, SURF_ID='HVAC', ID='HVAC OUTLET', UVW=-1,0,1 /
The above input defines a vent lying in the y-z plane facing in the −x direction. The flow vector indicates
that the flow from this vent is in the −x direction with a 45 degree up angle (the x and z components are
equal in size). FDS will set the tangential velocity of the vent to obtain the specified direction indicated by
UVW. This will only be done if the vent is inputting gas into the domain. Note that the values given for UVW
are normalized to a unit vector.
134
To avoid the possibility of there being no available initialization data for a duct run (a series of ducts
connected to one another via ducts and nodes), DUCT_INTERP_TYPE in each comprising duct must be
consistent. This ensures that there is a non-internal duct node from which the duct run adopts its initial data.
If duct interpolation is set to NODE1 then data from the first node of the lowest numbered duct in the duct
run is initialized in the duct, if it is set to NODE2 then data from the second node of the highest numbered
duct in the duct run is initialized in the duct. DUCT_INTERP_TYPE is related to initialization only; if the
FDS domain is initialized as ambient/background data then there will be no difference in output when using
either duct interpolation method.
You can increase or decrease the number of cells each discretized duct has, to increase solution accuracy
or decrease simulation time respectively. The default value is set based upon a cell size of 100 mm. Where
the duct is not divisible by 100 mm, the number of cells is rounded up to the nearest integer (e.g. a duct
with a length of 1.05 m will have 11 cells). Ducts with a length of less than 100 mm adopt a cell number
of 2. If N_CELLS=1 is assigned to a duct then, even if HVAC_MASS_TRANSPORT=.TRUE., the HVAC mass
transport subroutine will not be called for this duct.
If you are using DEVCs to output spatially-integrated statistics as per Section 20.10.13 (such as VOLUME
MEAN, VOLUME INTEGRAL or MASS INTEGRAL) then be aware that, even if the integration volume bound
by XB encapsulates the spatial location of a duct, the quantity in the duct will not be recorded by the DEVC.
For example, if there is 1 m3 of species 1 initialized in an upstream FDS compartment which is transported
to a downstream FDS compartment via an HVAC network with a total volume greater than 1 m3 , the value
of total mass of species 1 output by a DEVC recording the VOLUME INTEGRAL of DENSITY will reduce to
zero during the time for which it is in the HVAC network domain.
&ZONE XB=0.3,1.2,0.4,2.9,0.3,4.5 /
This means that the rectangular region, 0.3 < x < 1.2, 0.4 < y < 2.9, 0.3 < z < 4.5, is assumed to be within
a sealed compartment. There can be multiple ZONEs declared. The indices of the zones, which are required
for the specification of leaks and fans, are determined simply by the order in which they are specified in the
input file. By default, the exterior of the computational domain is Zone 0. If there are no OPEN boundaries,
the entire computational domain will be assumed to be Zone 1.
There are several restrictions to assigning pressure zones. First, the declared pressure zones must be
completely within a region of the domain that is bordered by solid obstructions. If the sealed region is not
rectangular, FDS will extend the specified ZONE boundaries to conform to the non-rectangular region. It is
possible to “break” pressure zones by removing obstructions between them. An example of how to break
135
pressure zones is given below. Second, pressure zones can span multiple meshes, but it is recommended that
you check the pressure in each mesh to ensure consistency. Also, if the ZONE does span multiple meshes,
make sure that the specified rectangular coordinates do so as well. This allows FDS to determine the actual
extent of the ZONE independently for each mesh. If the pressure zone has a non-rectangular shape such that
it winds its way in and out of multiple meshes and you cannot create a single rectangular region to span it,
you may use a series of points, one in each mesh touched by the pressure zone:
Each point should be clear of solid obstructions. A search algorithm will determine all other grid cells within
the particular mesh belonging to that pressure zone.
Note that if you plan to have one zone open up to another via the removal of an obstruction, make
sure that the coordinates of the two zones abut (i.e., touch) even if one of the zones includes the solid
obstruction that separates them. FDS recognizes that a zone boundary has been removed when two adjacent
cells belonging to two different zones have no solid obstruction between them. It is recommended that you
extend at least one of the zone boundaries into the solid obstruction separating the two zones. That way,
when the obstruction is removed, the newly created gas phase cells will be assigned to one or the other zone
and it will become obvious that two adjacent gas phase cells are of two different zones, at which point the
zones will merge and no longer have distinct background pressures.
For the special case where a zone has periodic boundaries (SURF_ID=’PERIODIC’ on VENT), you must
add PERIODIC=.TRUE. on the ZONE line.
136
FDS6.7.1-0-g14cc738-master 10 4 FDS6.7.1-0-g14cc738-master
70 6
Temperature (pressure_rise) Pressure (pressure_rise)
°C) 60 5
50 4
Pressure (Pa)
Temperature (
30 2
20 1
10 0
0 100 200 300 400 500 600 0 100 200 300 400 500 600
Time (s) Time (s)
FDS6.7.1-0-g14cc738-master
Density (pressure_rise)
1.6
)
1.5
3
Density (kg/m
1.4
Ideal (Dens)
FDS (Dens 3)
1.3
1.2
1.1
1
0 100 200 300 400 500 600
Time (s)
in reality doors and windows do not magically disappear as they do in FDS. It takes a finite amount of time
to fully open them, and the slowing of the pressure increase/decrease is a simple way to simulate the effect.
Second, relatively large pressure differences between zones wreak havoc with flow solvers, especially ones
like FDS that use a low Mach number approximation. To maintain numerical stability, FDS gradually brings
the pressures into equilibrium. This second point ought to be seen as a warning.
Since pressure zones are defined using XB, it might not be possible to define a complexly shaped set of
pressure zones using just the ZONE inputs. A work around for this is to define the complex zone as a series of
zones in the same manner you would divide a domain into multiple meshes. The check for merged pressure
zones only works if two zones were initially isolated at the start of the calculation (there must have been a
wall that was removed). Therefore, define an obstruction at the boundary of the zones that is removed after
the first time step.
Do not use FDS to study the sudden rupture of pressure vessels! Its low Mach number formulation does
not allow for high speed, compressible effects that are very important in such analyses. The zone breaking
functionality described in this example is only intended to be used for relatively small pressure differences
(<0.1 atm) between compartments. Real buildings cannot withstand substantially larger pressures anyway.
137
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
2500 2500
Ideal (Pres1) Ideal (Pres1)
Pressure (zone_break_fast) Pressure (zone_break_slow)
Ideal (Pres2) Ideal (Pres2)
2000 Ideal (Pres3) 2000 Ideal (Pres3)
FDS (pres_1) FDS (pres_1)
FDS (pres_2) FDS (pres_2)
Pressure (Pa)
Pressure (Pa)
1500 FDS (pres_3) 1500 FDS (pres_3)
1000 1000
500 500
0 0
0 5 10 15 20 25 30 0 5 10 15 20 25 30
Time (s) Time (s)
Figure 12.9: Output of zone_break test cases. The figure on the left results from using a pressure relaxation
time of 0.5 s. The figure on the right uses 1 s, the default.
compared to an exact solution. Air is injected into the compartment for 5 s, after which the compartment is
opened to a smaller compartment. At 15 s, the smaller compartment is opened to the outside.
FDS6.7.1-0-g14cc738-master
4000
Pressure (zone_shape)
3000
Pressure (Pa)
Ideal (Pres)
2000 FDS (pres_1)
1000
0
0 5 10 15 20 25
Time (s)
Figure 12.10: Output of zone_shape test case. Shown is the pressure in an L-shaped compartment that is
opened to another compartment at 5 s, and the outdoors at 15 s.
12.3.2 Leaks
With a few notable exceptions, like containment buildings for nuclear power plants, real world construction
is not air tight. Small gaps occur along windows and doors and where walls abut each other and the floors
and ceilings. As a compartment is pressurized by a fire, air will escape through these small gaps. This is
referred to as leakage.
Leakage is inherently a sub-grid scale phenomenon because the leakage area is usually very small. In
other words, it is not possible to define a leak directly on the numerical mesh. It is sometimes possible
to “lump” the leaks into a single mesh-resolvable hole, but this is problematic for two reasons. First, the
leakage area rarely corresponds neatly to the area of a single mesh cell-sized hole. Second, the flow speeds
through the hole can be large and cause numerical instabilities.
A better way to handle leakage is by exploiting the HVAC model. The compartment surface that is
leaking can be thought of as a large HVAC vent that connects via a very small duct to the outside. This
138
allows the leakage to be removed over a large area in the domain (just as it would be in reality) while
correctly capturing the actual area of the leakage path. There are two approaches to this. The first approach
is by exploiting only pressure zones. A pressure zone is a user-specified volume within the computational
domain that is entirely surrounded by solid obstructions. For example, the interior of a closed room can
be, and should be, declared a pressure zone. In this approach surfaces within a pressure zone are denoted
as leaking, and those surfaces can be considered an HVAC vent that connects to the outside via a tiny duct
whose area is the leakage area. This leakage approach will prevent a compartment from seeing large pressure
changes as fires grow and decay, but it cannot account for effects like exterior wind or the stack effect. The
second approach is intended for leaks with well defined locations (a cracked open door where the crack size
is subgrid) or for leaks where the stack effect is important. It uses the local pressure (which includes the
zone pressure), which allows for leakage to vary in magnitude.
The first line designates a region of the computational domain to be Pressure Zone 1. Note that the order of
the ZONE lines is important; that is, the order implicitly defines Zone 1, Zone 2, etc. Zone 0 is by default
the ambient pressure exterior. In this example, a leak exists between Zone 1 and the exterior Zone 0, and
the area of the leak is 0.0001 m2 (1 cm by 1 cm hole, for example). Zone 2 leaks to Zone 1 (and vice
versa) with a leak area of 0.0002 m2 . Zone 2 also leaks to the outside with an area of 0.0003 m2 . Note that
zones need not be physically connected for a leak to occur, but in each zone, except for the exterior, there
must be some surface with a designated LEAK_PATH. Here, in Zones 1 and 2 there are surfaces defined by
both ’LEAKY EXTERIOR WALL’ and ’LEAKY INTERIOR WALL’ so as to provide a surface over which to
apply the leakage. Leakage is uniformly distributed over all of the solid surfaces assigned the LEAK_PATH.
The order of the two pressure zones designated by LEAK_PATH is unimportant, and the solid obstructions
where the leakage is applied need not form a boundary between the two zones.
The volume flow, V̇ , through a leak of area AL is given by
s
|∆p|
V̇leak = AL sign(∆p) 2 (12.7)
ρ∞
where ∆p is the pressure difference between the adjacent compartments (in units of Pa) and ρ∞ is the ambient
density (in units of kg/m3 ). The discharge coefficient normally seen in this type of formula is assumed to be
1.
In a typical building as the interior pressure rises, the leakage area will grow as small gaps, cracks, and
other leakage paths open up. Leakage tests performed according to test standards such as ASTM E 779
provide two additional data points to quantify this behavior. These are the LEAK_PRESSURE_EXPONENT
and the LEAK_REFERENCE_PRESSURE. The use of these additional inputs are shown in the equation below
139
as n and ∆pref respectively where AL,ref is given by LEAK_AREA.
∆p n−0.5
AL = AL,ref (12.8)
∆pref
By default, n = 0.5 and ∆pref = 4 Pa, meaning that the leak area will not change with pressure unless you
specify an exponent other than 0.5.
The HVAC output quantities can be used to determine the leakage flows. FDS names the duct connecting
Zone A with Zone B ’LEAK A B’ and the duct nodes ’LEAK A B’ for the Zone A side of the leak and
’LEAK B A’ for the Zone B side. Note that for the duct names, FDS will use the lower numbered zone as
Zone A.
FDS is limited by default to a maximum of 200 ZONE inputs. This can be increased if needed by the
parameter MAX_LEAK_PATHS on the MISC line.
Localized Leakage
The local leakage approach is intended to represent leakage through a specific crack. For example, a cracked
open door might have a opening that is too small to resolve with the grid. One would; however, still want
to capture the fact that hot gases could escape the top of the crack and cold gases enter the bottom. The
local leakage approach uses the local pressure rather than just the zone pressure. Therefore, one can define
multiple leakage paths for different windows, over the height of a door, or over the height of a tall stairwell
where stack effect might be important. To use this approach two VENT inputs are linked via an HVAC input
with TYPE_ID=’LEAK’. In the example below a 0.001 m2 leakage path is created between the VENT with
ID=’VENT 1’ and the VENT with ID=’VENT 2’. Note that the SURF_ID for a VENT with localized leakage
is not ’HVAC’. The input must correspond to a SURF input. Wall heat transfer will be computed based upon
the inputs on the referenced SURF input.
This will create a duct with the name ’LEAK1’ whose two nodes will be named VENT_ID and VENT2_ID.
If the leakage path is to connect to the ambient outside the domain, then set VENT2_ID=’AMBIENT’. In this
case the second node will be the first node name with AMB appended (e.g. ’VENT 1 AMB’). Note that each
VENT must lie in one pressure zone; however, it may span more than one MESH.
Unlike the zone leakage approach, this approach has the option to preserve the energy of the gas flowing
through the leak. For example, for door crack using with pressure zone leakage, the outflowing gas at the top
of the door would always be the same temperature as the outside of the door. To maintain hot gas flowing
out of the leak, add LEAK_ENTHALPY=.TRUE. to the HVAC input. For each outflowing wall cell, this will
compute the enthalpy difference between the temperature of the leak flow and the temperature of the surface
and add it as a source of heat to the adjacent gas cell. The default value is LEAK_ENTHALPY=.FALSE.
This approach also has the option of changing the flow loss by specifying LOSS on the HVAC input. The
default is LOSS=1; the same as for pressure zone leakage.
Note, for this approach it is not required that one have pressure zones defined; however, it is recom-
mended to do so if different pressure zones do in fact exist in the model.
140
rises due to the heat from the fire and the fan blowing air into the compartment. Eventually the pressure rise
inside the compartment exceeds the maximum pressure of the fan, at which point the compartment begins
to exhaust from both the fan and the leakage. Pressure will continue to rise due to the fire until the pressure
relief due to leakage and back flow through the fan equals the pressure increase from the fire.
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1100 200
Pressure (door_crack) HRR (door_crack)
1050
950 100
900
50
850
800 0
0 500 1000 1500 0 500 1000 1500
Time (s) Time (s)
Figure 12.11: Output of door_crack test case. Symbols are expected values.
The use of a dynamic pressure boundary affects the FDS algorithm as follows. At OPEN boundaries, the
hydrodynamic pressure (head) H is specified as
where ρ∞ is the ambient density and u is the most recent value of the velocity on the boundary. The
PRESSURE_RAMP allows you to alter the pressure as a function of time. Note that you do not need to ramp
the pressure up or down starting at zero, like you do for various other ramps. The net effect of a positive
dynamic pressure at an otherwise quiescent boundary is to drive a flow into the domain. However, a fire-
driven flow of sufficient strength can push back against this incoming flow.
The following lines, taken from the sample case, pressure_boundary, demonstrates how to specify
a time-dependent pressure boundary at the end of a tunnel. The tunnel is 10 m long, 1 m wide, 1 m tall with
a fire in the middle and a pressure boundary imposed on the right side. The left side (XMIN) is just an OPEN
boundary with no pressure specified. It is assumed to be at ambient pressure.
141
&VENT MB = 'XMIN' SURF_ID = 'OPEN' /
&VENT MB = 'XMAX' SURF_ID = 'OPEN', DYNAMIC_PRESSURE=2.4, PRESSURE_RAMP='wind_ramp' /
&RAMP ID='wind_ramp', T= 0., F= 1. /
&RAMP ID='wind_ramp', T=15., F= 1. /
&RAMP ID='wind_ramp', T=16., F=-1. /
Figure 12.12 shows two snapshots from Smokeview taken before and after the time when the positive pres-
sure is imposed at the right portal of a tunnel. The fire leans to the left because of the preferential flow in
that direction. It leans back to the right when the positive pressure is directed to become negative.
Figure 12.12: Snapshots from the sample case pressure_boundary showing a fire in a tunnel leaning
left, then right, due to a positive, then negative, pressure imposed at the right portal.
Parabolic
PROFILE=’PARABOLIC’ produces a parabolic profile with VEL (m/s) being the maximum velocity or
VOLUME_FLOW (m3 /s) being the desired volume flow. As an example, the test case in the Flowfields
examples folder called parabolic_profile.fds demonstrates how you can create a circular or rectan-
gular vent, each with a parabolic inlet profile. The two VENT lines below create circular and rectangular
inlets, respectively, each of which inject air (or the background gas) at a rate of 0.5 m3 /s into the compart-
ment.
The purpose of the test case is to ensure that the proper amount of gas (in this case nitrogen) is forced into
the compartment, as confirmed by the pressure rise. Figure 12.13 displays a comparison of the calculated
versus the exact pressure rise in a large compartment with these two parabolic vents. The pressure should
142
rise according to the equation and analytical solution:
dp γ V̇ γ V̇
= p =⇒ p(t) − p0 = p0 e V t − 1 (12.10)
dt V
where the ratio of specific heats, γ = 1.4, volume flow rate, V̇ = 1 m3 /s, volume, V = 4000 m3 , and
ambient pressure, p0 = 101325 Pa. Note that to obtain this simple result, FDS was run with the option
CONSTANT_SPECIFIC_HEAT_RATIO set to true.
FDS6.7.1-0-g14cc738-master
2500
Pressure (parabolic_profile)
2000
Pressure (Pa)
1500
1000
500
Exact (Pressure)
FDS (pres)
0
0 10 20 30 40 50 60
Time (s)
wmax if r ≤ R − δ
w(r) =
r−(R−δ )
2 (12.11)
wmax 1 − δ if R − δ < r ≤ R
The bulk velocity is the volumetric flow rate divided by the circular flow area. VEL_BULK is negative
pointing into the domain. The boundary layer thickness is δ . This feature is handy for dealing with the case
where the maximum velocity is higher than the bulk velocity. Here is an example input file line:
143
wmax ∂w
=0
∂r
d R
Figure 12.14: Boundary layer profile.
144
Chapter 13
This chapter describes techniques for modeling the atmospheric boundary layer. Most of the parameters
that describe the atmosphere are entered on a single namelist line called WIND. This namelist group is new
starting with FDS version 6.6.0. Previous versions of FDS used the MISC line for parameters related to wind
and atmospheric conditions.
There are three ways to specify a wind in FDS. The preferred method, originally implemented in FDS
version 6.6.0, is to model the wind and corresponding temperature profile using Monin-Obukhov similar-
ity theory (Section 13.1). A second, more complicated method, is to specify a uniform horizontal forcing
function and allow the wind field to develop naturally. This has proven more useful in wind tunnel appli-
cations than for natural winds (Section 13.2). The third method, which has traditionally been employed in
older versions of FDS, is to create essentially a “wall of wind” where an entire side of the computational
domain is turned into a giant fan blowing air laterally. This is the least preferred method of creating a wind
(Section 13.3).
u∗ z z
u(z) = ln − ψm (13.1)
κ z0 L
θ∗ z z
θ (z) = θ0 + ln − ψh (13.2)
κ z0 L
where u∗ is the friction velocity, κ = 0.41 is the Von Kármán constant, z0 is the aerodynamic roughness
length, θ∗ is the scaling potential temperature, θ0 is the ground level potential temperature, L is the Obukhov
1 The potential temperature is given by
R/(Wair c p )
p0
θ =T
p
where p0 is typically 1000 mbar and R/(Wair c p ) ≈ 0.286.
145
length, and the similarity functions are those proposed by Dyer [35]:
z
−5 : L≥0
L
z
ψm = (13.3)
L 1+ζ 1+ζ2 π
2 ln + ln − 2 tan−1 (ζ ) + : L<0
2 2 2
z
−5 : L≥0
L
z
ψh = (13.4)
L 1+ζ2 16 z 1/4
2 ln : L<0 ζ = 1−
2 L
The Obukhov length, L, characterizes the thermal stability of the atmosphere. When L is negative, the
atmosphere is unstably stratified; when positive, the atmosphere is stably stratified. The stabilizing or desta-
bilizing effects of stratification are strongest as L nears zero. Accordingly, a neutrally stratified atmosphere
would have an infinite Obukhov length. Generally, an unstable atmosphere exhibits a decreasing temperature
with height and relatively large fluctuations in wind direction/velocity. Unstable atmospheres are strongly
affected by the buoyancy-generated turbulence, resulting in enhanced mixing. Conversely, highly stable
atmospheric conditions suppress turbulent mixing.
In the event that these various parameters are not reported or known, they can be estimated from the
basic meteorological conditions. From just a single measured mean wind velocity, uref , taken at a height,
zref , the friction velocity can be calculated from:
κ uref
u∗ = (13.5)
ln(zref /z0 )
The Obukhov length, L, can be chosen from Table 13.1. Suggested values of the aerodynamic roughness
length2 , z0 , are given in Table 13.2.
146
Table 13.2: Davenport-Wieringa roughness length classification [36].
where a negative value indicates that the ground is warmer than the air above.
Figure 13.1 displays a few sample wind profiles. Notice that the sign of L determines whether the
atmosphere is stable or unstable; that is, whether the temperature increases or decreases relative to the
ground temperature.
It is assumed here that the wind speed is taken at a height 2 m off the ground. If it is not, set Z_REF (m)
accordingly. The wind DIRECTION follows the usual meteorological convention—a northerly wind has
direction of 0◦ and blows from north to south, or in the negative y direction in the FDS coordinate system.
An easterly wind has a direction of 90◦ and blows from east to west, or in the negative x direction.
If you know the value of u∗ or θ∗ , you can input these on the WIND line as U_STAR (m) and THETA_STAR
(K). Otherwise, they will be computed from L and z0 .
You may assign material properties to the GROUND if you like, but be aware that FDS assumes the
ground to be ambient temperature (TMPA) initially, and the temperature of the atmosphere either increases
or decreases with height according to the stability condition. The top of the domain is set to be ’OPEN’,
meaning that even though the wind field is more or less parallel to it, there might be, for example, a hot
plume that can rise out of the computational domain.
The side boundaries of the domain can be set either to ’OPEN’ or ’PERIODIC’. The former is the usual
inflow/outflow condition; the latter assumes that the domain repeats itself endlessly in each direction. This
is an important assumption because the turbulent atmospheric boundary layer that is modeled using Monin-
Obukhov similarity theory is assumed to develop over distances far beyond the computational domain. The
147
30 30
25 25
20 20
Height (m)
Height (m)
15 15
10 10
5 5
0 0
0 2 4 6 8 10 15 20 25
Velocity (m/s) Temperature (°C)
30 30
25 25
20 20
Height (m)
Height (m)
15 15
10 10
5 5
0 0
0 2 4 6 8 10 15 20 25
Velocity (m/s) Temperature (°C)
30 30
25 25
20 20
Height (m)
Height (m)
15 15
10 10
5 5
0 0
0 2 4 6 8 10 15 20 25
Velocity (m/s) Temperature (°C)
148
extra parameter on the VENT line, WIND=.TRUE., directs FDS to mirror the basic meteorological conditions
in all directions, but to not mirror smoke plumes, gas dispersion, etc., that you might create in your fire
scenario. That is, you do not want a smoke plume that exits the eastern boundary of the domain to reappear
instantly at the western boundary.
5
Speed (m/s)
Height (m)
60
u_ideal
0 FDS (u)
40
-5
u_ideal
v_ideal 20
-10 FDS (u_mean)
FDS (v_mean)
-15 0
0 10 20 30 40 50 60 0 2 4 6 8 10
Time (s) Speed (m/s)
Figure 13.2: (Left) Mean velocity components of the wind vs. the specified values. (Right) Simulated vs.
specified vertical wind speed profile.
149
&RAMP ID='z-ramp', Z=500., F=1.8 /
The parameter F represents the fraction of the specified velocity component as a function of time T (s) or
height Z (m). Note that if you use Monin-Obukhov similarity parameters, you need not specify the vertical
profile of the wind. It will be calculated automatically.
u(z) 1 z
= ln + 8.5 (13.8)
u∗ κ s
For the purpose of implementing the Monin-Obukhov model within FDS, the velocity profile given by
Eq. (13.1) near the ground where ψm ≈ 0 can be superimposed, leading to the effective translation of rough-
ness factors:
s = z0 e8.5 κ ≈ 30 z0 (13.9)
To explicitly assert this relationship, you may set the ROUGHNESS (m) on the SURF line applied to the ground
to be 30 times your chosen value of z0 .
q̇00c = ρ c p u∗ θ∗ (13.10)
where a negative value indicates that the ground is warmer than the air above. In the simulation, you
can explicitly specify the CONVECTIVE_HEAT_FLUX (kW/m2 ) on the SURF line to be −q̇00c . Note that ρ
(kg/m3 ) is the density of air near the ground and c p is the specific heat of air near the ground, approximately
1 kJ/(kg·K).
150
13.1.7 The Mean Forcing Concept
The process of steering the solution of the mass, momentum, and energy equations to match wind speed
and direction gathered at random weather stations is known as data assimilation [37]. FDS uses a relatively
simple data assimilation technique, a method known as nudging, where you add a mean forcing term to the
momentum equation to “nudge” the flow in the direction of the specified wind. Currently, FDS can only
affect the mean flow velocities. If you specify a wind SPEED on the WIND line, FDS will automatically
drive the mean velocity components toward the desired values by adding a forcing term to the momentum
equation:
∂ ui ui,spec (z,t) − ui
+... = (13.11)
∂t τ
Here, ui is the computed velocity component, ui,spec is the specified wind field component that can vary with
height and time, and ui is the average of the computed velocity component at the height z. The relaxation
time scale, τ, is an input parameter called DT_MEAN_FORCING whose default value is 1 s. The shorter
this time scale, the faster the flow field will “catch up” to the mean wind, but at the expense of possibly
washing out important flow structures. Try several values of this time scale for your particular simulation
to determine what is appropriate for your case. There is no firm guidance in the atmospheric modeling
literature.
Note that if instead of specifying the wind SPEED, you specify its components, U0 and V0 (rarely would
you use W0), FDS will not automatically assert mean forcing, but rather just initialize the flow field to these
constant values of velocity. If you want to override this behavior, you can direct FDS to assert meaning
forcing in all coordinate directions by setting MEAN_FORCING=.TRUE., or you can assert mean forcing in
the x, y, or z directions using MEAN_FORCING(N)=.TRUE. where N is set to 1, 2, or 3, respectively.
When simulating a wind with OPEN boundaries, you might notice spurious velocity patterns at the
downstream edge of the computational domain. These are artifacts related to the mean forcing function and
the application of open boundary conditions at the external faces of the domain. To reduce spurious artifacts
at external open wind boundaries, FDS forces both the normal and tangential components of the velocity
towards that of the mean wind field at the side and top boundaries, which is why you should ensure that
your obstructions are reasonably far from the boundaries. Some suggest that the top, upstream, and lateral
boundaries extend outward 5 times the characteristic height of the buildings, and the downstream boundary
extend 15 times the height. It is also suggested that the cross sectional area of obstructions be less than
3 % of the total cross sectional area. However, these recommendations might be overly restrictive. It is
suggested that you investigate different domain dimensions to ensure that they do not affect the outcome of
your simulation. If you see spurious flow activity at external boundaries, consider increasing the “sponge
layer” that FDS automatically builds around the exterior lateral boundaries. There is a parameter called
SPONGE_CELLS, which is the number of grid cells at the exterior boundary where FDS aggressively forces
the velocity to conform with the mean wind field. Within the domain interior, the “nudging” or mean forcing
is less aggressive. The default value of SPONGE_CELLS is 3, meaning that aggressive forcing is employed
in the nearest 3 grid cells adjacent to the x and y exterior boundaries.
∂ ui
+ · · · = −Fi /ρ (13.12)
∂t
151
This feature is typically used together with periodic boundaries. To specify a mean pressure drop of 0.01
Pa/m in the x direction for a periodic duct, for example, use
&WIND FORCE_VECTOR(1)=0.01 /
&VENT MB='XMIN', SURF_ID='PERIODIC' /
&VENT MB='XMAX', SURF_ID='PERIODIC' /
You may apply a time ramp to FORCE_VECTOR(1), for example, via RAMP_FVX_T on the WIND line.
152
The value of Z is the height (m) above the ground. The value of F is the ratio of the temperature at the given
height in degrees K to the ambient temperature in degrees K, TMPA+273.
By default, FDS assumes that the density and pressure decrease with height, regardless of the application
or domain size. For most simulations, this effect is negligible, but it can be turned off completely by setting
STRATIFICATION=.FALSE. on the WIND line.
ρ0 (z) gW
= exp − z (13.13)
ρ∞ RT0
where R is the universal gas constant, g is the acceleration of gravity, and W is the average molecular weight
of the air, z is the height above the GROUND_LEVEL, and T0 is the ambient temperature. Applying this
formula to the external and internal locations at the lower and upper vents results in densities of 1.2412,
1.1989, 1.2272, and 1.1858 kg/m3 , respectively.
Since the openings in the building are equally spaced over its height, the neutral plane should be close
to its midpoint. This can be computed from:
∆H Tb
= 1+ (13.14)
Hn T∞
where Hn is the neutral plane height above the bottom vent and ∆H = 95 m is the distance between the
leak points. This gives a neutral plane of 46.68 m above the lower vent or 49.18 m above the bottom of
153
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
5 1.5
Leakage Velocity Density
4
)
3
1
Velocity (m/s)
Density (kg/m
Ideal Upper Exterior
Ideal Lower Exterior
2 Ideal Upper Interior
0.5 Ideal Lower Interior
Ideal Upper FDS Upper Exterior
1 Ideal Lower FDS Lower Exterior
FDS Upper FDS Upper Interior
FDS Lower FDS Lower Interior
0 0
0 20 40 60 80 100 0 20 40 60 80 100
Time (s) Time (s)
Figure 13.3: (Left) Velocity at the upper and lower vents for the stack_effect case. (Right) Upper and
lower exterior and interior densities.
the building. Note that this is close to the midpoint value of 50 m above the bottom of the building. The
pressure difference across the building’s wall is computed from
W p0 (z) g ∆z 1 1
∆p = − (13.15)
R T∞ Tb
where ∆z is the distance from the leak point to the neutral plane. Using the neutral plane location, the ∆z
values are -46.68 m for the lower vent and +48.32 m for the upper vent which respectively result in lower
and upper vent pressure differences of -19.4 Pa and +20.4 Pa. Using the loss of 2 and the pressure difference
in the HVAC momentum equation results in a steady-state inflow velocity at the bottom of 3.95 m/s and an
outflow velocity at the top of 4.15 m/s. Results for velocity and density are shown in Fig. 13.3.
154
Chapter 14
User-Specified Functions
Many of the parameters specified in the FDS input file are fixed constants. However, there are several pa-
rameters that may vary in time, temperature, or space. The namelist groups, RAMP and TABL, allow you to
control the behavior of these parameters. RAMP allows you to specify a function with one independent vari-
able (such as time) and one dependent variable (such as velocity). TABL allows you to specify a function of
multiple independent variables (such as a solid angle) and multiple dependent variables (such as a sprinkler
flow rate and droplet speed).
where Q̇0 is the user-specified heat release rate. If the fire ramps up following a t-squared curve, then it
remains constant after TAU_Q seconds. These rules apply to TAU_T and TAU_V as well. The default value
for all TAUs is 1 s. If something other than a tanh or t-squared ramp up is desired, then a user-defined
function must be input. To do this, set RAMP_Q, RAMP_T or RAMP_V equal to a character string designating
the ramp function to use for that particular surface type, then somewhere in the input file generate lines of
the form:
1 You can change the default ramp-up time by setting TAU_DEFAULT on the MISC line. It is 1 s, by default.
155
Here, T is the time, and F indicates the fraction of the heat release rate, wall temperature, velocity, mass
fraction, etc., to apply. Linear interpolation2 is used to fill in intermediate time points. Note that each set
of RAMP lines must have a unique ID and that the lines must be listed with monotonically increasing T.
Note also that the TAUs and the RAMPs are mutually exclusive. For a given surface quantity, both cannot be
prescribed. As an example, a simple blowing vent can be controlled via the lines:
Use TAU_T or RAMP_T to control the ramp-ups for surface temperature. The surface temperature at time t,
Tw (t), is
Tw (t) = T0 + f (t) (TMP_FRONT − T0 ) (14.2)
where f (t) is the result of evaluating the RAMP_T at time t, T0 is the ambient temperature, and TMP_FRONT
is specified on the same SURF line as RAMP_T. Use TAU_MF(N) or RAMP_MF(N) to control the ramp-ups
for either the mass fraction or mass flux of species N. For example:
indicates that argon and nitrogen are to be injected at rates of 0.1 kg/(m2 · s) and 0.3 kg/(m2 · s) over time
periods of approximately 5 s and 10 s, respectively.
Table 14.1 lists the various quantities that can be controlled by RAMPs.
2 By default,
FDS uses a linear interpolation routine to find time or temperature-dependent values between user-specified points.
The default number of interpolation points is 5000, more than enough for most applications. However, you can change this value
by specifying NUMBER_INTERPOLATION_POINTS on any RAMP line.
156
Table 14.1: Parameters for controlling the time-dependence of given quantities.
&MATL ID = 'STEEL'
FYI = 'A242 Steel'
SPECIFIC_HEAT_RAMP = 'c_steel'
CONDUCTIVITY_RAMP = 'k_steel'
DENSITY = 7850. /
Note that for temperature ramps, as opposed to time ramps, the parameter F is the actual physical quantity,
not just a fraction of some other quantity. Thus, if CONDUCTIVITY_RAMP is used, there should be no value
of CONDUCTIVITY given. Note also that for values of temperature, T, below and above the given range, FDS
will assume a constant value equal to the first or last F specified. Note also that the DENSITY of a material
cannot be controlled with a RAMP function.
157
14.3 Spatially-Dependent Velocity Profiles
Similar to using PROFILE=‘ATMOSPHERIC’ on SURF, it is possible to specify PROFILE=‘RAMP’ to gen-
erate 1D or 2D profiles of the normal component of velocity on a surface. The following code generates a
u(z) profile on the ‘XMIN’ boundary.
Note that V indicates the velocity component normal to the surface. You can also specify RAMP_V_X
and RAMP_V_Y and add these to the SURF. Note that only profiles in the planar directions will affect a given
surface. That is, if the surface is oriented in the y − z plane, only RAMP_V_Y and RAMP_V_Z apply. In the
RAMP definition T is the independent variable and F is the dependent variable. In this example, T is the z
coordinate in meters and F is the factor multiplying VEL on the SURF line. Two ramps may be applied to a
surface.
T does not need to be directly related to the FDS mesh. The velocity points will be interpolated linearly
by the ramp function. In fact, this functionality is convenient for taking experimental data directly as a
boundary condition to FDS. You basically just need to list T and F from the data (you can set VEL=-1 if
you want). The results for this particular case are included under the heading “Backward Facing Step” in
the FDS Validation Guide [5]. In this problem, the step height is h = 0.0098 m, and the specification of the
inlet profile is critical to correctly matching the reattachment point downstream of the step.
causes an object to be rotated 45◦ about the direction vector (AXIS) (1,0,0) emanating from the point
(x0 , y0 , z0 ). You may also translate the object in the three coordinate directions using the parameters DX,
DY, DZ, each in meters.
Currently, this feature only applies to point and line devices, and in future shall be applied to non-
rectangular immersed objects.
158
Chapter 15
Chemical Species
FDS was designed primarily to study fire phenomena, and much of the basic chemistry of combustion is
handled with a minimum of user inputs. However, there are many applications in which you might want to
simulate the movement of gases in the absence of fire, or additional chemical species might be added to a
simulation that involves fire. Gas species are defined with the input group SPEC. This input group is used to
define both primitive gas species and lumped species (mixtures of one or more primitive SPEC).
There are different roles that a gas species might play in a simulation. A gas species might be explicitly
tracked. In other words, a transport equation is solved for it. A gas species might be one component of
a mixture of gases that are transported together. For example, FDS exploits the idea that the products of
combustion from a fire mix and travel together; you only need to solve one transport equation for this
“lumped species.” Or, a gas species might do both such as H2 O which could be both part of a lumped
species for combustion products as well as an explicitly tracked species tracking H2 O from sprinkler droplet
evaporation.
The default combustion model in FDS assumes that the reaction is mixing-controlled, and transport
equations are solved for three species: the two lumped species of Products and Air (the default background)
and the species Fuel (as defined on REAC). There is no reason to solve individual (and costly) transport
equations for the major reactants and products of combustion—Fuel, O2 , CO2 , H2 O, N2 , CO and soot—
because they are all pre-tabulated functions of the three species. More detail on combustion is given in
Chapter 16. For the moment, just realize that you need not, and should not, explicitly list the reactants and
products of combustion using SPEC lines if all you want is to model a fire involving a hydrocarbon fuel.
159
BACKGROUND=.TRUE. can also be used as part of a lumped species definition. Note that the default back-
ground species is AIR which is defined as a lumped species consisting of N2 , O2 , CO2 , and H2 O. If no
background species is defined in the input file, then FDS will create the background species of AIR by
internally creating the input lines shown in Example 2 in Section 15.2.
Note that while you can define as many species using SPEC as you wish in an input file, any namelist
input tied to a list of species, such as any SPEC_ID input or MASS_FRACTION input, is limited to using no
more than 20 species.
15.1.1 Basics
Each SPEC line should include at the very least the name of the species via a character string, ID. Once
the extra species has been declared, you introduce it at surfaces via the parameters MASS_FRACTION(:) or
MASS_FLUX(:) along with the character array SPEC_ID(:). A very simple example of how a gas—in this
case hydrogen—can be introduced into the simulation is given by the simple input file called gas_filling.fds.
The relevant lines are as follows:
&SPEC ID='HYDROGEN' /
&SURF ID='LEAK', SPEC_ID(1)='HYDROGEN', MASS_FLUX(1)=0.01667, RAMP_MF(1)='leak_ramp' /
&RAMP ID='leak_ramp', T= 0., F=0.0 /
&RAMP ID='leak_ramp', T= 1., F=1.0 /
&RAMP ID='leak_ramp', T=180., F=1.0 /
&RAMP ID='leak_ramp', T=181., F=0.0 /
&VENT XB=-0.6,0.4,-0.6,0.4,0.0,0.0, SURF_ID='LEAK', COLOR='RED' /
&DUMP MASS_FILE=.TRUE. /
The hydrogen is injected through a 1 m by 1 m vent at a rate of 0.01667 kg/(m2 · s) and shut off after
3 min. The total mass of hydrogen at that point ought to be 3 kg (see Fig. 15.1). Notice that no properties
were needed for the HYDROGEN because it is a species whose properties are included in Table 15.1. The
background species in this case is assumed to be air. The mass flow rate of the hydrogen is controlled via
the ramping parameter RAMP_MF(1). The parameter MASS_FILE=.TRUE. instructs FDS to produce an
output file that contains a time history of the hydrogen mass.
FDS6.7.1-0-g14cc738-master
4
Hydrogen Mass (gas_filling)
3
Hydrogen Mass (kg)
0
0 50 100 150 200 250 300
Time (s)
Figure 15.1: Hydrogen mass vs. time for gas_filling test case.
160
Initial Conditions
If the initial mass fraction of the gas is something other than zero, then the parameter MASS_FRACTION_0
is used to specify it. For example, if you want the initial concentration in the domain to be 90% background
(air) diluted with 10% argon, use
Specifying Humidity
If you are using the default background lumped species AIR, then you can specify HUMIDITY on MISC to
set the ambient mass fraction of water vapor. HUMIDITY is the relative humidity of water vapor in units of
%. It is 40 % by default.
If you are defining the primitive species of WATER VAPOR, then MASS_FRACTION_0 is independent of
HUMIDITY. That is setting MASS_FRACTION_0 for the species WATER VAPOR will not change the ambient
humidity, it will add additional water vapor.
161
Table 15.1: Optional gas and liquid species (continued).
162
RAMP, the endpoint value will be used. FDS will not extrapolate beyond the ends of the RAMP.
Note that most of the parameters listed below, with the exception of the chemical FORMULA or molecular
weight, MW, are not necessary for large eddy simulations (LES). If any of these properties listed below are
not provided, FDS typically defaults to the properties of nitrogen, the dominant species in typical fire or
combustion scenarios.
Conductivity
Conductivity can be specified in one of three ways: it can be defined as a constant using CONDUCTIVITY
(W/(m · K)), it can be defined as a temperature vs. specific heat ramp using RAMP_K, or it can be computed by
FDS using MW, PR_GAS on SPEC (default value is PR on MISC), and the Lennard-Jones potential parameters
σ (SIGMALJ) and ε/k (EPSILONKLJ). If no inputs are specified, FDS will compute the conductivity using
the MW and the Lennard-Jones parameters for nitrogen.
Diffusivity
Diffusivity is assumed to be the binary diffusion coefficient between the given species and the background
species. Diffusivty can be specified in one of three ways: it can be defined as a constant using DIFFUSIVITY
(m2 /s), it can be defined as a temperature vs. diffusivity ramp using RAMP_D, or it can be computed by FDS
using MW and the Lennard-Jones potential parameters σ (SIGMALJ) and ε/k (EPSILONKLJ). If no inputs are
specified, FDS will compute the diffusivity using the MW and the Lennard-Jones parameters for nitrogen.
Enthalpy
The enthalpy of the gas mixture is given by the following formula:
Z T
h(T ) = h(Tref ) + c p (T 0 ) dT 0 (15.1)
Tref
where c p is the SPECIFIC_HEAT (kJ/(kg · K)) with optional temperature dependence using RAMP_CP. The
(optional) REFERENCE_TEMPERATURE, Tref (◦ C), is the temperature that corresponds to the
REFERENCE_ENTHALPY, h(Tref ) (kJ/kg). The default value of the REFERENCE_TEMPERATURE is 25 ◦ C.
If SPECIFIC_HEAT is specified and the REFERENCE_ENTHALPY is not, the REFERENCE_ENTHALPY will
be set to h(Tref ) = c p Tref .
1 International Union of Pure and Applied Chemistry
163
If no inputs for enthalpy are provided, then the specific heat of the gas will be calculated from its
molecular weight using the relation:
γ R
c p,α = (15.2)
γ − 1 Wα
The ratio of specific heats, GAMMA, is 1.4 by default and can be changed on the MISC line. If you want all
the gas specific heats to follow this relation, set CONSTANT_SPECIFIC_HEAT_RATIO=.TRUE. on the MISC
line (note: this option also requires STRATIFICATION=.FALSE. on the WIND line and EXTINCTION_MODEL
= ’EXTINCTION 1’ or SUPPRESSION=.FALSE. on the COMB line). In this case the REFERENCE_ENTHALPY
will be assumed to be 0 kJ/kg at a REFERENCE_TEMPERATURE of 0 K. For high molecular weight species,
use of the default gamma will result in very low values of the specific heat which can cause issues with the
default extinction model. In this case it is recommended that enthalpy are provided. If the FDS is deter-
mining enthalpies using this relation, then it is recommended that you check the CHID.out and verify that
reasonable specific heat values have been created.
The reference enthalpy can also be determined by defining the ENTHALPY_OF_FORMATION on the
SPEC line with a reference temperature for all species given by H_F_REFERENCE_TEMPERATURE on the
MISC line (default is 25 ◦ C). Note that ENTHALPY_OF_FORMATION will override any value given for
REFERENCE_ENTHALPY.
Viscosity
The dynamic viscosity of the gas species can be specified in one of three ways: it can be defined as a
constant using VISCOSITY, it can be defined as a temperature vs. viscosity ramp using RAMP_MU, or it
can be computed using the Lennard-Jones potential parameters σ (SIGMALJ) and ε/k (EPSILONKLJ). If no
viscosity inputs are provided, FDS will use the Lennard-Jones values for nitrogen.
Radiative Properties
Species that can absorb and emit thermal radiation are defined via the parameter RADCAL_ID on the SPEC
line. Some of the predefined species have this parameter already defined as shown in Table 15.1. There
are, however, many other species which are absorbing. For absorbing species not listed in Table 15.1,
RADCAL_ID can be used to identify a RadCal [6] species to serve as a surrogate. For example:
would use the RadCal absorptivities for METHANOL when computing the absorptivity of ETHANOL. For ab-
sorbing species not present in RadCal, it is recommended to choose a RadCal surrogate with similar molecu-
lar functional groups and molecular mass. The infrared spectrum is greatly affected by the species molecular
functional groups.
Species molecular mass also affects the spectrum: a heavier species of a given molecular functional
group tends to absorb and emit more infrared radiation than a lighter species of the same functional group.
For simple chemistry, if the fuel is not present in Table 15.1 and no FUEL_RADCAL_ID is provided on the
REAC line, then the absorption properties of methane will be used.
Gibbs Energy
If a reverse chemical reaction is specified using REVERSE=.TRUE. on a REAC input, FDS will use the
forward reaction kinetics along with the equilibrium values of the reaction to determine the value of the rate
constant for the reverse reaction. The equilibrium constant is determined from the Gibbs free energy. The
164
Gibbs free energy (kJ/mol) as a function of temperature for a species can be specified with RAMP_G_F on
the SPEC line.
Liquids
The only instance where detailed liquid properties are needed is when defining a liquid droplet for a species
not listed in Table 15.1. The necessary properties are described in Section 18.3.1.
15.1.4 Air
There are two predefined species for air in FDS. The first predefined species is the default background
species of AIR. This is a lumped species consisting of oxygen, nitrogen, carbon dioxide, and water vapor
whose mass fractions are controlled by the Y_CO2_INFTY, Y_O2_INFTY, and HUMIDITY inputs. This
lumped species is automatically defined by FDS if no other SPEC input is defined as the BACKGROUND.
Note that ID=’AIR’ cannot be used on a SPEC input unless that input or some other SPEC input is defined
as the BACKGROUND. The second predefined species is the primitive species of LJ AIR. This is an effective
gas species whose molecular weight and enthalpy are defined based on the Y_CO2_INFTY and Y_O2_INFTY
inputs, and whose other thermophysical properties use the Lennard-Jones parameters for air. For simulations
without combustion, using LJ AIR as the BACKGROUND species will slightly reduce the computational cost.
define two duplicate species, both of which are CARBON DIOXIDE. Both will use the built in property data
for CO2 (note specifying one or more properties for a duplicate species will override the default properties).
The ID for each duplicate species can then be used in the remainder of the input file. In this example,
the LUMPED_COMPONENT_ONLY was given so that FDS only tracks CO2 1 and CO2 2 and not CARBON
DIOXIDE. Note that the ID you provide for a duplicate species cannot match the ID of any other primitive
or lumped SPEC input. Also note that this feature can only be used to duplicate a predefined species (i.e. a
species listed in Table 15.1).
In the above example, the two DEVC lines refer to the IDs of the duplicate species. If instead the
primitive species ID was used, then the output would sum the mass fractions over all species containing that
primitive species. For example, if the output quantities in the example above are changed as shown below,
then Device 1 would just output the mass fraction of CO2 1 and Device 2 would output the sum of both.
Another application of this would be if you wanted to track the water that evaporated from sprinklers,
separately from the water that resulted from combustion. The following inputs would allow you to do that:
165
&REAC FUEL='PROPANE', ... /
&SPEC ID='WATER VAPOR SPK', SPEC_ID='WATER VAPOR' /
&PART ID='Sprinkler Droplets',SPEC_ID='WATER VAPOR SPK'/
&DEVC XYZ=..., QUANTITY='MASS FRACTION', SPEC_ID='WATER VAPOR SPK', ID='Spr H2O'/
&DEVC XYZ=..., QUANTITY='MASS FRACTION', SPEC_ID='WATER VAPOR', ID='All H2O'/
The gas species called WATER VAPOR SPK has the same properties as WATER VAPOR. The first device
records only water that results from droplet evaporation, and the second device records water that originates
from both sprinklers and combustion.
By default, duplicate species are considered to be a lumped species and not a primitive species. That is,
by default, a duplicate species cannot be used in a lumped species definition. Setting PRIMITIVE=.TRUE.
will have FDS treat the duplicate species as a primitive species and allow it to be used in a lumped species
definition. Note that when this is done, one can no longer aggregate SPEC_ID based outputs over the
original and the duplicate species as the aggregation is done on the basis of the primitive species names.
This is demonstrated in the example below. The species O2 and O3 are duplicate species of OXYGEN. O3 is
defined as a primitive species and O2 is considered only a lumped species. The initial DEVC outputs in order
would be 0.3 (0.1 for OXYGEN plus 0.2 for O2), 0.2 (the O2 initial value), and 0.3 (the O3 initial value). Note
the OXYGEN output is not 0.6 since the O3 is defined as a new primitive species.
&SPEC ID='NITROGEN',BACKGROUND=.TRUE./
&SPEC ID='OXYGEN',MASS_FRACTION_0=0.1/
&SPEC ID='O2',SPEC_ID='OXYGEN',MASS_FRACTION_0=0.2/
&SPEC ID='O3',SPEC_ID='OXYGEN',MASS_FRACTION_0=0.3,PRIMITIVE=.TRUE./
166
&SPEC ID='CARBON DIOXIDE', MASS_FRACTION_0=0.00046 /
The logical parameter LUMPED_COMPONENT_ONLY indicates that the species is only present as part of a
lumped species. When .TRUE., FDS will not allocate space to track that species individually. The parame-
ters to define a lumped species are:
BACKGROUND Denotes that this lumped species is to be used as the background species.
ID Character string identifying the name of the species. You must provide this. This cannot be the same as
an ID of another SPEC input.
SPEC_ID Character array containing the names of the primitive species that make up the lumped species.
MASS_FRACTION The mass fractions of the components of the lumped species in the order listed by
SPEC_ID. FDS will normalize the values to 1. Alternatively, VOLUME_FRACTION can be specified.
Do not use both on an SPEC line.
When defining a lumped species, either MASS_FRACTION or VOLUME_FRACTION must be used to define
the component species. The addition of lumped species to FDS has changed the meaning of SPEC_ID on
some FDS inputs. For INIT, MATL, PART, and SURF, SPEC_ID refers to either a tracked primitive species
or a lumped species. For outputs and devices, DEVC, that require a SPEC_ID, the SPEC_ID input can refer
to either a tracked primitive species, a lumped species, or a lumped species component that is not tracked.
For REAC see the discussion on specifying reactions in Chapter 16.
This will override the implicitly created water vapor species defined with LUMPED_COMPONENT_ONLY=.TRUE.
and cause FDS to track water vapor as a separate species. Note that in this case if you requested an output
for the mass fraction of WATER VAPOR you would get the water vapor in the air and product lumped species
as well as that which evaporated from sprinkler droplets. If you wanted in this case (where water vapor
167
is implicitly defined), to be able to track the water vapor from sprinklers separately you could follow the
example in Section 15.1.5 and define:
Using the species SPRINKLER WATER VAPOR for the sprinklers would allow you to track sprinkler gener-
ated water vapor separately.
168
Chapter 16
Combustion
A common source of confusion in FDS is the distinction between gas phase combustion and solid phase
pyrolysis. The former refers to the reaction of fuel vapor and oxygen; the latter the generation of fuel
vapor at a solid or liquid surface. Whereas there can be multiple solid or liquid combustibles in an FDS
fire simulation, in the default simple chemistry, mixing-controlled combustion model there can only be one
gaseous fuel. The reason is cost. It is expensive to solve transport equations for multiple gaseous fuels.
Consequently, the burning rates of solids and liquids are automatically adjusted by FDS to account for the
difference in the heats of combustion of the various combustibles. In effect, you specify a single gas phase
reaction as a surrogate for all potential fuels.
Combustion can be modeled in two ways. By default, the reaction of fuel and oxygen is infinitely
fast and controlled only by mixing, hence the label mixing-controlled. The alternative is that the reaction
is finite-rate. The latter approach usually requires very fine grid resolution that is not practical for large-
scale fire applications. This chapter describes both methods, with an emphasis on the more commonly used
mixing-controlled model.
There are two groups of parameters that govern combustion. The first, called the COMB namelist group,
contains parameters that pertain to any and all reactions. Specific parameters about a particular reaction are
specified using the REAC namelist group. There can only be one COMB line, but multiple REAC lines if there
are multiple reactions. If you are modeling a fire, you must specify the fuel and basic stoichiometry using a
REAC line. You need not specify a COMB line unless you want to modify mainly numerical parameters.
You need only specify the chemical formula of the fuel along with the yields of CO and soot, and the
volume fraction of hydrogen in the soot, XH . FDS will use that information and calculate the stoichiometric
169
coefficients automatically as follows:
νCO νH2 O z
νO2 = νCO2 + + −
2 2 2
νCO2 = x − νCO − (1 − XH ) νS
y XH
νH2 O = − νS
2 2
WF
νCO = yCO
WCO
WF
νs = yS
WS
v
νN2 =
2
Ws = XH WH + (1 − XH )WC
The following parameters may be prescribed on the REAC line when using the simple chemistry model. Note
that the various YIELDs are for well-ventilated, post-flame conditions. There are options to predict various
species yields in under-ventilated fire scenarios, but these special models still require the post-flame yields
for CO, soot and any other species listed below.
FUEL (Required) A character string that identifies fuel species for the reaction. When using simple chem-
istry, specifying FUEL will cause FDS to use the built-in thermophysical properties for that species
when computing quantities such as specific heat or viscosity. Table 15.1 provides a listing of the avail-
able species. If the FUEL is in the table, then FDS will use the built-in formula to obtain the values of
C, H, O, and N. If not listed in Table 15.1, FDS uses the gas thermophysical properties of ETHYLENE
along with the molecular weight given by the FORLMULA or the values of C, H, O, and N. Either way,
FDS will implicitly create a SPEC input for FUEL. This allows FUEL to be used as a SPEC_ID input
elsewhere (for example as an initial condition or an output quantity). If you define FUEL yourself as a
SPEC, any properties you specify will override the default values.
FORMULA A character string that identities the chemical formula of the fuel species for the reaction. This
input only has meaning when simple chemistry is being used and the formula can only contain C, H, O,
or N. Specifying a formula means the individual inputs of C, H, O, and N do not need to be specified.
See 15.1.2 for a description on how to input a FORMULA.
ID A character string that identifies the reaction. Normally, this label is not used by FDS, but it is useful to
label the REAC line if more than one reactions are specified.
C, H, O, N The fuel chemical formula. All numbers are positive. One of either C or H must be specified.
This input is not needed if FORMULA is specified or if the FUEL is in Table 15.1.
CO_YIELD The fraction of fuel mass converted into carbon monoxide, yCO . Note that this parameter is only
appropriate when the simple chemistry model is applied. (Default 0.)
SOOT_YIELD The fraction of fuel mass converted into smoke particulate, ys . Note that this parameter is
only appropriate when the simple chemistry model is applied. (Default 0.)
SOOT_H_FRACTION The fraction of the atoms in the soot that are hydrogen. The default value is 0.1, equiv-
alent to the input FORMULA=’C0.9H0.1’ (Section 15.1.3). Note that this parameter is only appropriate
when the simple chemistry model is applied.
170
FUEL_RADCAL_ID RadCal species to be used for the fuel. The default is the default RadCal species for the
fuel species or ’METHANE’ if there is no species default. See Section 17.4.1 for details.
The ambient mass fractions for the constituents of air are specified on MISC using the inputs:
Y_O2_INFTY Ambient mass fraction of oxygen (Default for dry air is 0.232378)
Y_CO2_INFTY Ambient mass fraction of carbon dioxide (Default for dry air is 0.000595)
HUMIDITY Relative humidity of the background air species, in units of %. (Default 40 %).
In this case, there is no need for a FORMULA or atom count because the FUEL is listed in Table 15.1. It is
assumed that the soot and CO yields are zero. FDS will compute the yields of product species and the heat
of combustion based upon predefined values.
In this case, the fuel species is again predefined. However, here the heat of combustion is specified explicitly
rather than calculated. Additionally, minor species yields have been specified with the soot yield specified
as 0.01 and the CO yield specified as 0.02. See Section 16.1.2 for more details on the heat of combustion.
In this case, the fuel is not predefined. Therefore, either the FORMULA or the atom counts must be defined.
This input defined the FORMULA. In this case, the heat of combustion is known and specified; however, if it
weren’t FDS would compute it using EPUMO2 and the fuel chemistry. Note that simple chemistry can also
be used for cases where the fuel is a lumped species so long as the defining primitive species contain only
C, H, N, and O atoms. An example can be found in Section 16.2.2.
When simple chemistry is being used, FDS will automatically create three lumped species: AIR, FUEL,
and PRODUCTS. The actual name of the fuel species will be the name given on the REAC line (for example
MY FUEL in the last sample above). FDS creates these lumped species in the same manner as you would in
an input file. FDS first defines the primitive species and then defines the lumped species. In essence FDS
internally creates input lines like those shown in Example 2 of Section 15.2. This means when doing simple
chemistry, that even though you did not explicitly define oxygen in the input file, you can request an output
for oxygen since it was implicitly defined by FDS.
171
in the FDS source code in data.f90. For reactions with species that are not included in Table 15.1, there are
several options to ensure that all of the enthalpies of formation are specified.
172
IDEAL=.FALSE.. Note that predefine fuel species have their heat of formation defined; therefore, the heat
of combustion for those species will be appropriately adjusted for soot and CO production.
Note: If you specify a heat of combustion on the REAC line, FDS will calculate the enthalpy of formation
of the fuel such that the user-specified heat of combustion is maintained. This is important to recognize for
cases where a heat of combustion is measured experimentally or if you want to model impurities in the fuel
that would not be realized using the standard heat of formation of the fuel.
If the reaction is under defined, FDS will return an error at the start of the calculation.
Int. Products + νO2 ,2 O2 −→ νCO2 CO2 + νH2 O,2 H2 O + νCO,2 CO + νS,2 Soot + νN2 ,2 N2 (16.4)
By default, in the first step, two out of three carbon atoms in the fuel are converted to CO. There is not
yet a solid basis for this assumption, and the distribution of carbon to CO and Soot can be changed via
the parameter FUEL_C_TO_CO_FRACTION on the COMB line. It is 2/3, by default. In addition, a fraction
of the hydrogen in the fuel molecule can form H2 in the first step. The controlling parameter is called
FUEL_H_TO_H2_FRACTION and it is zero by default because this chemistry is not well understood and has
been added to the two-step scheme as a placeholder for future research.
Note that the parameters CO_YIELD and SOOT_YIELD retain their meanings from the single-step simple
chemistry model; that is, they represent the post-flame yields of these species. Essentially, the two-step
model acknowledges the fact that CO and Soot are present at much higher concentrations within the flame
envelop than their post-flame yields would suggest.
The two-step simple chemistry option should only be invoked when you have an interest in near-flame
phenomena where the increased concentration of CO and Soot play an important role in the flame chemistry
and radiative emission. The resolution of the fire should be reasonably good, as well. What “reasonably
good” means depends on the particular circumstances, but suffice it to say that you ought to experiment by
running simple simulations with and without the two-step option to see if it leads to significantly different
results. The cost of the two-step scheme is an additional transport equation for the scalar variable referred
to as “Intermediate Products.”
A simple demonstration of two-step simple chemistry is given by the example cases in the Species
folder: propane_flame_2reac.fds and propane_flame_2reac_simple.fds. Both cases employ
the same two-step reaction scheme:
C3 H8 + 3 O2 −→ 2 CO + C + 4 H2 O (16.5)
2 CO + C + 4 H2 O + 2 O2 −→ 3 CO2 + 4 H2 O (16.6)
The simple version of the input file specifies the combustion parameters as follows:
173
For simplicity in setting up the complex form of the input file, the post-flame Soot (C) and CO yields are set
to zero. Within the flame envelop, Soot and CO are to be generated following the specified
FUEL_C_TO_CO_FRACTION by which 2 of the 3 carbon atoms in the fuel molecule make up CO, and 1
carbon atom forms Soot with no additional hydrogen (SOOT_H_FRACTION=0). To check that the two for-
mulations are the same, Fig. 16.1 displays the heat release and radiative heat release rates for the first few
seconds of simulation.
FDS6.7.1-0-g14cc738-master
60
HRR Check (propane_flame_2reac)
Heat Release Rate (kW) 40
Complex (HRR)
Complex (Q_RADI)
20 Simple (HRR)
Simple (Q_RADI)
-20
0 0.5 1 1.5 2
Time (s)
Figure 16.1: Demonstration that the simplified form of the two-step simple chemistry input parameters are
equivalent to a more complex form.
174
ζ0 = 1 by default, then combustion is considered non-premixed within the grid cell. In this case, the fuel and
air are considered completely separate at the start of the time step and must mix together before they burn.
This means if the mixing is slow enough, that unburned fuel may exist at the end of the time step even if
sufficient oxygen is present in the grid cell to burn all the fuel. If the cell is initially fully mixed, ζ0 = 0, then
the combustion is considered premixed (e.g., equivalent to infinitely fast mixing). You can set the amount of
mixing in each cell at the beginning of every time step using the parameter INITIAL_UNMIXED_FRACTION
on the COMB line.
The mixing time, τmix , is a function of the the level of turbulence in the neighborhood of the point of
interest. However, you may override the calculation of τmix by setting a FIXED_MIX_TIME (s) on the COMB
line. Alternatively, you can bound the computed value of τmix by setting a lower bound TAU_CHEM and/or
an upper bound TAU_FLAME on the COMB line.
Unlike earlier versions, FDS no longer uses the mixture fraction approach for combustion modeling.
However, the ’MIXTURE FRACTION’ output quantity applies the Burke-Schumann solution [40] to map
species composition to mixture fraction (i.e., mixture fraction is not a primitive flow variable but rather is
calculated from the local fuel and product mass fractions). This requires simple chemistry with a reaction
of the type F + A → P with infinitely fast mixing and infinitely fast chemistry. Therefore, you must set
INITIAL_UNMIXED_FRACTION=0 to output ’MIXTURE FRACTION’.
The Technical Reference Guide [3] contains more detailed information about the turbulent combustion
model.
∆Hc /r
TOI = T0 + XOI (16.8)
n cp
1 To eliminate any gas phase suppression, set SUPPRESSION=.FALSE. on the COMB line.
175
where
T0 Initial temperature of the fuel/air mixture (ambient conditions) (K)
XOI Limiting oxygen volume fraction
∆Hc /r Heat of combustion per mole of oxygen consumed (kJ/mol)
n Number of moles of products of combustion per mole of fuel/air mixture
cp Average heat capacity (kJ/(mol·K)) of products of combustion in the range T0 to TOI
Based on the oxygen and methane concentration and the temperature in each box, combustion can or cannot
occur according to the ’EXTINCTION 2’ model, as shown in Fig. 16.2. The FDS predictions based on
the ’EXTINCTION 2’ model confirm that conditions that sustain burning (red crosses) or cause extinction
(blue stars) fall closely on the expected results using thermophysical properties of the reactants and products.
The simplified linear model, ’EXTINCTION 1’, conforms well with the more detailed calculation. More
detailed information on the extinction model can be found in the Technical Reference Guide [1].
176
FDS6.7.1-0-g14cc738-master
0.14
0.1
0.08
0.06
0.04
0.02
0
0 500 1000 1500
Temperature ( °C)
Figure 16.2: Viability of combustion for an array of initial temperatures and oxygen concentrations.
The REAC line specifies an AIT of 627 ◦C throughout the domain except within the region specified by XB
at the base of the burner where the AIT is effectively turned off. You can achieve a similar end with the
following SURF line:
177
&REAC ID='R1', FUEL='METHANE', AUTO_IGNITION_TEMPERATURE=627., RAMP_AIT='R1 AIT RAMP'
/
&RAMP ID='R1 AIT RAMP', T=0., F=0. /
&RAMP ID='R1 AIT RAMP', T=10., F=1. /
&REAC FUEL='METHANE' /
By default, there are trace amounts of carbon dioxide and water vapor in the air, which, like the nitrogen, is
carried along in the reaction. This is important, because the more complicated way to specify a single step
reaction of methane is as follows:
&SPEC ID='PRODUCTS',
SPEC_ID(1)='CARBON DIOXIDE', VOLUME_FRACTION(1)=0.0944,
SPEC_ID(2)='WATER VAPOR', VOLUME_FRACTION(2)=0.1966,
SPEC_ID(3)='NITROGEN', VOLUME_FRACTION(3)=0.7090 /
The reaction stoichiometry is specified using the stoichiometric coefficients, NU(N), corresponding to the
178
tracked2 species, SPEC_ID_NU(N). There are several parameters on the REAC line that control the specifi-
cation of the stoichiometry:
CHECK_ATOM_BALANCE If chemical formulas are provided for all species that participate in a reaction, then
FDS will check the stoichiometry to ensure that atoms are conserved. Setting this flag to .FALSE. will
bypass this check. (Default .TRUE.)
REAC_ATOM_ERROR Error tolerance in units of atoms for the reaction stoichiometry check. (Default 0.00001)
Non-Simple Chemistry Compatible Fuels Fires, however, often involve fuels that do not just consist of
C, H, N, and O. For example, chlorine is commonly found in building and household materials, and because
of its propensity to form the acid gas HCl, you may want to account for it in the basic reaction scheme.
Suppose the predominant fuel in the fire is polyvinyl chloride (PVC). Regardless of its detailed polymeric
structure, it can be regarded as C2 H3 Cl for the purpose of modeling. Assuming that all of the Cl in the fuel is
converted into HCl, you can derive a single-step reaction mechanism using appropriate soot and CO yields
for the specified fuel. In this example, the SFPE Handbook [42] is used to find soot and CO yields for PVC;
0.172 and 0.063, respectively. For a given species, α, its stoichiometric coefficient, να , can be found from
its yield, yα , and its molecular weight, Wα , according to the formula:
WF
να = yα (16.11)
Wα
2A “tracked” species is one for which LUMPED_COMPONENT_ONLY is .FALSE.
179
Since it is assumed that all of the Cl is converted to HCL, the remainder of the stoichiometric coefficients
come from an atom balance. An equation can now be written to include the appropriate numerical values
for the stoichiometric coefficients.
The choice of fuel in this example, PVC, is not defined in Table 15.1, therefore its properties must be defined
on a SPEC line. In this example, we use the species’ chemical formula. The example will also use the lumped
species formulation to minimize the number of scalar transport equations that need to be solved. Therefore,
each species that does not have an explicit transport equation is a LUMPED_COMPONENT_ONLY.
For the oxidizer and products, which are both composed of multiple primitive species, SPEC lines are needed
to define the composition of the lumped species. You can define the SPEC using either the MASS_FRACTIONS
of the component gases or the VOLUME_FRACTIONS. If Eq. (16.12) is properly balanced, you can directly
use the stoichiometric coefficients of the primitive species to define the lumped species.
&SPEC ID='PRODUCTS',
SPEC_ID(1)='HYDROGEN CHLORIDE', VOLUME_FRACTION(1)=1.0,
SPEC_ID(2)='WATER VAPOR', VOLUME_FRACTION(2)=1.0,
SPEC_ID(3)='CARBON MONOXIDE', VOLUME_FRACTION(3)=0.14,
SPEC_ID(4)='CARBON DIOXIDE', VOLUME_FRACTION(4)=0.96,
SPEC_ID(5)='SOOT', VOLUME_FRACTION(5)=0.90,
SPEC_ID(6)='NITROGEN', VOLUME_FRACTION(6)=5.76 /
Since this is not a simple chemistry problem, either the enthalpy of formation of PVC or the heat of com-
bustion of the reaction should be specified. In this case, the heat of combustion for PVC is taken from the
SFPE Handbook [42].
Note that the sign of NU corresponds to whether that species is consumed (-) or produced (+). Figure 16.3
displays the mass fractions of the product species for the sample case PVC_Combustion. Also note that the
180
values for NU reflect the composition of the species as defined on the SPEC lines. If, for example, the PVC
SPEC was defined as CH1.5Cl0.5, then the REAC would require NU=-2,-1,1. A fixed turbulent mixing
time of 0.1 s is used for this example only because the reactants are initially mixed within a chamber with
no imposed flow. Normally, this parameter is not necessary.
FDS6.7.1-0-g14cc738-master
0.3
Species Mass Fraction (PVC)
0.25
Expected CO2
Expected CO
0.2 Expected H2O
Mass Fraction
Expected Soot
Expected HCl
0.15 FDS CO2
FDS CO
0.1 FDS H2O
FDS Soot
FDS HCl
0.05
0
0 0.5 1 1.5 2
Time (s)
Figure 16.3: Product species mass fractions for model PVC example.
C3 H8 + 3 O2 −→ 2 CO + 4 H2 O + C (16.13)
CO + 0.5 O2 −→ CO2 (16.14)
C + O2 −→ CO2 (16.15)
In the first step, the fuel is converted quickly to CO, H2 O and soot (C), and then the CO and soot are
converted to CO2 if there is available oxygen. All the reactions are “fast” relative to the mixing time of the
reactants within a grid cell, but the second and third reactions are assumed to occur more slowly than the
first. By default, FDS forces all fast reactions to occur instantaneously and simultaneously. However, if you
want to specify that the reactions occur serially, use the parameter PRIORITY as in the following set of input
lines:
&REAC ID='R1'
FUEL='PROPANE'
SPEC_ID_NU='PROPANE','OXYGEN','CARBON MONOXIDE','WATER VAPOR','SOOT'
181
SOOT_H_FRACTION=0.
NU=-1,-3,2,4,1 /
&REAC ID='R2'
FUEL='CARBON MONOXIDE'
SPEC_ID_NU='CARBON MONOXIDE','OXYGEN','CARBON DIOXIDE'
NU=-1,-0.5,1
PRIORITY=2 /
&REAC ID='R3'
FUEL='SOOT'
SPEC_ID_NU='SOOT','OXYGEN','CARBON DIOXIDE'
NU=-1,-1,1
PRIORITY=2 /
By specifying PRIORITY=2 for reactions R2 and R3, you are assuming that the first reaction, R1, occurs
first, followed by R2 and R3. This sequence allows for the build-up of soot and CO in compartments that
are oxygen starved.
Note that in this reaction scheme, the extinction model is applied to the first reaction but not the second
and third because the default extinction model is only applied to the first of multiple fast reactions. For more
information on extinction, see Section 16.1.6.
and the reaction for wood with a soot yield of ys = 0.015 and a CO yield of yCO = 0.004 [42] is:
Similar to example in Section 16.2.2, we will use the lumped species approach to minimize the number of
species that FDS needs to transport. Therefore, the species are defined in the following manner:
182
Examination of Eq. (16.16) and Eq. (16.17) shows that, while Products_1 and Products_2 are composed of
the same species, the species do not exist in the same proportion. As a result, we must construct two separate
product lumped species.
&SPEC ID = 'AIR',
SPEC_ID(1) = 'OXYGEN', VOLUME_FRACTION(1)=1,
SPEC_ID(2) = 'NITROGEN', VOLUME_FRACTION(2)=3.76,
BACKGROUND=.TRUE. /
&SPEC ID = 'PRODUCTS_1',
SPEC_ID(1) = 'CARBON DIOXIDE', VOLUME_FRACTION(1) = 19.79113,
SPEC_ID(2) = 'CARBON MONOXIDE', VOLUME_FRACTION(2) = 0.166587,
SPEC_ID(3) = 'WATER VAPOR', VOLUME_FRACTION(3) = 20.71987,
SPEC_ID(4) = 'SOOT', VOLUME_FRACTION(4) = 5.60253,
SPEC_ID(5) = 'NITROGEN', VOLUME_FRACTION(5) = 103.40121 /
&SPEC ID = 'PRODUCTS_2',
SPEC_ID(1) = 'CARBON DIOXIDE', VOLUME_FRACTION(1) = 0.964679,
SPEC_ID(2) = 'CARBON MONOXIDE', VOLUME_FRACTION(2) = 0.003655,
SPEC_ID(3) = 'WATER VAPOR', VOLUME_FRACTION(3) = 0.848241,
SPEC_ID(4) = 'SOOT', VOLUME_FRACTION(4) = 0.035184,
SPEC_ID(5) = 'NITROGEN', VOLUME_FRACTION(5) = 3.838558 /
Once we have constructed the lumped species, we can define the REAC lines.
&REAC ID = 'plastic',
FUEL = 'POLYURETHANE',
HEAT_OF_COMBUSTION=26200,
SPEC_ID_NU = 'POLYURETHANE','AIR','PRODUCTS_1'
NU=-1,-27.23436,1 /
&REAC ID = 'wood'
FUEL = 'WOOD',
HEAT_OF_COMBUSTION=16400,
SPEC_ID_NU = 'WOOD','AIR','PRODUCTS_2'
NU=-1,-1.02063,1 /
In both of these reactions, the ENTHALPY_OF_FORMATION of the chosen fuels is unknown to FDS, so the
HEAT_OF_COMBUSTION is specified for each reaction. Typically, the heat release per unit area (HRRPUA)
parameter is used to specify the fire size on the SURF line. The HRRPUA parameter cannot currently be used
when there is more than one fuel, so the mass flux of fuel must be specified for each fuel. In this example,
we want both fuels to flow out of the same burner and ramp up to a 1200 kW fire after 60 s. First, we create
a 1 m2 burner by defining a VENT line:
The VENT points to the SURF_ID=’FIRE1’ which we can define using both fuels. The mass flux values for
each fuel are determined by the desired heat release, the proportion of the total heat release rate each fuel
contributes, the burner area, and the heat of combustion of each fuel. In this case we want a 1200 kW fire
where each fuel contributes 50% to the total heat release rate (600 kW).
600 kW 1
ṁ00poly = 2
= 0.022901 kg/(m2 · s) (16.18)
1 m 26200 kJ/kg
600 kW 1
ṁ00wood = 2
= 0.036585 kg/(m2 · s) (16.19)
1 m 16400 kJ/kg
183
&SURF ID='FIRE1', SPEC_ID(1)='POLYURETHANE', MASS_FLUX(1)=0.022901, RAMP_MF(1)='poly'
SPEC_ID(2)='WOOD', MASS_FLUX(2)=0.036585, RAMP_MF(2)='wood'/
Note that the SPEC_ID, MASS_FLUX, and RAMP_MF correspond to one another for each fuel. It does not
matter which fuel is (1), just that the numbering is consistent. We also want each fuel to follow a ramp
such that fire starts at 0 kW at the initial time, reaches 1200 kW at 100 s, and remains at 1200 kW for the
remainder of a 600 s simulation.
Here, T corresponds to the time and F is the fraction of the mass flux specified on the SURF line. Fig. 16.4
compares the resulting FDS heat release rate (HRR) to the expected HRR from the defined ramp. Note that
in this simulation, there is 10 s averaging on the FDS output HRR (&DUMP DT_HRR=10) and the expected
results account for this averaging.
FDS6.7.1-0-g14cc738-master
1500
Energy Budget (two fuels)
Energy Rate (kW)
1000
500
Expected (HRR)
FDS (HRR)
0
0 100 200 300 400 500 600
Time (s)
Note that when using multiple chemical reactions, you must set SUPPRESSION=.FALSE. on the COMB
line.
• The species name is its chemical formula as defined on the SPEC line or by the species ID.
184
• The stoichiometry is given before each species and is separated by an asterisk. Real numbers are allowed
but exponential notation is not (i.e., 201.1 but not 2.011E2).
For example, if the reaction defines the complete combustion of methane using primitive species, then the
following would be equivalent:
185
16.3 Finite Rate Combustion
By default, FDS uses a mixing-controlled combustion model, meaning that the reaction rate is infinite and
limited only by species concentrations. However, FDS can also employ finite-rate reactions using an Ar-
rhenius model. It is recommended that finite-rate reactions be invoked only when FDS is running in DNS
mode (DNS=.TRUE. on the MISC line). You can use the finite-rate reaction model in an LES calculation,
but because the temperature in a large scale calculation is smeared out over a mesh cell, some of the reaction
parameters may need to be modified to account for the lower cell-averaged temperatures.
&REAC ID = 'R1'
FUEL = 'PROPANE'
A = 8.6e11
E = 125520
SPEC_ID_NU = 'PROPANE','OXYGEN','CARBON DIOXIDE','WATER VAPOR'
NU = -1,-5,3,4
SPEC_ID_N_S = 'PROPANE','OXYGEN'
N_S = 0.1,1.65 /
186
The array SPEC_ID_NU contains the list of tracked species participating in the reaction as a product or reac-
tant. Note that a primitive species with LUMPED_COMPONENT_ONLY=.TRUE. cannot be used in a reaction
since it is not tracked separately. The array SPEC_ID_N_S contains the list of species with the exponents,
N_S, in Eq. (16.21). This array must contain only primitive species, i.e., no species mixtures. The array of
stoichiometric coefficients, NU, can be taken directly from Eq. (16.20).
C3 H8 + 3.5 O2 → 3 CO + 4 H2 O (16.24)
CO + 0.5 O2 CO2
In this case we will combine fast chemistry with finite-rate chemistry to create a mixed reaction mechanism.
As before, we use primitive species rather than mixtures. A REAC line is needed for each reaction including
the reverse reaction. The propane oxidation reaction is a fast chemistry while the reversible carbon monoxide
reaction is finite-rate. The Arrhenius parameters are modified from Andersen et al. [44]:
&REAC ID = 'R1'
FUEL = 'PROPANE'
SPEC_ID_NU = 'PROPANE','OXYGEN','CARBON MONOXIDE','WATER VAPOR'
NU = -1,-3.5,3,4 /
&REAC ID = 'R2'
FUEL = 'CARBON MONOXIDE'
A = 1.5e9
E = 41840
SPEC_ID_NU = 'CARBON MONOXIDE','OXYGEN','CARBON DIOXIDE'
NU = -1,-0.5,1
SPEC_ID_N_S = 'OXYGEN','CARBON MONOXIDE','WATER VAPOR'
N_S = 0.25,1,0.5 /
&REAC ID = 'R3'
FUEL = 'CARBON DIOXIDE'
A = 6.16e13
E = 328026
SPEC_ID_NU = 'CARBON DIOXIDE','OXYGEN','CARBON MONOXIDE'
NU = -1,0.5,1
SPEC_ID_N_S = 'OXYGEN','CARBON DIOXIDE','WATER VAPOR'
N_S = -0.25,1,0.5
N_T = -0.97 /
For the reaction R2, the reaction rate depends on the water vapor concentration, as indicated by its assign-
ment of a value of N_S. However, it does not explicitly participate in the reaction because it is not assigned
a stoichiometric coefficient, NU. Reactions of this sort are often written in textbooks as
H O
2
a X + b Y −→ Xa Yb (16.25)
However, for the purposes of inputting into FDS, since H2 O is neither a product nor a reactant it would not
be specified in the chemical reaction using either EQUATION or NU. It would instead be given a rate exponent
using N_S to indicate that its presence is required.
As discussed previously (Section 16.1.2), energy release is calculated using the net change of species
in a time step along with the enthalpy of formation of each species. This approach makes specifying an
187
endothermic reaction, such as the reversible CO2 reaction (R3), no different than typical FDS exothermic
combustion reactions.
16.3.2 Catalysts
Some reactions require the presence of any third body to stabilize the reaction rather than just a specific
species. Reactions of this type are often write in textbooks as
a X + b Y + M → Xa Yb + M (16.26)
This type of reaction is specified by adding THIRD_BODY=.TRUE. to the REAC line for the reaction. The
species M should not otherwise be defined.
188
16.4 Special Topic: Aerosol Deposition
It is possible within FDS to model the deposition of smoke and aerosols onto solid surfaces. The aerosol
deposition model is invoked by defining a species with the parameter AEROSOL=.TRUE. on the SPEC line
along with the parameters DENSITY_SOLID, CONDUCTIVITY_SOLID, and MEAN_DIAMETER. By default,
with AEROSOL=.TRUE., FDS will compute all of the aerosol deposition mechanisms discussed in the Tech-
nical Reference Guide [3]. For diagnostic purposes, each surface deposition mechanism can be selectively
disabled by using the logical parameters GRAVITATIONAL_DEPOSITION, THERMOPHORETIC_DEPOSITION,
and TURBULENT_DEPOSITION. All surface deposition can be disabled by the logical parameter DEPOSITION.
In the gas phase, aerosol transport is affected by gravity and temperature gradients. These effects can be
selectively disabled with GRAVITATIONAL_SETTLING and THERMOPHORETIC_SETTLING. All the deposi-
tion parameters are on the MISC line. The deposition velocity at the wall can be output using the solid phase
output QUANTITY called ’DEPOSITION VELOCITY’.
Note that the stoichiometric coefficient for soot ensures that the mass of soot produced is 0.05 times the
mass of fuel consumed. This example uses the lumped species formulation to minimize the number of
scalar transport equations that need to be solved. Note that for soot to deposit it must be explicitly tracked
by defining AEROSOL=.TRUE. on the SPEC line.
&SPEC ID = 'PROPANE' /
&SPEC ID = 'OXYGEN', LUMPED_COMPONENT_ONLY = .TRUE. /
&SPEC ID = 'NITROGEN', LUMPED_COMPONENT_ONLY = .TRUE. /
&SPEC ID = 'WATER VAPOR', LUMPED_COMPONENT_ONLY = .TRUE. /
&SPEC ID = 'CARBON DIOXIDE', LUMPED_COMPONENT_ONLY = .TRUE. /
&SPEC ID = 'SOOT', AEROSOL = .TRUE. /
If Eq. (16.27) is properly balanced, you can directly use the stoichiometric coefficients of the primitive
species to define the lumped species:
The heat of combustion for propane is found in the SFPE Handbook [42].
189
Note: The sign of NU corresponds to whether that species is consumed (-) or produced (+). Figure 16.5
shows the soot surface deposition on the wall. This boundary quantity is given by the input below.
Figure 16.5: Wall soot deposition for the propane_flame_deposition test case.
190
model will agglomerate each species independently, that is particles of different species do not agglomerate
together into a larger mixed-species particle. The following input defines a soot species as an aerosol with
10 bins between 1 and 100 µm. Each bin will be created as its own lumped species with names SOOT_1
through SOOT_10. A summary of the particle bins will be written to the CHID.out file.
191
Chapter 17
Radiation
There are four ways of treating thermal radiation in FDS, as explained in the following sections.
193
Table 17.1: Default radiative fraction for some common fuels.
Species χr Reference
ACETONE 0.27 [42]
ACETYLENE 0.49 [42]
BENZENE 0.60 [42]
BUTANE 0.30 [46]
DODECANE 0.40 [46]
ETHANE 0.25 [42]
ETHANOL 0.25 [42]
ETHYLENE 0.25 [46]
HYDROGEN 0.20 [46]
ISOPROPANOL 0.29 [42]
METHANE 0.20 [46]
METHANOL 0.16 [42]
N-DECANE 0.40 [46]
N-HEPTANE 0.40 [46]
N-HEXANE 0.40 [46]
N-OCTANE 0.40 [46]
PROPANE 0.30 [46]
PROPYLENE 0.37 [42]
TOLUENE 0.40 [47]
All other species 0.35
194
17.1.3 Radiation Option 3. Optically-Thick; Specified Radiative Fraction (LES Default)
In its normal operation, the RTE transfers energy from hot, emitting gases, like flames, to colder, absorbing
gases like water vapor or soot particulate. The absorption coefficient, κ, computed using RadCal, governs
both the emission and absorption of thermal radiation. Because flame temperatures are not well-resolved
for typically large-scale fire simulations, the source term in the RTE is adjusted in grid cells for which the
radiative fraction, χr , times the local heat release rate per unit volume, q̇000 , is greater than 10 kW/m3
The adjustment ensures that the net radiative emission from the combusting region (i.e. the fire) is the speci-
fied RADIATIVE_FRACTION multiplied by the total combustion energy generated in this region. Elsewhere,
hot and cold gases emit and absorb thermal radiation according to their bulk temperature and radiative
properties, in particular the absorption coefficient, κ.
The net radiative loss from the computational domain is reported as a function of time in the column
Q_RADI in the output file CHID_hrr.csv. The absolute value of Q_RADI divided by the total heat release
rate, HRR, is usually not exactly equal to the specified RADIATIVE_FRACTION. The reason for this is that
the specified radiative fraction of the fire’s energy can be reabsorbed by colder combustion products such
as smoke and water vapor, thereby decreasing the absolute value of Q_RADI. Or, hot layer smoke and
combustion products can heat up and emit thermal radiation, adding to the absolute value of Q_RADI.
The correction factor that is applied to the RTE source term in the region defined by Eq. (17.1) by
default is bound between 1 and 100, meaning that the correction factor only increases the net radiative
output of the combusting region, if necessary, to achieve the desired RADIATIVE_FRACTION. However,
you can change the default behavior of the correction as follows. First, you can force the RTE source
term to be modified in all grid cells by changing the 10 in Eq. (17.1) to -1 via QR_CLIP on the RADI
line, in which case the solver will apply the radiative fraction to the entire domain, not just the cells where
combustion occurs. This will essentially force the net radiative loss from the entire domain to obey the
RADIATIVE_FRACTION. Second, you can allow the RTE source term to increase or decrease in value to
achieve the desired RADIATIVE_FRACTION by changing the lower limit of the correction factor, C_MIN,
from its default value of 1 to, say, 0.5 on the RADI line. The corresponding parameter, C_MAX, limits the
correction factor to 100.
195
tracked, you will see in the far field a star-like pattern that is not physical. If there are no important “targets”
far from the heat source, this nonphysical pattern can be ignored, but if there are important targets, then
increase the number of angles until you see a relatively smooth pattern over the region of interest.
The frequency of calls to the radiation solver can be changed from every 3 time steps with an integer
called TIME_STEP_INCREMENT. The increment over which the angles are updated can be reduced from
5 with the integer called ANGLE_INCREMENT. If TIME_STEP_INCREMENT and ANGLE_INCREMENT are
both set to 1, the radiation field is completely updated in a single time step, but the cost of the calculation
increases significantly. By default, the radiation transport equation is fully updated every 15 time steps.
Given the relatively small time steps dictated by the CFL constraint, 15 time steps is usually still a relatively
short interval of time. Increasing the temporal resolution of the radiation solver rarely adds to the overall
accuracy of the calculation. Spatial resolution is far more important.
If you are using multiple meshes, the radiation solver cannot transfer energy from mesh to mesh within
a single time step. If you notice an obvious delay in the propagation of radiative intensity from one mesh
to another, you can increase the number of times the radiative intensity is updated within a single time step
using RADIATION_ITERATIONS, which is 1 by default. You rarely need to do this, unless it is obvious from
the animation of various slice files.
The radiation solver is called before the start of the calculation to establish the radiation field in the
event that you specify something to have a non-ambient temperature initially. By default, the radiation and
wall boundary routines are iterated three times to establish thermal equilibrium. To change the number of
iterations, set NUMBER_INITIAL_ITERATIONS on the RADI line.
Time variation of radiative fraction Even for a single fuel species the global flame radiative fraction may
depend on other parameters of the problem like global equivalent ratio. If a time variation of the radiative
fraction is necessary, it may be added through a ramp function, RAMP_CHI_R, on the REAC line. The results
of running the ramp_chi_r test case containing the RAMP given below is shown in Fig. 17.1.
196
FDS6.7.1-0-g14cc738-master
0.3
Ramp Radiative Fraction (ramp_chi_r)
0.25
Radiative Fraction
Expected
0.2 FDS
0.15
0.1
0 2 4 6 8 10
Time (s)
Path Length
Because RadCal computes effective absorption coefficients over a range of wavelengths, it requires a user-
specified PATH_LENGTH (m). Its default value is 0.1 m.
Fuel Species
The original version of RadCal included only absorption data for methane, which was used as a surro-
gate for any fuel. However, more fuel species have been added to RadCal. The current list of fuels in-
cludes: METHANE, ETHYLENE, ETHANE, PROPANE, N-HEPTANE, METHANOL, TOLUENE, PROPYLENE, and
MMA. These species are in addition to the RadCal species of: CARBON DIOXIDE, CARBON MONOXIDE,
WATER VAPOR, and SOOT.
197
Other parameters affecting the computations of particle-radiation interaction are listed here. RADTMP
is the assumed radiative source temperature. It is used in the spectral weighting during the computation
of the mean scattering and absorption cross sections. The default is 900 ◦ C. NMIEANG is the number of
angles in the numerical integration of the Mie-phase function. Increasing NMIEANG improves the accuracy
of the radiative properties of water droplets. The cost of the better accuracy is seen in the initialization
phase, not during the actual simulation. The default value for NMIEANG is 15. For each class of particles,
the Mie coefficients are calculated for a wide range of droplet diameters to ensure that the all possible run-
time situations can be covered. To speed up the initialization phase, the range of diameters can be limited by
parameters MIE_MINIMUM_DIAMETER and MIE_MAXIMUM_DIAMETER. Also, the size of the Mie coefficient
tables can be specified using MIE_NDG parameter.
The radiation properties of most common gases involved in combustion processes (water vapor, carbon
dioxide, carbon monoxide, fuel) and soot particles are automatically taken into account if the simulation
involves combustion. In simulations with no combustion nor radiating species, it is possible to use a constant
absorption coefficient by specifying KAPPA0 on the RADI line.
198
Chapter 18
Lagrangian particles can be used to represent a wide variety of objects that are too small to resolve on the
numerical grid. FDS considers three major classes of Lagrangian particles: massless tracers, liquid droplets,
and everything else. The parameters describing particles are found on the PART line.
18.1 Basics
Properties of different types of Lagrangian particles are designated via the PART namelist group. Once
a particular type of particle has been described using a PART line, then the name of that particle type is
invoked elsewhere in the input file via the parameter PART_ID. There are no reserved PART_IDs – all must
be defined. For example, an input file may have several PART lines that include the properties of different
types of Lagrangian particles:
Particles are introduced into the calculation in several different ways: they may be introduced via a sprinkler
or nozzle (liquid droplets are usually introduced this way), they may be introduced at a blowing vent or
burning surface (mass tracer particles or particles representing embers are usually introduced this way), and
they may be introduced randomly or at fixed points within a designated volume (solid particles that represent
subgrid-scale objects are usually introduced this way). Details are found below.
The way to describe particles depends on the type. If you simply want massless tracers, specify
MASSLESS=.TRUE. on the PART line. If you specify a SPEC_ID, then FDS automatically assumes that
you want relatively small, thermally-thin evaporating liquid droplets. For any other type of particle, such
as particles that represent subgrid-scale objects, like office clutter or vegetation, you add a SURF_ID to the
PART line. All of these different types of particles are described below.
Note that if the particles are MASSLESS, it is not appropriate to color them according to any particular
property. Particles are not colored by gas phase quantities, but rather by properties of the particle itself. For
199
example, ’PARTICLE TEMPERATURE’ for a non-massless particle refers to the temperature of the particle
itself rather than the local gas temperature. Also note that if MASSLESS=.TRUE., the SAMPLING_FACTOR
(Section 20.9) is set to 1 unless you say otherwise, which would be pointless since MASSLESS particles are
for visualization only.
Turbulent Dispersion
Massless tracer particles may also be useful in modeling dispersion of a tracer gas that does not affect the
mean flow field (passive scalar). The number density of the particles then may be translated into a local
mass concentration. See how to output number concentration in Sec. 20.10.10. To properly account for
subgrid-scale (unresolved) turbulent motions, add the parameter TURBULENT_DISPERSION=.TRUE. to the
PART line. The particles will then undergo a random walk based on the subgrid diffusivity. For further
information, see the random_walk test cases in the WUI directory of the verification suite.
200
18.3 Liquid Droplets
Lagrangian particles that are not just massless tracers fall into two main categories – liquid droplets or solid
particles. This section describes the former; and the next, the latter.
To define an evaporating liquid droplet, you must specify the name of the gas species created by evapo-
ration via the SPEC_ID on the PART line:
By specifying a SPEC_ID, you are implicitly invoking the droplet evaporation model. Alternatively, if you
specify a SURF_ID, you are designating a solid particle that behaves according to the given SURF line. Solid
particles are described in Section 18.4.
There might be other optional parameters listed on the PART line, but these are the ones that are absolutely
necessary. In addition, if SPEC_ID=’WATER VAPOR’ the droplets are not only assigned the thermo-physical
properties of water, but also the radiation absorption properties are set to that of water, and the droplets are
colored blue in Smokeview.
DENSITY_LIQUID (kg/m3 ).
SPECIFIC_HEAT_LIQUID (kJ/(kg · K)). If the specific heat of the liquid is a function of temperature, use
RAMP_CP_L to provide the function c p (T ).
201
H_V_REFERENCE_TEMPERATURE The temperature corresponding to the HEAT_OF_VAPORIZATION (◦ C).
Note that FDS will adjust the liquid enthalpy so that the following relationship holds:
&REAC FUEL='N-HEPTANE',SOOT_YIELD=0.01 /
Many of these parameters are self-explanatory. Note that a 2 MW fire is achieved via 2 nozzles flowing
202
heptane at 1.96 L/min each:
L 1 min kg 1 m3 kJ
2 × 1.97 × × 684 3 × × 44500 = 2000 kW (18.2)
min 60 s m 1000 L kg
The parameter HEAT_OF_COMBUSTION over-rides that for the overall reaction scheme. Thus, if other
droplets or solid objects have different heats of combustion, the effective burning rates are adjusted so
that the total heat release rate is that which you expect. However, exercises like this ought to be conducted
just to ensure that this is the case. The HRR curve for this example is given in Fig. 18.1.
FDS6.7.1-0-g14cc738-master
2500
Heat Release Rate (spray_burner)
2000
Heat Release Rate (kW)
1500
1000
500
Specified (HRR)
FDS (HRR)
0
0 10 20 30 40 50 60
Time (s)
Note also that this feature is subject to mesh dependence. If the mesh cells are too coarse, the evaporating
fuel can be diluted to such a degree that it may not burn. Proper resolution depends on the type of fuel and
the amount of fuel being ejected from the nozzle. Always test your burner at the resolution of your overall
simulation.
203
For calculating the absorption of thermal radiation by particles, FDS uses a running average of particle
temperature and density. The RUNNING_AVERAGE_FACTOR is set on the PART line, and its default value is
0.5 for liquid droplets and 0 for solid particles. The value of 0 indicates that no running average is used.
Alternatively, you can specify ’LOGNORMAL’ or ’ROSIN-RAMMLER’ alone rather than the combination of
the two. Figure 18.2 displays the possible size distributions. Notice that the ’LOGNORMAL’ and
’ROSIN-RAMMLER’ distributions have undesirable attributes at opposite tails, which is why the combina-
tion of the two is commonly used. Figure 18.2 also shows a comparison between the prescribed distribution
and the actual realized distribution of droplet sizes. The dashed lines show the measured droplet size dis-
tributions, while the solid lines show the prescribed sampling distributions. The sampled distributions are
measured with the PDPA_HISTOGRAM function. Sample size of 10000 droplets was used.
The median volumetric diameter, Dv,0.5 , is specified via the parameter DIAMETER (µm) on the PART
line. You must specify the DIAMETER in cases where the droplets evaporate (in which case you also need
to specify a SPEC_ID to indicate the gas species generated by the evaporating droplets). The width of the
lognormal distribution, σ , is specified with SIGMA_D on the PART line. The width of the Rosin-Rammler
distribution, γ, is specified with√GAMMA_D (default 2.4). Note that in the combined distribution, the param-
eter, σ , is calculated σ = 2/( 2π (ln 2) γ) = 1.15/γ which ensures that the two functions are smoothly
joined at D = Dv,0.5 . You can also add a value for SIGMA_D to the PART line if you want to over-ride this
feature. The larger the value of γ, the narrower the droplet size is distributed about the median value.
You can specify your own cumulative number fraction (CNF)2 by specifying a CNF_RAMP_ID on the
PART line and including a RAMP that gives the CNF:
Note that the RAMP variable T indicates the diameter and is given in micrometers. The fourth plot in Fig. 18.2
is an example of where the CNF is specified and the CVF is calculated from it. It is essentially the reverse
of what is shown in the first plot, where the CVF is specified and the CNF is calculated from it.
As droplets are created in the simulation, their diameters are randomly chosen based on the given distri-
bution. You can prevent excessively large droplets from being chosen by specifying a MAXIMUM_DIAMETER,
which is assigned an infinitely large value by default. Droplets less than a specified MINIMUM_DIAMETER
are assumed to evaporate in a single time step. The default value is 0.005 times the value of DIAMETER. The
1 The CVF indicates the fraction of total mass carried by droplets less than the given diameter.
2 The CNF indicates the fraction of total droplets whose diameters are less than the given diameter.
204
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1 1
Lognormal Distribution Rosin-Rammler-Lognormal Distribution
0.8 0.8
0.6 0.6
0.4 0.4
CNF (Prescribed) CNF (Prescribed)
0.2 CVF (Prescribed) 0.2 CVF (Prescribed)
CNF (Sampled) CNF (Sampled)
CVF (Sampled) CVF (Sampled)
0 0
0 500 1000 1500 2000 0 500 1000 1500 2000
Diameter ( m) Diameter ( m)
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
1 1
Rosin-Rammler Distribution User Defined Distribution
0.8 0.8
0.6 0.6
0.4 0.4
CNF (Prescribed) CNF (Prescribed)
0.2 CVF (Prescribed) 0.2 CVF (Prescribed)
CNF (Sampled) CNF (Sampled)
CVF (Sampled) CVF (Sampled)
0 0
0 500 1000 1500 2000 0 500 1000 1500 2000
Diameter ( m) Diameter ( m)
Figure 18.2: Droplet size distributions. The first three plots are based on a specified CVF from which the
CNF is derived. The fourth plot (lower right) is an example of a specified CNF from which the CVF is
derived. CVF:s are plotted with black lines, while CNF:s are plotted with red lines. The solid lines show the
prescribed sampling distribution, while the dashed lines show the actual sampled droplet size distribution,
measured with the PDPA_HISTOGRAM functionality.
droplet diameter range is divided into a series of bins3 . To avoid very small particle weights, the distribution
is clipped at the cumulative fractions of CNF_CUTOFF and (1 - CNF_CUTOFF). Note that CNF_CUTOFF is set
on the MISC line. The default value of CNF_CUTOFF is 0.005.
To prevent FDS from generating a distribution of droplets altogether, set MONODISPERSE to .TRUE. on
the PART line, in which case every droplet will be assigned the same DIAMETER.
If you set CHECK_DISTRIBUTION=.TRUE. on the PART line, FDS will write out the cumulative distri-
bution function for that particular particle class in a file called CHID_PART_ID_cdf.csv. If you do this,
you might want to avoid spaces in the ID of the PART line.
205
BREAKUP_GAMMA_D and BREAKUP_SIGMA_D. These parameters are defined the same as GAMMA_D and
SIGMA_D in section 18.3.3 but instead apply after breakup.
206
18.4 Solid Particles
Lagrangian particles can represent a wide variety of subgrid-scale objects, from office clutter to vegetation.
To create solid, non-liquid particles, you must add a SURF_ID to the PART line. The specified SURF line
contains the parameters that describe the thermophysical properties and geometric parameters of the particle.
These properties are the same as those you would apply to an OBST or VENT. FDS uses the same solid phase
conduction and pyrolysis algorithm for particles as it does for solid walls.
If the SURF line that is associated with the particle class calls for it, the particles will heat up due to
convection from the surrounding gases and radiation from near and distant sources. The convective heat
transfer coefficient takes into account the particle geometry, and the radiative heat flux is based on the
integrated intensity. That is, the radiation heat flux is the average over all angles. However, you can specify
unique directions for the particle if the source of heating does not surround the particles. More about particle
splitting is explained in Section 18.4.4.
The PART line establishes the class of particles. In this case, the presence of a SURF_ID indicates that
the particles are solids with the properties given by the SURF line ’HOT’. STATIC is a logical parameter
whose default is .FALSE. that indicates if the particles are stationary. The PROP_ID references a PROP
(property) line that just tells Smokeview that the particles are to be drawn as spheres of diameter 0.01 m.
See Section 19.7.3 for details and options. The INIT line randomly fills the given volume with 10 of these
hot spheres. See Section 18.5.3 for details.
If the SURF line includes a MATL_ID, the particle mass will be based upon the value(s) of DENSITY
of the referenced MATL line(s). If there is to be no heat conduction calculation in depth, do not specify a
MATL_ID. Instead, you can specify, for example, the surface temperature, TMP_FRONT (◦ C), heat release
rate per unit area, HRRPUA (kW/m2 ), or species MASS_FLUX (kg/(m2 · s)).
The GEOMETRY options for solid particles are ’SPHERICAL’, ’CYLINDRICAL’, or ’CARTESIAN’.
By default, the GEOMETRY is ’CARTESIAN’, in which case you need to provide the LENGTH and WIDTH
of the rectangular plate. It is assumed that the plate is symmetric front and back (note this means you
should set BACKING=’INSULATED’ on the SURF line). You need only specify the layers that make up
the half-thickness. The array THICKNESS(N) indicates the thickness(es) of each layer of the plate, not the
total thickness of the plate itself. If the plate is composed of only one material component, the specified
THICKNESS is taken as the half-thickness of the plate.
For ’CYLINDRICAL’ or ’SPHERICAL’ particles, specify the INNER_RADIUS and THICKNESS of the
individual layers. Alternatively, you can just specify the RADIUS if the cylinder or sphere is solid and has
only one material component. The default value of INNER_RADIUS is 0 m, which means that the radius
of the cylinder or sphere is the sum of the THICKNESS values. Remember that the layers are to be listed
starting at the surface, not the center. For ’CYLINDRICAL’ particles, specify a LENGTH as well.
207
Particles with Periodic Boundary Conditions
By default, particles are not recycled at a periodic boundary. To recycle the particles in the x-direction, set
PERIODIC_X=.TRUE. on the PART line. Set PERIODIC_Y=.TRUE. and PERIODIC_Z=.TRUE. for the y-
and z-directions, respectively.
18.4.2 Drag
The drag force exerted by moving or stationary particles is detailed in the FDS Technical Reference Guide,
chapter “Lagrangian Particles” [3]. For solid particles, the default drag law is that of a solitary sphere. To
invoke a different drag law, that of a solitary cylinder for example, set DRAG_LAW = ’CYLINDER’ on the
PART line. A summary of the available drag laws is given in table 18.1. If none of these options is applicable,
you may specify a constant value of the drag coefficient for a particle class (a specific PART_ID) by setting
a DRAG_COEFFICIENT on the PART line. The DRAG_COEFFICIENT over-rides the DRAG_LAW.
DRAG_LAW Reference
’SPHERE’ (default) FDS Tech Guide [3]
’CYLINDER’ FDS Tech Guide [3]
’POROUS MEDIA’ Sec. 18.4.8
’SCREEN’ Sec. 18.4.9
If you are modeling a relatively dense collection of solid particles, like vegetation, you should set the
DRAG_COEFFICIENT explicitly and not rely on the correlations for spheres and cylinders which were de-
veloped for relatively independent bodies, not clusters.
specifies that half the particle is facing downwards and half is facing upwards. FDS now essentially tracks
two particles. The radiative flux to the downward facing particle is the integrated average over the southern
hemisphere; the flux to the upward facing particle is the average over the northern hemisphere. The particle
208
mass and the surface area are scaled by the number of orientations. The splitting along the coordinate axis
is demonstrated for all geometries in Fig. 18.3. The orientation direction does not have to align with the
coordinate axes. In fact, the ORIENTATIONs do not have to be symmetric or come in pairs, even though
for most applications it makes sense to do it this way. For a Cartesian particle (i.e., a plate), only the
orientations that are perpendicular to the plate make physical sense. Keep in mind that the heat conducted
within the different facets does not transfer through to the other facets. The heat conduction is still only one
dimensional, in the direction normal to the face and towards the center.
Note that if only a single ORIENTATION vector is assigned on a PART line, the radiative flux to the
particle is calculated as if there is a flat plate normal to the direction of the vector, like a conventional
heat flux gauge. That is, the heat flux is not an integrated average over the entire particle but rather the
directional heat flux with the given orientation. The reason for this exception to the general rule is that
often single particles are used as “targets” to record a heat flux at a given point in the domain with a given
orientation. These particles can be thought of as tiny heat flux gauges that do not disturb the flow.
&SPEC ID='ARGON' /
&SPEC ID='SULFUR DIOXIDE' /
&SPEC ID='HELIUM' /
In this case, there is no calculation of heat conduction in depth. Only the surface area is important. For the
plate, the surface area is twice the length times the width. For the cylinder, the area is twice the radius times
π times the length. For the sphere, the area is 4π times the radius squared. Figure 18.4 displays the output
of the test case called surf_mass_part_specified.fds, demonstrating that the production rate of the
gases is as expected.
18.4.6 Vegetation
Lagrangian particles can be used to represent different types of vegetation, like leaves, grass, and so on. The
best way to explain how to use this feature is by way of example. Suppose we want to describe a collection
209
ORIENTATION(1:3,2)=0,0,1
ORIENTATION(1:3,1)=0,0,-1
ORIENTATION(1:3,1)=0,0,1
ORIENTATION(1:3,4)=1,0,0
ORIENTATION(1:3,2)=-1,0,0
ORIENTATION(1:3,3)=0,0,-1
ORIENTATION(1:3,6)=0,0,1
ORIENTATION(1:3,2)=1,0,0
ORIENTATION(1:3,1)=-1,0,0 ORIENTATION(1:3,3)=0,-1,0
ORIENTATION(1:3,5)=0,0,-1
Figure 18.3: Examples of a Cartesian (plate), cylindrical, and spherical particle split into multiple parts.
210
FDS6.7.1-0-g14cc738-master
0.01
Mass Production (surf_mass_part_specified)
0.008
Mass (kg)
Expected (SO2 mass)
Expected (He mass)
FDS (Ar mass)
0.004 FDS (SO2 mass)
FDS (He mass)
0.002
0
0 5 10 15 20
Time (s)
of wet pine needles that occupy a certain volume. The following lines have been extracted from the sample
file WUI/pine_needles.fds. Note that all of the values have been chosen simply to demonstrate the
technique. These values should not be used for a real calculation.
&MATL ID = 'PINE'
DENSITY = 500.
CONDUCTIVITY = 0.1
SPECIFIC_HEAT = 1.0
N_REACTIONS = 1
REFERENCE_TEMPERATURE = 300.
NU_MATL = 0.2
NU_SPEC = 0.8
SPEC_ID = 'GLUCOSE'
HEAT_OF_REACTION = 1000
MATL_ID = 'CHAR' /
&MATL ID = 'MOISTURE'
DENSITY = 1000.
CONDUCTIVITY = 0.1
SPECIFIC_HEAT = 4.184
N_REACTIONS = 1
REFERENCE_TEMPERATURE = 100.
NU_SPEC = 1.0
SPEC_ID = 'WATER VAPOR'
211
HEAT_OF_REACTION = 2500. /
&MATL ID = 'CHAR'
DENSITY = 200.
CONDUCTIVITY = 1.0
SPECIFIC_HEAT = 1.6 /
In the example, 1 kg of pine needles occupy 1 m3 . The number of particles used to represent the pine needles
is somewhat arbitrary. FDS will automatically weight the specified number so that the total mass per volume
is 1 kg. The needles are modeled as cylinders that are 0.5 mm in diameter. The THICKNESS on the SURF
line refers to the radius of the cylinder in units of m. The needles are all 0.1 m long. The needles contain
20 % (by mass) moisture, and 80 % cellulose. The moisture is set to evaporate at 100 ◦ C to create water
vapor and the cellulose pyrolyzes at 300 ◦ C to form fuel gas and char. In the example case, the original 1 kg
of vegetation is heated until all of the water and fuel evaporate. The fuel is not allowed to burn by setting
the ambient oxygen concentration to 1 %. Figure 18.5 shows the evolution of the fuel, water and char mass.
Agreement with the expected values means that mass is conserved.
FDS6.7.1-0-g14cc738-master
1.2
Mass Balance (pine_needles)
1
0.2
0
0 2 4 6 8 10
Time (s)
18.4.7 Firebrands
Firebrands are small pieces of burning wood and vegetation that can be lofted into the air and blown by the
wind ahead of a wildland fire front. Manzello et al. [49] have developed a variety of experimental apparatus
212
designed to generate firebrands in a laboratory setting. The example input file called dragon_5a in the WUI
(Wildland-Urban Interface) folder is a very simple mock-up of one of these experiments. The word “dragon”
is based on the nickname of the apparatus; 5a is the figure number in Ref. [49] on which this example case is
loosely based. In the experiment, 700 g of small dowels (length 50 mm, diameter 8 mm) made of Ponderosa
Pine wood were poured into a small steel chamber equipped with several propane burners. The dowels
were left to burn for roughly a minute subject to a slow induced air flow after which time the air flow was
increased and firebrands were propelled horizontally out of a 15 cm duct 2.25 m above the lab floor. It is
reported that after several replicate experiments, the average mass of the firebrands collected from pans on
the floor was 57 g. The average diameter of the collected dowels was 5.6 mm, and the average length was
13.5 mm.
It is not possible to simulate the experiment in FDS exactly as it was performed. The reason is that in
the experiment, all 700 g of the wooden dowels were poured into the heating chamber at once. FDS cannot
handle such a dense packing of Lagrangian particles. Instead, the simulated dowels are introduced at a rate
of 10 per second. FDS also does not have a mechanism to break-up the dowels, reducing their length from
50 mm to 13.5 mm. Thus, the initial cylindrical particles are 13.5 mm and remain that length throughout
the simulation. The diameter of the cylindrical particles is reduced, however, from 8 mm to 5.6 mm, which
takes the initial density of 440 kg/m3 down to 71 kg/m3 because the mass of the firebrands is assumed to be
8 % of the original. The plot in Fig. 18.6 shows the increasing mass of firebrands thrown to the floor in the
simulation after 100 s of particle insertion. The total mass of particles inserted into the apparatus is:
π (0.004 m)2 × (0.0135 m) × (440 kg/m3 ) × (10 part/s) × (100 s) ≈ 0.3 kg (18.5)
0.03
Mass (kg)
0.02
0.01
Exact
FDS
0
0 50 100 150 200 250 300
Time (s)
213
&PART ID='FOAM', DRAG_LAW='POROUS MEDIA', SURF_ID='LIGAMENT',
POROUS_VOLUME_FRACTION=0.12, STATIC=.TRUE.,
DRAG_COEFFICIENT=0.1,0.1,0.1, PERMEABILITY=1.0E-7,1.E-7,1.E-7 /
&INIT XB=1.010,1.095,0.0,0.5,0.0,0.5, N_PARTICLES_PER_CELL=1, CELL_CENTERED=.TRUE.,
PART_ID='FOAM' /
These lines are a model of aluminum foam. The basic geometry of the foam ligaments is defined with the
SURF line. It is assumed that the ligaments are made of an aluminum alloy whose properties are given on
the MATL line. The radius of the assumed cylindrical ligament is indicated by the THICKNESS. Note that
the LENGTH of the cylinder which is normally required on the SURF line is computed automatically so that
the volume fraction of the grid cell occupied by the foam, specified by POROUS_VOLUME_FRACTION on the
PART line, is achieved. In a sense, the foam is modeled by a long cylinder chopped up into small pieces and
represented by a single particle in each grid cell.
The PART line provides information about the particles. The DRAG_LAW indicates a special empirical
model for the porous media. This model states that the pressure drop through the media is given by
µ Y 2
∆p = δ u+ρ √ u (18.6)
K K
where δ is the thickness of the foam block in the flow direction, µ is the viscosity of the gas, u is the
velocity component in the flow direction, ρ is the density of the gas, K is the PERMEABILITY in units of
m2 , and Y is a dimensionless inertial term that you specify using the parameter DRAG_COEFFICIENT. When
using the porous media model the PERMEABILITY and DRAG_COEFFICIENT must be specified for all three
directions.
The INIT line designates the volume occupied by the porous media using the sextuplet XB. A sin-
gle particle is inserted into the center of each cell occupied by the foam by specifying the parameters
N_PARTICLES_PER_CELL=1 and CELL_CENTERED=.TRUE..
A sample calculation involving porous media is contained in the folder Sprinklers_and_Sprays.
The input file is called porous_media.fds.
18.4.9 Screens
A 2-D array of particles can be used to represent the drag exerted by a window screen, as in the following
example:
The INIT line designates the plane of the screen using the sextuplet XB. A single particle is inserted into
each cell by specifying the parameter N_PARTICLES_PER_CELL=1. The particles are be defined with a
SURF_ID containing the material properties of the screen. A special drag law for screens is specified via the
DRAG_LAW. ORIENTATION is the direction normal to the screen, and FREE_AREA_FRACTION is the fraction
of the screen’s surface area that is open. In the example, an aluminum screen with a 40 % free area and an
0.0003 m wire diameter is placed normal to the x-axis. Note that the LENGTH parameter on the SURF line
will be computed automatically so the fraction of the grid cell flow area occupied by the screen is equal to 1
214
- FREE_AREA_FRACTION. The pressure drop across the screen is given by
µ Y 2
∆p = l u+ρ √ u (18.7)
K K
where l is the screen thickness (equal to the wire diameter), µ is the viscosity of the gas, u is the velocity
normal to the screen, ρ is the density of the gas, and Y and K are empirical constants given by [50]
This correlation was developed using screens with FREE_AREA_FRACTION ranging from 0.3 to 0.6.
The MISC input parameter PARTICLE_CFL_MAX controls the time step on the pressure drop across a
screen (or other porous media). If a screen or other porous media introduces numerical instabilities, reducing
the value of PARTICLE_CFL_MAX below 1 may resolve them.
2. The cable is homogeneous in composition. In reality, a cable is constructed of several different types of
polymeric materials, cellulosic fillers, and a conducting metal, most often copper.
3. The thermal properties – conductivity, specific heat, and density – of the assumed homogeneous cable
are independent of temperature. In reality, both the thermal conductivity and specific heat of polymers
are temperature-dependent, but this information is very difficult to obtain from manufacturers.
4. It is assumed that no decomposition reactions occur within the cable during its heating, and ignition
and burning are not considered in the model. In fact, thermoplastic cables melt, thermosets form a char
layer, and both off-gas volatiles up to and beyond the point of electrical failure.
5. Electrical failure occurs when the temperature just inside the cable jacket reaches an experimentally
determined value.
Obviously, there are considerable assumptions inherent in the Andersson and Van Hees THIEF model, but
their results for various polyvinyl chloride (PVC) cables suggested that it may be sufficient for engineering
analyses of a wider variety of cables. The U.S. Nuclear Regulatory Commission sponsored a study of cable
failure known as CAROLFIRE [52]. The primary project objective of CAROLFIRE was to characterize
the various modes of electrical failure (e.g., hot shorts, shorts to ground) within bundles of power, con-
trol and instrument cables. A secondary objective of the project was to develop a simple model to predict
thermally-induced electrical failure when a given interior region of the cable reaches an empirically deter-
mined threshold temperature. The measurements used for these purposes are described in Volume II of the
CAROLFIRE test report. Volume III describes the modeling.
215
The THIEF model can only predict the temperature profile within the cable as a function of time, given
a time-dependent exposing temperature or heat flux. The model does not predict at what temperature the
cable fails electrically. This information is gathered from experiment. The CAROLFIRE experimental
program included bench-scale, single cable experiments in which temperature measurements were made on
the surface of, and at various points within, cables subjected to a uniform heat flux. These experiments
provided the link between internal cable temperature and electrical failure. The model can only predict the
interior temperature and infer electrical failure when a given temperature is reached. It is presumed that the
temperature of the centermost point in the cable is not necessarily the indicator of electrical failure. This
analysis method uses the temperature just inside the cable jacket rather than the centermost temperature, as
that is where electrical shorts in a multi-conductor cable are most likely to occur first.
To use the THIEF model in FDS, add lines similar to the following to the input file:
The THIEF model assumes that the cable plastic material has a thermal conductivity of 0.2 W/(m · K) and a
specific heat of 1.5 kJ/(kg · K). If you change these values, you are no longer using the THIEF model. The
density is the mass per unit length of the cable divided by its cross sectional area. The THICKNESS is the
radius of the cylindrical cable in units of m. The LENGTH, in m, is needed by FDS because it assumes that
the cable is a cylindrical segment of a certain length. It has no impact on the simulation, and its value it
typically the size of a grid cell. The ORIENTATION tells FDS the direction of the prevailing radiative source.
The second argument indicates that there can be more than one ORIENTATION. STATIC=.TRUE. prevents
the cable from moving. The INIT line is used to position the cable within the computational domain. The
DEVC line records the cables inner temperature, in this case 1.5 mm below the surface. This is typically the
jacket thickness.
216
18.5 Particle Insertion
There are three ways of introducing droplets or particles into a simulation. The first way is to define a sprin-
kler or nozzle using a PROP line that includes a PART_ID that specifies the particle or droplet parameters.
The second way is to add a PART_ID to a SURF line, in which case particles or droplets will be ejected
from that surface. Note that this only works if the surface has a normal velocity pointing into the flow
domain. The third way to introduce particles or droplets is via an INIT line that defines a volume within
the computational domain in which the particles/droplets are to be introduced initially and/or periodically in
time.
It is not unusual to include hundreds of thousands of particles in a simulation. Visualizing all of the
particles in Smokeview can sometimes be impractical due to memory limitations. To limit the amount of
particles, you can make use of the following parameters on the PART line:
SAMPLING_FACTOR Sampling factor for the output file CHID.prt5. This parameter can be used to reduce
the size of the particle output file used to animate the simulation. The default value is 1 for MASSLESS
particles, meaning that every particle or droplet will be shown in Smokeview. The default is 10 for all
other types of particles. MASSLESS particles are discussed in Section 18.2.
AGE Number of seconds the particle or droplet exists, after which time it is removed from the calcula-
tion. This is a useful parameter to use when trying to reduce the number of droplets or particles in a
simulation.
creates an obstruction that ejects particles out of its sides at a rate of 0.1 kg/(m2 · s) and a velocity of 5 m/s
(the minus sign indicates the particles are ejected from the surface). FDS will adjust the mass flux if the
obstruction or vent dimensions are changed to conform to the numerical grid. The IDs have no meaning
other than as identifiers. The surface on which particles are specified must have a non-zero normal velocity
directed into the computational domain. This happens automatically if the surface is burning, but must be
specified if it is not. There is a simple input file called particle_flux.fds that demonstrates how the
above input lines can produce a stream of particles from a block. The total mass flux from the block is the
product of the PARTICLE_MASS_FLUX times the total area of the sides of the block, 0.4 m × 0.4 m × 4.
The expected accumulated mass of particles on the ground after 10 s is expected to be 0.64 kg, as shown in
Fig. 18.7.
217
FDS6.7.1-0-g14cc738-master
0.8
Particle Mass (particle_flux)
0.6
Mass (kg)
0.4
0.2
Expected (mass)
FDS (mass)
0
0 5 10 15 20
Time (s)
Figure 18.7: Simple test case to demonstrate mass conservation of particles ejected from an obstruction.
Note also that you can independently control particles that emanate from a solid surface. For example,
a device might control the activation of a fan, but you can over-ride the device and control the particles
separately. To do this, specify either a device or controller via a DEVC_ID or CTRL_ID on the PART line that
defines the particles. For more information on devices and controls, see Sections 19.4 and 19.5.
218
burning of the particle will occur underneath the pan or, if the particle does not burn, the heat release rate
will be diminished.
Note that the volume of the specified region is calculated according to the SHAPE dimensions, regardless
of whether there are solid obstructions within this region. Note also that in most applications, the number
of particles, N_PARTICLES, is somewhat arbitrary but should be chosen to provide at least a few particles
per grid cell. FDS will then automatically assign a weighting factor to each particle to ensure that the
MASS_PER_VOLUME is achieved. In some applications, on the other hand, it may be important to specify the
number of particles. For example, if using particles to model the burning of electrical cables, you may want
to specify how many cables are actually burning.
If the volume specified by the sextuplet XB crosses mesh boundaries, be aware that N_PARTICLES
refers to the entire volume, not just the volume within a particular mesh. FDS will automatically compute
the necessary number of particles to assign to each mesh.
Alternatively, you can specify SHAPE=’CONE’, in which case the particles will be randomly distributed
within a vertical cone. This is primarily used for representing trees. The dimensions of the cone are spec-
ified via the parameters RADIUS, HEIGHT, and base position XYZ. The latter is a triplet of real numbers
designating the point at the center of the base of the cone. Here is an example of how one might make a tree:
219
HEIGHT=2,
SHAPE='CONE',
N_PARTICLES_PER_CELL=1,
CELL_CENTERED=.TRUE.,
MASS_PER_VOLUME=2.0 /
Note that in this example, exactly one particle is specified per grid cell, positioned exactly in the center
of the cell. The number of actual pine needles this single particle represents depends on the specified
MASS_PER_VOLUME and the mass of an individual cylindrical particle. That information would be provided
by the SURF line ’needles’.
creates a line of 10 particles starting at the point (1.2,3.4,5.6) separated by 0.1 m. This is handy for creating
arrays of devices, like heat flux gauges. See Section 20.10.7 for more details.
In special cases, you might want a single liquid droplet to be inserted at a particular point with a partic-
ular velocity every DT_INSERT s following the activation of a particular device, as follows:
Note that the DIAMETER (µm) on the INIT line is only valid for liquid droplets. It over-rides the DIAMETER
on the PART line labeled ’drops’. A simple test case that demonstrates this functionality is called bucket_test_3,
in which water droplets are launched in different directions from a common point. Their size, velocity, in-
sertion frequency, and mass flux are varied, and a check is made that water mass is conserved (see Fig. 18.8).
220
FDS6.7.1-0-g14cc738-master
0.01
Accumulated Mass (bucket_test_3)
0.008
0.006
Mass (kg)
0.004
0.002
Ideal
FDS
0
0 2 4 6 8 10
Time (s)
Figure 18.8: Accumulated water collected at the floor in the bucket_test_3 case.
rameter N_PARTICLES now indicates the number of droplets/particles inserted every DT_INSERT seconds.
If the droplets/particles have mass, use MASS_PER_TIME (kg/s) instead of MASS_PER_VOLUME to indicate
how much mass is to be introduced per second.
If you want to delay the insertion of droplets, you can use either a DEVC_ID or a CTRL_ID on the INIT
line to name the controlling device. See Section 19.4 for more information on controlling devices.
221
18.6 Special Topic: Suppression by Water
Modeling fire suppression by water has three principal components: transporting the water droplets through
the air, tracking the water along the solid surface, and predicting the reduction of the burning rate. This
section addresses the latter two.
5 If you do not want droplets to accumulate on solid surfaces, set ALLOW_SURFACE_PARTICLES=.FALSE. on the
MISC line. It is normally .TRUE.
222
18.6.2 Reduction of the Burning Rate
Water reduces the fuel pyrolysis rate by cooling the fuel surface and also changing the chemical reactions
that liberate fuel gases from the solid. If the solid or liquid fuel has been given reaction parameters via the
MATL line, there is no need to set any additional suppression parameters. It is assumed that water impinging
on the fuel surface takes energy away from the pyrolysis process and thereby reduces the burning rate of the
fuel. If the surface has been assigned a HRRPUA (Heat Release Rate Per Unit Area), a parameter needs to be
specified that governs the suppression of the fire by water because this type of simulated fire essentially acts
like a gas burner whose flow rate is explicitly specified. An empirical way to account for fire suppression
by water is to characterize the reduction of the pyrolysis rate in terms of an exponential function. The local
mass loss rate of the fuel is expressed in the form
k(t) dt
R
ṁ00f (t) = ṁ00f,0 (t) e− (18.10)
Here ṁ00f,0 (t) is the user-specified burning rate per unit area when no water is applied and k is a function of
the local water mass per unit area, m00w , expressed in units of kg/m2 .
The parameter E_COEFFICIENT must be obtained experimentally, and it is expressed in units of m2 /(kg · s).
Usually, this type of suppression algorithm is invoked when the fuel is complicated, like a cartoned com-
modity. The example case e_coefficient demonstrates the use of this parameter. A sprinkler is placed
over a burner defined with an E_COEFFICIENT as shown below. The sprinkler is set to operate at 5 s.
Figure 18.10 shows the heat release rate and burning rate. Note that expected value is computed using the
sprinkler flow rate and the FDS results are delayed slightly by the time it takes for droplets to reach and
accumulate on the burning surface.
FDS6.7.1-0-g14cc738-master 10 -3 FDS6.7.1-0-g14cc738-master
120 2.5
Heat Release Rate Burning Rate
100
2
Heat Release Rate (kW)
80
1.5
Expected Expected
60 FDS FDS
1
40
0.5
20
0 0
0 5 10 15 20 0 5 10 15 20
Time (s) Time (s)
223
Chapter 19
Sprinklers, smoke detectors, heat flux gauges, and thermocouples may seem to be completely unrelated,
but from the point of view of FDS, they are simply devices that operate in specific ways depending on the
properties assigned to them. They can be used to record some quantity of the simulated environment, like a
thermocouple, or they can represent a mathematical model of a complex sensor, like a smoke detector, and
in some cases they can trigger events to happen, like a timer.
All devices, in the broadest sense of the word, are designated via the namelist group DEVC. In addi-
tion, advanced functionality and properties are accommodated via additional namelist groups called CTRL
(Control) and PROP (Properties).
19.1 Device Location and Orientation: The DEVC Namelist Group (Table
21.7)
Regardless of the specific properties, each device needs to be sited either at a point within the computational
domain, or over a span of the domain, like a beam smoke detector. For example, a sprinkler is sited within
the domain with a line like:
The physical coordinates of the device are given by a triplet of real numbers, XYZ. FDS uses these coordi-
nates to determine in which gas or wall cell the device is located. Devices are evaluated using cell centered
or face centered values of the cell the device is located in; no interpolation is done. The properties of the
device are contained on the PROP line designated by PROP_ID, which will be explained below for each of
the special devices included in FDS. The character string ID is merely a descriptor to identify the device in
the output files, and if any action is tied to its activation.
Not all devices need to be associated with a particular set of properties via the PROP_ID. For example,
pointwise output quantities are specified with a single DEVC line, like
which tells FDS to record the temperature at the given point as a function of time. The ID is a label in the
output file whose name is CHID_devc.csv. Note that FDS outputs the data stored for that cell without
performing any interpolation with surrounding cells.
Some devices have a particular orientation. The parameter IOR (Index of Orientation) is required for
any device that is placed on the surface of a solid. The values ±1 or ±2 or ±3 indicate the direction that
225
the device “points.” For example, IOR=-1 means that the device is mounted on a wall that faces in the
negative x direction. ORIENTATION is used for devices that are not on a surface and require a directional
specification, like a sprinkler. ORIENTATION is specified with a triplet of real number values that indicate
the components of the direction vector. The default value of ORIENTATION is (0,0,-1). For example, a
default downward-directed sprinkler spray can be redirected in other direction. If you were to specify
the sprinkler would point in the direction halfway between the positive x and y directions. For other devices,
the ORIENTATION would only change the way the device is drawn by Smokeview.
The delivered density to the floor from a sprinkler depends upon where the sprinkler arms are located.
Rather than redefining the spray pattern for every possible direction that the sprinkler can be attached to
the pipe, the DEVC can be given the parameter ROTATION. The default ROTATION is 0 degrees, which for
a downwards pointing sprinkler is the positive x-axis. Positive ROTATION will rotate the 0 degree point
towards the positive y-axis.
226
QUANTITY specified on the DEVC line.
227
19.3 Special Device Properties: The PROP Namelist Group (Table 21.23)
Many devices are fairly easy to describe, like a point measurement, with only a few parameters which can
be included on the DEVC line. However, for more complicated devices, it is inconvenient to list all of the
properties on each and every DEVC line. For example, a simulation might include hundreds of sprinklers,
but it is tedious to list the properties of the sprinkler each time the sprinkler is sited. For these devices, use
a separate namelist group called PROP to store the relevant parameters. Each PROP line is identified by a
unique ID, and invoked by a DEVC line by the string PROP_ID. The best way to describe the PROP group is
to list the various special devices and their properties.
19.3.1 Sprinklers
To specify one or more sprinklers, you need to specify several different groups of parameters that fall into a
variety of namelist groups. For example, here is a basic sprinkler description:
A sprinkler, known as ’Spr-1’, is located at a point in space given by XYZ. It is a ’K-11’ type sprinkler,
whose properties are given on the PROP line. Note that the various names (IDs) mean nothing to FDS,
except as a means of associating one thing with another, so try to use IDs that are meaningful. The pa-
rameter QUANTITY=’SPRINKLER LINK TEMPERATURE’ does have a specific meaning to FDS, directing
it to compute the activation of the device using the standard RTI (Response Time Index [53]) algorithm.
Properties associated with sprinklers included in the PROP group are:
OFFSET Radius (m) of a sphere surrounding the sprinkler where the water droplets are initially placed in
the simulation. It is assumed that beyond the OFFSET the droplets have completely broken up and are
transported independently of each other. (Default 0.05 m)
228
ORIFICE_DIAMETER Diameter of the nozzle orifice in m (default 0 m). This input provides an alterna-
tive way to set droplet velocity by giving values for FLOW_RATE and ORIFICE_DIAMETER, in which
case the droplet velocity is computed by dividing the flow rate by the orifice area. Use this method if
you do not have any information about droplet velocity. However, quite often you must fine-tune the
PARTICLE_VELOCITY in order to reproduce a particular spray profile. The ORIFICE_DIAMETER is not
used if either PARTICLE_VELOCITY or SPRAY_PATTERN_TABLE is specified.
SPRAY_ANGLE A pair of angles (in degrees) through which the droplets are sprayed. The angles outline
a conical spray pattern relative to the south pole of the sphere centered at the sprinkler with radius
OFFSET. For example, SPRAY_ANGLE=30.,80. directs the water spray through a band between 30◦
and 80◦ of the ORIENTATION vector, which is (0,0,-1) by default (see Figure 19.1). Elliptical spray
patterns can be specified via a pair of spray angles. For example, SPRAY_ANGLE(1:2,1)=0.,60.
and SPRAY_ANGLE(1:2,2)=0.,30., defines a spray pattern with 60 degree angle in the direction
of the x axis and a 30 degree angle in the direction of the y axis. From above, the spray pattern
resembles an ellipse. SPRAY_PATTERN_SHAPE determines how the droplets are distributed within
the specified SPRAY_ANGLE. Choices are ’UNIFORM’ and ’GAUSSIAN’. The default distribution is
’GAUSSIAN’. The parameter SPRAY_PATTERN_MU controls the latitude of the maximum density of
droplets for the ’GAUSSIAN’ distribution. The width of the distribution is controlled by the parameter
SPRAY_PATTERN_BETA.
SPRAY_PATTERN_TABLE Name of a set of TABL lines containing the description of the spray pattern.
PART_ID The name of the PART line containing properties of the droplets. See Chapter 18 for additional
details.
PRESSURE_RAMP The name of the RAMP lines specifying the dependence of pipe pressure on the number
of active sprinklers and nozzles.
Be aware that sprinklers can produce many droplets. To limit the computational cost, liquid droplets disap-
pear when they hit the “floor” of the computational domain, regardless of whether it is solid or not. This
feature mimics the presence of floor drains. To stop FDS from removing liquid droplets from the floor of the
domain, add the phrase POROUS_FLOOR=.FALSE. to the MISC line. Be aware, however, that droplets that
land on the floor continue to move horizontally in randomly selected directions; bouncing off obstructions,
and consuming CPU time. Note also that solid particles do not disappear from the floor of the domain like
liquid droplets.
Do not locate a sprinkler or nozzle within OFFSET meters of a mesh boundary. If you do, the droplets
introduced into the adjacent mesh will be rejected. The entire spray pattern of the sprinkler need not lie
within one mesh, but the volume immediately surrounding the sprinkler itself must lie in one mesh.
229
OFFSET
80
30
For full-cone sprays, the parameter SPRAY_PATTERN_MU is set to zero by default. For hollow-cone sprays
it is set to the average of SPRAY_ANGLE(1:2,1), the spray angle in the x direction. The following example
uses SPRAY_PATTERN_MU to define a spray that is somewhere between a full-cone and a hollow-cone spray:
If a more complex spray pattern is desired than one characterized by a SPRAY_ANGLE, then a
SPRAY_PATTERN_TABLE can be specified using the TABL namelist group. Specify the total flow using
FLOW_RATE on the PROP line, the name of the spray pattern using SPRAY_PATTERN_TABLE and then one
or more TABL lines of the form:
where each TABL line for a given ’table_id’ provides information about the spherical distribution of the
spray pattern for a specified solid angle. LAT1 and LAT2 are the bounds of the solid angle measured in
degrees from the south pole (0 is the south pole and 90 is the equator, 180 is the north pole). Note that this
is not the conventional way of specifying a latitude, but rather a convenient system based on the fact that
a typical sprinkler sprays water downwards, which is why 0 degrees is assigned to the “south pole,” or the
−z direction. The parameters LON1 and LON2 are the bounds of the solid angle (also in degrees), where 0
(or 360) is aligned with the −x axis and 90 is aligned with the −y axis. VELO is the velocity (m/s) of the
droplets at their point of insertion. FRAC the fraction of the total flow rate of liquid that should emerge from
that particular solid angle.
In the test case called bucket_test_2, the spray consists of two jets, each with a velocity of 5 m/s and
a combined flow rate of 60 L/min. The sprinkler is set to operate for only 5 s. The first jet contains 0.2 of
the total flow, the second, 0.8 of the total. The jets are centered at points 60◦ below the “equator,” and are
separated by 180◦ .
230
Note that each set of TABL lines must have a unique ID. Also note that the TABL lines can be specified in
any order. Figure 19.2 verifies that the sprinkler releases 5 kg of water (1 kg/s for 5 s).
FDS6.7.1-0-g14cc738-master
6
Accumulated Mass (bucket_test_2)
5
Mass (kg)
3
1 Ideal
FDS
0
0 2 4 6 8 10
Time (s)
Figure 19.2: Accumulated water collected at the floor in the bucket_test_2 case.
These lines would indicate that the pressure is 16 bar when the first sprinkler activates, 10 bar when two
sprinklers are active, and 8 bar when three or more sprinklers are active. When counting the number of
active sprinklers, FDS accounts for all active sprinklers or nozzles with a given PART_ID.
When pressure ramps are used, both FLOW_RATE and PARTICLE_VELOCITY are dependent on the
OPERATING_PRESSURE. Specify either the FLOW_RATE, or the K_FACTOR and OPERATING_PRESSURE. In
√
the latter case, the flow rate is given by K p and the droplet velocity by using the liquid density and the
ORIFICE_DIAMETER. If spray pattern table is used, the droplet velocity is determined separately for each
√
line of the table by applying K p and the ORIFICE_DIAMETER. The median diameter of the particle size
distribution is scaled as dm (p) = dm (po )(po /p)1/3 , where po is the OPERATING_PRESSURE and dm (po ) is
specified by parameter DIAMETER on the corresponding PART line.
231
For some simulations there may be groups of independent sprinklers or nozzles. For example one might
have one set of nozzles for a fuel spray and a second set for water spray. In this case the flow of water
would not be impacted by how many fuel spray nozzles are open. To have the PRESSURE_RAMP only count
a subset of sprinklers or nozzles, the keyword PIPE_INDEX can be used on the DEVC line. For example:
These lines indicate that the fuel spray nozzles are a separate pipe network from the water sprinklers. With
these inputs, a PRESSURE_RAMP for the water sprinklers would not count any active fuel spray nozzles. See
the example case flow_rate_2 in the Verification Guide for further details on the use of PIPE_INDEX.
19.3.2 Nozzles
Nozzles are very much like sprinklers, only they do not activate based on the standard RTI (Response Time
Index) model. To simulate a nozzle that activates at a given time, specify a QUANTITY and SETPOINT
directly on the DEVC line. The following lines:
designate two nozzles of the same type, one which activates at time zero, the other at 5 s. Note that nozzles
must have a designated PROP_ID, and the PROP line must have a designated PART_ID to describe the liquid
droplets.
where n is the number of open nozzles. The corresponding nozzle and pressure ramp definitions are
232
&RAMP ID='PR', T= 3., F=1.778 /
&RAMP ID='PR', T= 4., F=1. /
The water is tracked using a device measuring the accumulated mass per unit area, integrated over the total
floor area. The total mass of water should increase from zero to 10 kg in 60 s. A comparison of the FDS
prediction and this analytical result is shown in Fig. 19.3. The slight delay of the FDS result is caused by
the time it takes from the droplets to fall down on the floor.
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
5 12
Open Nozzles (flow_rate) Accumulated Water (flow_rate)
10
4
8
Open Nozzles
Mass (kg)
6
2
4
1
Analytical (Water) 2 Analytical (Water)
FDS (Nozzles) FDS (Water)
0 0
0 10 20 30 40 50 60 70 0 10 20 30 40 50 60 70
Time (s) Time (s)
The vector r is the position of the velocity storage location relative to the point XYZ. The specific velocity
component is specified on PROP by the integer VELOCITY_COMPONENT. Below we provide an example set
of PROP and DEVC lines to specify a parabolic profile for the vertical component of velocity.
233
&PROP ID='p1', VELOCITY_COMPONENT=3, P0=-1,PXX(1,1)=5,PXX(2,2)=5 /
&DEVC XB=-.1,.1,-.1,.1,.9,.95, QUANTITY='VELOCITY PATCH',PROP_ID='p1', DEVC_ID='t1'/
&DEVC ID='t1', XYZ=0,0,.9, QUANTITY='TIME', SETPOINT=10/
In this example, a velocity patch is activated at 10 s in the simulation. Any w components of velocity with
staggered storage locations within the box XB=-.1,.1,-.1,.1,.9,.95 will be driven toward the value
specified by the polynomial profile ’p1’. You must ensure that the device box encompasses the staggered
storage locations (see the theory manual [3] for a discussion on the face-centered velocity storage locations).
for the single parameter Heskestad model. Note that a PROP line is mandatory for a smoke detector, in which
case the DEVC QUANTITY can be specified on the PROP line. For the four parameter Cleary model, use a
PROP line like:
where the two characteristic filling or “lag” times are of the form:
The default detector parameters are for the Heskestad model with a characteristic LENGTH of 1.8 m. For
the Cleary model, the ALPHAs and BETAs must all be listed explicitly. Suggested constants for unidentified
ionization and photoelectric detectors presented in Table 19.1. ACTIVATION_OBSCURATION is the thresh-
old value in units of %/m. The threshold can be set according to the setting commonly provided by the
manufacturer. The default setting1 is 3.24 %/m (1 %/ft).
1 Note that the conversion of obscuration from units of %/ft to %/m is given by:
O[%/ft] 3.28
" #
O[%/m] = 1 − 1 − × 100 (19.4)
100
234
Table 19.1: Suggested values for smoke detector model [54]. See Ref. [55] for others.
Detector αe βe αc , L βc
Cleary Ionization I1 2.5 -0.7 0.8 -0.9
Cleary Ionization I2 1.8 -1.1 1.0 -0.8
Cleary Photoelectric P1 1.8 -1.0 1.0 -0.8
Cleary Photoelectric P2 1.8 -0.8 0.8 -0.8
Heskestad Ionization — — 1.8 —
Defining Smoke
By default, FDS assumes that the smoke from a fire is generated in direct proportion to the heat release
rate. A value of SOOT_YIELD=0.01 on the REAC line means that the smoke generation rate is 0.01 of the
fuel burning rate. The “smoke” in this case is not explicitly tracked by FDS, but rather is assumed to be a
function of the combustion products lumped species.
Suppose, however, that you want to define your own “smoke” and that you want to specify its production
rate independently of the HRR (or even in lieu of an actual fire, like a smoldering source). You might also
want to define a mass extinction coefficient for the smoke and an assumed molecular weight (as it will be
tracked like a gas species). Finally, you also want to visualize the smoke using the SMOKE3D feature in
Smokeview. Use the following lines:
The same smoke detector model is used that was described above, but now, the species ’MY SMOKE’ is
used in the algorithm, rather than that associated with the lumped species. Note that your species will not
participate in the radiation calculation. It will merely serve as a surrogate for smoke.
where i is a mesh cell along the path of the beam, ρs,i is the soot density of the mesh cell, ∆xi is the distance
within the mesh cell that is traversed by the beam, and Km is the mass extinction coefficient. The line in the
235
input file has the form:
Note that the transmission is given in units of %/m rather than % like obscuration. L is the total path length
of the beam, and L0 is the reference dimension of 1 m.
where the DEVC_ID is used at each sampling point to reference the central detector, FLOWRATE is the gas
flow rate in kg/s, DELAY is the transport time (in seconds) from the sampling location to the central detector,
BYPASS_FLOWRATE is the flow rate in kg/s of any air drawn into the system from outside the computational
236
Figure 19.4: Output of the beam_detector test case.
domain (accounts for portions of the sampling network lying outside the domain defined by the MESH inputs),
and SETPOINT is the alarm threshold obscuration in units of %/m. The output of the aspiration system is
computed as
∑N ρs,i (t − td,i ) ṁi
Obscuration = 1 − exp −Km i=1 N × 100 %/m (19.7)
∑i=1 ṁi
where ṁi is the mass FLOWRATE at sampling location i, ρs,i (t −td,i ) is the soot density at sampling location i,
td,i s prior (DELAY) to the current time t, and Km is the MASS_EXTINCTION_COEFFICIENT associated with
visible light.
Note that FDS doesn’t actually remove gas from the computational domain based upon the FLOWRATE;
the FLOWRATE is just a weighting factor.
237
at a rate of 1 kg/s. The SOOT_YIELD=0.001. Mass is removed from the top of the compartment at a rate
of 1 kg/s. The aspiration detector shows an increasing obscuration over time. There is a delay of slightly
over 50 s in the initial increase which results from the 50 s transport time for the first sampling location plus
a short period of time to transport the combustion products to the sampling location. The detector response
has three plateaus that result from the delay times of the sampling locations. The sampling points are co-
located, so each plateau represents an additional one third of the soot being transported to the detector. The
soot density at the sampling point is 7.1 × 10−5 kg/m3 . Using this value the plateaus are computed as 18 %,
33.2 %, and 45.7 %, as seen in Fig. 19.5.
FDS6.7.1-0-g14cc738-master
100
Obscuration (aspiration_detector)
80
Obscuration (%/m)
60
40
20
Ideal Value
FDS (asp1)
0
0 50 100 150 200
Time (s)
SETPOINT The value of the device at which its state changes. For a detection type of device (e.g., heat or
smoke) this value is taken from the device’s PROP inputs and need not be specified on the DEVC line.
TRIP_DIRECTION A positive integer means the device will change from its INITIAL_STATE when the
value of the device is greater than the SETPOINT and be equal to the INITIAL_STATE when the
value is less than the SETPOINT. A negative integer has the opposite behavior. The device will change
from its INITIAL_STATE when the value of the device is less than the SETPOINT and be equal to the
INITIAL_STATE when the value is greater than the SETPOINT. The default value is +1.
LATCH If this logical value is set to .TRUE. the device will only change state once. The default value is
.TRUE..
INITIAL_STATE This logical value is the initial state of the device. The default value is .FALSE.. For
example, if an obstruction associated with the device is to disappear, set INITIAL_STATE=.TRUE..
238
If you desire to control FDS using more complex logic than can be provided by the use of a single device
and its setpoint, control functions can be specified using the CTRL input. See Section 19.5 for more on CTRL
functions. The simplest example of a device is just a timer:
Anything associated with the device via the parameter, DEVC_ID=’my clock’, will change its state at 30 s.
For example, if the text were added to an OBST line, that obstruction would change from its INITIAL_STATE
of .FALSE. to .TRUE. after 30 s. In other words, it would be created at 30 s instead of at the start of the
simulation. This is a simple way to open a door or window.
When using a DEVC output to control FDS, the instantaneous value of the DEVC is used. For some
QUANTITY types, such as TEMPERATURE, this output can be very noisy. To prevent a spurious spike from
causing a state change of the DEVC you can specify the parameter SMOOTHING_FACTOR. This is a parameter
that can vary between 0 and 1. It performs an exponential smoothing of the DEVC output as follows:
where n is the time step, x is the instantaneous device output and x̄ is the smoothed output. The
SMOOTHING_FACTOR defaults to 0 which means no smoothing is performed. Note that SMOOTHING_FACTOR
only changes the value passed to control functions; it has no effect on the value of the DEVC written to the
CHID_devc.csv file.
will cause the given obstruction to be removed when the specified DEVC changes state.
Creation or removal at a predetermined time can be performed using a DEVC that has TIME as its mea-
sured quantity. For example, the following instructions will cause the specified HOLEs and OBSTructions
to appear/disappear at the various designated times. These lines are part of the simple test case called
create_remove.fds.
239
&DEVC XYZ=..., ID='timer3', SETPOINT=3., QUANTITY='TIME', INITIAL_STATE=.FALSE. /
&DEVC XYZ=..., ID='timer4', SETPOINT=4., QUANTITY='TIME', INITIAL_STATE=.TRUE. /
&DEVC XYZ=..., ID='timer5', SETPOINT=5., QUANTITY='TIME', INITIAL_STATE=.FALSE. /
&DEVC XYZ=..., ID='timer6', SETPOINT=6., QUANTITY='TIME', INITIAL_STATE=.TRUE. /
&DEVC XYZ=..., ID='timer7', SETPOINT=6., QUANTITY='TIME', INITIAL_STATE=.FALSE. /
At the start of the simulation, the purple obstruction is present with a red block embedded in it. This red
block is actually a HOLE whose initial state is .FALSE., i.e., the hole is filled. Also at the start of the
simulation, there is a pink obstruction that is visible. At 1 s the red block disappears. At 2 s the empty
hole in the purple obstruction is filled with a green block. This hole was initially true, i.e. empty. The blue
obstruction appears at 3 s because its initial state is false, meaning that it does not exist initially. The pink
obstruction disappears at 4 s because its initial state is true and this state changes at 4 s. At 5 s a yellow
obstruction appears with one empty hole and one embedded gray block. At 6 s the gray block disappears
because it is a hole that was initially false and therefore was filled with the gray block when its parent
obstruction (yellow) was created. Also at 6 s the hole originally present in the yellow obstruction is filled
with a black block because it was a hole that was initially empty and then filled when its DEVC changed state.
You should always try a simple example first before embarking on a complicated creation/removal scheme
for obstructions and holes.
To learn how to create and remove obstructions multiple times, see Section 19.5.5 for information about
the custom control feature.
Note that at 30 s, the “state” of the ’FAN’ changes from .FALSE. to .TRUE., or more simply, the ’FAN’
turns on. Since there is no explicit time function associated with the ’FAN’, the default 1 s ramp-up will
begin at 30 s instead of at 0 s. If INITIAL_STATE=.TRUE., then the fan should turn off at 30 s. Essentially,
“activation” of a VENT causes all associated time functions to be delayed until the device SETPOINT is
reached. “Deactivation” of a VENT turns off all time functions. Usually this means that the parameters on
the SURF line are all nullified, so it is a good idea to check the functionality with a simple example.
A ’MIRROR’ or ’OPEN’ VENT should not be activated or deactivated. You can, however, place an
obstruction in front of an ’OPEN’ VENT and then create it or remove it to model the closing or opening of a
door or window.
There are sometimes circumstances when you might want to create or remove obstructions that have
VENTs attached. If the obstructions overlap, there can be confusion as to which VENT goes with which
OBST. If you come across a situation like this, give the OBST an ID and assign this OBST_ID on the VENT
line.
240
and then turns off when the temperature rises above that same setpoint by some amount. This behavior can-
not be defined by merely specifying a single setpoint. You must also define the range or “deadband” around
the setpoint, and whether an increasing or decreasing temperature activates the system. For the HVAC exam-
ple, crossing the lower edge of the deadband activates heating; crossing the upper edge deactivates heating.
These more complicated behaviors can be modeled in FDS using CTRLs. The following parameters dictate
how a control function will behave:
ID A name for the control function that is unique over all control functions.
FUNCTION_TYPE The type of control function. The possible types are shown in Table 19.2.
INPUT_ID A list of DEVC or CTRL IDs that are the inputs to the control function. Up to forty inputs can be
specified. If a DEVC or CTRL is being used as an INPUT_ID for a control function, then it must have a
unique ID over both devices and control functions. Additionally, a control function cannot be used as
an input for itself.
SETPOINT The value of the control function at which its state changes. This is only appropriate for func-
tions that return numerical values.
TRIP_DIRECTION A positive integer means the control function will change state when its value increases
past the setpoint and a negative integer means the control function will change state when its value
decreases past the setpoint. The default value is +1.
LATCH If this logical value is set to .TRUE. the control function will only change state once. The default
value is .TRUE..
INITIAL_STATE This logical value is the initial state of the control function. The default value is .FALSE.
For example, if an obstruction associated with the control function is to disappear, set INITIAL_STATE
to .TRUE.
For any object for which a DEVC_ID can be specified (such as OBST or VENT), a CTRL_ID can be specified
instead.
If you want to design a system of controls and devices that involves multiple changes of state, include
the attribute LATCH=.FALSE. on the relevant DEVC or CTRL input lines. By default, devices and controls
may only change state once, like a sprinkler activating or smoke detector alarming. LATCH is .TRUE. by
default for both devices and controls.
If you want a DEVC to operate based on the logical state of a CTRL, set QUANTITY equal to ’CONTROL’
and set the CTRL_ID on the DEVC input to the ID of the control function.
The output value of numerical control function is defined by a DEVC line with QUANTITY set equal to
’CONTROL VALUE’ and CTRL_ID set equal to the ID of the control function. You can then use SETPOINT
to have the DEVC operate a particular output value of the control function.
241
Table 19.2: Control function types.
FUNCTION_TYPE Purpose
ANY Changes state if any INPUTs are .TRUE.
ALL Changes state if all INPUTs are .TRUE.
ONLY Changes state if and only if N INPUTs are .TRUE.
AT_LEAST Changes state if at least N INPUTs are .TRUE.
TIME_DELAY Changes state DELAY s after INPUT becomes .TRUE.
CUSTOM Changes state based on evaluating a RAMP of the function’s input
DEADBAND Behaves like a thermostat
KILL Terminates code execution if INPUT is .TRUE.
RESTART Dumps restart files if INPUT is .TRUE.
SUM Sums the outputs of the INPUTs
SUBTRACT Subtracts the second INPUT from the first
MULTIPLY Multiplies the INPUTs
DIVIDE Divides the first INPUT by the second
POWER The first INPUT to the power of the second
EXP The exponential of the INPUT
LOG The natural logarithm of the INPUT
COS The cosine of the INPUT
SIN The sine of the INPUT
ACOS The arccosine of the INPUT
ASIN The arcsine of the INPUT
MAX Maximum value of the INPUTs
MIN Minimum value of the INPUTs
PID A Proportional-Integral-Derivative control for the INPUT
The INITIAL_STATE of the control function SD is .TRUE., meaning that the obstruction exists initially.
The “change of state” means that the obstruction is removed when any smoke detector alarms. By default,
the INITIAL_STATE of the control function SD is .FALSE., meaning that the obstruction does not exist
initially.
Suppose that now you want the obstruction to be created (a door is closed, for example) after all four
smoke detectors in a room have activated. Use a control line of the form:
The control functions AT_LEAST and ONLY are generalizations of ANY and ALL. For example,
changes the state from .FALSE. to .TRUE. when at least 3 detectors activate. Note that in this example,
242
and the example below, the parameter N is used to specify the number of activated devices required for the
conditions of the control function to be satisfied. The control function,
changes the state from .FALSE. to .TRUE. when 3, and only 3, detectors activate.
This relationship between a sprinkler and its pipes means that the sprinkler spray is controlled (in this case
delayed) by the ’dry pipe’, which adds 30 s to the activation time of Spk_29, measured by Spk_29_link,
before water can flow out of the head.
Here, we want to control the VENT that simulates the FAN, which blows hot air into the room. A DEVC
called TC is positioned in the room to measure the TEMPERATURE. The thermostat uses a SETPOINT to
turn on the FAN when the temperature falls below 23 ◦ C (ON_BOUND=’LOWER’) and it turns off when the
temperature rises above 27 ◦ C.
Note that a deadband controller needs to have LATCH set to .FALSE.
243
you might want to run a series of simulations where different mitigation strategies are tested once a detector
alarms. Using the RESTART control function, you can cause a restart file to be created once a desired
condition is met. The simulation can continue and the restart files can be copied to have the job identifying
string, CHID, of the various permutations (providing of course that the usual restrictions on the use of restart
files are followed). For example, the lines
will kill the job and output restart files when the temperature at the given point rises above 1000 ◦ C; or just
force restart files to be output when the velocity at a given point exceeds 10 m/s.
In the above example the fan will be off initially, turn on at 60 s and then turn off at 120 s.
You can make an obstruction appear and disappear multiple times by using the following lines
244
The above will have the obstacle initially removed, then added at 60 s, and removed again at 120 s.
Experiment with these combinations using a simple case before trying a case to make sure that FDS
indeed is doing what is intended.
Example Case: using PID for time integration of mass loss rate
The PID controller can be used to time integrate the mass loss from a pyrolyzing surface. First, use
a DEVC with SPATIAL_STATISTIC=’SURFACE INTEGRAL’ as input to the PID controller. Omit the
TARGET_VALUE, which then defaults to 0, and the input becomes the error function, e(t). Set the INTEGRAL_GAIN
to 1 and the other gains to 0. Then send the PID output to a DEVC for a ’CONTROL VALUE’. Here is example
syntax:
Here, the ’PYROLYZATE’ column of the _devc.csv file will have units of kg.
245
trigger’. The nozzle activates when both detection and the time delay have occurred. Note that the DEVC
is specified with QUANTITY=’CONTROL’.
• Subtract the right hand compartment temperature from the left hand compartment temperature
• Use the time as input to a PID function with a target value of 5 and Kp =-0.5, Ki =0.001, and Kd =1
246
FDS6.7.1-0-g14cc738-master
40
Control Function Outputs (control_test_2)
Add
30 Multiply
0 2 4 6 8 10
Time (s)
247
19.6 Controlling a RAMP
19.6.1 Changing the Independent variable
For any user-defined RAMP, the normal independent variable, for example time for RAMP_V, can be replaced
by the output of a DEVC. This is done by specifying the input DEVC_ID on one of the RAMP input lines. When
this is done, the current output of the DEVC is used as the independent variable for the RAMP. A CTRL_ID can
also be specified as long as the control function outputs a numerical value (i.e., is a mathematical function
(Section 19.5.6) or a PID function (Section 19.5.7). In the following example a blower is ramped from 0 %
flow at 20 ◦ C, to 50 % flow when the temperature exceeds 100 ◦ C, and to 100 % flow when the temperature
exceeds 200 ◦ C. This is similar functionality to the CUSTOM control function, but it allows for variable
response rather than just on or off.
It should be noted that devices are updated sequentially in the order that they are listed in the input file
and that devices in different meshes do not share values until the end of a time step. This means that if the
device being frozen is on a different mesh or is listed before the device that freezes it, it will not be frozen
until the next time step.
248
FDS6.7.1-0-g14cc738-master -3 FDS6.7.1-0-g14cc738-master
10
300 1
Plume Temperature Burning Rate
250
0.8
°C)
150
0.4
100
0.2
50
0 0
0 5 10 15 20 0 5 10 15 20
Time (s) Time (s)
Figure 19.8: Temperature (left) and burning rate (right) outputs of the hrr_freeze test case.
SMOKEVIEW_ID Image
sensor
249
Table 19.3: Single frame static objects (continued)
SMOKEVIEW_ID Image
target
Image
SMOKEVIEW_ID
inactive active
heat_detector
nozzle
smoke_detector
250
Table 19.4: Dual frame static objects (continued)
Image
SMOKEVIEW_ID
inactive active
sprinkler_upright
sprinkler_pendent
create an ellipsoid colored red with x, y, and z axis diameters of 0.5 m and 0.25 m and 0.1 m, respectively.
Note that these parameters are enclosed within single quotes because they are character strings passed to
Smokeview.
Table 19.5 lists objects with variable properties. Note that the tsphere object uses a texture map or
image to alter its appearance. The texture map is specified by placing the characters t% before the texture
file name, for example, t%texturefile.jpg.
251
Table 19.5: Dynamic Smokeview objects
SMOKEVIEW_PARAMETERS(1:5)=
’R=128’,’G=255’,’B=192’,
’D=0.4’,’H=0.6’
cone
R, G, B - color components (0 to 255)
D, H - diameter and height (m)
SMOKEVIEW_PARAMETERS(1:11)=
’HUB_R=0’,’HUB_G=0’,’HUB_B=0’,
’HUB_D=0.1’,’HUB_L=0.12’,
’BLADE_R=128’,’BLADE_G=64’,
’BLADE_B=32’,’BLADE_ANGLE=60.0’,
’BLADE_D=0.5’,’BLADE_H=0.09’
252
Table 19.5: Dynamic Smokeview objects (continued)
SMOKEVIEW_PARAMETERS(1:6)=
’R=192’,’G=192’,’B=128’,
’W=0.5’,’H=1.0’, ’ROT=90.0’ inactive vent
vent
R, G, B - color components (0 to 255)
W, H - width and height (m)
ROT - rotation angle (deg)
active vent
By default, the cables are colored black, but you can specify your own default color using the parameters
R, G, and B. In addition, you can color the particles according to the listed QUANTITIES on the PART line.
Menus in Smokeview allow you to toggle between the various color options.
253
You can control the orientation of the ’tube’ objects using a parameter such as ’RANDXY=1’ that
causes the cylinders to be drawn randomly in the x − y plane. Objects with the parameters U-VEL, V-VEL,
and W-VEL stretch according to the respective velocity components associated with the moving particles.
SMOKEVIEW_PARAMETERS(1:6)=
’R=255’,’G=0’,’B=0’,
’D=0.2’,’L=0.6’,’RANDXY=1’
SMOKEVIEW_PARAMETERS(1:9)=
’R=192’, ’G=64’, ’B=32’
’U-VEL=1.’, ’V-VEL=1.’, ’W-VEL=1.’
’VELMIN=0.01’, ’VELMAX=0.2’, ’D=1.0’
254
Table 19.6: Dynamic Smokeview objects for Lagrangian particles (continued)
255
Chapter 20
Output
FDS has various types of output files that store computed data. Some of the files are in binary format and
intended to be read and rendered by Smokeview. Some of the files are just comma-delimited text files. It
is important to remember that you must explicitly declare in the input file most of the FDS output data. A
considerable amount of the input file is usually devoted to this.
To visualize the flow patterns better, save planar slices of data, either in the gas or solid phases, by using
the SLCF (SLiCe File) or BNDF (BouNDary File) namelist group. Both of these output formats permit you
to animate these quantities in time. For static pictures of the flow field, use the Plot3D output, a format that
is used by many CFD programs as a simple way to store specified quantities over the entire mesh at one
instant in time. Finally, tracer particles can be injected into the flow field from vents or obstacles, and then
viewed in Smokeview. Use the PART namelist group to control the injection rate, sampling rate and other
parameters associated with particles.
NFRAMES Number of output dumps per calculation. The default is 1000. Device data, slice data, parti-
cle data, isosurface data, 3D smoke data, boundary data, solid phase profile data, and control function
data are saved every (T_END-T_BEGIN)/NFRAMES seconds unless otherwise specified using DT_DEVC,
DT_SLCF, DT_PART, DT_ISOF, DT_BNDF, DT_PROF, or DT_CTRL. Note that DT_SLCF controls Smoke3D
output. DT_HRR controls the output of heat release rate and associated quantities.
MASS_FILE If .TRUE., produce an output file listing the total masses of all gas species as a function of
time. It is .FALSE. by default because the calculation of all gas species in all mesh cells is time-
consuming. The parameter DT_MASS controls the frequency of output.
MAXIMUM_PARTICLES Maximum number of Lagrangian particles that can be included on any mesh at any
given time. (Default 1000000)
SMOKE3D If .FALSE., do not produce an animation of the smoke and fire. It is .TRUE. by default.
DT_PL3D The time between Plot3D file output. Note that versions of FDS before 6 output Plot3D files by
default. Now, you must specify the interval of output using this parameter. Its default value is 1000000 s,
meaning that there is no Plot3D output unless specified.
257
FLUSH_FILE_BUFFERS FDS purges the output file buffers periodically and forces the data to be written
out into the respective output files. It does this to make it easier to view the case in Smokeview while it
is running. It has been noticed on Windows machines that occasionally a runtime error occurs because
of file access problems related to the buffer flushing. If this happens, set this parameter to .FALSE.,
but be aware that it may not be possible to look at output in Smokeview until after the calculation is
finished. You may also set DT_FLUSH to control the frequency of the file flushing. Its default value is
the duration of the simulation divided by NFRAMES.
STATUS_FILES If .TRUE., produces an output file CHID.notready which is deleted, if the simulation is
completed successfully. This file can be used as an error indicator. It is .FALSE. by default.
and a column will be added to the output file CHID_devc.csv under the label ’T-1’. In this case, the ID
has no other role than as a column label in the output file. FDS reports the value of the QUANTITY in the
cell where the point XYZ is located.
designates the surface temperature of a wall facing the negative y direction. There are still instances where
FDS cannot determine which solid surface is being designated, in which case an error message appears in
the diagnostic output file. Re-position the device and try again. It is best to position the device, via the real
triplet XYZ, such that the device location is either at or within a cell width outside of the solid surface. The
search algorithm in FDS will look for the nearest solid surface in the direction opposite to that indicated by
IOR.
258
Integrated Quantities
In addition to point measurements, the DEVC group can be used to report integrated quantities (See Ta-
ble 20.3). For example, you may want to know the mass flow out of a door or window. To report this, add
the line
Note that in this case, a plane is specified rather than a point. The sextuplet XB is used for this purpose.
Notice when a flow is desired, two of the six coordinates need to be the same. Another QUANTITY, HRR, can
be used to compute the total heat release rate within a subset of the domain. In this case, the sextuplet XB
ought to define a volume rather than a plane. Specification of the plane or volume over which the integration
is to take place can only be done using XB – avoid planes or volumes that cross multiple mesh boundaries.
FDS has to decide which mesh to use in the integration, and it chooses the finest mesh overlapping the
centroid of the designated plane or volume.
Steady-State Profile
Sometimes it is convenient to calculate a steady-state profile. For example, the vertical velocity profile along
the centerline of a doorway can be recorded with the following line of input:
In a file called CHID_line.csv, there will be between 1 and 4 columns of data associated with this single
DEVC line. If X1 is different than X2, there will be a column of x coordinates associated with the linear array
of points. The same holds for the y and z coordinates. The last column contains the 20 temperature points
time-averaged over the interval between STATISTICS_START and STATISTICS_END. The default value
of the latter is T_END and the former is half the total simulation time. This is a convenient way to output a
time-averaged linear profile of a quantity, like an array of thermocouples. Note that the statistics output to
the _line.csv file start being averaged at T=STATISTICS_START. Prior to this time, the values are zero.
This prevents initial transient from biasing the final average value or other temporal statistics.
A single “line” file can hold more than a single line of data. By default, the coordinate columns are
labeled using the ID of the DEVC appended with either -x, -y, or -z. To change these labels, use X_ID,
Y_ID, and/or Z_ID. To suppress the coordinate columns altogether, add HIDE_COORDINATES=.TRUE. to
the DEVC line. This is convenient if you have multiple arrays of data that p use the same coordinates. If you
want the data plotted as a function of the distance from the origin, r = x2 + y2 + z2 , provide the label
R_ID. If you want the data plotted as a function of the distance from the first point on the line, (X1,Y1,Z1),
provide the label D_ID.
You can convert the spatial coordinate of a steady-state profile by setting COORD_FACTOR on the DEVC
line. For example, to convert from the default unit of meters to centimeters, set COORD_FACTOR to 100.
Also set XYZ_UNITS to the appropriate character string, in this case XYZ_UNITS=’cm’.
259
Time-Varying Profile
If you do not want a steady-state profile, but rather you just want to specify an array of evenly spaced
devices, you can use a similar input line, except with the additional attribute TIME_HISTORY.
This directs FDS to just add 20 devices to the on-going list, saving you from having to write 20 DEVC lines.
The ID for each device will be ’vel-01’, ’vel-02’, etc.
The parameter DEPTH (m) indicates the distance inside the solid surface. If DEPTH is positive FDS outputs
the temperature at the wall node given by moving DEPTH from the front face of the surface. If negative, it is
measured from the back surface (e.g. the location from the front given by the current solid surface thickness
+ DEPTH). Note that if the wall thickness is decreasing over time due to the solid phase reactions, and the
distance is measured from the current front surface, the measurement point will be moving towards the back
side of the solid. Eventually, the measurement point may emerge from the solid, in which case it starts to
show ambient temperature. Measuring the distance from the back surface can then be better suited for the
purpose.
Note that DEPTH may not perfectly align with the discrete spatial position of the cell center correspond-
ing to the solid cell temperature being output by INSIDE WALL TEMPERATURE. Given the stretching and
re-meshing done by the solid phase routines, it difficult to compute the local discrete cell position by hand.
If the discrete solid cell center position is needed, it may be output using
The output should lie within half a solid grid cell distance from the specified DEPTH.
To record the material component’s density with time, use the output quantity ’SOLID DENSITY’ in
the following way:
This produces a time history of the density of the material referred to as ’wood’ on a MATL line. The density
is recorded 1 mm beneath the surface which is oriented in the positive z direction. Note that if ’wood’ is
part of a mixture, the density represents the mass of ’wood’ per unit volume of the mixture.
260
To record the solid conductivity, use QUANTITY=’SOLID CONDUCTIVITY’. To record the solid spe-
cific heat, use QUANTITY=’SOLID SPECIFIC HEAT’. These quantities do not need the MATL_ID key-
word.
Note that these quantities are allowed only as a DEVC, not a BNDF, output.
Note that this quantity is only meaningful if the front or exposed surface of the “wall” has the attribute
BACKING=’EXPOSED’ on the SURF line that defines it. The coordinates, XYZ, and orientation, IOR, refer
to the front surface. To check that the heat conduction calculation is being done properly, you can add the
additional line
where now XYZ and IOR refer to the coordinates and orientation of the back side of the wall. These two wall
temperatures ought to be the same. Remember that the “wall” in this case can only be at most one mesh cell
thick, and its THICKNESS need not be the same as the mesh cell width. Rather, the THICKNESS ought to be
the actual thickness of the “wall” through which FDS performs a 1-D heat conduction calculation.
For a particle, you must reference an INIT line used to place the particle within the domain:
261
There is a second optional format. If you specify FORMAT_INDEX=2 on the PROF line, the resulting file
will contain columns containing only the final set of node coordinates and quantity values. This is handy for
displaying a steady-state profile.
will show the staggered velocity components as cell face normal vectors in Smokeview.
Slice file information is recorded in files (See Section 24.7) labeled CHID_n.sf, where n is the index of
the slice file. A short Fortran program fds2ascii.f90 produces a text file from a line, plane or volume of
data. See Section 20.11 for more details.
By default, Smokeview will blank slice file data inside obstructions. However, this is expensive to
load at startup in Smokeview for large cases. If you wish Smokeview not to store this blanking array, set
IBLANK_SMV=.FALSE. on MISC. Another option is to run Smokeview from the command line and to add
-noblank as an option.
262
Note that BNDF files (Section 24.9) can become very large, so be careful in prescribing the time interval,
DT_BNDF on the DUMP line. One way to reduce the size of the output file is to turn off the drawing of
boundary information on desired obstructions. On any given OBST line, if the string BNDF_OBST=.FALSE.
is included, the obstruction is not colored. To turn off all boundary drawing, set BNDF_DEFAULT=.FALSE.
on the MISC line. Then individual obstructions can be turned back on with BNDF_OBST=.TRUE. on the
appropriate OBST line. Individual faces of a given obstruction can be controlled via BNDF_FACE(IOR),
where IOR is the index of orientation (+1 for the positive x direction, -1 for negative, and so on). Normally,
FDS averages boundary file data at cell corners. For example, surface temperatures are computed at the
center of each surface cell, but they are linearly interpolated to cell corners and output to a file that is read by
Smokeview. To prevent this from happening, set CELL_CENTERED=.TRUE. on the BNDF line. This forces
FDS to output the actual cell-centered data with no averaging. Note that this feature is mainly useful for
diagnostics.
Sometimes it is useful to render the QUANTITY integrated over time. For example, a heat flux in units
of kW/m2 can be integrated in time producing the total energy absorbed by the surface in units of kJ/m2 . To
do this, set TEMPORAL_STATISTIC equal to ’TIME INTEGRAL’ on the BNDF line. Note that there are no
other options for TEMPORAL_STATISTIC on a BNDF line.
where the values are in ◦ C. Note that the isosurface output files CHID_n.iso can become very large, so
experiment with different sampling rates (DT_ISOF on the DUMP line). The parameter QUANTITY2 can be
used to color the isosurface. For example, the line:
draws a surface where the mixture fraction has a value of 0.05 kg/kg and colors the surface this using
temperature. The parameter SKIP=n (default: 1) can also be used to reduce data by skipping n-1 values in
each direction. The parameter DELTA=val can also be used to reduce data by forcing each triangle to have
all sides larger than val.
Any gas phase quantity can be animated via iso-surfaces, but use caution. To render an iso-surface,
the desired quantity must be computed in every mesh cell at every output time step. For quantities like
’TEMPERATURE’, this is not a problem, as FDS computes it and saves it anyway. However, species volume
fractions demand substantial amounts of time to compute at each mesh cell. Remember to include the
SPEC_ID corresponding to the given QUANTITY if necessary.
263
show the direction and relative speed of the fluid flow. The vector colors show a scalar fluid quantity such
as temperature. Five quantities are written out to a file at one instant in time. The default specification is:
It’s best to leave the velocity components as is, because Smokeview uses them to draw velocity vec-
tors. If any of the specified quantities require the additional specification of a particular species, use
PLOT3D_SPEC_ID(n) to provide the SPEC_ID for PLOT3D_QUANTITY(n).
Plot3D data are stored in files with extension .q . There is an optional file that can be output with
coordinate information if another visualization package is being used to render the files. If you write
WRITE_XYZ=.TRUE. on the DUMP line, a file with suffix .xyz is written out. Smokeview does not require
this file because the coordinate information can be obtained elsewhere.
Past versions of FDS (1-5) output Plot3D files by default. Now, you must specify the time interval
between dumps using DT_PL3D on the DUMP line.
(POROUS_FLOOR=.TRUE. on the MISC line). In this case, ’MPUA’ will be zero, but ’AMPUA’ will not. FDS stores the
droplet mass just before removing the droplet from the simulation for the purpose of saving CPU time.
264
it is on any solid surface, including the walls. If the droplet moves from one solid wall cell to another, it
will be counted again. The cooling of a solid surface by droplets of a given type is given by ’CPUA’, the
Cooling Per Unit Area in units of kW/m2 . Since a typical sprinkler simulation only tracks a small fraction
of the droplets emitted from a sprinkler, both MPUA and CPUA also perform an exponential smoothing. This
avoids having spotted distributions on surfaces due to the infrequent arrival of droplets that likely have a
high weighting factor.
Each of the output quantities mentioned above has a variant in which the quantity is summed by species
rather than particle type. For example, the quantity ’AMPUA_Z’ along with a specified SPEC_ID rather than
a PART_ID will sum the given output quantity over all particle classes with the given SPEC_ID.
As an example of how to use these kinds of output quantities, the test case bucket_test_1 describes
a single sprinkler mounted 10 cm below a 5 m ceiling. Water flows for 30 s at a constant rate of 180 L/min
(ramped up and down in 1 s). The simulation continues for another 10 s to allow water drops time to reach
the floor. The total mass of water discharged is
L kg 1 min
180 ×1 × × 30 s = 90 kg (20.1)
min L 60 s
In the simulation, the quantity ’AMPUA’ with SPATIAL_STATISTIC=’SURFACE INTEGRAL’ is specified
on the DEVC line. This results in FDS summing ’AMPUA’ over each grid cell in the volume defined by XB, in
this case the entire floor, analogous to if there were an single bucket present that was the same size as the area
specified with XB. Summing the values of ’AMPUA’ over the entire floor yields a total of 90 kg (Fig. 20.1).
Note that there really is no need to time-average the results. The quantity is inherently accumulating.
FDS6.7.1-0-g14cc738-master
80
Mass (kg)
60
40
20 Ideal
FDS
0
0 10 20 30 40
Time (s)
Figure 20.1: Accumulated water collected at the floor in the bucket_test_1 case.
The volume over which to integrate, XB, should be at least one grid cell thick above the surface.
265
20.9.3 Droplet and Particle Densities and Fluxes in the Gas Phase
Away from solid surfaces, ’MPUV’ is the Mass Per Unit Volume of particles or droplets of type (PART_ID)
in units of kg/m3 . ’MPUV_Z’ provides the same information integrated over all droplets of a single species,
(SPEC_ID).
The quantities ’PARTICLE FLUX X’, ’PARTICLE FLUX Y’, and ’PARTICLE FLUX Z’ produce slice
and Plot3D colored contours of the mass flux of particles in the x, y, and z directions, respectively, in units of
kg/m2 /s. You can also apply these quantities to a device. For example, in the case called bucket_test_4.fds,
the input line
records the integrated mass flux of all particles passing through the given horizontal plane. Figure 20.2
presents the results of this simple test case in which water spraying at a rate of 0.0005 kg/s for 55 s passes
through a measurement plane and onto the floor. The total water accumulated is 0.0275 kg.
-4 FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
10
2 0.03
Particle Mass Flux (bucket_test_4) Accumulated Mass (bucket_test_4)
0.025
0
0.02
Mass Flux (kg/s)
-2
Mass (kg)
0.015
-4
0.01
-6
Ideal 0.005 Ideal
FDS FDS
-8 0
0 10 20 30 40 50 60 0 10 20 30 40 50 60
Time (s) Time (s)
Figure 20.2: Mass flux and accumulated water collected at the floor in the bucket_test_4 case.
266
The PARTICLE WEIGHTING FACTOR describes how many actual particles each of the computational
particles represent.
For solid particles with a specified SURF_ID, you may specify any of the solid phase output quantities
listed in Table 20.3. If the specified quantity is associated with a species, use the parameter
QUANTITIES_SPEC_ID(N) to specify the species. Here N refers to the order of the specified output quan-
tities on the PART line.
output the surface temperature of a single particle that has been introduced into the simulation via an INIT
line.
If the particle is split (by means of multiple ORIENTATION vectors on the PART line), you can specify
which of the particle fragments you want using the parameter ORIENTATION_NUMBER on the DEVC line.
If the INIT line has a MULT_ID; that is, an array of particles is introduced via this single INIT line, then
the INIT_ID for each takes the form ’[ID]-00308’, where ID is that of the INIT line, and 308 refers to
the 308-th INIT line generated by the multiplicative sequence. The INIT lines are generated by looping
over the x indices, then y, then z. For example, the following input lines
specify an array of 10 by 10 by 4 particles. We want to record the surface temperature of the 307-th particle.
See Section 10.5 for details of how the MULT line is interpreted.
Solid particles can be used as a surrogate targets. For example, the following lines of input create a
massless particle that can be used to record a heat flux at a given location away from a solid wall. In this
case, the mock heat flux gauge is pointing in the −x direction:
Note that the DEVC line does not contain device coordinates, but rather a reference to the INIT line that
positions the single surrogate particle at the point XYZ. The INIT line references the PART line, which
provides information about the particle, in particular the orientation of the heat flux gauge. The reference to
the SURF line is mainly for consistency – FDS needs to know something about the particle’s geometry even
though it is really just a “target.” Its volume is meaningless. The functionality of surrogate particles can be
extended to model an array of devices. Instead of one heat flux gauge, we can create a line of them:
267
Note that the parameter DX on the INIT line creates a line of particles starting at the point XYZ and repeating
every 0.05 m. For more information about specifying arrays of devices via the parameter POINTS, see
Section 20.2.2.
An additional column, Q_TOTAL, includes the sum of the terms on the right hand side of the equation.
Ideally, this sum should equal the term on the left, Q_ENTH. All terms are reported in units of kW. Note that
the terms that make up Q_PART are summed over the Lagrangian particles. They represent the heat absorbed
by the particles via convection, radiation, and conduction from the wall.
The other columns in the file contain the total burning rate of fuel, in units of kg/s, and the zone pres-
sures. Note that the reported value of the burning rate is not adjusted to account for the possibility that each
individual material might have a different heat of combustion. For this reason, it is not always the case that
the reported total burning rate multiplied by the gas phase heat of combustion is equal to the reported heat
release rate.
Note that the volume integrations in Eq. (20.2) are performed over the entire domain. The differential,
dV , is the product of the local grid cell dimensions, dx dy dz. For the special case of two-dimensional
cylindrical coordinates, dV = r dr dθ dz, where r = x, dr = dx, and dθ = dy.
As a test of the energy balance, a sample case called Pressure_Solver/hallways.fds simulates a
fire near the end of five connected hallways. The other end of the hallways is open. As is seen in Fig. 20.3,
the quantities Q_ENTH and Q_TOTAL are very closely matched, indicating that the sources of energy loss
and gain are properly added and subtracted from the energy equation. As expected, the net energy gain/loss
eventually goes to zero as the compartment reaches a quasi-steady state.
268
FDS6.7.1-0-g14cc738-master
50
0 10 20 30 40 50 60
Time (s)
Figure 20.3: The energy budget for the hallways test case.
and the pressures of user-designated pressure zones (Section 20.10.3). The generation rate of fuel gas (often
called the burning rate) is given in the column entitled MLR_FUEL in units of kg/s. The generation rate of all
gas species, including fuel, is given in the column entitled MLR_TOTAL in units of kg/s.
K = Km ρ YS (20.4)
Devices that output a % obscuration such as a DEVC with a QUANTITY of ’ASPIRATION’, ’CHAMBER
OBSCURATION’ (smoke detector), or ’PATH OBSCURATION’ (beam detector) are discussed respectively in
Section 19.3.7, Section 19.3.5, and Section 19.3.6.
Estimates of visibility through smoke can be made by using the equation
S = C/K (20.5)
where C is a non-dimensional constant characteristic of the type of object being viewed through the smoke,
i.e., C = 8 for a light-emitting sign and C = 3 for a light-reflecting sign [57]. Since K varies from point to
point in the domain, the visibility S does as well.
Three parameters control smoke production and visibility. The first is the SOOT_YIELD on the REAC
line, defined as the fraction of fuel mass that is converted to soot if the simple chemistry approach is being
used. The second parameter, MASS_EXTINCTION_COEFFICIENT, is the Km in Eq. (20.4). It is defined on
269
one or more of the SPEC lines2 for the various light absorbing gas species. Its default value is 8700 m2 /kg, a
value suggested for flaming combustion of wood and plastics3 . The third parameter, VISIBILITY_FACTOR
on the MISC line, is the constant C in Eq. (20.5). It is 3 by default.
The gas phase output quantity ’EXTINCTION COEFFICIENT’ is K. A similar quantity is the ’OPTICAL
DENSITY’, D = K/2.3, the result of using log10 in the definition
1 I
D ≡ − log10 = K log10 e (20.6)
L I0
The visibility S is output via the QUANTITY called ’VISIBILITY’. Note that, by default, the visibility is
associated with the smoke that is implicitly defined by the simple chemistry model. However, this quantity
can also be associated with an explicitly defined species via the inclusion of a SPEC_ID. In other words, you
can specify the output quantity ’VISIBILITY’ along with a SPEC_ID. This does not require that you do a
simple chemistry calculation; only that you have specified the given species via a separate SPEC line. You
can specify a unique MASS_EXTINCTION_COEFFICIENT on the SPEC line as well.
Note that FDS cannot report a visibility of infinity, but rather reports a MAXIMUM_VISIBILITY that you
can control via the MISC line. The default is 30 m.
20.10.5 Layer Height and the Average Upper and Lower Layer Temperatures
Fire protection engineers often need to estimate the location of the interface between the hot, smoke-laden
upper layer and the cooler lower layer in a burning compartment. Relatively simple fire models, often re-
ferred to as two-zone models, compute this quantity directly, along with the average temperature of the upper
and lower layers. In a computational fluid dynamics (CFD) model like FDS, there are not two distinct zones,
but rather a continuous profile of temperature. Nevertheless, there are methods that have been developed
to estimate layer height and average temperatures from a continuous vertical profile of temperature. One
such method [59] is as follows: Consider a continuous function T (z) defining temperature T as a function
of height above the floor z, where z = 0 is the floor and z = H is the ceiling. Define Tu as the upper layer
temperature, Tl as the lower layer temperature, and zint as the interface height. Compute the quantities:
Z H
(H − zint ) Tu + zint Tl = T (z) dz = I1
0
Z H
1 1 1
(H − zint ) + zint = dz = I2
Tu Tl 0 T (z)
Solve for zint :
Tl (I1 I2 − H 2 )
zint = (20.7)
I1 + I2 Tl2 − 2 Tl H
Let Tl be the temperature in the lowest mesh cell and, using Simpson’s Rule, perform the numerical integra-
tion of I1 and I2 . Tu is defined as the average upper layer temperature via
Z H
(H − zint ) Tu = T (z) dz (20.8)
zint
270
&DEVC XB=2.0,2.0,3.0,3.0,0.0,3.0, QUANTITY='LAYER HEIGHT', ID='whatever' /
produces a time history of the smoke layer height at x = 2 and y = 3 between z = 0 and z = 3. If multiple
meshes are being used, the vertical path cannot cross mesh boundaries.
20.10.6 Thermocouples
The output quantity THERMOCOUPLE is the temperature of a modeled thermocouple. The thermocouple
temperature lags the true gas temperature by an amount determined mainly by its bead size. It is found by
solving the following equation for the thermocouple temperature, TTC [61]
dTTC 4
ρTC cTC = εTC (U/4 − σ TTC ) + h(Tg − TTC ) = 0 (20.9)
dt
where εTC is the emissivity of the thermocouple, U is the integrated radiative intensity, Tg is the true gas
temperature, and h is the heat transfer coefficient to a small sphere, h = k Nu/DTC . The bead DIAMETER,
EMISSIVITY, DENSITY, and SPECIFIC_HEAT are given on the associated PROP line. To over-ride the
calculated value of the heat transfer coefficient, set HEAT_TRANSFER_COEFFICIENT on the PROP line
(W/(m · K)). The default value for the bead diameter is 0.001 m. The default emissivity is 0.85. The default
values for the bead density and specific heat are that of nickel; 8908 kg/m3 and 0.44 kJ/kg/K, respectively.
See the discussion on heat transfer to a water droplet in the Technical Reference Guide for details of the
convective heat transfer to a small sphere.
where q̇00inc,rad is the incident radiative heat flux, εs is the surface emissivity, h is the convective heat
transfer coefficient, Ts is the surface temperature, and Tgas is the gas temperature in the vicinity of
the surface.
If the heat flux gauge used in an experiment has a temperature other than ambient or an emissivity
other than 1, use GAUGE_TEMPERATURE (Tgauge ) and GAUGE_EMISSIVITY (εgauge ) on the PROP
line associated with the device:
271
&DEVC ID='hf', XYZ=..., IOR=-2, QUANTITY='GAUGE HEAT FLUX', PROP_ID='hfp' /
&PROP ID='hfp', GAUGE_TEMPERATURE=80., GAUGE_EMISSIVITY=0.9 /
The heat transfer coefficient, h, is that of the solid surface to which the device is attached.
’RADIOMETER’
Similar to a heat flux gauge, this quantity measures only the radiative heat flux:
4
q̇00radiometer = εgauge q̇00inc,rad − σ Tgauge (20.12)
The GAUGE_TEMPERATURE (Tgauge ) and GAUGE_EMISSIVITY (εgauge ) can be set on the PROP line
associated with the device if their values are different than ambient and 1, respectively.
Note that the parameter SPATIAL_STATISTIC is not appropriate for this quantity, meaning that
you cannot integrate this quantity over a plane or volume. However, you can use the parameter
POINTS to create a one-dimensional array of heat flux gauges (see Section 20.2.2).
’RADIANCE’
This is the term for the radiation intensity at the point, x, and direction angle, s, where the summa-
tion is over all spectral bands:
N
I(x, s) = ∑ In (x, s) (20.13)
n=1
This quantity works in a similar way to ’RADIATIVE HEAT FLUX GAS’ in that a surrogate target
particle is placed at the point XYZ with an ORIENTATION pointing towards the source of the heat.
where, q̇00inc,rad is the incident radiative heat flux onto the surface, ε is the surface emissivity, h is the convec-
tive heat transfer coefficient, and Tgas is the surrounding gas temperature.
The usefulness of the AST is that it represents an effective exposure temperature that can be passed
on to a more detailed model of the solid object. It provides the gas phase thermal boundary condition in
a single quantity, and it is not affected by the uncertainty associated with the solid phase heat conduction
model within FDS. Obviously, the objective in passing information to a more detailed model is to get a
272
better prediction of the solid temperature (and ultimately its mechanical response) than FDS can provide.
To reinforce this notion, you can output the adiabatic surface temperature even when there is no actual solid
surface using the following lines:
This output indicates the maximum achievable solid surface temperature at the given location XYZ that is
not actually in the vicinity of a solid surface, facing in any direction as indicated by the ORIENTATION
vector. Note that you must set the EMISSIVITY and HEAT_TRANSFER_COEFFICIENT (W/(m2 ·K)) on the
PROP line because there is no actual solid surface from which to infer these values. In fact, FDS creates
a Lagrangian particle that records the AST at the desired location. FDS creates an INIT line to position
the particle. If you want to output other quantities at this point that are related to the AST, you can create
another DEVC at the same location and use INIT_ID to identify the DEVC line for the ADIABATIC SURFACE
TEMPERATURE. For example, you can output the heat transfer coefficient used in calculating the AST as
follows:
273
FDS6.7.1-0-g14cc738-master FDS6.7.1-0-g14cc738-master
500 500
Plate Temp vs AST (adiabatic_surface_temperature) Gas vs Solid AST (adiabatic_surface_temperature)
400 400
°C)
°C)
300 300
Temperature (
Temperature (
200 200
100 100
Plate (temp) AST
AST AST-Gas
0 0
0 20 40 60 80 100 120 0 20 40 60 80 100 120
Time (s) Time (s)
Figure 20.4: (Left) Surface temperature vs. adiabatic surface temperature of an insulated plate. (Right) AST
recorded with a device positioned on the plate surface (AST) and one just off the surface (AST-Gas).
This line directs FDS to write out the radiation intensity, Iil jk , for each cell with indices i jk that is bounded by
XB and for each solid angle l. You can skip cells using the parameters I_STEP, J_STEP, and K_STEP, each
of which default to 1. The print outs are done every DT_RADF s starting at T_RADF_BEGIN and ending at
T_RADF_END, where these three parameters are listed on the DUMP line. By default, T_RADF_BEGIN is set
to the start time of the simulation, T_BEGIN, and T_RADF_END is set to T_END. The time interval, DT_RADF,
is the end time minus the start time divided by 5, by default.
Each output file is in text, not binary, format. The format of the file is shown in Fig. 20.5. NSTEPS is the
number of TIMES that data is written out. NP is the number of points within the block designated by XB on
the RADF line of the input file. XYZ_INTENSITIES are the coordinates of the NP points. NI is the number
of solid angles, which are listed under XYZ_DIRECTIONS. A direction vector is a normalized form of the
discretized solid angle vector, (Dlx , Dly , Dlz ), that is described in the Radiation chapter of the FDS Technical
Reference Guide, Volume 1 [3].
Each TIME the intensities are written out, each cell in the designated block will list its temperature in
degrees K, a placeholder value of 0, and then the intensities at the NI solid angles in units of W/m2 .
but instantaneous values can be obtained by setting PDPA_INTEGRATE equal to .FALSE. on the corre-
sponding PROP line, in which case
F(t) = f (t) (20.16)
The function f (t) has two forms:
1
∑i ni Dm
i φ ∑i ni φ
m−n
f1 (t) = ; f2 (t) = (20.17)
∑i i ni
n D V
274
NSTEPS
2
TIMES
0.00
10.00
NP
3150
XYZ_INTENSITIES
2.350 1.350 0.050
.
.
.
NI
104
XYZ_DIRECTIONS
0.138 0.138 0.981
-0.138 0.138 0.981
.
.
.
TIME
0.00
INTENSITIES
293.15 0.00 133.17 133.17 133.17 133.17 133.17 ...
.
.
.
275
where ni is the number of real particles represented by the single simulated particle, Di is the particle
diameter, and φ is the quantity to be measured. In each case, the summation goes over all the particles
within a sphere with radius PDPA_RADIUS and centered at the location given by the device XYZ.
The first form f1 (t) is used for the computation of various mean diameters, with associated properties
defined using the following keywords on the PROP line:
PDPA_N n, exponent n of diameter. In case m = n, the exponent 1/(m − n) is removed from the formula.
The second form ( f2 (t)) is used for the computation of mass and energy related variables that do not
include the diameter weighting. The concentrations are based on the sampling volume, V , defined by
PDPA_RADIUS. The quantity used for x can be chosen with the keyword QUANTITY. A summary of the
available PDPA quantities is shown in Table 20.1.
QUANTITY φ f Unit
’DIAMETER’ (default) 1 f1 µm
’ENTHALPY’ (4/3)ρi ri3 (c p,i (Ti )Ti − c p,i (Tm )Tm ) f2 kJ/m3
’PARTICLE FLUX X’ (4/3)ρi ri3 ui f2 kg/m2 s
’PARTICLE FLUX Y’ (4/3)ρi ri3 vi f2 kg/(m2 · s)
’PARTICLE FLUX Z’ (4/3)ρi ri3 wi f2 kg/(m2 · s)
’U-VELOCITY’ ui f1 m/s
’V-VELOCITY’ vi f1 m/s
’W-VELOCITY’ wi f1 m/s
1
’VELOCITY’ (u2i + v2i + w2i ) 2 f1 m/s
’TEMPERATURE’ Ti f1 ◦C
It is also possible to output histograms of PDPA output quantities. When PDPA_HISTOGRAM is set
to .TRUE., normalized histogram bin counts are output to a comma-separated value (.csv) file from all
devices associated with this PROP line. The number of bins and the limits of the histogram are controlled by
parameters on the PROP line. The value used in creating the histogram is Dm i φ . Note that when making a
histogram of diameters, the limits must be given in meters, not microns. Values falling outside the histogram
limits are included in the counts of the first and last bins. Cumulative distributions can be output by setting
PDPA_HISTOGRAM_CUMULATIVE=.TRUE. on the PROP line. To output unnormalized counts or cumulative
distribution, set PDPA_NORMALIZE to .FALSE.. Note, however, that the counts correspond to the super
droplets/particles, not the numerical ones. Due to the stratified sampling technique used (see Section 18.3.3),
the counts are not necessarily integers.
The histogram output file contains of two-columns for each device. The first column gives the bin
centers, and the second column gives the relative frequency. Volume and area based distributions can be
output by setting the PDPA_N parameter on the PROP line to 3 and 2 respectively. Notice that this works
differently from the mean diameter computation where the weighting is based on the PDPA_M parameter.
The properties of the PDPA device are defined using the following keywords on the PROP line:
276
PART_ID Name of the particle group to limit the computation to. Do not specify to account for all particles.
PDPA_START ts , starting time of time integration in seconds. PDPA output is always a running average over
time. As the spray simulation may contain some initial transient phase, it may be useful to specify the
starting time of data collection.
PDPA_INTEGRATE A logical parameter for choosing between time integrated or instantaneous values.
.TRUE. by default.
PDPA_RADIUS Radius (m) of the sphere, centered at the device location, inside which the particles are
monitored.
PDPA_NORMALIZE Can be set .FALSE. to force V = 1 in the formula for f2 (t), or to unnormalize the
histogram output.
The following example is used to measure the Sauter mean diameter, D32 , of the particle type ’water
drops’, starting from time 5 s.
&PROP ID='pdpa_d32'
PART_ID='water drops'
PDPA_M=3
PDPA_N=2
PDPA_RADIUS=0.01
PDPA_START=5. /
&DEVC XYZ=0.0,0.0,1.0, QUANTITY='PDPA', PROP_ID='pdpa_d32' /
The following example is used to write out a histogram of droplet size using 20 equally sized bins between
0 and 2000 µm.
&PROP ID='pdpa_d'
PART_ID='water drops'
QUANTITY="DIAMETER"
PDPA_RADIUS=0.01
PDPA_START=0.0
PDPA_M=1
PDPA_HISTOGRAM=.TRUE.
PDPA_HISTOGRAM_NBINS=20
PDPA_HISTOGRAM_LIMITS=0,2000E-6 /
&DEVC XYZ=0.0,0.0,1.0, QUANTITY='PDPA', PROP_ID='pdpa_d' /
277
Thermogravimetric Analysis (TGA) Output
Thermogravimetric Analysis or TGA is a bench-scale measurement in which a very small solid material
sample is heated up at a constant rate. The results of a TGA measurement are presented in the form of a
normalized mass and normalized mass loss rate. Analogous quantities can be output from FDS:
.
’NORMALIZED MASS’ = ∑ m00α (t) ∑ m00α (0) (dimensionless)
α α
.
’NORMALIZED MASS LOSS RATE’ = ∑ ṁα (t) ∑ m00α (0)
00
(1/s)
α α
For both of these quantities, you can add a MATL_ID to get the normalized mass or mass loss rate of a single
component of the solid material, m00α (t)/ ∑α m00α (0).
Note that ṁ00F is the mass flux of fuel and ∆H is the heat of combustion.
Note that it is assumed that the sample is heated purely by convection, in which case q̇00c is the convective
heat flux.
20.10.12 Fractional Effective Dose (FED) and Fractional Irritant Concentration (FIC)
The Fractional Effective Dose index (FED), developed by Purser [64], is a commonly used measure of
human incapacitation due to the combustion gases. The FED value is calculated as
where t is time in minutes and CCO is the CO concentration (ppm). The fraction of an incapacitating dose of
CN is calculated as Z t
1 CCN (t)
FEDCN = exp − 0.0045 dt (20.20)
0 220 43
where t is time in minutes and CCN is the concentration (ppm) of HCN corrected for the protective effect of
NO2 . CCN is calculated as
CCN = CHCN −CNO2 −CNO (20.21)
278
The fraction of an incapacitating dose of NOx is calculated as
Z t
CNOx (t)
FEDNOx = dt (20.22)
0 1500
where t is time in minutes and CNOx is the sum of NO and NO2 concentrations (ppm).
The Fractional Lethal Dose (FLD) of irritants is calculated as
Z t
CHCl (t) CHBr (t) CHF (t) CSO2 (t) CNO2 (t) CC3 H4 O (t) CCH2 O (t)
FLDirr = + + + + + + dt
0 FFLD,HCl FFLD,HBr FFLD,HF FFLD,SO2 FFLD,NO2 FFLD,C3 H4 O FFLD,CH2 O
(20.23)
where t is time in minutes, the nominators are the instantaneous concentrations (ppm) of each irritant and
the denominators are the exposure doses of respective irritants predicted to be lethal to half the population.
The lethal exposure doses [64] are given in Table 20.2. To include the effect of an irritant gas not listed in the
table, you should specify FFLD in ppm×min using the FLD_LETHAL_DOSE property of the corresponding
SPEC line.
Table 20.2: Coefficients used for the computation of irritant effects of gases.
279
&SLCF PBY= 1.0, QUANTITY='VOLUME FRACTION', SPEC_ID= 'CARBON DIOXIDE' /
&SLCF PBY= 1.0, QUANTITY='VOLUME FRACTION', SPEC_ID= 'CARBON MONOXIDE' /
&SLCF PBY= 1.0, QUANTITY='VOLUME FRACTION', SPEC_ID= 'OXYGEN' /
causes FDS to write out the maximum gas phase temperature over the volume bounded by XB. Note that it
does not compute the maximum over the entire computational domain, just the specified volume, and this
volume must lie within a single mesh. Other SPATIAL_STATISTIC’s are discussed below. Note that some
are appropriate for gas phase output quantities, some for solid phase, and some for both.
For solid phase output quantities, like heat fluxes and surface temperatures, the specification of a
SURF_ID along with the appropriate statistic limits the calculation to only those surfaces. You can fur-
ther limit the search by using the sextuplet of coordinates XB to force FDS to only compute statistics for
surface cells within the given volume. Be careful to account for the fact that the solid surface might shift to
conform to the underlying numerical grid. Also, be careful not to specify a volume that extends beyond a
single mesh. Note that you do not (and should not) specify an orientation via the parameter IOR when using
a spatial statistic. IOR is only needed to find a specific point on the solid surface.
Note also that you must specify a volume to sum over via the coordinate parameters, XB, which can extend
into multiple meshes.
If you want to know where the specified QUANTITY achieves its minimum or maximum value over
the specified volume XB, set SPATIAL_STATISTIC to ’MINLOC X’ or ’MAXLOC X’ for the x coordinate.
Substitute Y or Z if you desire the y or z coordinate, in m.
Average Value
For a gas phase scalar quantity defined at the center of each grid cell, φi jk , the SPATIAL_STATISTIC
’MEAN’ computes the average value,
1
φi jk (20.28)
N ∑i jk
over the cells that are included in the specified volume bounded by XB. Note that this statistic is only ap-
propriate for gas phase quantities. Note also that you must specify a volume to sum over via the coordinate
parameters, XB, which can extend into multiple meshes.
280
Volume-Weighted Mean
For a gas phase scalar quantity, φ (x, y, z), SPATIAL_STATISTIC=’VOLUME MEAN’ produces the discrete
analog of
1
Z
φ (x, y, z) dx dy dz (20.29)
V
which is very similar to ’MEAN’, but it weights the values according to the relative size of the mesh cell.
Note that this statistic is only appropriate for gas phase quantities. Note also that you must specify a volume
to sum over via the coordinate parameters, XB, which can extend into multiple meshes.
Mass-Weighted Mean
For a gas phase scalar quantity, φ (x, y, z), SPATIAL_STATISTIC=’MASS MEAN’ produces the discrete ana-
log of
ρ(x, y, z) φ (x, y, z) dx dy dz
R
(20.30)
ρ dx dy dz
R
which is similar to ’VOLUME MEAN’, but it weights the values according to the relative mass of the mesh
cell. Note that this statistic is only appropriate for gas phase quantities. Note also that you must specify a
volume to sum over via the coordinate parameters, XB, which can extend into multiple meshes.
Volume Integral
For a gas phase scalar quantity, φ (x, y, z), SPATIAL_STATISTIC=’VOLUME INTEGRAL’ produces the dis-
crete analog of Z
φ (x, y, z) dx dy dz (20.31)
This statistic is only appropriate for gas phase quantities, in particular those whose units involve m−3 . For
example, heat release rate per unit volume is an appropriate output quantity. This statistic can also be used
on a DEVC line with an output quantity of DENSITY to output the total mass within the volume bound by XB.
In all cases, you must specify a volume to sum over via the coordinate parameters, XB, which can extend
into multiple meshes.
Mass Integral
For a given gas phase output quantity, φ (x, y, z), SPATIAL_STATISTIC=’MASS INTEGRAL’ produces the
discrete analog of Z
ρ(x, y, z) φ (x, y, z) dx dy dz (20.32)
Note that this statistic is only appropriate for gas phase quantities. Note also that you must specify a volume
to sum over via the coordinate parameters, XB, which can extend into multiple meshes.
Area Integral
For a gas phase scalar quantity, φ (x, y, z), SPATIAL_STATISTIC=’AREA INTEGRAL’ produces the discrete
analog of Z
φ (x, y, z) dA (20.33)
where dA depends on the coordinates you specify for XB. Note that this statistic is only appropriate for gas
phase quantities, in particular those whose units involve m−2 . For example, the quantity ’MASS FLUX X’
281
along with SPEC_ID=’my gas’ is an appropriate output quantity if you want to know the mass flux of the
gas species that you have named ’my gas’ through an area normal to the x direction. Note also that you
must specify an area to sum over via the coordinate parameters, XB, which can extend into multiple meshes.
Surface Integral
For a solid phase scalar quantity, φ , SPATIAL_STATISTIC=’SURFACE INTEGRAL’ produces the discrete
analog of Z
φ dA (20.34)
Note that this statistic is only appropriate for solid phase quantities, in particular those whose units involve
m−2 . For example, the various heat and mass fluxes are appropriate output quantities.
would output the total mass of methane in the volume XB where the mass fraction was between 0.03 and
0.15.
A set of additional SPATIAL_STATISTIC’s are available for use with QUANTITY_RANGE: ’MASS’,
’VOLUME’, and ’SURFACE AREA’. These output the mass, volume, or surface area (for a solid phase quan-
tity) where the QUANTITY lies within the QUANTITY_RANGE. For example:
would output the total surface area in the volume XB where the net heat flux exceeds 10 kW/m2 .
outputs the net integrated mass flux through the given planar area, oriented in the positive z direction, in this
case. The three flows ’VOLUME FLOW’, ’MASS FLOW’, and ’HEAT FLOW’ are defined:
Z
V̇ = u · dS (20.35)
Z
ṁ = ρu · dS (20.36)
Z
q̇ = ρc p (T − T∞ ) u · dS (20.37)
282
The addition of a + or - to the QUANTITY names yields the integral of the flow in the positive or negative
direction only. In other words, if you want to know the mass flow out of a compartment, use ’MASS FLOW
+’ or ’MASS FLOW -’, depending on the orientation of the door.
Time Average
The TEMPORAL_STATISTIC=’TIME AVERAGE’ is typically applied by default, unless it is inappropriate
for the chosen QUANTITY. With this statistic, FDS outputs the average value of the QUANTITY over the time
period of DT_DEVC s just prior to the time of output. The parameter DT_DEVC is specified on the DUMP line.
Running Average
The TEMPORAL_STATISTIC=’RUNNING AVERAGE’ outputs the running average value of the QUANTITY
over the time period starting at STATISTICS_START and ending at STATISTICS_END. This is the default
behavior of “line” devices discussed in Section 20.2.2.
283
Instantaneous Value
For various reasons you might want to output the value of the QUANTITY that has not been time-averaged
or processed in any way. Sometimes this is important for device and control functions. To output the
instantaneous value, set TEMPORAL_STATISTIC to ’INSTANT VALUE’.
Time Integral
TEMPORAL_STATISTIC=’TIME INTEGRAL’ produces a discrete analog of the time integral:
Z t
φ (τ) dτ (20.39)
t0
which represents the probability4 of the value φ not being exceeded in the given time interval, (t1 − t0 )/N.
The probabilities for each of the N ascending maximum values are assumed to be m/(N + 1). Plotting φ
versus the expression on the right yields an approximate straight line from which we can estimate the value
of φ appropriate for the longer TIME_PERIOD; that is, the value for which the probability of not being
exceeded in the relatively short time interval (t1 − t0 )/N is very close to 1. Returning to the example from
wind engineering, the probability of not exceeding the 50 year wind speed in a given year is 1−1/50 = 0.98.
284
Covariance
If u = U −U and v = V −V are the deviations for two random variables, U and V , then an unbiased estimate
of the covariance is given by
∑n (Ui −U)(Vi −V )
u v = i=1 (20.43)
n−1
To output this statistic you must add a QUANTITY2 to the DEVC line and set TEMPORAL_STATISTIC=’COV’.
The following lines would create a line of devices and a single point device equivalent to the first point in
the line:
Correlation Coefficient
Setting TEMPORAL_STATISTIC=’CORRCOEF’ outputs the correlation coefficient given by
uv
ρuv = (20.44)
urms vrms
Here again you must add a QUANTITY2 to the device line.
p∞ is the ambient, or “free stream” pressure, and ρ∞ is the ambient density. The parameter U is the free-
stream wind speed, given as CHARACTERISTIC_VELOCITY on the PROP line
Thus, you can either paint values of Cp at all surface points, or create a single time history of Cp using a
single device at a single point.
285
20.10.17 Aerosol and Soot Concentration
Currently there are three different device options for outputting aerosol concentration (e.g., soot concentra-
tion) from FDS. It is important to recognize what each device is outputting so that the proper selection can
be made.
Specifying a DEVC with a ’MASS FRACTION’ and a SPEC_ID of SOOT will output the mass fraction of
soot in the gas phase. The quantity ’VOLUME FRACTION’ and a SPEC_ID of SOOT will output the volume
fraction of soot in the gas phase treating the soot as if it were an ideal gas. The quantity ’AEROSOL VOLUME
FRACTION’ and a SPEC_ID of SOOT will output the volume fraction of soot as if it were a solid particle in
the computational cell based on the following equation,
20.10.19 Enthalpy
There are several outputs that report the enthalpy of the gas mixture. First, the ’SPECIFIC ENTHALPY’
and the ’SPECIFIC SENSIBLE ENTHALPY’ are defined:
Z T Z T
h(T ) = ∆h◦f + 0
c p (T ) dT 0
; hs (T ) = c p (T 0 ) dT 0 (20.47)
Tref Tref
Both have units of kJ/kg. The quantities ’ENTHALPY’ and ’SENSIBLE ENTHALPY’ are ρh and ρhs , re-
spectively, in units of kJ/m3 .
’CFL MAX’ The maximum value of the CFL (Courant-Friedrichs-Lewy) number, the primary constraint
on the time step, for the mesh in which the device is located. By default, the time step is chosen so that
the CFL number remains within the range of 0.8 to 1.0. If you want to see the CFL number in each grid
cell, use a slice (SLCF) file with QUANTITY=’CFL’ and CELL_CENTERED=.TRUE..
286
’CPU TIME’ Elapsed CPU time since the start of the simulation, in seconds.
’ITERATION’ Number of time steps completed at the given time of the simulation.
’NUMBER OF PARTICLES’ Number of Lagrangian particles for the MESH in which the DEVC is located.
’VN MAX’ The maximum value of the VN (Von Neumann) number, a secondary constraint on the time
step, for the mesh in which the device is located. By default, the time step is chosen so that the VN
number remains below 1. If you want to see the VN number in each grid cell, use a slice (SLCF) file
with QUANTITY=’VN’ and CELL_CENTERED=.TRUE..
’WALL CLOCK TIME’ Elapsed wall clock time since the start of the simulation, in seconds.
’WALL CLOCK TIME ITERATIONS’ Elapsed wall clock time since the start of the time stepping loop, in
seconds.
In addition, the following flags can be useful in monitoring the performance of an MPI calculation. They
are typically used for debugging.
VELOCITY_ERROR_FILE If set to .TRUE. on the DUMP line, this parameter will cause FDS to create a file
with a time history of the maximum error associated with the normal component of velocity at solid or
interpolated boundaries.
MPI_TIMEOUT The amount of time, in seconds, to wait for messages sent via MPI (Message Passing Inter-
face) before timing out. This parameter is set on the MISC line. The default value is 10 s. This parameter
is only useful in forcing a job with deadlocked messages to finish and print out information about the
lost message. It is very unlikely to solve a deadlock problem.
-1.2345678E+123
To change the precision of the numbers, use SIG_FIGS on the DUMP line to indicate the number of significant
figures in the mantissa (default is 8). Use SIG_FIGS_EXP to change the number of digits in the exponent
(default is 3). Keep in mind that the precision of real numbers used internally in an FDS calculation is
approximately 12, equivalent to 8 byte or double precision following conventional Fortran rules.
287
Measure of Turbulence Resolution
A scalar quantity referred to as the measure of turbulence resolution [66] is defined locally as:
ksgs
M(x) = (20.48)
hTKEi + ksgs
where the resolved turbulent kinetic energy per unit mass is:
TKE = 12 (ui − hui i)(ui − hui i) (20.49)
Where u is the cell centered velocity vector from the velocity components at cell faces (i.e. ũ = (ū, v̄, w̄)),
angled brackets denote time-averaged values and subscript i indicate grid indices. To output resolved TKE
use the following DEVCs to output the three velocity components:
The output of these DEVCs must be post-processed to obtain resolved TKE. First, output the velocity vec-
tor u using the velocity components, choose a suitable time-averaging period (which will be case-specific),
output a mean velocity hui and hence the fluctuation in velocity (u − hui).
The subgrid kinetic energy is estimated from Deardorff’s eddy viscosity model
Here, Cν is the Deardorff eddy viscosity model constant, ũi is the resolved LES velocity and ũˆi is test filtered
at a scale 2∆ where ∆ is the LES filter width (in FDS, ∆ = δ x). In the bulk flow region, the model for the SGS
fluctuations is taken from scale similarity [67]. Cross-term energy is ignored. Keep in the mind, however,
that the test filter operation is ill-defined near walls, and so FDS employs constant Smagorinsky in these
cells to compute the eddy viscosity.
To output an estimate of the subgrid kinetic energy per unit mass use
The concept behind the measure of turbulence resolution is illustrated in Figure 20.6. Notice that on the
left the difference between the grid signal and the test signal is very small. On the right, the grid signal is
highly turbulent and the corresponding test signal is much smoother. We infer then that the flow is under-
resolved.
For the canonical case of isotropic turbulence Pope actually defines LES such that M < 0.2. That is, LES
requires resolution of 80% of the kinetic energy in the flow field (because this puts the grid Nyquist limit
within the inertial subrange). The question remains as to whether this critical value is sufficient or necessary
for a given engineering problem. As shown in Ref. [68], maintaining mean values of M near 0.2 indeed
provides satisfactory results (simulation results within experimental error bounds) for mean velocities and
species concentrations in non-reacting, buoyant plumes.
288
1 1
grid signal, ū grid signal, ū
ˆ
test signal, ū ˆ
test signal, ū
0.5 0.5
signal
signal
0 0
−0.5 −0.5
−1 −1
0 1 2 3 4 5 6 0 1 2 3 4 5 6
space space
Figure 20.6: (Left) Resolved signal, M is small. (Right) Unresolved signal, M is close to unity.
We begin by providing background on the simple Haar wavelet [69]. For a thorough and more sophisti-
cated review of wavelet methods, the reader is referred to Schneider and Vasilyev [70].
Suppose the scalar function f (r) is sampled at discrete points r j , separated by a distance h, giving values
s j . Defining the unit step function over the interval [r1 , r2 ] by
1 if r1 ≤ r < r2
ϕ[r1 ,r2 ] = (20.51)
0 otherwise
the simplest possible reconstruction of the signal is the step function approximation
By “viewing” the signal at a coarser resolution, say 2h, an identical reconstruction of the function f over the
interval [r j , r j + 2h] may be obtained from
s j + s j+1 s j − s j+1
f[r j ,r j +2h] (r) = ϕ[r j ,r j +2h] (r) + ψ (r) (20.53)
| {z 2 } | {z 2 } [r j ,r j +2h]
a c
where a is as the average coefficient and c is as the wavelet coefficient. The Haar mother wavelet (Figure
20.7) is identified as
1 if r1 ≤ r < 21 (r1 + r2 )
ψ[r1 ,r2 ] (r) = (20.54)
−1 if 12 (r1 + r2 ) ≤ r < r2
The decomposition of the signal shown in Eq. (20.53) may be repeated at ever coarser resolutions. The
result is a wavelet transform. The procedure is entirely analogous to the Fourier transform, but with compact
support. If we look at a 1D signal with 2m points, the repeated application of (20.53) results in an m × m
matrix of averages a with components ai j and an m × m wavelet coefficient matrix c with components ci j .
Each row i of a may be reconstructed from the i + 1 row of a and c. Because of this and because small values
of the wavelet coefficient matrix may be discarded, dramatic compression of the signal may be obtained.
Here we are interested in using the wavelet analysis to say something about the local level of error due
to grid resolution. Very simply, we ask what can be discerned from a sample of four data points along a line.
289
1
ψ[0,1]
0
−1
−1 0 1 2
Roughly speaking we might expect to see one of the four scenarios depicted in Figure 20.8. Within each
plot window we also show the results of a Haar wavelet transform for that signal. Looking first at the two
top plots, on the left we have a step function and on the right we have a straight line. Intuitively, we expect
large error for the step function and small error for the line. The following error measure achieves this goal:
|c11 + c12 | − |c21 |
WEM(x,t) = max (20.55)
x,y,z |a21 |
Note that we have arbitrarily scaled the measure so that a step function leads to WEM of unity. In practice
the transform is performed in all coordinate directions and the max value is reported. The scalar value may
be output to Smokeview at the desired time interval.
Looking now at the two plots on the bottom of Figure 20.8, the signal on the left, which may indicate
spurious oscillations or unresolved turbulent motion, leads to WEM = 2. Our measure therefore views this
situation as the worst case in a sense. The signal to the lower right is indicative of an extremum, which
actually is easily resolved by most centered spatial schemes and results again in WEM = 0.
In [68], the time average of WEM was reported for LES of a non-reacting buoyant plume at three grid
resolutions. From this study, the best advice currently is to maintain average values of WEM less than 0.5.
where µt is the turbulent viscosity and |S̃| is the filtered strain invariant (see FDS Tech Guide).
290
1 1
a = 0.00 1.00 a = 0.17 0.83
normalized signal
normalized signal
0.8 0.50 0.00 0.8 0.50 0.00
0.2 0.2
0 0
1 2 3 4 1 2 3 4
spatial index spatial index
1 1
a = 0.50 0.50
normalized signal
normalized signal
0.8 0.50 0.00 0.8
Figure 20.8: Averages and coefficients for local Haar wavelet transforms on four typical signals.
The value of y+ reported is half (since the velocity lives at the cell face center) the wall-normal cell di-
mension (δ n) divided by the maximum between the local viscous length scale, δν [11] or the sand grain
roughness, s, for rough walls:
δ n/2 µ/ρ
y+ = δν = τw /ρ ,
p
; ; uτ = (20.58)
max(δν , s) uτ
where τw = µ ∂ |u|/∂ n is the viscous stress evaluated at the wall (τw is computed by the wall function, |u|
291
is taken as an estimate of the streamwise velocity component near the wall); the quantity uτ is the friction
velocity. The friction velocity may also be output in a boundary file or via a device attached to a wall. For
example:
Wall functions for LES are still under development, but as a general guideline it is recommended that the
first grid cell fall within the log layer: a value y+ = 30 would be considered highly resolved, the upper limit
of the log region for statistically stationary boundary layers depends on the Reynolds number, and there are
no hard rules for transient flows. Beyond y+ = 1000 the first grid cell is likely to fall in the wake region of
the boundary layer and may produce unreliable results. A reasonable target for practical engineering LES is
y+ = O(100).
20.10.23 Extinction
In combustion, knowing if, when, or where chemical reactions have been extinguished is important. The
output quantity EXTINCTION tells the user whether or not combustion has been prevented by the extinction
routine. By default, EXTINCTION = 0, which means that the FDS extinction routine has not prevented
combustion. An EXTINCTION value of 1 means that the routine has prevented combustion. The criteria for
an EXTINCTION value of 1 is the presence of fuel and oxidizer without any energy release. An EXTINCTION
value of -1 means that there is either no fuel or no oxidizer present.
fds2ascii
at the command prompt. You will be asked a series of questions about which type of output file to pro-
cess, what time interval to time average the data, and so forth. A single file is produced with the name
CHID_fds2ascii.csv. A typical command line session looks like this:
>> fds2ascii
Enter Job ID string (CHID):
bucket_test_1
What type of file to parse?
PL3D file? Enter 1
SLCF file? Enter 2
BNDF file? Enter 3
3
Enter Sampling Factor for Data?
(1 for all data, 2 for every other point, etc.)
1
Limit the domain size? (y or n)
y
Enter min/max x, y and z
-5 5 -5 5 0 1
1 MESH 1, WALL TEMPERATURE
Enter starting and ending time for averaging (s)
5 The source code is located in the GitHub repository, firemodels/fds, in the directory, Utilities/fds2ascii.
292
35 36
Enter orientation: (plus or minus 1, 2 or 3)
3
Enter number of variables
1
Enter boundary file index for variable 1
1
Enter output file name:
bucket_test_1_fds2ascii.csv
Writing to file... bucket_test_1_fds2ascii.csv
These commands tell fds2ascii that you want to convert (binary) boundary file data into a text file.
You want to sample every data point within the specified volume, you want only those surfaces that point
upwards (+3 orientation), you only want 1 variable (only one is listed anyway and its index is 1 – that is just
the number used to list the available files). The data will be time-averaged, and it will be output to a file
listed at the end of the session. Here is a more detailed explanation of the questions:
Enter Job ID string (CHID): Enter the name of the job that you entered into the FDS input file under the
parameter CHID. Do not include the .fds suffix.
What type of file to parse? The program can only read Plot3D (PL3D), slice (SLCF), or boundary (BNDF)
files.
Enter Sampling Factor for Data: If you want to print out every point, enter 1; every other point, enter 2;
and so on.
Domain selection: The answer is a one or two letter code. If the first letter is y or Y, this means you want
to print out a subset of the data for the entire domain. If n or N, you do not want to limit the data.
The answer of z or Z is only for cases where you have an outdoor fire scenario over rough terrain, and
you want to offset the z coordinate so that it denotes height off the ground. If the second letter of the
two letter code is a or A, this means that you want the program to automatically select the appropriate
files. If the first letter of the two letter code is y or Y, you will be prompted for 6 numbers denoting the
minimum and maximum values of x, y, and z.
Enter starting and ending time for averaging (s): The slice and boundary file data will be time-averaged
over the designated time interval.
How many variables to read: Enter the number of different output quantities that you want to include in
your output file.
Enter orientation: (plus or minus 1, 2 or 3): For a boundary file, you must designate the orientation of
the surfaces you want to print out. +1 means surfaces facing the positive x direction, -2 means negative
y, and so on.
293
For those output quantities that require a species name via SPEC_ID, the species implicitly defined
when using the simple chemistry combustion model are ’OXYGEN’, ’NITROGEN’, ’WATER VAPOR’, and
’CARBON DIOXIDE’. If CO_YIELD and/or SOOT_YIELD are specified on the REAC line, then ’CARBON
MONOXIDE’ and ’SOOT’ are included as output species. The fuel species can be output via the FUEL
specified on the REAC line. As an example of how to use the species names, suppose you want to calculate
the integrated mass flux of carbon monoxide through a horizontal plane, like the total amount entrained in a
fire plume. Use a “device” as follows
Here, the ID is just a label in the output file. When an output quantity is related to a particular gas species or
particle type, you must specify the appropriate SPEC_ID or PART_ID on the same input line. Also note that
the use of underscores in output quantity names has been eliminated – just remember that all output quantity
names ought to be in single quotes.
294
Table 20.3: Summary of frequently used output quantities.
295
Table 20.3: Summary of frequently used output quantities (continued).
296
Table 20.3: Summary of frequently used output quantities (continued).
297
20.13 Summary of Infrequently-Used Output Quantities
Table 20.4 below lists some less often used output quantities. These are mainly used for diagnostic purposes.
Explanations for most can be found in Volume 1 of the FDS Technical Reference Guide [3].
298
Table 20.4: Summary of infrequently used output quantities (continued).
1 Requires the specification of a gas species using SPEC_ID. Omit SPEC_ID for total flux.
2 Requires the specification of a particle name using PART_ID.
3 Requires specification of an additional scalar using QUANTITY2.
4 Allows for an optional MATL_ID.
5 Allows for an optional REAC_ID. Default is Reaction 1.
299
20.14 Summary of HVAC Output Quantities
Table 20.5 summarizes the various Output Quantities for HVAC systems. Quantities for a duct require the
specification of a DUCT_ID, and quantities for a node require the specification of a NODE_ID. Mass and
volume fraction outputs also require the specification of a SPEC_ID.
300
Chapter 21
This appendix lists all of the input parameters for FDS in separate tables grouped by namelist, these tables
are in alphabetical order along with the parameters within them. This is intended to be used as a quick
reference and does not replace reading the detailed description of the parameters in the main body of this
guide. See Table 5.1 for a cross-reference of relevant sections and the tables in this appendix. The reason
for this statement is that many of the listed parameters are mutually exclusive – specifying more than one
can cause the program to either fail or run in an unpredictable manner. Also, some of the parameters trigger
the code to work in a certain mode when specified. For example, specifying the thermal conductivity of a
solid surface triggers the code to assume the material to be thermally-thick, mandating that other properties
be specified as well. Simply prescribing as many properties as possible from a handbook is bad practice.
Only prescribe those parameters which are necessary to describe the desired scenario. Note that you may
use the character string FYI on any namelist line to make a note or comment.
301
21.3 CLIP (Clipping Parameters)
302
Table 21.6: For more information see Section 19.5.
303
Table 21.7: Continued
304
Table 21.8: For more information see Section 20.1.
∆t=T_END-T_BEGIN
305
21.9 HEAD (Header Parameters)
306
Table 21.11: Continued
307
Table 21.12: Continued
308
21.14 MATL (Material Properties)
309
Table 21.15: Continued
310
Table 21.16: Continued
311
Table 21.16: Continued
312
Table 21.18: Continued
313
Table 21.19: Continued
314
Table 21.20: Continued
315
21.22 PROF (Wall Profile Parameters)
316
Table 21.23: Continued
317
Table 21.25: For more information see Section 17.1.
318
Table 21.27: Continued
319
Table 21.28: Continued
320
Table 21.29: Continued
321
Table 21.30: Continued
322
Table 21.30: Continued
323
Table 21.31: Continued
324
Table 21.34: Continued
325
Table 21.35: Continued
326
Part III
327
Chapter 22
For those interested in obtaining the FDS and Smokeview source codes, either for development work or
simply to compile on a particular platform, it is strongly suggested that you download onto your com-
puter the FDS and Smokeview repositories. All project documents are maintained using the online utility
GitHub, a free service that supports software development for open source applications. GitHub uses Git
version control software. Under this system, a centralized repository containing all project files resides on a
GitHub server. Anyone can obtain a copy of the repository or retrieve a specific revision of the repository.
However, only the FDS and Smokeview developers can commit changes directly to the repository. Others
must submit a “pull request.” Detailed instructions for checking out the FDS repository can be found at
https://github.com/firemodels/fds.
Both FDS and Smokeview live within a GitHub organization called “firemodels”. The current loca-
tion of the organization is https://github.com/firemodels. The repositories that are used by the FDS and
Smokeview projects are listed below along with a brief description:
fds FDS source code, verification and validation tests, wikis, and documentation
smv Smokeview source code, integration tests, and documentation
exp Experimental data repository for FDS validation
out FDS output results for validation
bot Firebot (continuous integration system) source
fds-smv Web page html source
The wiki pages in the fds repository are particularly useful in describing the details of how you go about
working with the repository assets.
329
Chapter 23
Compiling FDS
If a compiled version of FDS exists for the machine on which the calculation is to be run and no changes
have been made to the original source code, there is no need to re-compile the code. For example, the file
fds.exe is the compiled program for a Windows-based PC; thus PC users do not need a Fortran compiler
and do not need to compile the source code. For machines for which an executable has not been compiled,
you must compile the code. A Fortran 2008 compliant compiler is required.
• The source code consists entirely of Fortran statements organized into 33 files. Some compilers have a
standard optimization level, plus various degrees of “aggressive” optimization. Be cautious in using the
highest levels of optimization.
• To compile FDS, you need a Fortran compiler (2008 or greater) and MPI libraries. More details on MPI
can be found at the FDS repository https://github.com/firemodels/fds.
331
Table 23.1: FDS source code files
332
Chapter 24
The output from the code consists of the file CHID.out, plus various data files that are described below.
Most of these output files are written out by the subroutines within dump.f90, and can easily be modified
to accommodate various plotting packages.
The Time Step indicates the total number of iterations. The date and time indicate the current wall clock
time. The STEP SIZE indicates the size of the numerical time step. The Total Time indicates the total
simulation time calculated up to that point. The Pressure Iterations are the number of iterations of the
pressure solver for the corrector (second) half of the time step. The pressure solver iterations are designed
to minimize the error in the normal component of velocity at solid walls or the interface of two meshes. The
Maximum Velocity Error indicates this error and in which grid cell it occurs. Max/Min divergence
is the max/min value of the function ∇ · u and is used as a diagnostic when the flow is incompressible
(i.e., no heating); Max CFL number is the maximum value of the CFL number, the primary time step
constraint; Max VN number is the maximum value of the Von Neumann number, the secondary time step
constraint. The No. of Lagrangian Particles refers to the number of particles in the current mesh.
The Radiation Loss to Boundaries is the amount of energy that is being radiated to the boundaries.
As compartments heat up, the energy lost to the boundaries can grow to be an appreciable fraction of the
Total Heat Release Rate.
Following the completion of a successful run, a summary of the CPU usage per subroutine is listed in the
file called CHID_cpu.csv (Section 24.5). This is useful in determining where most of the computational
333
effort is being placed.
Details of the integrated energy quantities can be found in Section 20.10.1. BURN_RATE is the total mass
loss rate of fuel, and ZONE_01, etc., are the background pressures of the various pressure ZONEs. Note that
the reported BURN_RATE is not adjusted to account for the possibility that each individual material might
have a different heat of combustion. It is the actual burning rate of the fuel as predicted by FDS or specified
by you. The background pressure is discussed in Section 12.3.
where N_DEVC is the number of devices, ID(I) is the user-defined ID of the Ith device, UNITS(I) the
units, T(J) the time of the Jth dump, and VAL(I,J) the value at the Ith device at the Jth time. The files
can be imported into Microsoft Excel or almost any other spreadsheet program. If the number of device
columns exceeds DEVC_COLUMN_LIMIT, the file will automatically be split into smaller files.
334
where N_CTRL is the number of controllers, ID(I) is the user-defined ID of the Ith control function, and
plus or minus 1’s represent the state -1 = .FALSE. and +1 = .TRUE. of the Ith control function at the
particular time. The files can be imported into Microsoft Excel or almost any other spreadsheet program.
If the number of control columns exceeds CTRL_COLUMN_LIMIT, the file will automatically be split into
smaller files.
where Rank is the number of the MPI process (starting at 0), MAIN, DIVG, and so on, are major routines, and
’Total T_USED (s)’ is the total CPU time consumed by that particular MPI process. Typically, the total
time is similar. The time spent in MAIN is essentially overhead – time spent not working on the calculation.
If you want to know if your work load is balanced, take a look at the time spent in MAIN. It should be similar
for all MPI processes. If one of the MPI processes has a noticeably smaller value for MAIN, then that process
is working on the core routines while the other processes sit idle in MAIN.
The CHID_cpu.csv file is printed out at the end of the simulation. To force it to be printed out period-
ically during the simulation, set DT_CPU on the DUMP line. Its default value is very large, meaning that by
default, the CPU information is only printed at the end of the simulation.
WRITE(LUSF) QUANTITY
WRITE(LUSF) SHORT_NAME
WRITE(LUSF) UNITS
WRITE(LUSF) I1,I2,J1,J2,K1,K2
WRITE(LUSF) TIME
WRITE(LUSF) (((QQ(I,J,K),I=I1,I2),J=J1,J2),K=K1,K2)
.
.
335
WRITE(LUSF) TIME
WRITE(LUSF) (((QQ(I,J,K),I=I1,I2),J=J1,J2),K=K1,K2)
QUANTITY, SHORT_NAME and UNITS are character strings of length 30. The sextuplet (I1,I2,J1,J2,K1,K2)
denotes the bounding mesh cell nodes. The sextuplet indices correspond to mesh cell nodes, or corners, thus
the entire mesh would be represented by the sextuplet (0,IBAR,0,JBAR,0,KBAR).
There is a short Fortran 90 program provided, called fds2ascii.f90, that can convert slice files into
text files that can be read into a variety of graphics packages. The program combines multiple slice files
corresponding to the same “slice” of the computational domain, time-averages the data, and writes the values
into one file, consisting of a line of numbers for each node. Each line contains the physical coordinates of
the node, and the time-averaged quantities corresponding to that node. In particular, the graphics package
Tecplot reads this file and produces contour, streamline and/or vector plots. See Section 20.11 for more
details about the program fds2ascii.
WRITE(LU13) IBAR+1,JBAR+1,KBAR+1
WRITE(LU13) (((X(I),I=0,IBAR),J=0,JBAR),K=0,KBAR), &
(((Y(J),I=0,IBAR),J=0,JBAR),K=0,KBAR), &
(((Z(K),I=0,IBAR),J=0,JBAR),K=0,KBAR), &
(((IBLK(I,J,K),I=0,IBAR),J=0,JBAR),K=0,KBAR)
where X, Y and Z are the coordinates of the cell corners, and IBLK is an indicator of whether or not the cell
is blocked. If the point (X,Y,Z) is completely embedded within a solid region, then IBLK is 0. Otherwise,
IBLK is 1. Normally, the mesh file is not dumped.
The flow variables are written to a file called CHID_****_**.q, where the stars indicate a time at
which the data is output. The file is written with the lines
WRITE(LU14) IBAR+1,JBAR+1,KBAR+1
WRITE(LU14) ZERO,ZERO,ZERO,ZERO
WRITE(LU14) ((((QQ(I,J,K,N),I=0,IBAR),J=0,JBAR),K=0,KBAR),N=1,5)
The five channels N=1,5 are by default the temperature (◦ C), the u, v and w components of the velocity
(m/s), and the heat release rate per unit volume (kW/m3 ). Alternate variables can be specified with the input
parameter PLOT3D_QUANTITY(1:5) on the DUMP line. Note that the data is interpolated at cell corners,
thus the dimensions of the Plot3D data sets are one larger than the dimensions of the computational mesh.
Smokeview can display the Plot3D data. In addition, the Plot3D data sets can be read into some other
graphics programs that accept the data format. This particular format is very convenient, and recognized by
a number of graphics packages.
336
WRITE(LUBF) QUANTITY
WRITE(LUBF) SHORT_NAME
WRITE(LUBF) UNITS
WRITE(LUBF) NPATCH
WRITE(LUBF) I1,I2,J1,J2,K1,K2,IOR,NB,NM
WRITE(LUBF) I1,I2,J1,J2,K1,K2,IOR,NB,NM
.
. WRITE(LUBF) TIME
WRITE(LUBF) (((QQ(I,J,K),I=11,I2),J=J1,J2),K=K1,K2)
WRITE(LUBF) (((QQ(I,J,K),I=11,I2),J=J1,J2),K=K1,K2)
.
. WRITE(LUBF) TIME
WRITE(LUBF) (((QQ(I,J,K),I=11,I2),J=J1,J2),K=K1,K2)
WRITE(LUBF) (((QQ(I,J,K),I=11,I2),J=J1,J2),K=K1,K2) .
.
QUANTITY, SHORT_NAME and UNITS are character strings of length 30. NPATCH is the number of planes (or
“patches”) that make up the solid boundaries plus the external walls. The sextuplet (I1,I2,J1,J2,K1,K2)
defines the cell nodes of each patch. IOR is an integer indicating the orientation of the patch (±1, ±2, ±3).
You do not prescribe these. NB is the number of the boundary (zero for external walls) and NM is the number
of the mesh. Note that the data is planar, thus one pair of cell nodes is the same. Presently, Smokeview is
the only program available to view the boundary files.
Note that the initial printout of the number 1 is used by Smokeview to determine the Endian-ness of the file.
The Endian-ness has to do with the particular way real numbers are written into a binary file. The version
number is used to distinguish new versus old file formats. The parameter N_PART is not the number of
particles, but rather the number of particle classes corresponding to the PART namelist groups in the input
file. Every DT_PART seconds the coordinates of the particles and droplets are output as 4 byte reals (by
default):
337
WRITE(LUPF) NPLIM ! Number of particles in the PART class
WRITE(LUPF) (XP(I),I=1,NPLIM),(YP(I),I=1,NPLIM),(ZP(I),I=1,NPLIM)
WRITE(LUPF) (TA(I),I=1,NPLIM) ! Integer "tag" for each particle
IF (PC%N_QUANTITIES > 0) WRITE(LUPF) ((QP(I,NN),I=1,NPLIM),NN=1,PC%N_QUANTITIES)
ENDDO
The particle “tag” is used by Smokeview to keep track of individual particles and droplets for the purpose
of drawing streamlines. It is also useful when parsing the file. The quantity data, QP(I,NN), is used by
Smokeview to color the particles and droplets. Note that it is now possible with the new format to color the
particles and droplets with several different quantities.
WRITE(LU_PROF) T,NWP+1,(X_S(I),I=0,NWP),(Q(I),I=0,NWP)
After the time T, the number of node points is given and then the node coordinates. These are written out at
every time step because the wall thickness and the local solid phase mesh may change over time due to the
solid phase reactions. Array Q contains the values of the output quantity, which may be wall temperature,
density or component density.
WRITE(LU_SMOKE3D) ONE,VERSION,0,NX-1,0,NY-1,0,NZ-1
.
.
WRITE(LU_SMOKE3D_SIZE,*) TIME,NCHARS_IN,NCHARS_OUT
WRITE(LU_SMOKE3D) TIME
WRITE(LU_SMOKE3D) NCHARS_IN,NCHARS_OUT
IF (NCHARS_OUT > 0) WRITE(LU_SMOKE3D)(BUFFER_OUT(I),I=1,NCHARS_OUT)
The first ONE is an endian flag. Smokeview uses this number to determine whether the computer creating the
3-D smoke file and the computer viewing the 3-D smoke file use the same or different byte swap (endian)
conventions for storing floating point numbers. The opacity data is converted from 4 byte floating point
numbers to one byte integers then compressed using run-length encoding (RLE). The compressed data is
contained in BUFFER_OUT. Run-length encoding is a compression scheme where repeated “runs” of data
are replaced with a number (number of repeats), and the value repeated. Four or more consecutive iden-
tical characters are represented by #nc where # is a special character denoting the beginning of a repeated
338
sequence, n is the number of repeats and c is the character repeated. n can be up to 254 (255 is used to
represent the special character). Characters not repeated four or more times are listed as is. For example,
the character string aaaaaabbbbbcc is encoded as #6a#5bcc.
! header
WRITE(LU_GEOM) ONE
WRITE(LU_GEOM) VERSION
WRITE(LU_GEOM) N_FLOATS
IF (N_FLOATS>0) WRITE(LU_GEOM) (FLOAT_HEADER(I),I=1,N_FLOATS)
WRITE(LU_GEOM) N_INTS
IF (N_INTS>0) WRITE(LU_GEOM) (INT_HEADER(I),I=1,N_INTS)
! static geometry - geometry specified once and appearing at all time steps
! dynamic geometry - geometry specified and appearing for each time step
• ONE has the value 1. Smokeview uses this number to determine whether the computer creating the
geometry file and the computer viewing the geometry file use the same or different byte swap (endian)
conventions for storing floating point numbers.
• VERSION currently has value 0 and indicates the version number of this file format.
339
• N_FLOATS, N_INTS The number of floating point and integer data items stored at the beginning of the
file.
• FLOAT_HEADER, INT_HEADER Floating point and integer data stored at the beginning of the file.
• N_VERT_S, N_FACE_S, N_VERT_D, N_FACE_D are the number of static and dynamic vertices and
faces.
• Xvert_S, Yvert_S, Zvert_S, Xvert_D, Yvert_D, Zvert_D are the static and dynamic ver-
tex coordinates.
• FACE1_S, FACE2_S, FACE3_S,FACE1_D, FACE2_D, FACE3_D are the static and dynamic vertex
indices for each face (triangle). The indices are numbered relative to how vertices were written out
earlier.
• SURF_S, SURF_D are the static and dynamic SURF indices for each face (triangle).
• GEOM_TYPE is flag indicating how dynamic geometry is represented. If GEOM_TYPE is 0 then time
dependent geometry is written out in terms of nodes and faces using the same format as the static
geometry. If GEOM_TYPE is 1 then time dependent geometry is written out in terms of a translation and
two rotations. These transformations are applied to the dynamic geometry defined at the first time step.
• Xtran, Ytran, Ztran is the translation applied to the initial dynamic geometry (If GEOM_TYPE is
1)
• rot_az, rot_elev are the azimuthal and elevation rotation angles (in degrees) applied to the initial
dynamic geometry.
WRITE(LU_GEOM_DATA) ONE
WRITE(LU_GEOM_DATA) VERSION
WRITE(LU_GEOM_DATA) STIME
WRITE(LU_GEOM_DATA) N_VERT_S_VALS,N_VERT_D_VALS,N_FACE_S_VALS,N_FACE_D_VALS
IF (N_VERT_S_VALS>0) WRITE(LU_GEOM_DATA) (ValVertStatic(I), I=1,N_VERT_S_VALS)
IF (N_VERT_D_VALS>0) WRITE(LU_GEOM_DATA) (ValVertDynamic(I),I=1,N_VERT_D_VALS)
IF (N_FACE_S_VALS>0) WRITE(LU_GEOM_DATA) (ValFaceStatic(I), I=1,N_FACE_S_VALS)
IF (N_FACE_D_VALS>0) WRITE(LU_GEOM_DATA) (ValFaceDynamic(I),I=1,N_FACE_D_VALS)
.
.
The data values written out in this file correspond to the geometry written out in the geometry file.
• ONE has the value 1. Smokeview uses this number to determine whether the computer creating the
geometry file and the computer viewing the geometry file use the same or different byte swap (endian)
conventions for storing floating point numbers.
340
• VERSION currently has value 0 and indicates the version number of this file format.
• N_VERT_S_VALS, N_FACE_S_VALS is the number of data values written out for static vertices and
faces. One can write out data values located at nodes, located at the center of faces or both.
• N_VERT_D_VALS, N_FACE_D_VALS is the number of dynamic values written out for dynamic vertices
and faces. One can write out data values located at nodes, located at the center of faces, both or neither
(if there is no dynamic geometry).
341
Bibliography
[1] K. McGrattan, S. Hostikka, R. McDermott, J. Floyd, C. Weinschenk, and K. Overholt. Fire Dynam-
ics Simulator, Technical Reference Guide. National Institute of Standards and Technology, Gaithers-
burg, Maryland, USA, and VTT Technical Research Centre of Finland, Espoo, Finland, sixth edition,
September 2013. Vol. 1: Mathematical Model; Vol. 2: Verification Guide; Vol. 3: Validation Guide;
Vol. 4: Software Quality Assurance. vii, 52, 73, 87, 176
[2] G.P. Forney. Smokeview, A Tool for Visualizing Fire Dynamics Simulation Data, Volume I: User’s
Guide. National Institute of Standards and Technology, Gaithersburg, Maryland, USA, sixth edition,
May 2013. vii, 3, 11, 249, 305, 308, 311, 313, 319, 320
[3] K. McGrattan, S. Hostikka, R. McDermott, J. Floyd, C. Weinschenk, and K. Overholt. Fire Dynamics
Simulator, Technical Reference Guide, Volume 1: Mathematical Model. National Institute of Standards
and Technology, Gaithersburg, Maryland, USA, and VTT Technical Research Centre of Finland, Es-
poo, Finland, sixth edition, September 2013. 3, 48, 49, 60, 123, 175, 188, 189, 198, 208, 234, 274,
298
[4] K. McGrattan, S. Hostikka, R. McDermott, J. Floyd, C. Weinschenk, and K. Overholt. Fire Dynamics
Simulator, Technical Reference Guide, Volume 2: Verification. National Institute of Standards and
Technology, Gaithersburg, Maryland, USA, and VTT Technical Research Centre of Finland, Espoo,
Finland, sixth edition, September 2013. 3, 12, 65, 117
[5] K. McGrattan, S. Hostikka, R. McDermott, J. Floyd, C. Weinschenk, and K. Overholt. Fire Dynamics
Simulator, Technical Reference Guide, Volume 3: Validation. National Institute of Standards and
Technology, Gaithersburg, Maryland, USA, and VTT Technical Research Centre of Finland, Espoo,
Finland, sixth edition, September 2013. 3, 44, 158
[6] W. Grosshandler. RadCal: A Narrow Band Model for Radiation Calculations in a Combustion Envi-
ronment. NIST Technical Note 1402, National Institute of Standards and Technology, Gaithersburg,
Maryland, 1993. 3, 164
[7] B. Chapman, G. Jost, and R. van der Pas. Using OpenMP – Portable Shared Memory Parallel Pro-
gramming. MIT Press, Cambridge, Massachusetts, 2007. 4, 9, 14
[8] W. Gropp, E. Lusk, and A. Skjellum. Using MPI – Portable Parallel Programming with the Message-
Passing Interface. MIT Press, Cambridge, Massachusetts, 2nd edition, 1999. 4, 14
[9] Y. Xin. Baroclinic Effects on Fire Flow Field. In Proceedings of the Fourth Joint Meeting of the U.S.
Sections of the Combustion Institute. Combustion Institute, Pittsburgh, Pennsylvania, March 2005. 48
[10] J.W. Deardorff. Stratocumulus-capped mixed layers derived from a three-dimensional model.
Boundary-Layer Meteorol., 18:495–527, 1980. 48, 49
343
[11] Stephen B. Pope. Turbulent Flows. Cambridge University Press, 2000. 48, 49, 290, 291
[12] J. Smagorinsky. General Circulation Experiments with the Primitive Equations. I. The Basic Experi-
ment. Monthly Weather Review, 91(3):99–164, March 1963. 49
[13] M. Germano, U. Piomelli, P. Moin, and W. Cabot. A dynamic subgrid-scale eddy viscosity model.
Physics of Fluids A, 3(7):1760–1765, 1991. 49
[14] P. Moin, K. Squires, W. Cabot, and S. Lee. A dynamic subgrid-scale model for compressible turbulence
and scalar transport. Phys. Fluids A, 3(11):2746–2757, 1991. 49
[15] B. Vreman. An eddy-viscosity subgrid-scale model for turbulent shear flow: Algebraic theory and
applications. Physics of Fluids, 16(10):3670–3681, 2004. 49
[16] A. Yakhot, S.A. Orszag, V. Yakhot, and M. Israeli. Renormalization Group Formulation of Large-Eddy
Simulation. Journal of Scientific Computing, 1(1):1–51, 1989. 49
[17] F. Nicoud and F. Ducros. Subgrid-Scale Stress Modelling Based on the Square of the Velocity Gradient
Tensor. Flow, Turbulence, and Combustion, 62:183–200, 1999. 49
[18] D.C. Wilcox. Turbulence Modeling for CFD. DCW Industries, Inc., 2nd edition, 1998. 49
[19] P.L. Roe. Characteristics-based schemes for the euler equations. Ann. Rev. Fluid Mech., 18:337, 1986.
52
[20] G. Zhou. Numerical simulations of physical discontinuities in single and multi-fluid flows for arbitrary
Mach numbers. PhD thesis, Chalmers Univ. of Tech., Goteborg, Sweden, 1995. 52
[21] L. Grinberg and G.E. Karniadakis. A new domain decomposition method with overlapping patches for
ultrascale simulations: Application to biological flows. Journal of Computational Physics, 229:5541–
5563, 2010. 61
[22] Bruce R. Munson, Donald F. Young, and Theodore H. Okiishi. Fundamentals of Fluid Mechanics.
John Wiley and Sons, 1990. 65
[23] J.P. Holman. Heat Transfer. McGraw-Hill, New York, 7th edition, 1990. 86
[24] F. P. Incropera and D. P. De Witt. Fundamentals of Heat and Mass Transfer. John Wiley and Sons,
New York, 4th edition, 1996. 86, 87
[25] B. Porterie, J.L. Consalvi, A. Kaiss, and J.C. Loraud. Predicting Wildland Fire Behavior and Emissions
Using a Fine-Scale Physical Model. Numerical Heat Transfer, Part A, 47:571–591, 2006. 111, 112
[26] D. Morvan and J.L. Dupuy. Modeling the propagation of a wildfire through a Mediterranean shrub
using a multiphase formulation. Combustion and Flame, 138(3):199–210, 2004. 111
[27] M. Houssami, E. Mueller, A. Filkov, J.C. Thomas, N. Skowronski, M.R. Gallagher, K. Clark, R. Kre-
mens, and A. Simeoni. Experimental procedures characterizing firebrand generation in wildland fires.
Fire Technology, 52(3):731–751, 2016. 111
[28] W. Mell, A. Maranghides, R. McDermott, and S. Manzello. Numerical simulation and experiments of
burning Douglas fir trees. Combustion and Flame, 156:2023–2041, 2009. 111, 112
[29] D. Morvan and J.L. Dupuy. Modeling of fire spread through a forest fuel bed using a multiphase
formulation. Combustion and Flame, 127(1):1981–1994, 2001. 112
344
[30] A. Dahale, S. Ferguson, B. Shotorban, and S. Mahalingam. Effects of distribution of bulk density and
moisture content on shrub fires. International Journal of Wildland Fire, 22(5):625–641, 2013. 112
[31] S.J. Ritchie, K.D. Steckler, A. Hamins, T.G. Cleary, J.C. Yang, and T. Kashiwagi. The Effect of Sample
Size on the Heat Release Rate of Charring Materials. In Fire Safety Science - Proceedings of the 5th
International Symposium, pages 177–188. International Association For Fire Safety Science, 1997.
112
[32] C. Lautenberger and C. Fernandez-Pello. Generalized pyrolysis model for combustible solids. Fire
Safety Journal, 44:819–839, 2009. 112
[33] N. Jarrin. Synthetic Inflow Boundary Conditions for the Numerical Simulation of Turbulence. PhD
thesis, The University of Manchester, Manchester M60 1QD, United Kingdom, 2008. 123
[34] B. Ralph and R. Carvel. Coupled hybrid modelling in fire safety engineering; a literature review. Fire
Safety Journal, 100:157 – 170, 2018. 125
[35] A.J. Dyer. A review of flux profile relationships. Boundary-Layer Meteorology, 7:363–372, 1974. 146
[36] R.B. Stull. Meteorology for Scientists and Engineers. Brooks/Cole, Pacific Grove, California, 2nd
edition, 2000. 147
[37] E. Kalnay. Atmospheric Modeling, Data Assimilation, and Predictability. Cambridge, 2003. 151
[38] J.H. Klote and J.A. Milke. Design of Smoke Management Systems. American Society of Heating Re-
frigeration, and Air-Conditioning Engineers and Society of Fire Protection Engineers, Atlanta, Geor-
gia, 1992. 153
[39] R.C. Reid, J.M. Prausnitz, and B.E. Poling. Properties of Gases and Liquids. McGraw-Hill, New
York, 4th edition, 1987. 161
[40] S.R. Turns. An Introduction to Combustion. McGraw-Hill, New York, 2nd edition, 1996. 175
[41] C. Beyler. SFPE Handbook of Fire Protection Engineering, chapter Flammability Limits of Premixed
and Diffusion Flames. Springer, New York, 5th edition, 2016. 175, 177
[42] M.M. Khan, A. Tewarson, and M. Chaos. SFPE Handbook of Fire Protection Engineering, chapter
Combustion Characteristics of Materials and Generation of Fire Products. Springer, New York, 5th
edition, 2016. 179, 180, 182, 189, 193, 194
[43] C.K. Westbrook and F.L. Dryer. Simplified Reaction Mechanisms for the Oxidation of Hydrocarbon
Fuels in Flames. Combustion Science and Technology, 27:31–43, 1981. 186, 187
[44] J. Andersen, C.L. Rasmussen, T. Giselsson, and P. Glarborg. Global Combustion Mechanisms for Use
in CFD Modeling Under Oxy-Fuel Conditions. Energy & Fuels, 23(3):1379–1389, 2009. 187
[45] J.R. Hartman, A.P. Beyler, S. Riahi, and C.L.Belyer. Smoke oxidation kinetics for application to
prediction of clean burn patterns. Fire and Materials, 36:177–184, 2012. 190
[46] C.L. Beyler. SFPE Handbook of Fire Protection Engineering, chapter Fire Hazard Calculations for
Large Open Hydrocarbon Fires. Springer, New York, 5th edition, 2016. 193, 194
[47] A. Hamins, A. Maranghides, and G. Mulholland. The Global Combustion Behavior of 1 MW to
3 MW Hydrocarbon Spray Fires Burning in an Open Environment. NISTIR 7013, National Institute
of Standards and Technology, Gaithersburg, Maryland, 2003. 194
345
[48] A. Gupta, K. Meredith, G. Agarwal, S. Thumuluru, Y. Xin, M. Chaos, and Y. Wang. CFD Modeling of
Fire Growth in Rack-Storages of Cartoned Unexpanded Plastic (CUP) Commodity. FM Global Open
Source CFD Fire Modeling Workshop, 2015. https://sites.google.com/site/fmw2015archive/2015-
presentations. 196
[49] S.L. Manzello, J.R. Shields, T.G. Cleary, A. Maranghides, W.E. Mell, J.C. Yang, Y. Hayashi, D. Nii,
and T. Kurita. On the development and characterization of a firebrand generator. Fire Safety Journal,
43:258–268, 2008. 212, 213
[50] T. Bartzanas, T. Boulard, and C. Kittas. Numerical simulation of the airflow and temperature distri-
bution in a tunnel greenhouse equipped with insect-proof screens in the openings. Computers and
Electronics in Agriculture, 34:207–221, 2002. 215
[51] P. Andersson and P. Van Hees. Performance of Cables Subjected to Elevated Temperatures. In Fire
Safety Science – Proceedings of the Eighth International Symposium, pages 1121–1132. International
Association of Fire Safety Science, 2005. 215
[52] S.P. Nowlen, F.J. Wyant, and K.B. McGrattan. Cable Response to Live Fire (CAROLFIRE).
NUREG/CR 6931, United States Nuclear Regulatory Commission, Washington, DC, April 2008. 215
[53] G. Heskestad and R.G. Bill. Quantification of Thermal Responsiveness of Automatic Sprinklers In-
cluding Conduction Effects. Fire Safety Journal, 14:113–125, 1988. 228
[54] T. Cleary, A. Chernovsky, W. Grosshandler, and M. Anderson. Particulate Entry Lag in Spot-Type
Smoke Detectors. In Fire Safety Science – Proceedings of the Sixth International Symposium, pages
779–790. International Association for Fire Safety Science, 1999. 235
[55] M.J. Hurley, editor. SFPE Handbook of Fire Protection Engineering. Springer, New York, 5th edition,
2016. 235
[56] Pamela P. Walatka and Pieter G. Buning. PLOT3D User’s Manual, version 3.5. NASA Technical
Memorandum 101067, NASA, 1989. 263
[57] G.W. Mulholland. SFPE Handbook of Fire Protection Engineering, chapter Smoke Production and
Properties. National Fire Protection Association, Quincy, Massachusetts, 3rd edition, 2002. 269
[58] G.W. Mulholland and C. Croarkin. Specific Extinction Coefficient of Flame Generated Smoke. Fire
and Materials, 24:227–230, 2000. 270
[59] M.L. Janssens and H.C. Tran. Data Reduction of Room Tests for Zone Model Validation. Journal of
Fire Science, 10:528–555, 1992. 270
[60] Y.P. He, A. Fernando, and M.C. Luo. Determination of interface height from measured parameter
profile in enclosure fire experiment. Fire Safety Journal, 31:19–38, 1998. 270
[61] S. Welsh and P. Rubini. Three-dimensional Simulation of a Fire-Resistance Furnace. In Fire Safety
Science – Proceedings of the Fifth International Symposium. International Association for Fire Safety
Science, 1997. 271
[62] U. Wickström, D. Duthinh, and K.B. McGrattan. Adiabatic Surface Temperature for Calculating Heat
Transfer to Fire Exposed Structures. In Proceedings of the Eleventh International Interflam Confer-
ence. Interscience Communications, London, 2007. 272
346
[63] M. Malendowski. Analytical Solution for Adiabatic Surface Temperature (AST). Fire Technology,
53:413–420, 2017. 272
[64] D.A. Purser. SFPE Handbook of Fire Protection Engineering, chapter Combustion Toxicity. Springer,
New York, 5th edition, 2016. 278, 279
[65] R. I. Harris. Gumbel re-visited—a new look at extreme value statistics applied to wind speeds. Journal
of Wind Engineering and Industrial Aerodynamics, 59:1–22, 1996. 284
[66] S.B. Pope. Ten questions concerning the large-eddy simulation of turbulent flows. New Journal of
Physics, 6:1–24, 2004. 288
[67] J. Bardina, J. H. Ferziger, and W. C. Reynolds. Improved Subgrid Scale Models for Large Eddy Sim-
ulation. In AIAA 13th Fluid & Plasma Dynamics Conference, AIAA-80-1357, Snowmass, Colorado,
July 1980. American Institute of Aeronautics and Astronautics. 288
[68] R. McDermott, G. Forney, K. McGrattan, and W. Mell. Fire Dynamics Simulator 6: Complex Ge-
ometry, Embedded Meshes, and Quality Assessment. In J.C.F. Pereira and A. Sequeira, editors, V
European Conference on Computational Fluid Dynamics, Lisbon, Portugal, 2010. ECCOMAS. 288,
290
[70] K. Schneider and O. Vasilyev. Wavelet methods in computational fluid dynamics. Annu. Rev. Fluid
Mech., 42:473–503, 2010. 289
[71] T. Korhonen and S. Hostikka. Fire Dynamics Simulator with Evacuation: FDS+Evac, Technical Refer-
ence and User’s Guide. VTT Working Papers 119, VTT Technical Research Centre of Finland, Espoo,
Finland, 2009. 303, 306, 310, 311, 313, 319, 322, 324, 325
347