コード例 #1
0
ファイル: run_generators.py プロジェクト: svn2github/Escript
 def test_hex_contact_3D_order2_onFace(self):
    file="hex_contact_3D_order2_onFace.msh"
    ms1=Brick(1,1,1,2,l2=0.5,useElementsOnFace=True)
    ms2=Brick(1,1,1,2,l2=0.5,useElementsOnFace=True)
    ms2.setX(ms2.getX()+[0,0,0.5])
    my_dom=JoinFaces([ms1,ms2],optimize=False)
    self.checker(my_dom,file)
コード例 #2
0
 def test_hex_contact_3D_order2_onFace(self):
     file = "hex_contact_3D_order2_onFace.msh"
     ms1 = Brick(1, 1, 1, 2, l2=0.5, useElementsOnFace=True)
     ms2 = Brick(1, 1, 1, 2, l2=0.5, useElementsOnFace=True)
     ms2.setX(ms2.getX() + [0, 0, 0.5])
     my_dom = JoinFaces([ms1, ms2], optimize=False)
     self.checker(my_dom, file)
コード例 #3
0
 def test_brickconstr(self):
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0)])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0), (1,1,1)], diracTags=[40])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0), (1,1,1)], diracTags=[40])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0), (1,1,1)], diracTags=["cows"])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0)], diracTags=["test"])
   z=Brick(4,4, diracPoints=[(0,0,0), (0.25,0.25, 0.25)], diracTags=[40,51])
   z=Brick(4,4, diracPoints=[(0.125,0.625,0), (0.5,1,0), (0.75, 0.25, 0.51), (0.89, 0.875,1)], diracTags=["A", "B", "A", "C"])
   v=interpolate(z.getX(), DiracDeltaFunctions(z))
   if mpisize==1:
     self.assertEqual(v.toListOfTuples(),[(0.0, 0.5, 0.0), (0.5, 1.0, 0.0), (0.75, 0.25, 1), (1.0, 0.75, 1.0)])
     self.assertEqual(v.getNumberOfDataPoints(), 4)
     self.assertEqual(inf(v[0]), 0)
     self.assertEqual(inf(v[1]), 0.25)
     self.assertEqual(Lsup(v[0]), 1)
     self.assertEqual(Lsup(v[1]), 1)
   v.setTaggedValue("A",(-10,0.5,-500))
   if mpisize==1:
     self.assertEqual(inf(v[0]), -10)
     self.assertEqual(inf(v[1]), 0.5)
     self.assertEqual(inf(v[2]),-500)
   v.setTaggedValue(500,(-100,-100, -100))     # non-existant tag
   if mpisize==1:
     self.assertEqual(inf(v[0]), -10)
     self.assertEqual(inf(v[1]), 0.5)
     self.assertEqual(z.showTagNames(), 'A, B, C, back, bottom, front, left, right, top')
   self.assertEqual(z.getTag("C"), 42)
コード例 #4
0
 def test_brickconstr(self):
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0)])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0), (1,1,1)], diracTags=[40])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0), (1,1,1)], diracTags=[40])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0,0), (1,1,1)], diracTags=["cows"])
   self.assertRaises(ValueError, Brick, 4,4, diracPoints=[(0,0)], diracTags=["test"])
   z=Brick(4,4, diracPoints=[(0,0,0), (0.25,0.25, 0.25)], diracTags=[40,51])
   z=Brick(4,4, diracPoints=[(0.125,0.625,0), (0.5,1,0), (0.75, 0.25, 0.51), (0.89, 0.875,1)], diracTags=["A", "B", "A", "C"])
   v=interpolate(z.getX(), DiracDeltaFunctions(z))
   if mpisize==1:
     self.assertEqual(v.toListOfTuples(),[(0.0, 0.5, 0.0), (0.5, 1.0, 0.0), (0.75, 0.25, 1), (1.0, 0.75, 1.0)])
     self.assertEqual(v.getNumberOfDataPoints(), 4)
     self.assertEqual(inf(v[0]), 0)
     self.assertEqual(inf(v[1]), 0.25)
     self.assertEqual(Lsup(v[0]), 1)
     self.assertEqual(Lsup(v[1]), 1)
   v.setTaggedValue("A",(-10,0.5,-500))
   if mpisize==1:
     self.assertEqual(inf(v[0]), -10)
     self.assertEqual(inf(v[1]), 0.5)
     self.assertEqual(inf(v[2]),-500)
   v.setTaggedValue(500,(-100,-100, -100))     # non-existant tag
   if mpisize==1:
     self.assertEqual(inf(v[0]), -10)
     self.assertEqual(inf(v[1]), 0.5)
     self.assertEqual(z.showTagNames(), 'A, B, C, back, bottom, front, left, right, top')
   self.assertEqual(z.getTag("C"), 42)
コード例 #5
0
 def setUp(self):
     self.order = 2
     d1 = Brick(n0=NE // 2, n1=NE, n2=NE, l0=0.5, order=2, useElementsOnFace=True)
     d2 = Brick(n0=NE // 2 + 1, n1=NE, n2=NE, l0=0.5, order=2, useElementsOnFace=True)
     d2.setX(d2.getX() + [0.5, 0.0, 0.0])
     if getMPISizeWorld() > 1:
         with self.assertRaises(NotImplementedError) as pkg:
             self.domain = JoinFaces([d1, d2], optimize=False)
         e = pkg.exception
         if FINLEY_MERGE_ERROR not in str(e):
             raise e
         raise unittest.SkipTest(FINLEY_MERGE_ERROR)
     else:
         self.domain = JoinFaces([d1, d2], optimize=False)
コード例 #6
0
 def setUp(self):
     self.order = 2
     d1 = Brick(n0=NE // 2,
                n1=NE,
                n2=NE,
                l0=0.5,
                order=2,
                useElementsOnFace=True)
     d2 = Brick(n0=NE // 2 + 1,
                n1=NE,
                n2=NE,
                l0=0.5,
                order=2,
                useElementsOnFace=True)
     d2.setX(d2.getX() + [0.5, 0., 0.])
     if getMPISizeWorld() > 1:
         with self.assertRaises(NotImplementedError) as pkg:
             self.domain = JoinFaces([d1, d2], optimize=False)
         e = pkg.exception
         if FINLEY_MERGE_ERROR not in str(e):
             raise e
         raise unittest.SkipTest(FINLEY_MERGE_ERROR)
     else:
         self.domain = JoinFaces([d1, d2], optimize=False)
コード例 #7
0
def getDomain():
    """
    this defines a dom as a brick of length and width l and hight h

      
    """
    global netotal

    v_p = {}
    for tag in sorted(rho_tab.keys()):
        v_p[tag] = sqrt((2 * mu_tab[tag] + lmbd_tab[tag]) / rho_tab[tag])
    v_p_ref = min(v_p.values())
    print(
        "velocities: bedrock = %s, sand = %s, water =%s, absorber =%s, reference =%s"
        % (v_p[bedrock], v_p[sand], v_p[water], v_p[absorber], v_p_ref))

    sections = {}
    sections["x"] = [
        d_absorber, x_sand, l_sand, l_x_water, l_sand,
        l - x_sand - 2 * l_sand - l_x_water, d_absorber
    ]
    sections["y"] = [
        d_absorber, y_sand, l_sand, l_y_water, l_sand,
        l - y_sand - 2 * l_sand - l_y_water, d_absorber
    ]
    sections["z"] = [d_absorber, h - h_water - h_sand, h_sand, h_water]
    if output:
        print("sections x = ", sections["x"])
        print("sections y = ", sections["y"])
        print("sections z = ", sections["z"])

    mats = [[
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
        [absorber, absorber, absorber, absorber, absorber, absorber, absorber]
    ],
            [[
                absorber, absorber, absorber, absorber, absorber, absorber,
                absorber
            ],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [
                 absorber, absorber, absorber, absorber, absorber, absorber,
                 absorber
             ]],
            [[
                absorber, absorber, absorber, absorber, absorber, absorber,
                absorber
            ],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [absorber, bedrock, sand, sand, sand, bedrock, absorber],
             [absorber, bedrock, sand, sand, sand, bedrock, absorber],
             [absorber, bedrock, sand, sand, sand, bedrock, absorber],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [
                 absorber, absorber, absorber, absorber, absorber, absorber,
                 absorber
             ]],
            [[
                absorber, absorber, absorber, absorber, absorber, absorber,
                absorber
            ],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [absorber, bedrock, sand, sand, sand, bedrock, absorber],
             [absorber, bedrock, sand, water, sand, bedrock, absorber],
             [absorber, bedrock, sand, sand, sand, bedrock, absorber],
             [absorber, bedrock, bedrock, bedrock, bedrock, bedrock, absorber],
             [
                 absorber, absorber, absorber, absorber, absorber, absorber,
                 absorber
             ]]]

    num_elem = {}
    for d in sections:
        num_elem[d] = []
        for i in range(len(sections[d])):
            if d == "x":
                v_p_min = v_p[mats[0][0][i]]
                for q in range(len(sections["y"])):
                    for r in range(len(sections["z"])):
                        v_p_min = min(v_p[mats[r][q][i]], v_p_min)
            elif d == "y":
                v_p_min = v_p[mats[0][i][0]]
                for q in range(len(sections["x"])):
                    for r in range(len(sections["z"])):
                        v_p_min = min(v_p[mats[r][i][q]], v_p_min)
            elif d == "z":
                v_p_min = v_p[mats[i][0][0]]
                for q in range(len(sections["x"])):
                    for r in range(len(sections["y"])):
                        v_p_min = min(v_p[mats[i][r][q]], v_p_min)
            num_elem[d].append(
                max(1,
                    int(sections[d][i] * v_p_ref / v_p_min / resolution +
                        0.5)))

    ne_x = sum(num_elem["x"])
    ne_y = sum(num_elem["y"])
    ne_z = sum(num_elem["z"])
    netotal = ne_x * ne_y * ne_z
    if output:
        print("grid : %s x %s x %s (%s elements)" %
              (ne_x, ne_y, ne_z, netotal))
    dom = Brick(ne_x,
                ne_y,
                ne_z,
                l0=o * ne_x,
                l1=o * ne_y,
                l2=o * ne_z,
                order=o)
    x_old = dom.getX()
    x_new = 0

    for d in sections:
        if d == "x":
            i = 0
            f = [1, 0, 0]
        if d == "y":
            i = 1
            f = [0, 1, 0]
        if d == "z":
            i = 2
            f = [0, 0, 1]
        x = x_old[i]

        p = origin[d]
        ne = 0
        s = 0.

        for i in range(len(sections[d]) - 1):
            msk = whereNonPositive(x - o * ne + 0.5)
            s = s * msk + (sections[d][i] / (o * num_elem[d][i]) *
                           (x - o * ne) + p) * (1. - msk)
            ne += num_elem[d][i]
            p += sections[d][i]
        x_new = x_new + s * f
    dom.setX(x_new)

    fs = Function(dom)
    x = Function(dom).getX()
    x0 = x[0]
    x1 = x[1]
    x2 = x[2]
    p_z = origin["z"]
    for i in range(len(mats)):
        f_z = wherePositive(x2 - p_z) * wherePositive(x2 - p_z +
                                                      sections["z"][i])
        p_y = origin["y"]
        for j in range(len(mats[i])):
            f_y = wherePositive(x1 - p_y) * wherePositive(x1 - p_z +
                                                          sections["y"][j])
            p_x = origin["x"]
            for k in range(len(mats[i][j])):
                f_x = wherePositive(x0 - p_x) * wherePositive(x0 - p_x +
                                                              sections["x"][k])
                fs.setTags(mats[i][j][k], f_x * f_y * f_z)
                p_x += sections["x"][k]
            p_y += sections["y"][j]
        p_z += sections["z"][i]
    return dom
コード例 #8
0
# number of Gauss points
packNo = range(0, numg, 8)

prob = MultiScale(domain=mydomain, ng=numg, useMPI=True,
                  rtol=1e-2)  # mpi is activated

disp = Vector(0., Solution(mydomain))

t = 0
stress = prob.getCurrentStress()
proj = Projector(mydomain)
sig = proj(stress)
sig_bounda = interpolate(sig, FunctionOnBoundary(mydomain))
traction = matrix_mult(sig_bounda,
                       mydomain.getNormal())  # traction on boundary
x = mydomain.getX()
bx = FunctionOnBoundary(mydomain).getX()
topSurf = whereZero(bx[2] - lz)
tractTop = traction * topSurf  # traction on top surface
forceTop = integrate(tractTop,
                     where=FunctionOnBoundary(mydomain))  # force on top
areaTop = integrate(topSurf, where=FunctionOnBoundary(mydomain))
fout = file('./result/resultant.dat', 'w')
fout.write('0 ' + str(forceTop[2]) + ' ' + str(areaTop) + '\n')

# Dirichlet BC, rough loading ends
Dbc = whereZero(x[2]) * [1, 1, 1] + whereZero(x[2] - lz) * [1, 1, 1]
Vbc = whereZero(x[2]) * [0, 0, 0] + whereZero(x[2] - lz) * [0, 0, vel]
# Neumann BC, constant lateral confining
Nbc = whereZero(bx[0]) * [-confining, 0, 0] + whereZero(bx[0] - sup(bx[0])) * [
    confining, 0, 0
コード例 #9
0
ファイル: triaxialRough.py プロジェクト: yade/trunk
mydomain = Brick(l0=lx,l1=ly,l2=lz,n0=nx,n1=ny,n2=nz,order=2,integrationOrder=2) # 20-noded,8-Gauss hexahedral element
dim = 3; k = kronecker(mydomain)
numg = 8*nx*ny*nz; # number of Gauss points
packNo=list(range(0,numg,8))

prob = MultiScale(domain=mydomain,ng=numg,useMPI=True,rtol=1e-2) # mpi is activated

disp = Vector(0.,Solution(mydomain))

t=0
stress = prob.getCurrentStress()
proj = Projector(mydomain)
sig = proj(stress)
sig_bounda = interpolate(sig,FunctionOnBoundary(mydomain))
traction = matrix_mult(sig_bounda,mydomain.getNormal()) # traction on boundary
x = mydomain.getX()
bx = FunctionOnBoundary(mydomain).getX()
topSurf = whereZero(bx[2]-lz)
tractTop = traction*topSurf # traction on top surface
forceTop = integrate(tractTop,where=FunctionOnBoundary(mydomain)) # force on top
areaTop = integrate(topSurf,where=FunctionOnBoundary(mydomain))
fout=file('./result/resultant.dat','w')
fout.write('0 '+str(forceTop[2])+' '+str(areaTop)+'\n')

# Dirichlet BC, rough loading ends
Dbc = whereZero(x[2])*[1,1,1]+whereZero(x[2]-lz)*[1,1,1]
Vbc = whereZero(x[2])*[0,0,0]+whereZero(x[2]-lz)*[0,0,vel]
# Neumann BC, constant lateral confining
Nbc = whereZero(bx[0])*[-confining,0,0]+whereZero(bx[0]-sup(bx[0]))*[confining,0,0]+whereZero(bx[1])*[0,-confining,0]+whereZero(bx[1]-sup(bx[1]))*[0,confining,0]

time_start = time.time()
コード例 #10
0
print("domain dimensions = [%dm x %dm x %dm]"%(Lx,Ly,Lz))
print("grid = [%d x %d x %d]"%(NEx, NEy, NEz))

# Create domain
domain=Brick(n0=NEx, n1=NEy, n2=NEz, l0=Lx, l1=Ly, l2=Lz)

# Define model using class MagneticModel3D
# Assumes zero Dirichlet BC at bottom left front corner
model=MagneticModel3D(domain)

# Define susceptibility 
Z0=100           # vertical position of circle below transect [m]
c=[Lx/2.,Ly/2., H0-Z0] # circle center
R=20.            # radius

x=domain.getX()
d=length(x-c)
kC=ksi*whereNegative(d-R)    # 0 for d>R and 1 for d<R
model.setSusceptibility(kC)

# Set background magnetic field [Bx, By]
B_h=[-b_hx, -b_hy, -b_hz]
model.setBackgroundMagneticField(B_h)

# Solve for magnetic field anomaly
B_a=model.getMagneticFieldAnomaly()
print(B_a)
b_a=length(B_a+B_h)-length(np.array(B_h))

#B_h=[0, -b_h]
#model.setBackgroundMagneticField(B_h)
コード例 #11
0
ファイル: seismic_wave.py プロジェクト: svn2github/Escript
def getDomain():
    """
    this defines a dom as a brick of length and width l and hight h

      
    """
    global netotal
    
    v_p={}
    for tag in sorted(rho_tab.keys()):
       v_p[tag]=sqrt((2*mu_tab[tag]+lmbd_tab[tag])/rho_tab[tag])
    v_p_ref=min(v_p.values())
    print("velocities: bedrock = %s, sand = %s, water =%s, absorber =%s, reference =%s"%(v_p[bedrock],v_p[sand],v_p[water],v_p[absorber],v_p_ref))

    sections={}
    sections["x"]=[d_absorber, x_sand, l_sand, l_x_water, l_sand, l-x_sand-2*l_sand-l_x_water, d_absorber]
    sections["y"]=[d_absorber, y_sand, l_sand, l_y_water, l_sand, l-y_sand-2*l_sand-l_y_water, d_absorber]
    sections["z"]=[d_absorber,h-h_water-h_sand,h_sand,h_water]
    if output:
      print("sections x = ",sections["x"])
      print("sections y = ",sections["y"])
      print("sections z = ",sections["z"])

    mats= [ 
            [ [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber] ],

            [ [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber] ],

            [ [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, bedrock , sand    , sand    , sand    , bedrock , absorber],
              [absorber, bedrock , sand    , sand    , sand    , bedrock , absorber],
              [absorber, bedrock , sand    , sand    , sand    , bedrock , absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber] ],

            [ [absorber, absorber, absorber, absorber, absorber, absorber, absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, bedrock , sand    , sand    , sand    , bedrock , absorber],
              [absorber, bedrock , sand    , water   , sand    , bedrock , absorber],
              [absorber, bedrock , sand    , sand    , sand    , bedrock , absorber],
              [absorber, bedrock , bedrock , bedrock , bedrock , bedrock , absorber],
              [absorber, absorber, absorber, absorber, absorber, absorber, absorber] ] ]
    
    num_elem={}
    for d in sections:
       num_elem[d]=[]
       for i in range(len(sections[d])):
           if d=="x":
              v_p_min=v_p[mats[0][0][i]]
              for q in range(len(sections["y"])):
                 for r in range(len(sections["z"])):
                    v_p_min=min(v_p[mats[r][q][i]],v_p_min)
           elif d=="y":
              v_p_min=v_p[mats[0][i][0]]
              for q in range(len(sections["x"])):
                 for r in range(len(sections["z"])):
                    v_p_min=min(v_p[mats[r][i][q]],v_p_min)
           elif d=="z":
              v_p_min=v_p[mats[i][0][0]]
              for q in range(len(sections["x"])):
                 for r in range(len(sections["y"])):
                    v_p_min=min(v_p[mats[i][r][q]],v_p_min)
           num_elem[d].append(max(1,int(sections[d][i] * v_p_ref/v_p_min /resolution+0.5)))
       
    ne_x=sum(num_elem["x"])
    ne_y=sum(num_elem["y"])
    ne_z=sum(num_elem["z"])
    netotal=ne_x*ne_y*ne_z
    if output: print("grid : %s x %s x %s (%s elements)"%(ne_x,ne_y,ne_z,netotal))
    dom=Brick(ne_x,ne_y,ne_z,l0=o*ne_x,l1=o*ne_y,l2=o*ne_z,order=o)
    x_old=dom.getX()
    x_new=0

    for d in sections:
        if d=="x": 
            i=0
            f=[1,0,0]
        if d=="y": 
            i=1
            f=[0,1,0]
        if d=="z": 
            i=2
            f=[0,0,1]
        x=x_old[i]

        p=origin[d]
        ne=0
        s=0.
 
        for i in range(len(sections[d])-1):
            msk=whereNonPositive(x-o*ne+0.5)
            s=s*msk + (sections[d][i]/(o*num_elem[d][i])*(x-o*ne)+p)*(1.-msk)
            ne+=num_elem[d][i]
            p+=sections[d][i]
        x_new=x_new + s * f
    dom.setX(x_new)

    fs=Function(dom)
    x=Function(dom).getX()
    x0=x[0]
    x1=x[1]
    x2=x[2]
    p_z=origin["z"]
    for i in range(len(mats)):
       f_z=wherePositive(x2-p_z)*wherePositive(x2-p_z+sections["z"][i])
       p_y=origin["y"]
       for j in range(len(mats[i])):
         f_y=wherePositive(x1-p_y)*wherePositive(x1-p_z+sections["y"][j])
         p_x=origin["x"]
         for k in range(len(mats[i][j])):
             f_x=wherePositive(x0-p_x)*wherePositive(x0-p_x+sections["x"][k]) 
             fs.setTags(mats[i][j][k],f_x*f_y*f_z)
             p_x+=sections["x"][k]
         p_y+=sections["y"][j]
       p_z+=sections["z"][i]
    return dom