def METHOD_NAME(self, courant_field):
    for i, component in enumerate(courant_field):
        self.courant[i].upload(component)
    # note: to be improved, should make n_substeps variable in space as in cond/coal
    if self.adaptive:
        error_estimate = self.rtol
        self._n_substeps = 0.5
        while error_estimate >= self.rtol:
            self._n_substeps = int(self._n_substeps * 2)
            error_estimate = 0
            for i, courant_component in enumerate(courant_field):
                max_abs_delta_courant = np.amax(
                    np.abs(np.diff(courant_component, axis=i))
                )
                max_abs_delta_courant /= self._n_substeps
                error_estimate = max(
                    error_estimate,
                    0
                    if max_abs_delta_courant == 0
                    else 1 / (1 / max_abs_delta_courant - 1),
                )