polynomial :: Tetrahedron -> (RealFunction Point)
polynomial t =
V.sum $ V.singleton ((c t 0 0 0 3) `cmult` (beta t 0 0 0 3)) `V.snoc`
polynomial :: Tetrahedron -> (RealFunction Point)
polynomial t =
V.sum $ V.singleton ((c t 0 0 0 3) `cmult` (beta t 0 0 0 3)) `V.snoc`
-- | 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)
-- | 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)
where
denominator = (factorial i)*(factorial j)*(factorial k)*(factorial l)
coefficient = 6 / (fromIntegral denominator)
-- | 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
-- | 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.
b0 :: Tetrahedron -> (RealFunction Point)
b0 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b0 :: Tetrahedron -> (RealFunction Point)
b0 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b1 :: Tetrahedron -> (RealFunction Point)
b1 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b1 :: Tetrahedron -> (RealFunction Point)
b1 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b2 :: Tetrahedron -> (RealFunction Point)
b2 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b2 :: Tetrahedron -> (RealFunction Point)
b2 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b3 :: Tetrahedron -> (RealFunction Point)
b3 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
b3 :: Tetrahedron -> (RealFunction Point)
b3 t point = (volume inner_tetrahedron) / (precomputed_volume t)
where
where
-- | Returns the domain point of t with indices i,j,k,l.
domain_point :: Tetrahedron -> Int -> Int -> Int -> Int -> Point
where
-- | Returns the domain point of t with indices i,j,k,l.
domain_point :: Tetrahedron -> Int -> Int -> Int -> Int -> Point