///|
/// Apply semantic wall and obstacle labels to a simulation.
pub fn Simulation::apply_boundary_map(
  self : Simulation,
  labels : BoundaryMap,
) -> Unit {
  for y in 0.. BoundaryDiagnostics {
  analyze_boundary_mask(self.current_mask())
}

///|
/// Build a label map from a simulation's solid geometry.
pub fn Simulation::boundary_map(self : Simulation) -> BoundaryMap {
  let result = BoundaryMap::new(size=self.size)
  for y in 0.. Unit {
  if y >= 0 && y < self.size.height {
    for x in 0.. Unit {
  if y >= 0 && y < self.size.height {
    for x in 0.. Unit {
  if x >= 0 && x < self.size.width {
    for y in 0.. BoundaryMap {
  let result = BoundaryMap::new(size=self.size)
  for y in 0.. Int {
  self.count(Inlet) + self.count(Outlet)
}