1 -- Glasow Haskell 0.403 : FINITE ELEMENT PROGRAM V2 2 -- ********************************************************************** 3 -- * * 4 -- * FILE NAME : db_interface.hs DATE : 13-3-1991 * 5 -- * * 6 -- * CONTENTS : The data base interface functions. * 7 -- * * 8 -- ********************************************************************** 9 10 module DB_interface(nnode, nmats, getnxy, getnbc, getmpro, 11 nelem, nplds, getenlr, getemat, getpld) where 12 13 import Array 14 import Database 15 16 nnode, nelem, nmats, nplds :: (Array Int Int, Array Int Float) -> Int 17 18 nnode (idb, rdb) = idb ! 0 19 nelem (idb, rdb) = idb ! 1 20 nmats (idb, rdb) = idb ! 2 21 nplds (idb, rdb) = idb ! 3 22 23 getnxy :: (Array Int Int, Array Int Float) -> Int -> (Float, Float) 24 getnxy (idb, rdb) node 25 = ( x, y ) 26 where 27 x = rdb ! index 28 y = rdb ! (index + 1) 29 index = (node - 1) * 2 30 31 getnbc :: (Array Int Int, Array Int Float) -> Int -> Int 32 getnbc (idb, rdb) node 33 = idb ! ( 3 + node ) 34 35 getmpro :: (Array Int Int, Array Int Float) -> Int -> (Float, Float) 36 getmpro (idb, rdb) material 37 = (ea,ei) 38 where 39 ea = rdb ! index 40 ei = rdb ! (index + 1) 41 index = (nnode (idb, rdb))*2 + (material-1)*2 42 43 getenlr :: (Array Int Int, Array Int Float) -> Int -> (Int, Int) 44 getenlr (idb, rdb) element 45 = (nodel, noder) 46 where 47 nodel = idb ! index 48 noder = idb ! (index + 1) 49 index = 4 + (nnode (idb, rdb)) + (element-1)*3 50 51 getemat :: (Array Int Int, Array Int Float) -> Int -> Int 52 getemat (idb, rdb) element 53 = idb ! (3 + (nnode (idb, rdb)) + element*3 ) 54 55 getpld :: (Array Int Int, Array Int Float) -> Int -> (Int, Float, Float, Float) 56 getpld (idb, rdb) j 57 = (to_node, px, py, m) 58 where 59 to_node = idb ! indexi 60 px = rdb ! (indexr) 61 py = rdb ! (indexr+1) 62 m = rdb ! (indexr+2) 63 indexi = 4 + nnodes + nelems * 3 + (j-1) 64 indexr = nnodes * 2 + nmatss * 2 + (j-1)*3 65 nnodes = nnode (idb, rdb) 66 nelems = nelem (idb, rdb) 67 nmatss = nmats (idb, rdb)