|
| 1 | +#!/usr/bin/env python |
| 2 | +""" |
| 3 | +McDermott |
| 4 | +2-4-11 |
| 5 | +flame_height.py |
| 6 | +
|
| 7 | +integrates HRRPUL(z) from *_line.csv file to determine L_f/D (normalized flame height) |
| 8 | +""" |
| 9 | + |
| 10 | +import pandas as pd |
| 11 | +import numpy as np |
| 12 | +import os |
| 13 | + |
| 14 | +# confirm heat release rate (uncomment or implement if needed) |
| 15 | +# check_hrr() |
| 16 | + |
| 17 | +outdir = '../../../out/Heskestad_Flame_Height/' |
| 18 | +expdir = '../../../exp/Heskestad_Flame_Height/' |
| 19 | + |
| 20 | +filename = [ |
| 21 | + ['Qs=p1_RI=05_devc.csv','Qs=p1_RI=10_devc.csv','Qs=p1_RI=20_devc.csv'], |
| 22 | + ['Qs=p2_RI=05_devc.csv','Qs=p2_RI=10_devc.csv','Qs=p2_RI=20_devc.csv'], |
| 23 | + ['Qs=p5_RI=05_devc.csv','Qs=p5_RI=10_devc.csv','Qs=p5_RI=20_devc.csv'], |
| 24 | + ['Qs=1_RI=05_devc.csv','Qs=1_RI=10_devc.csv','Qs=1_RI=20_devc.csv'], |
| 25 | + ['Qs=2_RI=05_devc.csv','Qs=2_RI=10_devc.csv','Qs=2_RI=20_devc.csv'], |
| 26 | + ['Qs=5_RI=05_devc.csv','Qs=5_RI=10_devc.csv','Qs=5_RI=20_devc.csv'], |
| 27 | + ['Qs=10_RI=05_devc.csv','Qs=10_RI=10_devc.csv','Qs=10_RI=20_devc.csv'], |
| 28 | + ['Qs=20_RI=05_devc.csv','Qs=20_RI=10_devc.csv','Qs=20_RI=20_devc.csv'], |
| 29 | + ['Qs=50_RI=05_devc.csv','Qs=50_RI=10_devc.csv','Qs=50_RI=20_devc.csv'], |
| 30 | + ['Qs=100_RI=05_devc.csv','Qs=100_RI=10_devc.csv','Qs=100_RI=20_devc.csv'], |
| 31 | + ['Qs=200_RI=05_devc.csv','Qs=200_RI=10_devc.csv','Qs=200_RI=20_devc.csv'], |
| 32 | + ['Qs=500_RI=05_devc.csv','Qs=500_RI=10_devc.csv','Qs=500_RI=20_devc.csv'], |
| 33 | + ['Qs=1000_RI=05_devc.csv','Qs=1000_RI=10_devc.csv','Qs=1000_RI=20_devc.csv'], |
| 34 | + ['Qs=2000_RI=05_devc.csv','Qs=2000_RI=10_devc.csv','Qs=2000_RI=20_devc.csv'], |
| 35 | + ['Qs=5000_RI=05_devc.csv','Qs=5000_RI=10_devc.csv','Qs=5000_RI=20_devc.csv'], |
| 36 | + ['Qs=10000_RI=05_devc.csv','Qs=10000_RI=10_devc.csv','Qs=10000_RI=20_devc.csv'] |
| 37 | +] |
| 38 | + |
| 39 | +rho_inf = 1.2 |
| 40 | +cp = 1.0 |
| 41 | +T_inf = 293.0 |
| 42 | +g = 9.81 |
| 43 | +D = 1.13 |
| 44 | +f = 0.99 |
| 45 | + |
| 46 | +# Q* values from MATLAB comment |
| 47 | +Qdot = [151, 303, 756, 1513, 3025, 7564, 15127, 30255, |
| 48 | + 75636, 151273, 302545, 756363, 1512725, 3025450, 7563625, 15127250] |
| 49 | + |
| 50 | +W = np.zeros((16,4)) |
| 51 | + |
| 52 | +# Loop through all heat release rates and resolutions |
| 53 | +for i in range(16): # hrr loop |
| 54 | + L = [] |
| 55 | + for j in range(3): # resolution loop |
| 56 | + df = pd.read_csv(os.path.join(outdir,filename[i][j]),skiprows=2,header=None) |
| 57 | + L.append(df.iloc[-1,3]) # 99th percentile (4th column) |
| 58 | + Qstar = Qdot[i]/(rho_inf*cp*T_inf*np.sqrt(g)*D**(5/2)) |
| 59 | + W[i,:] = [Qstar,L[0]/D,L[1]/D,L[2]/D] |
| 60 | + |
| 61 | +# Write file with FDS-predicted flame heights |
| 62 | +header1 = ['Q*','L/D (RI=5)','L/D (RI=10)','L/D (RI=20)'] |
| 63 | +filename1 = os.path.join(outdir,'FDS_Flame_Height.csv') |
| 64 | +pd.DataFrame(W,columns=header1).to_csv(filename1,index=False) |
| 65 | + |
| 66 | +# Generate FDS results for Tamanini cases |
| 67 | +filename_out = [ |
| 68 | + os.path.join(outdir,'FDS_Tamanini_RI=05.csv'), |
| 69 | + os.path.join(outdir,'FDS_Tamanini_RI=10.csv'), |
| 70 | + os.path.join(outdir,'FDS_Tamanini_RI=20.csv') |
| 71 | +] |
| 72 | + |
| 73 | +fds_line_file = [ |
| 74 | + ['Qs=1500_RI=05_line.csv','Qs=p6_RI=05_line.csv','Qs=p3_RI=05_line.csv'], |
| 75 | + ['Qs=1500_RI=10_line.csv','Qs=p6_RI=10_line.csv','Qs=p3_RI=10_line.csv'], |
| 76 | + ['Qs=1500_RI=20_line.csv','Qs=p6_RI=20_line.csv','Qs=p3_RI=20_line.csv'] |
| 77 | +] |
| 78 | + |
| 79 | +Qstar_line = [1500,.6,.3] |
| 80 | +header = ['z/L jet','Q jet','z/L 62','Q 62','z/L 31','Q 31'] |
| 81 | + |
| 82 | +for j in range(3): # resolution loop |
| 83 | + A = None |
| 84 | + for k in range(3): # hrr loop |
| 85 | + df = pd.read_csv(os.path.join(outdir,fds_line_file[j][k]),skiprows=2) |
| 86 | + z = df.iloc[:,0].values |
| 87 | + dz = z[1]-z[0] |
| 88 | + hrrpul = df.iloc[:,1].values |
| 89 | + Qdot_line = np.sum(hrrpul)*dz |
| 90 | + hrr = np.cumsum(hrrpul)*dz/Qdot_line |
| 91 | + kk = np.argmax(hrr>f) |
| 92 | + L = z[kk-1]+dz*(f-hrr[kk-1])/(hrr[kk]-hrr[kk-1]) |
| 93 | + new_cols = np.column_stack(((z+dz/2)/L,hrr)) |
| 94 | + A = new_cols if A is None else np.hstack((A,new_cols)) |
| 95 | + |
| 96 | + pd.DataFrame(A,columns=header).to_csv(filename_out[j],index=False) |
0 commit comments