def runTest(self): # Mesh.remove_elements m = MeshTri() m.refine() M = m.remove_elements(np.array([0])) self.assertEqual(M.t.shape[1], 7) # Mesh.define_boundary m.define_boundary('foo', lambda x: x[0] == 0.) self.assertEqual(m.boundaries['foo'].size, 2) # Mesh.define_boundary (internal) m.define_boundary('bar', lambda x: x[0] == 1. / 2, boundaries_only=False) self.assertEqual(m.boundaries['bar'].size, 2) # Mesh.scale, Mesh.translate m = MeshHex() m.scale(0.5) m.translate((0.5, 0.5, 0.5)) self.assertGreater(np.min(m.p), 0.4999) # Mesh3D.facets_satisfying self.assertEqual(len(m.facets_satisfying(lambda x: x[0] == 0.5)), 1)
def runTest(self): m = MeshTri() M = MeshTri() M.translate((1.0, 0.0)) M.define_boundary('top', lambda x: x[1] == 1.0) mesh = m + M self.assertTrue(mesh.p.shape[1] == 6) self.assertTrue(mesh.t.shape[1] == 4) self.assertTrue(mesh.subdomains is None) self.assertTrue('top' in mesh.boundaries)
def runTest(self): """Solve Stokes problem, try splitting and other small things.""" m = MeshTri() m.refine() m.define_boundary('centreline', lambda x: x[0] == .5, boundaries_only=False) m.refine(3) e = ElementVectorH1(ElementTriP2()) * ElementTriP1() m.define_boundary('up', lambda x: x[1] == 1.) m.define_boundary('rest', lambda x: x[1] != 1.) basis = InteriorBasis(m, e) self.assertEqual( basis.get_dofs(m.boundaries['centreline']).all().size, (2 + 1) * (2**(1 + 3) + 1) + 2 * 2**(1 + 3)) self.assertEqual(basis.find_dofs()['centreline'].all().size, (2 + 1) * (2**(1 + 3) + 1) + 2 * 2**(1 + 3)) @BilinearForm def bilinf(u, p, v, q, w): from skfem.helpers import grad, ddot, div return (ddot(grad(u), grad(v)) - div(u) * q - div(v) * p - 1e-2 * p * q) S = asm(bilinf, basis) D = basis.find_dofs(skip=['u^2']) x = basis.zeros() x[D['up'].all('u^1^1')] = .1 x = solve(*condense(S, basis.zeros(), x=x, D=D)) (u, u_basis), (p, p_basis) = basis.split(x) self.assertEqual(len(u), m.p.shape[1] * 2 + m.facets.shape[1] * 2) self.assertEqual(len(p), m.p.shape[1]) self.assertTrue(np.sum(p - x[basis.nodal_dofs[2]]) < 1e-8) U, P = basis.interpolate(x) self.assertTrue(isinstance(U.value, np.ndarray)) self.assertTrue(isinstance(P.value, np.ndarray)) self.assertTrue((basis.doflocs[:, D['up'].all()][1] == 1.).all())