def METHOD_NAME(self):
    """Run the multi model simulation"""
    logger.info("Start multi model run ...")
    t0 = time.time()
    timestep = None
    # Get each model's timestepper
    timesteppers = [m.timestepper for m in self.models.values()]
    try:
        if self.dirty:
            self.setup()
        else:
            self.reset()
        t1 = time.time()
        # Begin time-stepping
        for timesteps in zip(*timesteppers):
            for model, timestep in zip(self.models.values(), timesteps):
                # Check all timesteps are the same
                if timestep.datetime != timesteps[0].datetime:
                    raise RuntimeError(
                        "Timesteps are not synchronised across all sub-models."
                    )
                model.timestep = timestep
            # Perform the internal timestep
            _ = self._step()
        t2 = time.time()
    finally:
        for model in self.models.values():
            model.finish()
    t3 = time.time()
    return