]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Tetrahedron.hs
Remove all "otherwise -> error" cases for performance reasons.
[spline3.git] / src / Tetrahedron.hs
index 0ea0ffb7b1f5743c0fd0f174b7b7f6d9dac86258..a6d69a2c68af2c8051d3fab76b9bcfd4e3201bfd 100644 (file)
@@ -125,10 +125,8 @@ polynomial t =
 -- | The Bernstein polynomial on t with indices i,j,k,l. Denoted by a
 --   capital 'B' in the Sorokina/Zeilfelder paper.
 beta :: Tetrahedron -> Int -> Int -> Int -> Int -> (RealFunction Point)
-beta t i j k l
-  | (i + j + k + l == 3) =
-      coefficient `cmult` (b0_term * b1_term * b2_term * b3_term)
-  | otherwise = error "basis function index out of bounds"
+beta t i j k l =
+  coefficient `cmult` (b0_term * b1_term * b2_term * b3_term)
   where
     denominator = (factorial i)*(factorial j)*(factorial k)*(factorial l)
     coefficient = 6 / (fromIntegral denominator)
@@ -141,8 +139,8 @@ beta t i j k 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.
+--   Zeilfelder, pp. 84-86. If incorrect indices are supplied, the world
+--   will end. This is for performance reasons.
 c :: Tetrahedron -> Int -> Int -> Int -> Int -> Double
 c !t !i !j !k !l =
   coefficient i j k l
@@ -271,8 +269,6 @@ c !t !i !j !k !l =
                + (1/96)*(lt + fl + ft + rt + bt + fr)
                + (1/96)*(fd + ld + bd + br + rd + bl)
 
-    coefficient _ _ _ _ = error "coefficient index out of bounds"
-
 
 
 -- | Compute the determinant of the 4x4 matrix,
@@ -646,9 +642,8 @@ p78_24_properties =
   where
     -- | Returns the domain point of t with indices i,j,k,l.
     domain_point :: Tetrahedron -> Int -> Int -> Int -> Int -> Point
-    domain_point t i j k l
-      | i + j + k + l == 3 = weighted_sum `scale` (1/3)
-      | otherwise = error "domain point index out of bounds"
+    domain_point t i j k l =
+      weighted_sum `scale` (1/3)
       where
         v0' = (v0 t) `scale` (fromIntegral i)
         v1' = (v1 t) `scale` (fromIntegral j)