-- Glasow Haskell 0.403 : FINITE ELEMENT PROGRAM V2
-- **********************************************************************
-- * *
-- * FILE NAME : displacement.hs DATE : 13-3-1991 *
-- * *
-- * CONTENTS : Compute nodal displacement of the structure. *
-- * *
-- **********************************************************************
module Displacement ( uvw, getnuvw ) where
import Basics
import Vector
import Matrix
import VBmatrix
import VBlldecomp
import DB_interface
import Degrees
import Pre_assemble
import Assemble_stiffness
import Assemble_loadvec
uvw :: (Array Int Int, Array Int Float) -> Vec Float
getnuvw :: (Array Int Int, Array Int Float) -> Int ->
Vec Float -> (Float, Float, Float)
t_Ub s = vbllsolution (kdd s) (loadvec s)
uvw s =
incrvec initial_value index_value_assoc
where
initial_value = makevec ( 3 * (nnode s) ) ( \ i -> 0.0 )
index_value_assoc = concat (map f_s [1..(nnode s)])
f_s = f s tUb
tUb = t_Ub s
f s tUb node =
azip [l,l+1,l+2] (map ff dgrs)
where
l = 3 * (node - 1) + 1
dgrs = getndgr s node
ff i = if ( i == 0 ) then 0.0 else vecsub tUb i
getnuvw s node uvw =
(u,v,theta)
where
u = vecsub uvw index
v = vecsub uvw (index+1)
theta = vecsub uvw (index+2)
index = 3 * (node - 1) + 1
|