{- Diffusion matrix XZ, 24/10/91 -} {- Modified to adopt S_array The way in which the matrix is constructed has been changed. XZ, 19/2/92 -} module S_matrix ( s_mat ) where import Defs import S_Array -- not needed w/ proper module handling import Norm -- ditto ----------------------------------------------------------- -- 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] ] where 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) )