Exemplo n.º 1
0
def main():

    # Comprobacipn del algoritmo de traslacion y rotacion de elementos
    print "---------------------------------------------------------\n"
    pi = np.array([0.0, 0.0, 0.0])
    pj = np.array([2.0, 0.0, 0.0])
    pk = np.array([1.0, 1.0, 0.0])
    Pi = np.array([0.0, 0.0, 0.0])
    Pj = np.array([2.0, 0.0, 0.0])
    Pk = np.array([1.0, 2.0, 0.0])
    print "Puntos del elemento inicial:", pi, pj, pk
    print "Puntos del elemento deformado:", Pi, Pj, Pk
    print "Fuerzas resultantes t: \n", t.fuerzas(pi, pj, pk, Pi, Pj, Pk)
    print "Fuerzas resultantes r: \n", r.rotacion(pi, pj, pk, Pi, Pj, Pk)
    print "---------------------------------------------------------\n"
Exemplo n.º 2
0
def rotacion(pi,pj,pk,Pi,Pj,Pk):
    # Coordenadas iniciales de los tres nodos respecto al sistema 
    # global de coordenadas i1, i2, i3
    xi = pi[0]
    yi = pi[1]
    zi = pi[2]
    
    xj = pj[0]
    yj = pj[1]
    zj = pj[2]
    
    xk = pk[0]
    yk = pk[1]
    zk = pk[2]
    
    # Coordenadas del elemento deformado de los tres nodos 
    # respecto al sistema global de coordenadas i1, i2, i3
    Xi = Pi[0]
    Yi = Pi[1]
    Zi = Pi[2]
    
    Xj = Pj[0]
    Yj = Pj[1]
    Zj = Pj[2]
    
    Xk = Pk[0]
    Yk = Pk[1]
    Zk = Pk[2]
    
    # Unit vectors Local undeformed local coordinate axis 
    m1 = np.sqrt((xj-xi)**2 + (yj-yi)**2 + (zj-zi)**2)
    e1 = np.array([(xj-xi), (yj-yi), (zj-zi)])/m1
    m2 = np.sqrt((xk-xi)**2 + (yk-yi)**2 + (zk-zi)**2)
    e4 = np.array([(xk-xi), (yk-yi), (zk-zi)])/m2
    e3 = np.cross(e1,e4)
    m3 = la.norm(e3)
    e3 = np.cross(e1,e4)/la.norm(e3)
    e2 = np.cross(e3,e1)
    e = np.vstack((e1,e2))
    e = np.vstack((e,e3))
    
    # Matriz de rotacion para la configuracion NO deformada [r]
    d1 = (xj-xi)/m1
    d2 = (yj-yi)/m1
    d3 = (zj-zi)/m1
    e1 = (xk-xi)/m2
    e2 = (yk-yi)/m2
    e3 = (zk-zi)/m2
    f1 = (d2*e3-d3*e2)/m3
    f2 = (d3*e1-d1*e3)/m3
    f3 = (d1*e2-d2*e1)/m3
    g1 = f2*d3 - f3*d2
    g2 = f3*d1 - f1*d3
    g3 = f1*d2 - f2*d1
    r = np.array([[d1, d2, d3],[g1, g2, g3],[f1, f2, f3]])
    
    
    # Unit vectors Local deformed coordinate axis
    M1 = np.sqrt((Xj-Xi)**2 + (Yj-Yi)**2 + (Zj-Zi)**2)
    E1 = np.array([(Xj-Xi), (Yj-Yi), (Zj-Zi)])/M1
    M2 = np.sqrt((Xk-Xi)**2 + (Yk-Yi)**2 + (Zk-Zi)**2)
    E4 = np.array([(Xk-Xi), (Yk-Yi), (Zk-Zi)])/M2
    E3 = np.cross(E1,E4)
    M3 = la.norm(E3)
    E3 = np.cross(E1,E4)/la.norm(E3)
    E2 = np.cross(E3,E1)
    E = np.vstack((E1,E2))
    E = np.vstack((E,E3))
    
    # Matriz de rotacion para la configuracion deformada [R]
    d1 = (Xj-Xi)/M1
    d2 = (Yj-Yi)/M1
    d3 = (Zj-Zi)/M1
    e1 = (Xk-Xi)/M2
    e2 = (Yk-Yi)/M2
    e3 = (Zk-Zi)/M2
    f1 = (d2*e3-d3*e2)/M3
    f2 = (d3*e1-d1*e3)/M3
    f3 = (d1*e2-d2*e1)/M3
    g1 = f2*d3 - f3*d2
    g2 = f3*d1 - f1*d3
    g3 = f1*d2 - f2*d1
    R = np.array([[d1, d2, d3],[g1, g2, g3],[f1, f2, f3]])
    
    # Vectores posicion de los nodos en coordenadas locales estado deformado
    # tiene origen en el nodo i deformado 
    Xil = 0.0
    Yil = 0.0
    Zil = 0.0
    Xjl = Xj - Xi
    Yjl = Yj - Yi
    Zjl = Zj - Zi
    Xkl = Xk - Xi
    Ykl = Yk - Yi
    Zkl = Zk - Zi
    
    # Transformar cada coordenada local del elemento deformado
    # a la base comun i,j,k 
    Pi = np.dot(R, np.array([Xil, Yil, Zil]))
    Pj = np.dot(R, np.array([Xjl, Yjl, Zjl]))
    Pk = np.dot(R, np.array([Xkl, Ykl, Zkl]))    
    
    # Vectores posicion de los nodos en coordenadas locales estado NO deformado
    # tiene origen en el nodo i NO deformado 
    xil = 0.0
    yil = 0.0
    zil = 0.0
    xjl = xj - xi
    yjl = yj - yi 
    zjl = zj - zi
    xkl = xk - xi
    ykl = yk - yi
    zkl = zk - zi
    
    # Transformar cada coordenada local del elemento sin deformar a la base i,j,k 
    pi = np.dot(r, np.array([xil, yil, zil]))
    pj = np.dot(r, np.array([xjl, yjl, zjl]))
    pk = np.dot(r, np.array([xkl, ykl, zkl]))

    
    # Vectores de desplazamientos en el plano
    di = Pi - pi
    dj = Pj - pj
    dk = Pk - pk
    
    # Llama rutina para calcular las fuerzas en el elemento deformado 
    F = t.fuerzas(pi,pj,pk,Pi,Pj,Pk)
    
    # Transformar la fuerza de cada nodo a las coordenadas locales
    Fil = np.dot(np.transpose(R),F[0,:])
    Fjl = np.dot(np.transpose(R),F[1,:])
    Fkl = np.dot(np.transpose(R),F[2,:])
    F = np.vstack((Fil,Fjl))
    F = np.vstack((F,Fkl))
    return F