sim_ functions accepts choice of sim_fn