fidleft = m.faces_from_pid(pidleft) normals = m.normal_of_faces(fidleft) fidleft = fidleft[:, abs(normals[0, :] + 1.0) < 1e-3] GAMMAD = 2 m.set_region(GAMMAD, fidleft) pidright = np.compress((abs(pts[0, :] - 1.0) < 1e-7), list(range(0, m.nbpts()))) fidright = m.faces_from_pid(pidright) normals = m.normal_of_faces(fidright) fidright = fidright[:, abs(normals[0, :] - 1.0) < 1e-3] GAMMAN = 3 m.set_region(GAMMAN, fidright) #% Definition of the finite element methods ls = gf.LevelSet(m, ls_degree) mls = gf.MeshLevelSet(m) mls.add(ls) mf_ls = ls.mf() if N == 2: mimls = gf.MeshIm(m, gf.Integ('IM_TRIANGLE(4)')) else: mimls = gf.MeshIm(m, gf.Integ('IM_TETRAHEDRON(5)')) mf_basic = gf.MeshFem(m, N) mf_basic.set_fem(gf.Fem(f'FEM_PK({N},{k})')) mf_g = gf.MeshFem(m, 1) mf_g.set_fem(gf.Fem(f'FEM_PK_DISCONTINUOUS({N},{k-1})')) mf_cont = gf.MeshFem(m, 1)
fright = m.outer_faces_with_direction([1., 0.], 0.5) fbottom = m.outer_faces_with_direction([0., -1.], 0.5) ftop = m.outer_faces_with_direction([0., 1.], 0.5) m.set_region(LEFT_RG, fleft) m.set_region(RIGHT_RG, fright) m.set_region(BOTTOM_RG, fbottom) m.set_region(TOP_RG, ftop) m.export_to_vtk("mesh.vtk") # Levelset definition: R1 = 2.5 R2 = 16 ytip = R1 xtip = np.sqrt(R2 * R2 - R1 * R1) ls1 = gf.LevelSet(m, 2, "y-%g*tanh(x/7.)" % R1, "x*x+y*y-%g" % (R2 * R2)) ls2 = gf.LevelSet(m, 2, "y+%g*tanh(x/7.)" % R1, "x*x+y*y-%g" % (R2 * R2)) mls = gf.MeshLevelSet(m) mls.add(ls1) mls.add(ls2) mls.adapt() # Basic mesh_fem without enrichment: mf_pre = gf.MeshFem(m) if (quad): mf_pre.set_fem(gf.Fem("FEM_QK(2,2)")) else: mf_pre.set_fem(gf.Fem("FEM_PK(2,2)")) # Definition of the enriched finite element method (MeshFemLevelSet): mfls = gf.MeshFem("levelset", mls, mf_pre)
also a good example of use of GetFEM++. $Id$ """ import numpy as np from scipy import rand, setdiff1d import getfem as gf eps = 1.0 / 40 ls_degree = 2 m = gf.Mesh('cartesian', np.arange(-.5, .5 + eps, eps), np.arange(-.5, .5 + eps, eps)) #m = gf.Mesh('triangles grid', np.arange(-.5,.5+eps,eps), np.arange(-.5,.5+eps,eps)) ls = gf.LevelSet(m, ls_degree) ls2 = gf.LevelSet(m, ls_degree, 'with_secondary') mf_ls = ls.mf() mf_ls2 = ls2.mf() P = mf_ls.basic_dof_nodes() x = P[0, :] y = P[1, :] #ULS = ((x + 0.25)**2 + (y - 0.4)**2) - 0.05**2 #ULS = min(ULS, ((x - 0.25)**2 + (y - 0.4)**2) - 0.05**2) ULS = 1000 * np.ones(x.shape) if True: for ix in range(0, 5):
This program is used to check that python-getfem is working. This is also a good example of use of python-getfem.. $Id$ """ import getfem as gf import numpy as np from scipy import rand eps = 1.0/10 m = gf.Mesh('regular_simplices', np.arange(-1,1+eps,eps), np.arange(-1,1+eps,eps), 'degree', 2, 'noised') #m = gf.Mesh('cartesian', np.arange(-1,1+eps,eps), np.arange(-1,1+eps,eps)) ls1 = gf.LevelSet(m, 2, 'y', 'x') #ls1 = gf.LevelSet(m, 2, 'sqr(x) + sqr(y) - sqr(0.7)', 'x-.4') #ls1 = gf.LevelSet(m, 2, 'x + y - 0.2') #, 'x-5') #ls1 = gf.LevelSet(m, 2, 'x + y - 0.2', 'x-5') #ls2 = gf.LevelSet(m, 2, '0.6*sqr(x) + sqr(y-0.1) - sqr(0.6)'); #ls3 = gf.LevelSet(m, 4, 'sqr(x) + sqr(y+.08) - sqr(0.05)'); ls2 = gf.LevelSet(m, 2, 'y+0.1', 'x') ls3 = gf.LevelSet(m, 2, 'y-0.1', 'x') mls = gf.MeshLevelSet(m) mls.add(ls1) if True: mls.sup(ls1) mls.add(ls1) mls.add(ls2)
m.set_region(DIRICHLET, m.outer_faces()) # Global functions for asymptotic enrichment: ck0 = gf.GlobalFunction('crack', 0) ck1 = gf.GlobalFunction('crack', 1) ck2 = gf.GlobalFunction('crack', 2) ck3 = gf.GlobalFunction('crack', 3) if variant == 1: # Cutoff enrichement coff = gf.GlobalFunction('cutoff', 2, 0.4, 0.01, 0.4) ckoff0 = ck0 * coff # gf.GlobalFunction('product',ck0,coff) ckoff1 = ck1 * coff ckoff2 = ck2 * coff ckoff3 = ck3 * coff # Levelset definition: ls = gf.LevelSet(m, 1, 'y', 'x') mls = gf.MeshLevelSet(m) mls.add(ls) if variant > 2: ls2 = gf.LevelSet(m, 1, 'x+0.125', 'abs(y)-0.375') mls.add(ls2) mls.adapt() # Basic mesh_fem without enrichment: mf_pre_u = gf.MeshFem(m) mf_pre_u.set_fem(gf.Fem('FEM_PK(2,1)')) # Definition of the enriched finite element method (MeshFemLevelSet): mfls_u = gf.MeshFem('levelset', mls, mf_pre_u)