Skip to content
Open
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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import numpy as np
import pandas as pd
from scipy.interpolate import griddata
from fdsplotlib import configure_fds_fonts

configure_fds_fonts(usetex=True)

expdir = '../../../Experimental_Data/'
outdir = './Outputs/'
pltdir = './Plots/'

xvals = [0.05,0.10,0.15,0.22]

expdata = pd.read_csv(expdir + 'GHF_processed.csv')

zvals_e = expdata['z']

e105 = expdata[['x5_105','x10_105','x15_105','x22_105']]
e145 = expdata[['x5_145','x10_145','x15_145','x22_145']]
e185 = expdata[['x5_105','x10_185','x15_185','x22_185']]

Xe, Ze = np.meshgrid(xvals, zvals_e)

fdsp5cm = pd.read_csv(outdir + 'sbi_p5cm_blowing_line.csv', skiprows=1)

zvalsp5 = fdsp5cm['Height']

Xp5, Zp5 = np.meshgrid(xvals, zvalsp5)

fp5_105 = fdsp5cm[['GHF_x05_105','GHF_x10_105','GHF_x15_105','GHF_x22_105']]
fp5_145 = fdsp5cm[['GHF_x05_145','GHF_x10_145','GHF_x15_145','GHF_x22_145']]
fp5_185 = fdsp5cm[['GHF_x05_185','GHF_x10_185','GHF_x15_185','GHF_x22_185']]

fds1cm = pd.read_csv(outdir + 'sbi_1cm_blowing_line.csv', skiprows=1)

zvals1 = fds1cm['Height']

X1, Z1 = np.meshgrid(xvals, zvals1)

f1_105 = fds1cm[['GHF_x05_105','GHF_x10_105','GHF_x15_105','GHF_x22_105']]
f1_145 = fds1cm[['GHF_x05_145','GHF_x10_145','GHF_x15_145','GHF_x22_145']]
f1_185 = fds1cm[['GHF_x05_185','GHF_x10_185','GHF_x15_185','GHF_x22_185']]

fds2cm = pd.read_csv(outdir + 'sbi_2cm_blowing_line.csv', skiprows=1)

zvals2 = fds2cm['Height']

X2, Z2 = np.meshgrid(xvals, zvals2)

f2_105 = fds2cm[['GHF_x05_105','GHF_x10_105','GHF_x15_105','GHF_x22_105']]
f2_145 = fds2cm[['GHF_x05_145','GHF_x10_145','GHF_x15_145','GHF_x22_145']]
f2_185 = fds2cm[['GHF_x05_185','GHF_x10_185','GHF_x15_185','GHF_x22_185']]

fds4cm = pd.read_csv(outdir + 'sbi_4cm_blowing_line.csv', skiprows=1)

zvals4 = fds4cm['Height']

X4, Z4 = np.meshgrid(xvals, zvals4)

f4_105 = fds4cm[['GHF_x05_105','GHF_x10_105','GHF_x15_105','GHF_x22_105']]
f4_145 = fds4cm[['GHF_x05_145','GHF_x10_145','GHF_x15_145','GHF_x22_145']]
f4_185 = fds4cm[['GHF_x05_185','GHF_x10_185','GHF_x15_185','GHF_x22_185']]

custom_levels = np.linspace(0, 80, 9)

fig, axes = plt.subplots(1, 5, figsize=(5.5, 4.5))
fig.suptitle(f'105 s', fontsize=14)
fig.subplots_adjust(left=0.02, right=0.85, wspace=-0.30)

# Plot contour maps
contours = []
cs = axes[0].contourf(Xe, Ze, e105, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[0].set_aspect('equal')
axes[0].set_ylabel('Height (m)')
axes[0].set_title('Exp', fontsize=10)
axes[0].set_xlabel('Distance (m)')
axes[0].set_ylim(0,1.4)

cs = axes[1].contourf(Xp5, Zp5, fp5_105, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[1].set_aspect('equal')
axes[1].set_title('0.5 cm', fontsize=10)
axes[1].set_ylim(0,1.4)

cs = axes[2].contourf(X1, Z1, f1_105, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[2].set_aspect('equal')
axes[2].set_title('1 cm', fontsize=10)
axes[2].set_ylim(0,1.4)

cs = axes[3].contourf(X2, Z2, f2_105, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[3].set_aspect('equal')
axes[3].set_title('2 cm', fontsize=10)
axes[3].set_ylim(0,1.4)

cs = axes[4].contourf(X4, Z4, f4_105, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[4].set_aspect('equal')
axes[4].set_title('4 cm', fontsize=10)
axes[4].set_ylim(0,1.4)

cbar = plt.colorbar(contours[0], ax=axes, orientation='vertical',
fraction=0.05, pad=0.04)
cbar.set_label('Heat Flux (kW/m²)')

plt.savefig(pltdir + 't105_contours.pdf')

fig.clear()

fig, axes = plt.subplots(1, 5, figsize=(5.5, 4.5))
fig.suptitle(f'145 s', fontsize=14)
fig.subplots_adjust(left=0.02, right=0.85, wspace=-0.30)

# Plot contour maps
contours = []
cs = axes[0].contourf(Xe, Ze, e145, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[0].set_aspect('equal')
axes[0].set_ylabel('Height (m)')
axes[0].set_title('Exp', fontsize=10)
axes[0].set_xlabel('Distance (m)')
axes[0].set_ylim(0,1.4)

cs = axes[1].contourf(Xp5, Zp5, fp5_145, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[1].set_aspect('equal')
axes[1].set_title('0.5 cm', fontsize=10)
axes[1].set_ylim(0,1.4)

cs = axes[2].contourf(X1, Z1, f1_145, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[2].set_aspect('equal')
axes[2].set_title('1 cm', fontsize=10)
axes[2].set_ylim(0,1.4)

cs = axes[3].contourf(X2, Z2, f2_145, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[3].set_aspect('equal')
axes[3].set_title('2 cm', fontsize=10)
axes[3].set_ylim(0,1.4)

cs = axes[4].contourf(X4, Z4, f4_145, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[4].set_aspect('equal')
axes[4].set_title('4 cm', fontsize=10)
axes[4].set_ylim(0,1.4)

cbar = plt.colorbar(contours[0], ax=axes, orientation='vertical',
fraction=0.05, pad=0.04)
cbar.set_label('Heat Flux (kW/m²)')


plt.savefig(pltdir + 't145_contours.pdf')

fig.clear()

fig, axes = plt.subplots(1, 5, figsize=(5.5, 4.5))
fig.suptitle(f'185 s', fontsize=14)
fig.subplots_adjust(left=0.02, right=0.85, wspace=-0.30)

# Plot contour maps
contours = []
cs = axes[0].contourf(Xe, Ze, e185, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[0].set_aspect('equal')
axes[0].set_ylabel('Height (m)')
axes[0].set_title('Exp', fontsize=10)
axes[0].set_xlabel('Distance (m)')
axes[0].set_ylim(0,1.4)

cs = axes[1].contourf(Xp5, Zp5, fp5_185, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[1].set_aspect('equal')
axes[1].set_title('0.5 cm', fontsize=10)
axes[1].set_ylim(0,1.4)

cs = axes[2].contourf(X1, Z1, f1_185, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[2].set_aspect('equal')
axes[2].set_title('1 cm', fontsize=10)
axes[2].set_ylim(0,1.4)

cs = axes[3].contourf(X2, Z2, f2_185, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[3].set_aspect('equal')
axes[3].set_title('2 cm', fontsize=10)
axes[3].set_ylim(0,1.4)

cs = axes[4].contourf(X4, Z4, f4_185, levels=custom_levels, cmap='rainbow', vmin=0, vmax=80)
contours.append(cs)
axes[4].set_aspect('equal')
axes[4].set_title('4 cm', fontsize=10)
axes[4].set_ylim(0,1.4)

cbar = plt.colorbar(contours[0], ax=axes, orientation='vertical',
fraction=0.05, pad=0.04)
cbar.set_label('Heat Flux (kW/m²)')

plt.savefig(pltdir + 't185_contours.pdf')

fig.clear()
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!$MACFP/macfp-db/.github/macfp_python_env/bin/python

import subprocess
import fdsplotlib
import matplotlib.pyplot as plt
import importlib
import runpy
importlib.reload(fdsplotlib) # use for development (while making changes to fdsplotlib.py)
print("Using:", fdsplotlib.__file__)

# If there is an error in one of the sub-scripts, print the message but do not stop the main script.

def safe_run(script_path):
try:
runpy.run_path(script_path, run_name="__main__")
plt.clf() # Clear the current figure (if any)
plt.close('all') # Close all open figure windows
except Exception as exc:
print(f"Error in {script_path}: {exc}")



print("SBI..."); safe_run("./SBI.py")
print("FSRI_NIST_SBI_contours..."); safe_run("./FSRI_NIST_SBI_contours.py")

Dataplot_Inputs_File = 'FSRI_NIST_SBI_config.csv'
EXP_Dir = '../../../Experimental_Data/'
OUT_Dir = './Outputs/'
Plots_Dir = './Plots/'

# Run dataplot and scatplot scripts

saved_data, drange = fdsplotlib.dataplot(config_filename=Dataplot_Inputs_File,
expdir=EXP_Dir,
cmpdir=OUT_Dir,
pltdir=Plots_Dir,
close_figs=True,
verbose=True,
plot_range=["SBI"],
) # see notes below on plot_range

print("Python validation scripts completed successfully!")

# ------------------------------
# plot_range usage examples
#
# plot_range lets you select which rows of the config file to process.
# You can mix row numbers, ranges, and Dataname strings:
#
# 1. Single row by number (Spreadsheet-style, including header rows):
# plot_range = [1995]
#
# 2. Inclusive ranges by "start:stop":
# plot_range = ["5:9"] # rows 5 through 9
#
# 3. Open-ended ranges:
# plot_range = ["1995:"] # from row 1995 to the end
#
# 4. Named selection by Dataname (case-insensitive):
# plot_range = ["CSTB Tunnel", "Steckler Compartment"]
#
# 5. Mixed selection:
# plot_range = [1, 2, "5:9", "CSTB Tunnel", "7000:"]
#
# 6. All rows:
# plot_range = ["all"]
#
# Notes:
# - Row numbers are 1-based (like Spreadsheet).
# - Ranges are inclusive, e.g. "5:9" means 5,6,7,8,9.
# - "start:" runs to the last row.
# - Strings that are not ranges or "all" are matched to the Dataname column.
# ------------------------------

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
FDS-6.10.1-2044-g44d61fb-master
Loading