1 -- Glasow Haskell 0.403 : FINITE ELEMENT PROGRAM V2 2 -- ********************************************************************** 3 -- * * 4 -- * FILE NAME : elemforce.hs DATE : 13-3-1991 * 5 -- * * 6 -- * CONTENTS : Computes element internal forces(only 2D bar element). * 7 -- * * 8 -- ********************************************************************** 9 10 module Elemforce ( forces, getefrc ) where 11 12 import Basics 13 import Vector 14 import DB_interface 15 import Displacement 16 17 forces :: (Array Int Int, Array Int Float) -> 18 Vec Float -> Vec Float 19 -- The vector which stores the internal forces of all elements 20 21 getefrc :: (Array Int Int, Array Int Float) -> Int -> 22 Vec Float -> Float 23 -- Return the internal force of given element 24 25 forces db uvw = 26 makevec (nelem db) force_2d_bar_s 27 where 28 force_2d_bar_s = force_2d_bar db uvw 29 30 getefrc db element frc = 31 vecsub frc element 32 33 force_2d_bar db uvw element = 34 (ea / length) * ( (ur-ul)*c + (vr-vl)*s ) 35 where 36 (nodel,noder) = getenlr db element 37 (ea,ei) = getmpro db ( getemat db element) 38 (xl,yl) = getnxy db nodel 39 (xr,yr) = getnxy db noder 40 c = det_x / length 41 s = det_y / length 42 det_x = xr - xl 43 det_y = yr - yl 44 length = sqrt (det_x * det_x + det_y * det_y) 45 (ul,vl,thetal) = getnuvw db nodel uvw 46 (ur,vr,thetar) = getnuvw db noder uvw 47 48