Test 6: Horizontal counter-flows (rooms)
PASS blocking documented (see note)
1. Definition
Two rooms of 10 m by 10 m are joined by a corridor 10 m long and 2 m wide, which starts and ends at the centre of one side of each room. One hundred occupants with no pre-evacuation time and speeds drawn from the building population start in room 1, packed from the left at the highest possible density, and move to room 2. The time the last of them enters room 2 is recorded. The run is repeated with 10, 50 and 100 additional occupants of the same kind starting in room 2 and moving to room 1 at the same time. The tester discusses how large the time increases are and documents any long-term blocking.
Source: ISO 20414:2020, Test 6, Table 7, pp. 15-16, Fig. 3. This is a paraphrase, not the text of the standard.
Reference: ISO (2020). ISO 20414:2020, Fire safety engineering - Verification and validation protocol for building fire evacuation models. First edition. International Organization for Standardization, Geneva. https://www.iso.org/standard/78348.html (Page numbers are the printed page numbers of ISO 20414:2020 (the copy read is a proof, so numbers can differ by a page in the published edition). ISO states that its tests are examples and that a tester may use different tests that verify the same component equivalently.)
2. Scenario

Scenario figure from the executed notebook.
3. What to expect
The recorded time increases with the number of occupants in counter-flow. ISO calls the evaluation qualitative and sets no numeric limit.
Our criterion: Last room-1 occupant’s room-2 entry time increases strictly with counterflow; blocked levels are documented and count as later than any finite level
Seed 42: 0 -> 46.6 s, 10 -> 70.0 s; counterflow 50 and 100 block (no lane formation in CollisionFreeSpeedModel), blocking documented per ISO 20414.
4. Our result
Status: PASS
Test cases of this row
| Case | Status | Result | Run |
|---|---|---|---|
test_ | PASS | last_room2_entry_time_by_counterflow (s) counterflow_0: 45.6 counterflow_10: 73.3 counterflow_50: — (not reached) counterflow_100: — (not reached) | n = 100 · seed 42 |
— (not reached) means the run recorded no value for that entry, for example because agents blocked before the end of the time budget.
test_: bound: level 0 completes (not null); comparison: finite times strictly increase with the counterflow count and no finite level follows a blocked (null) levellast_ room2_ entry_ increases_ with_ counterflow

Result figure from the executed notebook.
5. Our implementation
Deviations from the standard:
- Decision D10: a level in which some room-1 occupant does not reach room 2 within the 200 s budget is reported as ‘blocking documented’. It counts as later than every level that completes, as ISO asks for blocking to be documented and not treated as a failure. In the result table such a level shows as “— (not reached)”.
- The pass rule is the suite’s own: the last room-2 entry times of the levels that complete must increase strictly, no completing level may follow a blocked one, and the level without counter-flow must complete. Room 2 is entered at the first frame with x of 20 m or more, the far end of the corridor.
- All occupants walk at a constant 1.2 m/s instead of a speed distribution from the building population.
- The 100 room-1 occupants start at random positions in a 2.5 m by 9.6 m strip along the left wall (mean density about 4.2 persons per square metre), which may be below the maximum possible density. Counter-flow occupants start in a strip against the right wall. One seed (42) is run.
Model: CollisionFreeSpeedModel
- Test function: tests/vv/test_iso.py::test_last_room2_entry_increases_with_counterflow
- Scenario file: Iso-06-counterflow-0.zip
- Scenario file: Iso-06-counterflow-10.zip
- Scenario file: Iso-06-counterflow-50.zip
- Scenario file: Iso-06-counterflow-100.zip