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
4 changes: 3 additions & 1 deletion Manuals/FDS_User_Guide/FDS_User_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7043,7 +7043,9 @@ \subsection{Thermal Boundary Conditions at the Ground}

\subsection{Example}

Figure~\ref{ABL_profiles} displays velocity and temperature profiles generated by FDS over a 1000~m square domain with periodic boundaries and a height of 200~m. The wind fields are generated using pressure gradient forces, $F$, of various values, and the ground is given several different values of \ct{CONVECTIVE_HEAT_FLUX} ($\dot{q}_{\rm c}''$) and surface \ct{ROUGHNESS} ($s$). Eqs.~(\ref{eq:roughness_conversion}) and (\ref{qdot_L}) are used to convert the specified $\dot{q}_{\rm c}''$ and $s$ to $L$ and $z_0$ that are then used to generate Monin-Obukhov velocity and temperature profiles with which to compare the simulations. Note that these simulations do not invoke the Monin-Obukhov profiles directly. Rather, the M-O profiles are used to test if the FDS simulations produce realistic vertical profiles using just a specified pressure gradient force, $F$, surface roughness, $s$, and surface heat flux, $\dot{q}_{\rm c}''$.
Figure~\ref{ABL_profiles} displays velocity and temperature profiles generated by FDS over a 1000~m square domain with periodic boundaries and a height of 400~m. The wind fields are generated using a pressure gradient force, $F$, of various values, and the ground is given several different values of \ct{CONVECTIVE_HEAT_FLUX} ($\dot{q}_{\rm c}''$) and surface \ct{ROUGHNESS} ($s$). Eqs.~(\ref{eq:roughness_conversion}) and (\ref{qdot_L}) are used to convert the specified $\dot{q}_{\rm c}''$ and $s$ to $L$ and $z_0$ that are then used to generate Monin-Obukhov velocity and temperature profiles with which to compare the simulations. Note that these simulations do not invoke the Monin-Obukhov profiles directly. Rather, the M-O profiles are used to test if the FDS simulations produce realistic vertical profiles from the specified pressure gradient force, $F$, surface roughness, $s$, and surface heat flux, $\dot{q}_{\rm c}''$. The simulations are initialized with a temperature lapse rate of -0.01~K/m, and the laterial boundary condition is \ct{'PERIODIC FLOW ONLY'}, meaning that the velocity field is periodic but the temperature field is not. The upper boundary is \ct{'OPEN'} with a specified \ct{SPEED} that is approximately the same as that which is predicted by M-O theory. In this regard, the profiles are not predicted based solely on the pressure gradient force and ground properties. Rather, lateral and ceiling conditions are needed to match the resulting profiles.

The purpose of this example is to demonstrate that you can establish a realistic temperature and velocity profile even when the ground surface is not flat. Simulations like those shown here can be used to test if a given pressure gradient force and a ground roughness and heat flux are appropriate for a simulation over complex terrain.

\begin{figure}[p]
\begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}r}
Expand Down
16 changes: 8 additions & 8 deletions Utilities/Python/scripts/atmospheric_boundary_layer.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@
p_0 = 100000
qdot = {1: 50, 2: -50, 3: 25, 4: -25}
z_0 = {1: 0.25, 2: 0.25, 3: 0.125, 4: 0.125}
T_low = {1: 15, 2: 15, 3: 15, 4: 15}
T_high = {1: 25, 2: 25, 3: 25, 4: 25}
u_high = {1: 20, 2: 20, 3: 10, 4: 15}
fvec = {1: 0.01, 2: 0.01, 3: 0.002, 4: 0.005}
T_low = {1: 12, 2: 15, 3: 12, 4: 15}
T_high = {1: 22, 2: 25, 3: 22, 4: 25}
u_high = {1: 25, 2: 25, 3: 25, 4: 25}
fvec = {1: 0.004, 2: 0.004, 3: 0.002, 4: 0.004}
s = {1: 8.15, 2: 8.15, 3: 4.075, 4: 4.075}

theta_0 = T_r
Expand All @@ -51,7 +51,7 @@
L = -u_star**3 * theta_0 * rho_0 * cp / (g * kappa * qdot[i])
theta_star = u_star**2 * theta_0 / (g * kappa * L)

z = np.array([z_0[i], 10*z_0[i], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 50, 100])
z = np.array([10*z_0[i], 1, 2, 5, 10, 20, 40, 60, 80, 100, 150, 200, 250, 300, 350, 400])
z = np.sort(z)

# Create figure 1 for velocity
Expand All @@ -68,15 +68,15 @@
theta = theta_0 + (theta_star/kappa) * (np.log(z/z_0[i]) - psi_h)
T = theta * (p_0 / (p_0 - rho_0*g*(z - z_0[i])))**(-0.285)

T = T + (theta_0 - T[11])
T = T + (theta_0 - T[4])

ERROR = abs(u[-1] - M2.iloc[-1, 1])
if ERROR > 3.:
print(f'Python Warning: atmospheric_boundary_layer Case {i} velocity out of tolerance. ERROR = {ERROR} m/s')

fig = fdsplotlib.plot_to_fig(x_data=M2.iloc[:, 1].values, y_data=M2.iloc[:, 0].values, marker_style='k-', data_label='FDS',
x_label='Velocity (m/s)', y_label='Height (m)',
x_min=0, x_max=u_high[i], y_min=0, y_max=100,
x_min=0, x_max=u_high[i], y_min=0, y_max=400,
revision_label=version_string,
legend_location='lower right')

Expand Down Expand Up @@ -110,7 +110,7 @@

fig = fdsplotlib.plot_to_fig(x_data=M2.iloc[:,2].values, y_data=M2.iloc[:,0].values, marker_style='k-', data_label='FDS',
x_label='Temperature (°C)', y_label='Height (m)',
x_min=T_low[i], x_max=T_high[i], y_min=0, y_max=100,
x_min=T_low[i], x_max=T_high[i], y_min=0, y_max=400,
revision_label=version_string,
legend_location='lower left')

Expand Down
31 changes: 14 additions & 17 deletions Verification/Atmospheric_Effects/atmospheric_boundary_layer_1.fds
Original file line number Diff line number Diff line change
@@ -1,35 +1,32 @@
&HEAD CHID='atmospheric_boundary_layer_1', TITLE='Create a realistic atmospheric velocity and temperature profile' /

&MESH IJK=50,50,10, XB=-500.,-250.,-500.,-250.,0.,50., MULT_ID='mesh' /
&MULT ID='mesh', DX=250., DY=250., DZ=50., I_UPPER=3, J_UPPER=3, K_UPPER=1 /
&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,0.,100., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=3 /

&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,100.,200., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=0 /
&TIME T_END=3600. /

&TIME T_END=7200. /

&WIND FORCE_VECTOR(1)=0.01 /
&WIND FORCE_VECTOR(1)=0.004, LAPSE_RATE=-0.01, SPEED=18. /

&RADI RADIATION=F /

&VENT PBX=-500, SURF_ID='PERIODIC' /
&VENT PBX= 500, SURF_ID='PERIODIC' /
&VENT PBY=-500, SURF_ID='PERIODIC' /
&VENT PBY= 500, SURF_ID='PERIODIC' /
&VENT PBX=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBX= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBZ= 0, SURF_ID='GROUND' /
&VENT PBZ= 200, SURF_ID='OPEN' /
&VENT PBZ= 400, SURF_ID='OPEN' /

&SURF ID='GROUND', ROUGHNESS=8.15, CONVECTIVE_HEAT_FLUX=0.05 /

&SLCF PBY=0, QUANTITY='TEMPERATURE', VECTOR=T /
&SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=T /

&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=3600. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=3600. /
&DEVC XYZ=50,50,90, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=3600. /
&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,390, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /

&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=3600. /
&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=3600. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=1800. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=1800. /

&BNDF QUANTITY='CONVECTIVE HEAT FLUX' /
&BNDF QUANTITY='HEAT TRANSFER COEFFICIENT' /
Expand Down
33 changes: 16 additions & 17 deletions Verification/Atmospheric_Effects/atmospheric_boundary_layer_2.fds
Original file line number Diff line number Diff line change
@@ -1,35 +1,34 @@
&HEAD CHID='atmospheric_boundary_layer_2', TITLE='Create a realistic atmospheric velocity and temperature profile' /

&MESH IJK=50,50,10, XB=-500.,-250.,-500.,-250.,0.,50., MULT_ID='mesh' /
&MULT ID='mesh', DX=250., DY=250., DZ=50., I_UPPER=3, J_UPPER=3, K_UPPER=1 /
&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,0.,100., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=3 /

&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,100.,200., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=0 /
&TIME T_END=3600. /

&TIME T_END=7200. /
&MISC TMPA=23. /

&WIND FORCE_VECTOR(1)=0.01 /
&WIND FORCE_VECTOR(1)=0.004, LAPSE_RATE=-0.01, SPEED=22. /

&RADI RADIATION=F /

&VENT PBX=-500, SURF_ID='PERIODIC' /
&VENT PBX= 500, SURF_ID='PERIODIC' /
&VENT PBY=-500, SURF_ID='PERIODIC' /
&VENT PBY= 500, SURF_ID='PERIODIC' /
&VENT PBX=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBX= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBZ= 0, SURF_ID='GROUND' /
&VENT PBZ= 200, SURF_ID='OPEN' /
&VENT PBZ= 400, SURF_ID='OPEN' /

&SURF ID='GROUND', ROUGHNESS=8.15, CONVECTIVE_HEAT_FLUX=-0.05 /
&SURF ID='GROUND', ROUGHNESS=8.15, CONVECTIVE_HEAT_FLUX=-0.05, TMP_FRONT=20. /

&SLCF PBY=0, QUANTITY='TEMPERATURE', VECTOR=T /
&SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=T /

&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=3600. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=3600. /
&DEVC XYZ=50,50,90, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=3600. /
&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,390, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /

&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=3600. /
&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=3600. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=1800. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=1800. /

&BNDF QUANTITY='CONVECTIVE HEAT FLUX' /
&BNDF QUANTITY='HEAT TRANSFER COEFFICIENT' /
Expand Down
31 changes: 14 additions & 17 deletions Verification/Atmospheric_Effects/atmospheric_boundary_layer_3.fds
Original file line number Diff line number Diff line change
@@ -1,35 +1,32 @@
&HEAD CHID='atmospheric_boundary_layer_3', TITLE='Create a realistic atmospheric velocity and temperature profile' /

&MESH IJK=50,50,10, XB=-500.,-250.,-500.,-250.,0.,50., MULT_ID='mesh' /
&MULT ID='mesh', DX=250., DY=250., DZ=50., I_UPPER=3, J_UPPER=3, K_UPPER=1 /
&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,0.,100., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=3 /

&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,100.,200., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=0 /
&TIME T_END=3600. /

&TIME T_END=10800. /

&WIND FORCE_VECTOR(1)=0.002 /
&WIND FORCE_VECTOR(1)=0.002, LAPSE_RATE=-0.01, SPEED=13. /

&RADI RADIATION=F /

&VENT PBX=-500, SURF_ID='PERIODIC' /
&VENT PBX= 500, SURF_ID='PERIODIC' /
&VENT PBY=-500, SURF_ID='PERIODIC' /
&VENT PBY= 500, SURF_ID='PERIODIC' /
&VENT PBX=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBX= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBZ= 0, SURF_ID='GROUND' /
&VENT PBZ= 200, SURF_ID='OPEN' /
&VENT PBZ= 400, SURF_ID='OPEN' /

&SURF ID='GROUND', ROUGHNESS=4.075, CONVECTIVE_HEAT_FLUX=0.025 /

&SLCF PBY=0, QUANTITY='TEMPERATURE', VECTOR=T /
&SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=T /

&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=7200. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=7200. /
&DEVC XYZ=50,50,90, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=7200. /
&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,390, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /

&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=7200. /
&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=7200. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=1800. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=1800. /

&BNDF QUANTITY='CONVECTIVE HEAT FLUX' /
&BNDF QUANTITY='HEAT TRANSFER COEFFICIENT' /
Expand Down
33 changes: 16 additions & 17 deletions Verification/Atmospheric_Effects/atmospheric_boundary_layer_4.fds
Original file line number Diff line number Diff line change
@@ -1,35 +1,34 @@
&HEAD CHID='atmospheric_boundary_layer_4', TITLE='Create a realistic atmospheric velocity and temperature profile' /

&MESH IJK=50,50,10, XB=-500.,-250.,-500.,-250.,0.,50., MULT_ID='mesh' /
&MULT ID='mesh', DX=250., DY=250., DZ=50., I_UPPER=3, J_UPPER=3, K_UPPER=1 /
&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,0.,100., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=3 /

&MESH IJK=50,50,10, XB=-500.,0.,-500.,0.,100.,200., MULT_ID='mesh2' /
&MULT ID='mesh2', DX=500., DY=500., DZ=100., I_UPPER=1, J_UPPER=1, K_UPPER=0 /
&TIME T_END=3600. /

&TIME T_END=10800. /
&MISC TMPA=23. /

&WIND FORCE_VECTOR(1)=0.005 /
&WIND FORCE_VECTOR(1)=0.004, LAPSE_RATE=-0.01, SPEED=18. /

&RADI RADIATION=F /

&VENT PBX=-500, SURF_ID='PERIODIC' /
&VENT PBX= 500, SURF_ID='PERIODIC' /
&VENT PBY=-500, SURF_ID='PERIODIC' /
&VENT PBY= 500, SURF_ID='PERIODIC' /
&VENT PBX=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBX= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY=-500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBY= 500, SURF_ID='PERIODIC FLOW ONLY' /
&VENT PBZ= 0, SURF_ID='GROUND' /
&VENT PBZ= 200, SURF_ID='OPEN' /
&VENT PBZ= 400, SURF_ID='OPEN' /

&SURF ID='GROUND', ROUGHNESS=4.075, CONVECTIVE_HEAT_FLUX=-0.025 /
&SURF ID='GROUND', ROUGHNESS=4.075, CONVECTIVE_HEAT_FLUX=-0.025, TMP_FRONT=20. /

&SLCF PBY=0, QUANTITY='TEMPERATURE', VECTOR=T /
&SLCF PBY=0, QUANTITY='VELOCITY', VECTOR=T /

&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=7200. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=7200. /
&DEVC XYZ=50,50,90, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=7200. /
&DEVC XYZ=50,50,10, QUANTITY='U-VELOCITY', ID='u_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,10, QUANTITY='TEMPERATURE', ID='T_10', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /
&DEVC XYZ=50,50,390, QUANTITY='VELOCITY', ID='vel', TEMPORAL_STATISTIC='RUNNING AVERAGE', STATISTICS_START=100. /

&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=7200. /
&DEVC XB=50,50,50,50,2.5,97.5, POINTS=20, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=7200. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='U-VELOCITY', Z_ID='z', ID='u', STATISTICS_START=1800. /
&DEVC XB=50,50,50,50,2.5,397.5, POINTS=40, QUANTITY='TEMPERATURE', HIDE_COORDINATES=T, ID='T', STATISTICS_START=1800. /

&BNDF QUANTITY='CONVECTIVE HEAT FLUX' /
&BNDF QUANTITY='HEAT TRANSFER COEFFICIENT' /
Expand Down