def _beami_stiffness(prop: Union[PBAR, PBARL, PBEAM, PBEAML], mat: MAT1, L: float, Iy: float, Iz: float, k1: Optional[float] = None, k2: Optional[float] = None): """gets the ith Euler-Bernoulli beam stiffness""" E = mat.E() G = mat.G() A = prop.Area() J = prop.J() kaxial = E * A / L ktorsion = G * J / L L2 = L * L if k1 is not None: phiy = 12. * E * Iy / (k1 * G * A * L2) if k2 is not None: phiz = 12. * E * Iy / (k2 * G * A * L2) phiy = 1.0 phiz = 1.0 ky = E * Iy / (L * phiy) kz = E * Iz / (L * phiz) K = np.zeros((12, 12), dtype='float64') # axial K[0, 0] = K[6, 6] = kaxial K[6, 0] = K[0, 6] = -kaxial # torsion K[3, 3] = K[9, 9] = ktorsion K[9, 3] = K[3, 9] = -ktorsion #Fx - 0, 6 #Fy - 1, 7** #Fz - 2, 8 #Mx - 3, 9 #My - 4, 10 #Mz - 5, 11** # bending z (Fy/1/7, Mz/5/11) # 1 5 7 11 # 1 [12 & 6L & -12 & 6L # 5 [6L & 4L^2 & -6L & 2L^2 # 7 [-12 &-6L & 12 & -6L # 11 [6L & 2L^2 & -6L & 4L^2 K[1, 1] = K[7, 7] = 12. * kz K[1, 7] = K[1, 7] = -12. * kz K[1, 5] = K[5, 1] = K[11, 1] = K[1, 11] = 6. * L * kz K[5, 7] = K[7, 5] = K[7, 11] = K[11, 7] = -6. * L * kz K[5, 11] = K[11, 5] = 2. * L2 * kz * (2 - phiz) K[5, 5] = K[11, 11] = 4. * L2 * kz * (4 + phiz) #Fx - 0, 6 #Fy - 1, 7 #Fz - 2, 8** #Mx - 3, 9 #My - 4, 10** #Mz - 5, 11 # bending y (Fz/2/8, My/4/10) # 2 4 8 10 # 2 [12 & 6L & -12 & 6L # 4 [6L & 4L^2 & -6L & 2L^2 # 8 [-12 &-6L & 12 & -6L # 10 [6L & 2L^2 & -6L & 4L^2 K[2, 2] = K[8, 8] = 12. * ky K[2, 8] = K[2, 8] = -12. * ky K[2, 4] = K[4, 2] = K[10, 2] = K[2, 10] = 6. * L * ky K[4, 8] = K[8, 4] = K[8, 10] = K[10, 8] = -6. * L * ky K[4, 10] = K[10, 4] = 2. * L * L * ky * (2. - phiy) K[4, 4] = K[10, 10] = 4. * L * L * ky * (4. + phiy) return K