-- Glasgow Haskell 0.403 : FINITE ELEMENT PROGRAM V2
-- **********************************************************************
-- *                                                                    *
-- * FILE NAME : printsource.hs		DATE : 13-3-1991                *
-- *                                                                    *
-- * CONTENTS : Print source data. Return source data as [char].        *
-- *                                                                    *
-- **********************************************************************

module PrintSource(source_data) where

import Database

import DB_interface

import Basics

source_data :: (Array Int Int, Array Int Float) -> [Char]
source_data db
      =
        control_data db ++
	node_data db ++
	material_data db ++
  	elements db ++
	plds db

control_data db
      = "\n\n\nCONTROL DATA :\n\n" ++
        "   Total number of nodes = " ++ (showlj 3 (nnode db)) ++ "\n" ++
        "   Number of elements    = " ++ (showlj 3 (nelem db)) ++ "\n" ++
        "   Number of point loads = " ++ (showlj 3 (nplds db)) ++ "\n" ++
        "   Total number of materials = "++ (showlj 3 (nmats db)) ++ "\n\n\n"

node_data db
      = "NODE INFORMATION  :\n\n" ++
        (concat ( map a_node_s [1..(nnode db)] )) ++ "\n\n"
	where	
	a_node_s = a_node db

a_node db node
      = "  Node.no = " ++ (showlj 3 node) ++  "   x = "
        ++ (showlj 8 x) ++ "   y = " ++ (showlj 8 y)
        ++ "   bc = " ++ ( showlj 3 bc) ++ "\n"
        where
        (x,y) = getnxy db node
        bc    = getnbc db node

material_data db
      = "MATERIAL INFORMATION :\n\n"
        ++ (concat (map a_material_s [1..(nmats db)]))
	where
	a_material_s = a_material db

a_material db material =
        "  Material No.=" ++ (showlj 3 material) ++ "   EA = "
        ++ (showlj 8 ea) ++ "   EI = " ++ (showlj 8 ei) ++ "\n"
	where
        (ea,ei) = getmpro db material

elements db
      = "\nELEMENT DATA:\n\n" ++
        (concat (map (a_element_s) [1..(nelem db)])) ++ "\n\n"
	where
	a_element_s = a_element db
	
a_element db element =
	"  Element No.=" ++ (showlj 3 element) ++ "   Node.L ="
       	++ (showlj 3 nodel) ++ "   Node.R =" ++ (showlj 3 noder)
       	++ "   Material No. =" ++ (showlj 3 material) ++ "\n"
	where
        (nodel,noder) = getenlr db element
        material      = getemat db element

plds db
      = "\nPOINT LOADS DATA:\n\n" ++
        (concat (map (a_load_s) [1..(nplds db)])) ++ "\n\n"
	where
	a_load_s = a_load db

a_load db n =
	"  To_point No." ++ (showlj 3 to_point) ++ "  Px = "
       	++ (showlj 9 px) ++ "  Py = " ++ (showlj 9 py)
       	++ "  M = " ++ (showlj 9 m) ++ "\n"
	where
        (to_point,px,py,m) = getpld db n


