def _extend_3d(self, axis, delta, npoints):
        imax, jmax, kmax = self.real_shape
        if axis == 'i':
            new_shape = (imax + npoints, jmax, kmax)
            indx = imax if delta > 0 else npoints
        elif axis == 'j':
            new_shape = (imax, jmax + npoints, kmax)
            indx = jmax if delta > 0 else npoints
        else:
            new_shape = (imax, jmax, kmax + npoints)
            indx = kmax if delta > 0 else npoints

        flow = FlowSolution()
        for arr in self._arrays:
            new_arr = numpy.zeros(new_shape)
            if axis == 'i':
                if delta > 0:
                    new_arr[0:indx, :, :] = arr
                    for i in range(npoints):
                        new_arr[indx+i, :, :] = arr[-1, :, :]
                else:
                    new_arr[indx:, :, :] = arr
                    for i in range(npoints):
                        new_arr[i, :, :] = arr[0, :, :]
            elif axis == 'j':
                if delta > 0:
                    new_arr[:, 0:indx, :] = arr
                    for j in range(npoints):
                        new_arr[:, indx+j, :] = arr[:, -1, :]
                else:
                    new_arr[:, indx:, :] = arr
                    for j in range(npoints):
                        new_arr[:, j, :] = arr[:, 0, :]
            else:
                if delta > 0:
                    new_arr[:, :, 0:indx] = arr
                    for k in range(npoints):
                        new_arr[:, :, indx+k] = arr[:, :, -1]
                else:
                    new_arr[:, :, indx:] = arr
                    for k in range(npoints):
                        new_arr[:, :, k] = arr[:, :, 0]
            flow.add_array(self.name_of_obj(arr), new_arr)

        for vector in self._vectors:
            flow.add_vector(self.name_of_obj(vector),
                            vector.extend(axis, delta, npoints))

        flow.grid_location = self.grid_location
        flow.ghosts = copy.copy(self._ghosts)
        flow._copy_scalars(self)
        return flow
Different key fields depending on self.add setting (see load_data)
dataset/ETHPy150Open OpenMDAO/OpenMDAO-Framework/openmdao.lib/src/openmdao/lib/datatypes/domain/flow.py/FlowSolution._extend_3d--crossover with--dataset/ETHPy150Open heigeo/climata/climata/acis/__init__.py/DataIO.key_fields