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)