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
29 changes: 15 additions & 14 deletions Manuals/FDS_User_Guide/FDS_User_Guide.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1274,18 +1274,7 @@ \subsection{Overlapping Obstructions}

When obstructions overlap, Smokeview renders both obstructions independently of each other, often leading to an unsightly cross-hatching of the two surface colors where there is an overlap. A simple remedy for this is to ``shrink'' the obstruction you do not wish to take precedence by slightly by adjusting its coordinates (\ct{XB}) accordingly. Then, in Smokeview, toggle the ``q'' key to show the obstructions as you specified them, rather than as FDS rendered them.

The simulation will be stopped with an error if all of the following occur: (1) surfaces of two obstructions overlap, (2) the surface properties are different, and (3) one or both of the obstructions can be removed or created during the simulation.

If you have two overlapping obstructions and one obstruction is to be added or removed during the simulation with a hole made in the region of overlap, then define a \ct{HOLE} for the obstruction being added or removed and set \ct{REMOVABLE=F} as discussed in the next two sections.

\subsection{Preventing Obstruction Removal}

Obstructions can be protected from the \ct{HOLE} punching feature. Sometimes creating create a door or window using a \ct{HOLE} is convenient. For example, suppose a \ct{HOLE} is punched in a wall to represent a door or window. An obstruction can be defined to fill this hole (presumably to be removed or colored differently or whatever) so long as the phrase \ct{PERMIT_HOLE=F} is included on the \ct{OBST} line. In general, any obstruction can be made impenetrable to a \ct{HOLE} using this phrase. By default, \ct{PERMIT_HOLE=T}, meaning that an obstruction is assumed to be penetrable unless otherwise directed. Note that if a penetrable obstruction and an impenetrable obstruction overlap, the obstruction with \ct{PERMIT_HOLE=F} should be listed first.

If the obstruction is not to be removed or rejected for any reason, set \ct{REMOVABLE=F} This is sometimes needed to stop
FDS from removing the obstruction if it is embedded within another, like a door within a wall.

In rare cases, you might not want to allow a \ct{VENT} to be attached to a particular obstruction, in which case set \ct{ALLOW_VENT=F}.
Two obstructions should not overlap; that is, they should not have a common grid cell, if one or both of the obstructions is to be removed or created during the simulation. This will prompt an error message and the simulation will be shut down. However, you can punch a \ct{HOLE} through one obstruction and then fill that \ct{HOLE} with another obstruction which has the attribute \ct{REMOVABLE=F} or \ct{PERMIT_HOLE=F} as discussed in Sec.~\ref{info:REMOVABLE}. In this way, the first obstruction shall be broken up into multiple obstructions, none of which overlap the second obstrction which will not be punched by the \ct{HOLE}.

\subsection{Transparent or Outlined Obstructions}

Expand Down Expand Up @@ -1343,6 +1332,17 @@ \subsection{Creating Holes in Obstructions}
It is a good idea to inspect the geometry by running either a setup job
(\ct{T_END=0} on the \ct{TIME} line) or a short-time job to test the operation of devices and control functions.

\subsection{Preventing Obstruction Removal or Hole Punching}
\label{info:REMOVABLE}

Obstructions can be protected from the \ct{HOLE} punching feature. Sometimes creating create a door or window using a \ct{HOLE} is convenient. For example, suppose a \ct{HOLE} is punched in a wall to represent a door or window. An obstruction can be defined to fill this hole (presumably to be removed or colored differently or whatever) so long as the phrase \ct{PERMIT_HOLE=F} is included on the \ct{OBST} line. In general, any obstruction can be made impenetrable to a \ct{HOLE} using this phrase. By default, \ct{PERMIT_HOLE=T}, meaning that an obstruction is assumed to be penetrable unless otherwise directed. Note that if a penetrable obstruction and an impenetrable obstruction overlap, the obstruction with \ct{PERMIT_HOLE=F} should be listed first.

If the obstruction is not to be removed or rejected for any reason, set \ct{REMOVABLE=F} This is sometimes needed to stop
FDS from removing the obstruction if it is embedded within another, like a door within a wall.

In rare cases, you might not want to allow a \ct{VENT} to be attached to a particular obstruction, in which case set \ct{ALLOW_VENT=F}.


\ifcompgeom

\newpage
Expand Down Expand Up @@ -14419,8 +14419,9 @@ \chapter{Error Codes}
610 \> \ct{HOLE ... Cannot overlap HOLEs with a DEVC or CTRL_ID.} \> Section~\ref{info:HOLE} \\
611 \> \ct{OBST ... has a BULK_DENSITY but zero volume.} \> Section~\ref{info:BURN_AWAY} \\
612 \> \ct{OBST ... must have a volume to be assigned HT3D.} \> Section~\ref{checkerboard} \\
613 \> \ct{OBST ... and OBST ... cannot overlap in Mesh ...} \> Section~\ref{info:OVERLAY} \\
614 \> \ct{OBST_ID ... cannot have a SURF with NODE_ID} \> Section~\ref{info:hvac_geom} \\ \> \> \\
614 \> \ct{OBST_ID ... cannot have a SURF with NODE_ID} \> Section~\ref{info:hvac_geom} \\
615 \> \ct{OBST ... cannot overlap OBST ...} \> Section~\ref{info:OVERLAY} \\
\> \> \\
701 \> \ct{problem with GEOM, local SURF_ID index ... out of bounds.} \> Section~\ref{info:GEOM_Basics} \\
702 \> \ct{problem with GEOM, SURF_IDS not defined properly.} \> Section~\ref{info:first_geom} \\
703 \> \ct{missing SURF_ID in \&GEOM line ...} \> Section~\ref{subsec:readbin} \\
Expand Down
20 changes: 19 additions & 1 deletion Source/read.f90
Original file line number Diff line number Diff line change
Expand Up @@ -14839,7 +14839,8 @@ END SUBROUTINE PROC_CTRL
SUBROUTINE PROC_OBST

USE GEOMETRY_FUNCTIONS, ONLY: BLOCK_CELL
INTEGER :: NM,I,J,K,IS,JS,KS,IC1,IC2
INTEGER :: NM,I,J,K,IS,JS,KS,IC1,IC2,OBST_INDEX,OBST_INDEX_2
TYPE(OBSTRUCTION_TYPE), POINTER :: OB2

MESH_LOOP: DO NM=1,NMESHES

Expand Down Expand Up @@ -14886,6 +14887,23 @@ SUBROUTINE PROC_OBST
ENDDO
ENDDO

! Throw an error if there is an OBSTstruction that can be created or removed and that intersects another OBSTstruction

OBST_LOOP: DO OBST_INDEX=1,N_OBST
OB => OBSTRUCTION(OBST_INDEX)
IF (OB%CTRL_ID/='null' .OR. OB%DEVC_ID/='null') THEN
OBST_LOOP_2: DO OBST_INDEX_2=1,N_OBST
IF (OBST_INDEX==OBST_INDEX_2) CYCLE OBST_LOOP_2
OB2 => OBSTRUCTION(OBST_INDEX_2)
IF (OB%I2<=OB2%I1 .OR. OB%I1>=OB2%I2 .OR. &
OB%J2<=OB2%J1 .OR. OB%J1>=OB2%J2 .OR. &
OB%K2<=OB2%K1 .OR. OB%K1>=OB2%K2) CYCLE OBST_LOOP_2
WRITE(MESSAGE,'(4A)') 'ERROR(615): OBST ',TRIM(OB%ID),' cannot overlap OBST ',TRIM(OB2%ID)
CALL SHUTDOWN(MESSAGE) ; RETURN
ENDDO OBST_LOOP_2
ENDIF
ENDDO OBST_LOOP

ENDDO MESH_LOOP


Expand Down
4 changes: 2 additions & 2 deletions Verification/Flowfields/divergence_test_1.fds
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
&VENT XB=0.0,0.0,0.3,0.7,0.3,0.7, SURF_ID='BLOW' /
&VENT XB=1.0,1.0,0.3,0.7,0.3,0.7, SURF_ID='SUCK' /

&OBST XB=0.3,0.7,0.3,0.7,0.3,0.7, COLOR='TEAL', DEVC_ID='timer1' /
&OBST XB=0.4,0.8,0.4,0.8,0.4,0.8, COLOR='GREEN', DEVC_ID='timer2' /
&OBST XB=0.3,0.6,0.3,0.7,0.3,0.7, COLOR='TEAL', DEVC_ID='timer1' /
&OBST XB=0.6,0.8,0.4,0.8,0.4,0.8, COLOR='GREEN', DEVC_ID='timer2' /
&DEVC ID='timer1', XYZ=0.,0.,0., QUANTITY='TIME', SETPOINT=3., INITIAL_STATE=.TRUE. /
&DEVC ID='timer2', XYZ=0.,0.,0., QUANTITY='TIME', SETPOINT=6., INITIAL_STATE=.FALSE. /

Expand Down
Loading