module S_matrix ( s_mat ) where

import S_Array
import Defs

-----------------------------------------------------------
-- Diffusion matrix.                                     --
-- Used in assembling rh1.                               --
-- Parameters:                                           --
--   gdij : jth entry of ith element factor component    --
-----------------------------------------------------------

s_mat
	:: () -> My_Array Int (((Frac_type,Frac_type,Frac_type),
			(Frac_type,Frac_type,Frac_type)) -> [Frac_type])
s_mat () =
	s_listArray (1,v_nodel)
	[
		\u -> cons u [f11,f12,f13,f0,f15,f16],
		\u -> cons u [f12,f22,f23,f24,f0,f16],
		\u -> cons u [f13,f23,f33,f24,f15,f0],
		\u -> cons u [f0,f24,f24,f44,f45,f46],
		\u -> cons u [f15,f0,f15,f45,f55,f56],
		\u -> cons u [f16,f16,f0,f46,f56,f66]
	]

s1 = \(x,_,_) -> x

s2 = \(_,y,_) -> y

s3 = \(_,_,z) -> z

ff1 = \x y u v -> x*y+u*v

ff2 x y u v = (ff2' x y) + (ff2' u v)
	where ff2' = \x y -> x*(x+y)+y*y

ff3 x y z u v w = (ff3' x y z) + (ff3' u v w)
	where ff3' = \x y z -> x*y+(x+z)*(y+z)

cons = \u -> map (\f->f u)

f0 = \x -> 0

f11 (x,y) = 3 * ( ff1 c1 c1 c2 c2 )
	where
	c1 = s1 x
	c2 = s1 y

f12 = \(x,y) -> - ( ff1 (s1 x) (s2 x) (s1 y) (s2 y) )

f13 = \(x,y) -> - ( ff1 (s1 x) (s3 x) (s1 y) (s3 y) )

f15 = \x -> (-4) * (f13 x)

f16 = \x -> (-4) * (f12 x)

f22 (x,y) = 3 * ( ff1 c1 c1 c2 c2 )
	where
	c1 = s2 x
	c2 = s2 y

f23 = \(x,y) -> - ( ff1 (s2 x) (s3 x) (s2 y) (s3 y) )

f24 = \x -> (-4) * (f23 x)

f33 (x,y) = 3 * ( ff1 c1 c1 c2 c2 )
	where
	c1 = s3 x
	c2 = s3 y

f44 = \(x,y) -> 8 * ( ff2 (s2 x) (s3 x) (s2 y) (s3 y) )

f45 = \(x,y)->4*(ff3 (s1 x) (s2 x) (s3 x) (s1 y) (s2 y) (s3 y))

f46 = \(x,y)->4*(ff3 (s1 x) (s3 x) (s2 x) (s1 y) (s3 y) (s2 y))

f55 = \(x,y) -> 8 * ( ff2 (s1 x) (s3 x) (s1 y) (s3 y) )

f56 = \(x,y)->4*(ff3 (s2 x) (s3 x) (s1 x) (s2 y) (s3 y) (s1 y))

f66 = \(x,y) -> 8 * ( ff2 (s1 x) (s2 x) (s1 y) (s2 y) )

