Invisible walls

  • Invisible walls are an essential component of creating a model. They can be helpful for multiple reasons.
    • Changing the level within a room (e.g., steps).
    • Changing materials within a room
    • Organizing a room as the user wishes (e.g., parking slots).
    • Placing an element in the middle of a room (e.g., pillar).
    • Outside walls buried or tied to another building

However invisible walls can’t be considered as very large openings: the hydraulic laws used to route flow are not adequate for such large openings.

Merging and Simplification

To solve this problem, all rooms sharing an invisible wall can be merged into one using the merge_room() function. Merged rooms behave as a single hydraulic unit whose volume is obtained by summing individual contributions. Calculations for the surface of the merged room are level-dependent and therefore a bit more involved: merge_room() builds summed_room matrices that describe surface and cumulative volume as a function of water level (these matrices are used to redistribute volumes back to the original rooms after the simulation).

This mechanism corresponds to the aggregation step of a semi-distributed model: it preserves the distributed nature of the simulation while simplifying the network topology.

  • During the simulation, merged rooms act as a single hydraulic cell. At the end of the simulation, the split_output() function redistributes results back to the original rooms. Concretely:
    • split_output() restores per-room base elevation (floor) by ensuring returned levels are not below each room’s H_abs.
    • After splitting, the simulation output is clipped to each room’s ceiling (ceiling_H) by the main hydraulic routine so ceiling clipping is applied after splitting.
  • These steps ensure that:
    • Each room regains its original base elevation (H_abs)
    • Water level doesn’t drop below its floor elevation
    • Water level is limited to the room ceiling height (ceiling clipping applied after split)