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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
  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):
Ejemplo n.º 4
0
  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)
Ejemplo n.º 5
0
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)