X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTetrahedron.hs;h=eefbe118274993c166001733e42fc196187d90d7;hb=883ce9d78072c492000de94478189095032b6615;hp=9d90f713e9e214897d13151295ac4599fa983ea4;hpb=58cf11569acb270995d2de924dda03ef526647e2;p=spline3.git diff --git a/src/Tetrahedron.hs b/src/Tetrahedron.hs index 9d90f71..eefbe11 100644 --- a/src/Tetrahedron.hs +++ b/src/Tetrahedron.hs @@ -3,6 +3,7 @@ where import Numeric.LinearAlgebra hiding (i, scale) import Prelude hiding (LT) +import Test.QuickCheck (Arbitrary(..), Gen) import Cardinal import FunctionValues @@ -18,6 +19,17 @@ data Tetrahedron = Tetrahedron { fv :: FunctionValues, v3 :: Point } deriving (Eq) + +instance Arbitrary Tetrahedron where + arbitrary = do + rnd_v0 <- arbitrary :: Gen Point + rnd_v1 <- arbitrary :: Gen Point + rnd_v2 <- arbitrary :: Gen Point + rnd_v3 <- arbitrary :: Gen Point + rnd_fv <- arbitrary :: Gen FunctionValues + return (Tetrahedron rnd_fv rnd_v0 rnd_v1 rnd_v2 rnd_v3) + + instance Show Tetrahedron where show t = "Tetrahedron:\n" ++ " fv: " ++ (show (fv t)) ++ "\n" ++ @@ -76,6 +88,11 @@ beta t i j k l b3_term = (b3 t) `fexp` l +-- | The coefficient function. c t i j k l returns the coefficient +-- c_ijkl with respect to the tetrahedron t. The definition uses +-- pattern matching to mimic the definitions given in Sorokina and +-- Zeilfelder, pp. 84-86. If incorrect indices are supplied, the +-- function will simply error. c :: Tetrahedron -> Int -> Int -> Int -> Int -> Double c t 0 0 3 0 = eval (fv t) $ (1/8) * (I + F + L + T + LT + FL + FT + FLT) @@ -197,6 +214,8 @@ c _ _ _ _ _ = error "coefficient index out of bounds" +-- | The matrix used in the tetrahedron volume calculation as given in +-- Lai & Schumaker, Definition 15.4, page 436. vol_matrix :: Tetrahedron -> Matrix Double vol_matrix t = (4><4) [1, 1, 1, 1,