예제 #1
0
class Interpolator:
    def __init__(self, gd1, gd2, dtype=float):
        self.pd1 = PWDescriptor(0.0, gd1, dtype)
        self.pd2 = PWDescriptor(0.0, gd2, dtype)

    def interpolate(self, a_r):
        return self.pd1.interpolate(a_r, self.pd2)[0]
예제 #2
0
                         [(2, 3, 4), (5, 6, 8)], [(4, 4, 4), (8, 8, 8)],
                         [(2, 4, 4), (4, 8, 8)], [(2, 4, 2), (4, 8, 4)]]:
        print(size1, size2)
        gd1 = GridDescriptor(size1, size1)
        gd2 = GridDescriptor(size2, size1)
        pd1 = PWDescriptor(1, gd1, complex)
        pd2 = PWDescriptor(1, gd2, complex)
        pd1r = PWDescriptor(1, gd1)
        pd2r = PWDescriptor(1, gd2)
        for R1, R2 in [[(0, 0, 0), (0, 0, 0)], [(0, 0, 0), (0, 0, 1)]]:
            x = test(gd1, gd2, pd1, pd2, R1, R2)
            y = test(gd1, gd2, pd1r, pd2r, R1, R2)
            equal(x, y, 1e-9)

        a1 = np.random.random(size1)
        a2 = pd1r.interpolate(a1, pd2r)[0]
        c2 = pd1.interpolate(a1 + 0.0j, pd2)[0]
        d2 = pd1.interpolate(a1 * 1.0j, pd2)[0]
        equal(abs(c2.imag).max(), 0, 1e-14)
        equal(abs(d2.real).max(), 0, 1e-14)
        equal(gd1.integrate(a1), gd2.integrate(a2), 1e-13)
        equal(abs(c2 - a2).max(), 0, 1e-14)
        equal(abs(d2 - a2 * 1.0j).max(), 0, 1e-14)

        a1 = pd2r.restrict(a2, pd1r)[0]
        c1 = pd2.restrict(a2 + 0.0j, pd1)[0]
        d1 = pd2.restrict(a2 * 1.0j, pd1)[0]
        equal(gd1.integrate(a1), gd2.integrate(a2), 1e-13)
        equal(abs(c1 - a1).max(), 0, 1e-14)
        equal(abs(d1 - a1 * 1.0j).max(), 0, 1e-14)
예제 #3
0
        [(2, 4, 4), (4, 8, 8)],
        [(2, 4, 2), (4, 8, 4)]
        ]:
        print(size1, size2)
        gd1 = GridDescriptor(size1, size1)
        gd2 = GridDescriptor(size2, size1)
        pd1 = PWDescriptor(1, gd1, complex)
        pd2 = PWDescriptor(1, gd2, complex)
        pd1r = PWDescriptor(1, gd1)
        pd2r = PWDescriptor(1, gd2)
        for R1, R2 in [[(0,0,0), (0,0,0)],
                       [(0,0,0), (0,0,1)]]:
            x = test(gd1, gd2, pd1, pd2, R1, R2)
            y = test(gd1, gd2, pd1r, pd2r ,R1, R2)
            equal(x, y, 1e-9)
        
        a1 = np.random.random(size1)
        a2 = pd1r.interpolate(a1, pd2r)[0]
        c2 = pd1.interpolate(a1 + 0.0j, pd2)[0]
        d2 = pd1.interpolate(a1 * 1.0j, pd2)[0]
        equal(gd1.integrate(a1), gd2.integrate(a2), 1e-13)
        equal(abs(c2 - a2).max(), 0, 1e-14)
        equal(abs(d2 - a2 * 1.0j).max(), 0, 1e-14)

        a1 = pd2r.restrict(a2, pd1r)[0]
        c1 = pd2.restrict(a2 + 0.0j, pd1)[0]
        d1 = pd2.restrict(a2 * 1.0j, pd1)[0]
        equal(gd1.integrate(a1), gd2.integrate(a2), 1e-13)
        equal(abs(c1 - a1).max(), 0, 1e-14)
        equal(abs(d1 - a1 * 1.0j).max(), 0, 1e-14)