-- Glasow Haskell 0.403 : FINITE ELEMENT PROGRAM V2
-- **********************************************************************
-- * *
-- * FILE NAME : elemstif.hs DATE : 13-3-1991 *
-- * *
-- * CONTENTS : Computes element stiffness matrix. *
-- * *
-- **********************************************************************
-- Two dimensional Beam Element:
--
-- Left Node nl (xl,yl)
-- Right Node nr (xr,yr)
-- Material Property Parameter (ea,ei)
--
--
-- Ke = [ T * K11 * T~ T * K12 * T~ ]
-- [ T * K21 * T~ T * K22 * T~ ]
--
-- [ cos a -sin a 0 ]
-- T = [ sin a cos a 0 ]
-- [ 0 0 1 ]
--
-- [ ea/l 0 0 ]
-- K11= [ 0 12ei/l"3 6ei/l"2 ]
-- [ 0 6ei/l"2 4ei/l ]
--
-- [ -ea/l 0 0 ]
-- K12= [ 0 -12ei/l"3 6ei/l"2 ]
-- [ 0 -6ei/l"2 2ei/l ]
--
-- K21= K12~
--
-- [ ea/l 0 0 ]
-- K22= [ 0 12ei/l"3 -6ei/l"2 ]
-- [ 0 -6ei/l"2 4ei/l ]
--
-- where
-- l = length of the beam element
-- sin a = (yr-yl) / l
-- cos a = (xr-xl) / l
module Elemstif( beam2d ) where
import Basics
import Vector
import Matrix
import DB_interface
beam2d :: (Array Int Int, Array Int Float) -> Int -> Mat Float
beam2d str element =
makemat (6,6)
( \ (i,j) ->
if ( i==1 && j==1 ) || ( i==4 && j==4 ) then b1
else if ( i==2 && j==1 ) || ( i==5 && j==4 ) ||
( i==1 && j==2 ) || ( i==4 && j==5 ) then b2
else if ( i==2 && j==2 ) || ( i==5 && j==5 ) then b3
else if ( i==1 && j==4 ) || ( i==4 && j==1 ) then -b1
else if ( i==2 && j==4 ) || ( i==5 && j==1 ) ||
( i==1 && j==5 ) || ( i==4 && j==2 ) then -b2
else if ( i==2 && j==5 ) || ( i==5 && j==2 ) then -b3
else 0.0 )
where
a1 = ea / l
b1 = a1 * c * c
b2 = a1 * c * s
b3 = a1 * s * s
dx = xr - xl
dy = yr - yl
l = sqrt (dx*dx + dy*dy)
c = dx / l
s = dy / l
(ea,ei) = getmpro str (getemat str element)
(nl,nr) = getenlr str element
(xl,yl) = getnxy str nl
(xr,yr) = getnxy str nr
|