예제 #1
0
    def test_nonuniform_all_with_pickle(self):
        for i in range(100):
            extents1D = [random.choice(self.extents) for _ in range(1)]
            extents2D = [random.choice(self.extents) for _ in range(2)]
            extents3D = [random.choice(self.extents) for _ in range(3)]

            bases1D = [random.choice(self.bases) for _ in range(1)]
            bases2D = [random.choice(self.bases) for _ in range(2)]
            bases3D = [random.choice(self.bases) for _ in range(3)]

            quadratures1D = [random.choice(self.quadratures) for _ in range(1)]
            quadratures2D = [random.choice(self.quadratures) for _ in range(2)]
            quadratures3D = [random.choice(self.quadratures) for _ in range(3)]

            m1 = Mesh1D(extents1D, bases1D, quadratures1D)
            m2 = Mesh2D(extents2D, bases2D, quadratures2D)
            m3 = Mesh3D(extents3D, bases3D, quadratures3D)

            # Use pickle protocol 2 for Py2 compatibility
            m1 = pickle.loads(pickle.dumps(m1, protocol=2))
            m2 = pickle.loads(pickle.dumps(m2, protocol=2))
            m3 = pickle.loads(pickle.dumps(m3, protocol=2))

            self.check_extents(m1, extents1D)
            self.check_extents(m2, extents2D)
            self.check_extents(m3, extents3D)

            self.check_basis(m1, bases1D)
            self.check_basis(m2, bases2D)
            self.check_basis(m3, bases3D)

            self.check_quadrature(m1, quadratures1D)
            self.check_quadrature(m2, quadratures2D)
            self.check_quadrature(m3, quadratures3D)
예제 #2
0
 def test_collocation_points_chebyshev_gauss(self):
     for num_coll_points in range(2, 13):
         coefs = np.zeros(num_coll_points + 1)
         coefs[-1] = 1.
         coll_points_numpy = chebyshev.chebroots(coefs)
         mesh = Mesh1D(num_coll_points, Basis.Chebyshev, Quadrature.Gauss)
         coll_points_spectre = collocation_points(mesh)
         np.testing.assert_allclose(coll_points_numpy, coll_points_spectre,
                                    1e-12, 1e-12)
예제 #3
0
 def test_collocation_points_chebyshev_gauss_lobatto(self):
     for num_coll_points in range(2, 13):
         coefs = np.zeros(num_coll_points)
         coefs[-1] = 1.
         coll_points_numpy = np.concatenate(
             ([-1.], chebyshev.Chebyshev(coefs).deriv().roots(), [1.]))
         mesh = Mesh1D(num_coll_points, Basis.Chebyshev,
                       Quadrature.GaussLobatto)
         coll_points_spectre = collocation_points(mesh)
         np.testing.assert_allclose(coll_points_numpy, coll_points_spectre,
                                    1e-12, 1e-12)
예제 #4
0
 def test_slices(self):
     for dim in range(3):
         for basis in self.bases:
             for quadrature in self.quadratures:
                 # the mesh constructor of dimension dim + 1
                 Mesh = self.Mesh[dim]
                 extents = [
                     random.choice(self.extents) for _ in range(dim + 1)
                 ]
                 mesh = Mesh(extents, basis, quadrature)
                 self.assertEqual(mesh.slices(), [
                     Mesh1D(extent, basis, quadrature) for extent in extents
                 ])
예제 #5
0
 def test_modal_to_nodal_matrix_chebyshev(self):
     for quadrature in [Quadrature.Gauss, Quadrature.GaussLobatto]:
         for num_coll_points in range(2, 13):
             mesh = Mesh1D(num_coll_points, Basis.Chebyshev, quadrature)
             coll_points = collocation_points(mesh)
             mtn_numpy = chebyshev.chebvander(coll_points,
                                              num_coll_points - 1)
             mtn_spectre = modal_to_nodal_matrix(mesh)
             np.testing.assert_allclose(mtn_spectre, mtn_numpy, 1e-12,
                                        1e-12)
             ntm_spectre = nodal_to_modal_matrix(mesh)
             np.testing.assert_allclose(np.matmul(mtn_spectre, ntm_spectre),
                                        np.identity(num_coll_points), 1e-12,
                                        1e-12)
예제 #6
0
    def test_nonuniform_extents(self):
        for basis in self.bases:
            for quadrature in self.quadratures:
                for i in range(100):
                    extents1D = [random.choice(self.extents) for _ in range(1)]
                    extents2D = [random.choice(self.extents) for _ in range(2)]
                    extents3D = [random.choice(self.extents) for _ in range(3)]

                    m1 = Mesh1D(extents1D, basis, quadrature)
                    m2 = Mesh2D(extents2D, basis, quadrature)
                    m3 = Mesh3D(extents3D, basis, quadrature)

                    self.check_extents(m1, extents1D)
                    self.check_extents(m2, extents2D)
                    self.check_extents(m3, extents3D)
예제 #7
0
    def test_uniform(self):
        for extent in range(12):
            for basis in self.bases:
                for quadrature in self.quadratures:
                    m1 = Mesh1D(extent, basis, quadrature)
                    m2 = Mesh2D(extent, basis, quadrature)
                    m3 = Mesh3D(extent, basis, quadrature)

                    self.assertEqual(m1.dim, 1)
                    self.assertEqual(m2.dim, 2)
                    self.assertEqual(m3.dim, 3)

                    self.check_extents(m1, [extent])
                    self.check_extents(m2, [extent, extent])
                    self.check_extents(m3, [extent, extent, extent])

                    self.check_basis(m1, [basis])
                    self.check_basis(m2, [basis, basis])
                    self.check_basis(m3, [basis, basis, basis])

                    self.check_quadrature(m1, [quadrature])
                    self.check_quadrature(m2, [quadrature, quadrature])
                    self.check_quadrature(m3,
                                          [quadrature, quadrature, quadrature])