-- Glasow Haskell 0.403 : FINITE ELEMENT PROGRAM V2 -- ********************************************************************** -- * * -- * FILE NAME : pre_assemble.hs DATE : 13-3-1991 * -- * * -- * CONTENTS : Computes the diagonal element address vector of global * -- * stiffness matrix. * -- * * -- * CHANGES : * -- * 1. Mon Mar 11 10:38:35 GMT 1991 * -- * Add function "diagadrrlt" for debug use. * -- ********************************************************************** module Pre_assemble( diagadr , diagadrrlt) where import Basics import Vector import DB_interface import Degrees diagadr :: (Array Int Int, Array Int Float) -> Vec Int diagadr s = v where v = makevec bound f bound = boundvec (bandvec_s) f i = if ( i == 1) then 1 else vecsub v (i-1) + vecsub bandvec_s i bandvec_s = bandvec s bandvec s = maxupdvec initial_value ( concat (map pre_assemble_s [1..(nelem s)])) where initial_value = makevec (ndgrs s) (\ i -> 0) pre_assemble_s = pre_assemble s pre_assemble s element = azip dgrs_list (map f dgrs_list) where f x = x - (head dgrs_list) + 1 dgrs_list = (dgrs_list_node nodel) ++ (dgrs_list_node noder) (nodel,noder) = getenlr s element dgrs_list_node node = filter (\x -> x /= 0) ( getndgr s node ) diagadrrlt :: (Array Int Int, Array Int Float) -> [Char] diagadrrlt s = "DIAGONAL ADDRESS VECTOR=\n" ++ displayvec (diagadr s)