コード例 #1
0
ファイル: util.py プロジェクト: JanaSchneeloch/Gyoto
def _Worldline_getCoord(self, t, *arrays):
    if isinstance(t, core.array_double) or numpy.isscalar(t):
        core._core.Worldline_getCoord(self, t, *arrays)
    else:
        sizes = numpy.asarray([v.size for v in arrays])
        if not (sizes == t.size).all():
            raise ValueError('all arrays must be the same size')
        core._core.Worldline_getCoord(
            self, core.array_double_fromnumpy1(t), t.size,
            *[core.array_double_fromnumpy1(v) for v in arrays])
コード例 #2
0
ファイル: util.py プロジェクト: ashcat2005/Gyoto
def _Worldline_getCartesian(self, t=None, *arrays):
    # if no time provided, return all computed coordinates
    if t is None:
        n = self.get_nelements()
        t = numpy.empty(n)
        self.get_t(t)
        x = numpy.empty(n)
        y = numpy.empty(n)
        z = numpy.empty(n)
        xprime = numpy.empty(n)
        yprime = numpy.empty(n)
        zprime = numpy.empty(n)
        _Worldline_getCartesian(self, t, x, y, z, xprime, yprime, zprime)
        return t, x, y, z, xprime, yprime, zprime
    # if t is provided, return 8-coord for this time. t can be index or time.
    if not len(arrays):
        scalarcase = False
        if numpy.isscalar(t):
            scalarcase = True
            if numpy.issubdtype(type(t), numpy.integer):
                n = self.get_nelements()
                ta = numpy.empty(n)
                self.get_t(ta)
                if t >= 0:
                    t = ta[t]
                else:
                    t = ta[n + t]
            t = numpy.full(1, t)
        n = t.size
        x = numpy.empty(n)
        y = numpy.empty(n)
        z = numpy.empty(n)
        xprime = numpy.empty(n)
        yprime = numpy.empty(n)
        zprime = numpy.empty(n)
        _Worldline_getCartesian(self, t, x, y, z, xprime, yprime, zprime)
        if scalarcase:
            return numpy.asarray(
                [t, x[0], y[0], z[0], xprime[0], yprime[0], zprime[0]])
        else:
            return t, x, y, z, xp, yp, zp
    # if t is a gyoto.core.array_double, call low-level C++ function
    if isinstance(t, core.array_double):
        core._core.Worldline_getCartesian(self, t, *arrays)
    # else fill pre-allocated arrays
    else:
        sizes = numpy.asarray([v.size for v in arrays])
        if not (sizes == t.size).all():
            raise ValueError('all arrays must be the same size')
        core._core.Worldline_getCartesian(
            self, core.array_double_fromnumpy1(t), t.size,
            *[core.array_double_fromnumpy1(v) for v in arrays])
コード例 #3
0
ファイル: util.py プロジェクト: AuroraDysis/Gyoto
def _Worldline_getCoord(self, t, *arrays):
    # if no time provided, return all computed coordinates
    if t is None:
        n=self.get_nelements()
        t=numpy.empty(n)
        self.get_t(t)
        x=numpy.empty(n)
        y=numpy.empty(n)
        z=numpy.empty(n)
        tdot=numpy.empty(n)
        xdot=numpy.empty(n)
        ydot=numpy.empty(n)
        zdot=numpy.empty(n)
        _Worldline_getCoord(self, t, x, y, z, tdot, xdot, ydot, zdot)
        return t, x, y, z, tdot, xdot, ydot, zdot
    # if t is provided, return 8-coord for this time. t can be index or time.
    if numpy.isscalar(t) and not len(arrays):
        if numpy.issubdtype(type(t), numpy.integer):
            n=self.get_nelements()
            ta=numpy.empty(n)
            self.get_t(ta)
            if t >= 0:
                t=ta[t]
            else:
                t=ta[n+t]
        ta=numpy.full(1, t)
        x=numpy.empty(1)
        y=numpy.empty(1)
        z=numpy.empty(1)
        tdot==numpy.empty(1)
        xdot=numpy.empty(1)
        ydot=numpy.empty(1)
        zdot=numpy.empty(1)
        _Worldline_getCoord(self, ta, x, y, z, tdot, xdot, ydot, zdot)
        return numpy.asarray([t, x[0], y[0], z[0], tdot[0], xdot[0], ydot[0], zdot[0]])
    # if t is a gyoto.core.array_double, call low-level C++ function
    if isinstance(t, core.array_double) or numpy.isscalar(t) :
        core._core.Worldline_getCoord(self, t, *arrays)
    # else fill pre-allocated arrays
    else:
        sizes=numpy.asarray([v.size for v in arrays])
        if not (sizes == t.size).all():
            raise ValueError('all arrays must be the same size')
        core._core.Worldline_getCoord(
            self,
            core.array_double_fromnumpy1(t),
            t.size,
            *[core.array_double_fromnumpy1(v) for v in arrays]
            )