///|
fn main {
  println("=== Desalination (Reverse Osmosis) Simulation ===")
  let ro_mem = @membrane.Membrane::new(
    name="Polyamide TFC",
    thickness=0.0001,
    area=50.0,
  )

  let feed_flow = 200.0 // L/h
  let feed_conc = 35000.0 // mg/L NaCl
  let recovery_rate = 0.5 // 50% recovery

  let stage = @process.MembraneStage::{
    membrane: ro_mem,
    feed_flow,
    feed_conc,
    recovery_rate,
  }

  let (p_flow, r_flow) = @process.run_stage(stage)
  println("Permeate Flow: \{p_flow} L/h")
  println("Retentate Flow: \{r_flow} L/h")

  let result = @process.simulate_stage(stage, 99.57)
  println("Permeate Concentration: \{result.permeate_conc} mg/L")
  println("Retentate Concentration: \{result.retentate_conc} mg/L")
  println("Rejection Rate: \{result.rejection_rate}%")
  println(
    "Solute balance: feed=\{feed_flow * feed_conc}, output=\{result.permeate_flow * result.permeate_conc + result.retentate_flow * result.retentate_conc}",
  )
}