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)
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)
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)
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 ])
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)
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)
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])