Exemplo n.º 1
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)
Exemplo n.º 2
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
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