Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions Manuals/Bibliography/FDS_general.bib
Original file line number Diff line number Diff line change
Expand Up @@ -7211,6 +7211,15 @@ @INPROCEEDINGS{Zukoski:IAFSS2
publisher = "Hemisphere Publishing Company",
}

@INBOOK{Zukoski:1995,
author = {E.E. Zukoski},
editor = {G. Cox},
title = {{Combustion Fundamentals of Fire}},
chapter = {{Properties of Fire Plumes}},
year = {1995},
publisher = {Academic Press, London}
}

@MISC{Colt:1,
title = {{Portsmouth Fire Test}},
howpublished = {Colt Heating and Ventilation. Internal Report},
Expand Down
34 changes: 34 additions & 0 deletions Manuals/FDS_Validation_Guide/Plume_Chapter.tex
Original file line number Diff line number Diff line change
Expand Up @@ -984,6 +984,40 @@ \subsection{Flame Height Summary}
\end{figure}


\clearpage

\section{Puffing Frequency}
\label{Puffing Frequency}

This section examines the ``puffing frequency'' of pool fires. Zukoski~\cite{Zukoski:1995} showed that the mean puffing frequency is inversely proportional to the square root of the burner diameter, $D$
\be
f = 0.50 \sqrt{g/D}
\ee
where $g$ is the gravitational acceleration.

\subsection{NIST Pool Fires}

Figure~\ref{NIST_Pool_Fires_spectra} displays the predicted frequency spectra of the 30~cm and 37~cm NIST Pool Fires. The spectra are based on the simulated vertical velocity component, $w$, at a single point above the burner, recorded every time step. The vertical dashed line indicates the measured puffing frequency. The puffing frequency for the heptane was not measured.

\begin{figure}[p]
\begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r}
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Acetone_frequency_spectrum} &
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Ethanol_frequency_spectrum} \\
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Heptane_frequency_spectrum} &
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Methane_frequency_spectrum} \\
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Methanol_frequency_spectrum} &
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Propane_20_frequency_spectrum} \\
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Propane_34_frequency_spectrum} &
\includegraphics[height=2.15in]{SCRIPT_FIGURES/NIST_Pool_Fires/Propane_50_frequency_spectrum}
\end{tabular*}
\caption[Frequency spectra of the NIST Pool Fires]
{Frequency spectra of the NIST Pool Fires with a vertical dashed line indicating the measured puffing frquency.}
\label{NIST_Pool_Fires_spectra}
\end{figure}





\clearpage

Expand Down
1 change: 1 addition & 0 deletions Utilities/Python/FDS_validation_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ def safe_run(script_path):
print("Memorial_Tunnel..."); safe_run("./scripts/Memorial_Tunnel.py")
print("Memorial_Tunnel_2..."); safe_run("./scripts/Memorial_Tunnel_2.py")
print("NIST_NRC_Parallel_Panels..."); safe_run("./scripts/NIST_NRC_Parallel_Panels.py")
print("NIST_Pool_Fires..."); safe_run("./scripts/NIST_Pool_Fires.py")
print("Sandia_Plumes..."); safe_run("./scripts/Sandia_Plumes.py")
print("Sandia_Pools..."); safe_run("./scripts/Sandia_Pools.py")
print("Theobald_Hose_Stream..."); safe_run("./scripts/Theobald_Hose_Stream.py")
Expand Down
62 changes: 62 additions & 0 deletions Utilities/Python/scripts/NIST_Pool_Fires.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import fdsplotlib

plot_style = fdsplotlib.get_plot_style('fds')

outdir = '../../../out/NIST_Pool_Fires/'
pltdir = '../../Manuals/FDS_Validation_Guide/SCRIPT_FIGURES/NIST_Pool_Fires/'

chids = ['NIST_Acetone_Prescribed_0p5cm',
'NIST_Ethanol_Prescribed_0p5cm',
'NIST_Heptane_Prescribed_0p5cm',
'NIST_Methane_Prescribed_0p5cm',
'NIST_Methanol_Prescribed_0p5cm',
'NIST_Propane_20kW_Prescribed_0p5cm',
'NIST_Propane_34kW_Prescribed_0p5cm',
'NIST_Propane_50kW_Prescribed_0p5cm']

fuel = ['Acetone','Ethanol','Heptane','Methane','Methanol','Propane 20 kW','Propane 34 kW','Propane 50 kW']
label = ['Acetone','Ethanol','Heptane','Methane','Methanol','Propane_20','Propane_34','Propane_50']
ideal = [2.45,2.41,-1,2.48,2.49,2.22,2.39,2.39]
i = -1

for chid in chids:

i = i + 1
git_file = outdir + chid + '_git.txt'
version_string = fdsplotlib.get_version_string(git_file)

# Read CSV file, skipping the first two rows
df = pd.read_csv(outdir + chid + '_devc.csv', skiprows=20000, header=None)

# Extract time and data columns
time = df.iloc[:, 0].values
data = df.iloc[:, 1].values

# Calculate the sampling rate
dt = np.mean(np.diff(time)) # Average time step
sampling_rate = 1.0 / dt

# Compute FFT
n = len(data)
fft_values = np.fft.fft(data)
fft_freq = np.fft.fftfreq(n, dt)

# Get positive frequencies only
positive_freq_idx = fft_freq > 0
frequencies = fft_freq[positive_freq_idx]
magnitude = np.abs(fft_values[positive_freq_idx])

# Create the frequency spectrum plot using plot_to_fig
fig = fdsplotlib.plot_to_fig(frequencies, magnitude, marker_style='k-',
x_label='Frequency (Hz)', y_label='Magnitude',
x_min=0, x_max=6, y_min=0,
revision_label=version_string,
plot_title=fuel[i])
fdsplotlib.plot_to_fig([ideal[i],ideal[i]],[0,100000], marker_style='k--', figure_handle=fig)

fig.savefig(pltdir + label[i] + '_frequency_spectrum.pdf', format='pdf')