def test_print_as_full(): xvar = sympy.var('xvar') yvar = sympy.var('yvar') res1 = ''' # m # m_num=2 m[0, 0] += 1 m[0, 1] += 2*xvar + (yvar*yvar*yvar) ''' res1 = res1.strip() m = sympy.Matrix([[1, 2 * xvar + yvar**3]]) assert mprint_as_dense(m, 'm') == res1 res2 = ''' # subs # yvar = xvar # m # m_num=2 m[0, 0] += 1 m[0, 1] += (yvar*yvar*yvar) + 2*yvar ''' res2 = res2.strip() assert mprint_as_dense(m, 'm', subs={xvar: yvar}) == res2
le2 * Matrix([nx2 * su2, ny2 * sv2, ny2 * su2 + nx2 * sv2]) + le3 * Matrix([nx3 * su3, ny3 * sv3, ny3 * su3 + nx3 * sv3]) + le4 * Matrix([nx4 * su4, ny4 * sv4, ny4 * su4 + nx4 * sv4])) # bending Bb = 1 / Ac * ( le1 * Matrix([nx1 * sphix1, ny1 * sphiy1, ny1 * sphix1 + nx1 * sphiy1]) + le2 * Matrix([nx2 * sphix2, ny2 * sphiy2, ny2 * sphix2 + nx2 * sphiy2]) + le3 * Matrix([nx3 * sphix3, ny3 * sphiy3, ny3 * sphix3 + nx3 * sphiy3]) + le4 * Matrix([nx4 * sphix4, ny4 * sphiy4, ny4 * sphix4 + nx4 * sphiy4])) K = Ac * (Bm.transpose() * A * Bm + Bm.transpose() * B * Bb + Bb.transpose() * B * Bm + Bb.transpose() * D * Bb) mprint_as_dense(K, 'k0', dofpernode=5) # transverse shear terms sympy.var('a1, b1, c1, d1, Ac') Tria1N1 = 1 / (2 * Ac) * Matrix([[0, 0, b1 - d1, Ac, 0], [0, 0, c1 - a1, 0, Ac]]) Tria1N2 = 1 / (2 * Ac) * Matrix([[0, 0, d1, a1 * d1 / 2, b1 * d1 / 2], [0, 0, -c1, -a1 * c1 / 2, -b1 * c1 / 2]]) Tria1N3 = 1 / (2 * Ac) * Matrix([[0, 0, -b1, -b1 * c1 / 2, -b1 * d1 / 2], [0, 0, a1, a1 * c1 / 2, a1 * d1 / 2]]) Bs = Matrix([Tria1N1.T, Tria1N2.T, Tria1N3.T]).T
le2 * Matrix([nx2 * su2, ny2 * sv2, ny2 * su2 + nx2 * sv2]) + le3 * Matrix([nx3 * su3, ny3 * sv3, ny3 * su3 + nx3 * sv3]) + le4 * Matrix([nx4 * su4, ny4 * sv4, ny4 * su4 + nx4 * sv4])) # bending Bb = 1 / Ac * ( le1 * Matrix([nx1 * sphix1, ny1 * sphiy1, ny1 * sphix1 + nx1 * sphiy1]) + le2 * Matrix([nx2 * sphix2, ny2 * sphiy2, ny2 * sphix2 + nx2 * sphiy2]) + le3 * Matrix([nx3 * sphix3, ny3 * sphiy3, ny3 * sphix3 + nx3 * sphiy3]) + le4 * Matrix([nx4 * sphix4, ny4 * sphiy4, ny4 * sphix4 + nx4 * sphiy4])) K = Ac * (Bm.transpose() * A * Bm + Bm.transpose() * B * Bb + Bb.transpose() * B * Bm + Bb.transpose() * D * Bb) mprint_as_dense(K, 'k0', dofpernode=5) # transverse shear terms sympy.var('a1, b1, c1, d1, Ac1') sympy.var('a2, b2, c2, d2, Ac2') # Tria1: mid1 -> node1 -> node2 # Tria2: node1 -> mid2 -> node2 #mid 1 Tria1Mid1 = 1 / (2 * Ac1) * Matrix([[0, 0, b1 - d1, Ac1, 0], [0, 0, c1 - a1, 0, Ac1]]) #node 1 Tria1N1 = 1 / (2 * Ac1) * Matrix([[0, 0, d1, a1 * d1 / 2, b1 * d1 / 2],
# ceyy = v # membrane # cgxy = u + v # membrane # ckxx = phix # bending # ckyy = phiy # bending # ckxy = phix + phiy # bending # transverse shear treated differently, by discrete shear gap (DSG) # cgxz = w,x + phix # membrane transverse shear # cgyz = w,y + phiy # membrane transverse shear # exx eyy gxy kxx kyy kxy gxz gyz (8 strain components) # dof = 5 for FSDT (u, v, w, phix, phiy) # Bm, Bb matrices are 8 strain components x (N x dof) # MATRIX FORM - membrane ZERO = Matrix([[0] * su1.shape[1]]) Bm = 1 / Ac * (le1 * Matrix([ nx1 * su1, ny1 * sv1, ny1 * su1 + nx1 * sv1, ZERO, ZERO, ZERO, ZERO, ZERO ]) + le2 * Matrix([ nx2 * su2, ny2 * sv2, ny2 * su2 + nx2 * sv2, ZERO, ZERO, ZERO, ZERO, ZERO ]) + le3 * Matrix([ nx3 * su3, ny3 * sv3, ny3 * su3 + nx3 * sv3, ZERO, ZERO, ZERO, ZERO, ZERO ]) + le4 * Matrix([ nx4 * su4, ny4 * sv4, ny4 * su4 + nx4 * sv4, ZERO, ZERO, ZERO, ZERO, ZERO ])) K = Ac * Bm.transpose() * A * Bm mprint_as_dense(sympy.simplify(K), 'k0', dofpernode=5)