1 -- Glasow Haskell 0.403 : FINITE ELEMENT PROGRAM V2 2 -- ********************************************************************** 3 -- * * 4 -- * FILE NAME : pre_assemble.hs DATE : 13-3-1991 * 5 -- * * 6 -- * CONTENTS : Computes the diagonal element address vector of global * 7 -- * stiffness matrix. * 8 -- * * 9 -- * CHANGES : * 10 -- * 1. Mon Mar 11 10:38:35 GMT 1991 * 11 -- * Add function "diagadrrlt" for debug use. * 12 -- ********************************************************************** 13 14 module Pre_assemble( diagadr , diagadrrlt) where 15 16 import Basics 17 import Vector 18 import DB_interface 19 import Degrees 20 21 diagadr :: (Array Int Int, Array Int Float) -> Vec Int 22 23 diagadr s = 24 v 25 where 26 v = makevec bound f 27 bound = boundvec (bandvec_s) 28 f i = 29 if ( i == 1) then 1 30 else vecsub v (i-1) + vecsub bandvec_s i 31 bandvec_s = bandvec s 32 33 bandvec s = 34 maxupdvec initial_value 35 ( concat (map pre_assemble_s [1..(nelem s)])) 36 where 37 initial_value = makevec (ndgrs s) (\ i -> 0) 38 pre_assemble_s = pre_assemble s 39 40 pre_assemble s element = 41 azip dgrs_list (map f dgrs_list) 42 where 43 f x = x - (head dgrs_list) + 1 44 dgrs_list = (dgrs_list_node nodel) ++ (dgrs_list_node noder) 45 (nodel,noder) = getenlr s element 46 dgrs_list_node node = filter (\x -> x /= 0) ( getndgr s node ) 47 48 49 diagadrrlt :: (Array Int Int, Array Int Float) -> [Char] 50 51 diagadrrlt s = 52 "DIAGONAL ADDRESS VECTOR=\n" ++ 53 displayvec (diagadr s)