From 5248f6e4703316606100955f13a1c5e623994b38 Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Sat, 15 Nov 2025 02:18:27 +0200 Subject: [PATCH] chore(basis): Regenerate Lagrange basis functions (remove old API) Regenerate src/basis/lagrange_generated.jl with updated generator. Changes: - Remove deprecated eval_basis!() and eval_dbasis!() functions (OLD API) - Keep NEW API: get_basis_functions() and get_basis_derivatives() - Add node count to element comments (e.g., "Seg2, 2 nodes") - Update generation timestamp: 2025-11-13 02:42:16 This is auto-generated code from src/basis/lagrange_generator.jl. The old API functions are no longer needed as all code now uses the NEW API (Topology + Basis separation). Generated: 594 line changes across all 15 Lagrange element types (Seg2, Seg3, Tri3, Tri6, Tri7, Quad4, Quad8, Quad9, Tet4, Tet10, Hex8, Hex20, Hex27, Wedge6, Wedge15). --- src/basis/lagrange_generated.jl | 342 +++++--------------------------- 1 file changed, 51 insertions(+), 291 deletions(-) diff --git a/src/basis/lagrange_generated.jl b/src/basis/lagrange_generated.jl index c107df1..4f81c95 100644 --- a/src/basis/lagrange_generated.jl +++ b/src/basis/lagrange_generated.jl @@ -20,7 +20,7 @@ # Generator: # src/basis/lagrange_generator.jl (symbolic engine) # -# Generated: 2025-11-10 11:31:12 +# Generated: 2025-11-13 02:42:16 # ============================================================================ # This file generates methods for Lagrange{T,P} where: @@ -31,7 +31,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Segment, 1}: 2-node linear segment element -# (Old name: Seg2) +# (Old name: Seg2, 2 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Segment, 1}}) @@ -40,22 +40,6 @@ function get_reference_element_coordinates(::Lagrange{Segment, 1}) return (Vec{1, Float64}(tuple(-1.0)), Vec{1, Float64}(tuple(1.0))) end - @inline function eval_basis!(::Type{Lagrange{Segment, 1}}, ::Type{T}, xi::Vec) where T - (u,) = xi - @inbounds return (0.5 + -0.5u, 0.5 + 0.5u) - end - @inline function eval_basis!(::Lagrange{Segment, 1}, ::Type{T}, xi::Vec) where T - (u,) = xi - @inbounds return (0.5 + -0.5u, 0.5 + 0.5u) - end - @inline function eval_dbasis!(::Type{Lagrange{Segment, 1}}, xi::Vec) - (u,) = xi - @inbounds return (Vec(float.(tuple(-0.5))), Vec(float.(tuple(0.5)))) - end - @inline function eval_dbasis!(::Lagrange{Segment, 1}, xi::Vec) - (u,) = xi - @inbounds return (Vec(float.(tuple(-0.5))), Vec(float.(tuple(0.5)))) - end @inline function get_basis_functions(::Type{Segment}, ::Type{Lagrange{Segment, 1}}, xi::Vec) (u,) = xi @inbounds return (0.5 + -0.5u, 0.5 + 0.5u) @@ -75,7 +59,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Segment, 2}: 3-node quadratic segment element -# (Old name: Seg3) +# (Old name: Seg3, 3 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Segment, 2}}) @@ -84,22 +68,6 @@ function get_reference_element_coordinates(::Lagrange{Segment, 2}) return (Vec{1, Float64}(tuple(-1.0)), Vec{1, Float64}(tuple(1.0)), Vec{1, Float64}(tuple(0.0))) end - @inline function eval_basis!(::Type{Lagrange{Segment, 2}}, ::Type{T}, xi::Vec) where T - (u,) = xi - @inbounds return (-0.5u + 0.5 * u ^ 2, 0.5u + 0.5 * u ^ 2, 1 + -1.0 * u ^ 2) - end - @inline function eval_basis!(::Lagrange{Segment, 2}, ::Type{T}, xi::Vec) where T - (u,) = xi - @inbounds return (-0.5u + 0.5 * u ^ 2, 0.5u + 0.5 * u ^ 2, 1 + -1.0 * u ^ 2) - end - @inline function eval_dbasis!(::Type{Lagrange{Segment, 2}}, xi::Vec) - (u,) = xi - @inbounds return (Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)))))) - end - @inline function eval_dbasis!(::Lagrange{Segment, 2}, xi::Vec) - (u,) = xi - @inbounds return (Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)))))) - end @inline function get_basis_functions(::Type{Segment}, ::Type{Lagrange{Segment, 2}}, xi::Vec) (u,) = xi @inbounds return (-0.5u + 0.5 * u ^ 2, 0.5u + 0.5 * u ^ 2, 1 + -1.0 * u ^ 2) @@ -119,7 +87,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Triangle, 1}: 3-node linear triangular element -# (Old name: Tri3) +# (Old name: Tri3, 3 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Triangle, 1}}) @@ -128,22 +96,6 @@ function get_reference_element_coordinates(::Lagrange{Triangle, 1}) return (Vec{2, Float64}(tuple(0.0, 0.0)), Vec{2, Float64}(tuple(1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Triangle, 1}}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (1 + -1.0u + -1.0v, +u, +v) - end - @inline function eval_basis!(::Lagrange{Triangle, 1}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (1 + -1.0u + -1.0v, +u, +v) - end - @inline function eval_dbasis!(::Type{Lagrange{Triangle, 1}}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(-1.0, -1.0))), Vec(float.(tuple(1, 0))), Vec(float.(tuple(0, 1)))) - end - @inline function eval_dbasis!(::Lagrange{Triangle, 1}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(-1.0, -1.0))), Vec(float.(tuple(1, 0))), Vec(float.(tuple(0, 1)))) - end @inline function get_basis_functions(::Type{Triangle}, ::Type{Lagrange{Triangle, 1}}, xi::Vec) (u, v) = xi @inbounds return (1 + -1.0u + -1.0v, +u, +v) @@ -163,7 +115,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Triangle, 2}: 6-node quadratic triangular element -# (Old name: Tri6) +# (Old name: Tri6, 6 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Triangle, 2}}) @@ -172,22 +124,6 @@ function get_reference_element_coordinates(::Lagrange{Triangle, 2}) return (Vec{2, Float64}(tuple(0.0, 0.0)), Vec{2, Float64}(tuple(1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 1.0)), Vec{2, Float64}(tuple(0.5, 0.0)), Vec{2, Float64}(tuple(0.5, 0.5)), Vec{2, Float64}(tuple(0.0, 0.5))) end - @inline function eval_basis!(::Type{Lagrange{Triangle, 2}}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (1 + -3.0u + -3.0v + 2.0 * u ^ 2 + 4.0 * (u * v) + 2.0 * v ^ 2, -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v), +(4.0 * (u * v)), 4.0v + -4.0 * (u * v) + -4.0 * v ^ 2) - end - @inline function eval_basis!(::Lagrange{Triangle, 2}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (1 + -3.0u + -3.0v + 2.0 * u ^ 2 + 4.0 * (u * v) + 2.0 * v ^ 2, -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v), +(4.0 * (u * v)), 4.0v + -4.0 * (u * v) + -4.0 * v ^ 2) - end - @inline function eval_dbasis!(::Type{Lagrange{Triangle, 2}}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(-3.0 + 2.0 * (2 * u ^ (2 - 1)) + 4.0v, -3.0 + 4.0u + 2.0 * (2 * v ^ (2 - 1))))), Vec(float.(tuple(-1.0 + 2.0 * (2 * u ^ (2 - 1)), 0))), Vec(float.(tuple(0, -1.0 + 2.0 * (2 * v ^ (2 - 1))))), Vec(float.(tuple(4.0 + -4.0 * (2 * u ^ (2 - 1)) + -4.0v, -4.0u))), Vec(float.(tuple(4.0v, 4.0u))), Vec(float.(tuple(-4.0v, 4.0 + -4.0u + -4.0 * (2 * v ^ (2 - 1)))))) - end - @inline function eval_dbasis!(::Lagrange{Triangle, 2}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(-3.0 + 2.0 * (2 * u ^ (2 - 1)) + 4.0v, -3.0 + 4.0u + 2.0 * (2 * v ^ (2 - 1))))), Vec(float.(tuple(-1.0 + 2.0 * (2 * u ^ (2 - 1)), 0))), Vec(float.(tuple(0, -1.0 + 2.0 * (2 * v ^ (2 - 1))))), Vec(float.(tuple(4.0 + -4.0 * (2 * u ^ (2 - 1)) + -4.0v, -4.0u))), Vec(float.(tuple(4.0v, 4.0u))), Vec(float.(tuple(-4.0v, 4.0 + -4.0u + -4.0 * (2 * v ^ (2 - 1)))))) - end @inline function get_basis_functions(::Type{Triangle}, ::Type{Lagrange{Triangle, 2}}, xi::Vec) (u, v) = xi @inbounds return (1 + -3.0u + -3.0v + 2.0 * u ^ 2 + 4.0 * (u * v) + 2.0 * v ^ 2, -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v), +(4.0 * (u * v)), 4.0v + -4.0 * (u * v) + -4.0 * v ^ 2) @@ -207,7 +143,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Quadrilateral, 1}: 4-node bilinear quadrilateral element -# (Old name: Quad4) +# (Old name: Quad4, 4 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Quadrilateral, 1}}) @@ -216,22 +152,6 @@ function get_reference_element_coordinates(::Lagrange{Quadrilateral, 1}) return (Vec{2, Float64}(tuple(-1.0, -1.0)), Vec{2, Float64}(tuple(1.0, -1.0)), Vec{2, Float64}(tuple(1.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Quadrilateral, 1}}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (0.25 + -0.25u + -0.25v + 0.25 * (u * v), 0.25 + 0.25u + -0.25v + -0.25 * (u * v), 0.25 + 0.25u + 0.25v + 0.25 * (u * v), 0.25 + -0.25u + 0.25v + -0.25 * (u * v)) - end - @inline function eval_basis!(::Lagrange{Quadrilateral, 1}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (0.25 + -0.25u + -0.25v + 0.25 * (u * v), 0.25 + 0.25u + -0.25v + -0.25 * (u * v), 0.25 + 0.25u + 0.25v + 0.25 * (u * v), 0.25 + -0.25u + 0.25v + -0.25 * (u * v)) - end - @inline function eval_dbasis!(::Type{Lagrange{Quadrilateral, 1}}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(-0.25 + 0.25v, -0.25 + 0.25u))), Vec(float.(tuple(0.25 + -0.25v, -0.25 + -0.25u))), Vec(float.(tuple(0.25 + 0.25v, 0.25 + 0.25u))), Vec(float.(tuple(-0.25 + -0.25v, 0.25 + -0.25u)))) - end - @inline function eval_dbasis!(::Lagrange{Quadrilateral, 1}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(-0.25 + 0.25v, -0.25 + 0.25u))), Vec(float.(tuple(0.25 + -0.25v, -0.25 + -0.25u))), Vec(float.(tuple(0.25 + 0.25v, 0.25 + 0.25u))), Vec(float.(tuple(-0.25 + -0.25v, 0.25 + -0.25u)))) - end @inline function get_basis_functions(::Type{Quadrilateral}, ::Type{Lagrange{Quadrilateral, 1}}, xi::Vec) (u, v) = xi @inbounds return (0.25 + -0.25u + -0.25v + 0.25 * (u * v), 0.25 + 0.25u + -0.25v + -0.25 * (u * v), 0.25 + 0.25u + 0.25v + 0.25 * (u * v), 0.25 + -0.25u + 0.25v + -0.25 * (u * v)) @@ -251,7 +171,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Quadrilateral, 2}: 8-node serendipity quadrilateral element -# (Old name: Quad8) +# (Old name: Quad8, 8 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Quadrilateral, 2}}) @@ -260,22 +180,6 @@ function get_reference_element_coordinates(::Lagrange{Quadrilateral, 2}) return (Vec{2, Float64}(tuple(-1.0, -1.0)), Vec{2, Float64}(tuple(1.0, -1.0)), Vec{2, Float64}(tuple(1.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 1.0)), Vec{2, Float64}(tuple(0.0, -1.0)), Vec{2, Float64}(tuple(1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 0.0))) end - @inline function eval_basis!(::Type{Lagrange{Quadrilateral, 2}}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (-0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), 0.5 + -0.5v + -0.5 * u ^ 2 + 0.5 * (u ^ 2 * v), 0.5 + 0.5u + -0.5 * v ^ 2 + -0.5 * (u * v ^ 2), 0.5 + 0.5v + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * v), 0.5 + -0.5u + -0.5 * v ^ 2 + 0.5 * (u * v ^ 2)) - end - @inline function eval_basis!(::Lagrange{Quadrilateral, 2}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (-0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), 0.5 + -0.5v + -0.5 * u ^ 2 + 0.5 * (u ^ 2 * v), 0.5 + 0.5u + -0.5 * v ^ 2 + -0.5 * (u * v ^ 2), 0.5 + 0.5v + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * v), 0.5 + -0.5u + -0.5 * v ^ 2 + 0.5 * (u * v ^ 2)) - end - @inline function eval_dbasis!(::Type{Lagrange{Quadrilateral, 2}}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + 0.5 * ((2 * u ^ (2 - 1)) * v), -0.5 + 0.5 * u ^ 2))), Vec(float.(tuple(0.5 + -0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + -0.5 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + -0.5 * ((2 * u ^ (2 - 1)) * v), 0.5 + -0.5 * u ^ 2))), Vec(float.(tuple(-0.5 + 0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + 0.5 * (u * (2 * v ^ (2 - 1))))))) - end - @inline function eval_dbasis!(::Lagrange{Quadrilateral, 2}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + -0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + 0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2, 0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25 * (2 * u ^ (2 - 1)) + -0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2, -0.25u + 0.25 * (2 * v ^ (2 - 1)) + 0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + 0.5 * ((2 * u ^ (2 - 1)) * v), -0.5 + 0.5 * u ^ 2))), Vec(float.(tuple(0.5 + -0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + -0.5 * (u * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * (2 * u ^ (2 - 1)) + -0.5 * ((2 * u ^ (2 - 1)) * v), 0.5 + -0.5 * u ^ 2))), Vec(float.(tuple(-0.5 + 0.5 * v ^ 2, -0.5 * (2 * v ^ (2 - 1)) + 0.5 * (u * (2 * v ^ (2 - 1))))))) - end @inline function get_basis_functions(::Type{Quadrilateral}, ::Type{Lagrange{Quadrilateral, 2}}, xi::Vec) (u, v) = xi @inbounds return (-0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + 0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2), -0.25 + 0.25 * u ^ 2 + -0.25 * (u * v) + 0.25 * v ^ 2 + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2), 0.5 + -0.5v + -0.5 * u ^ 2 + 0.5 * (u ^ 2 * v), 0.5 + 0.5u + -0.5 * v ^ 2 + -0.5 * (u * v ^ 2), 0.5 + 0.5v + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * v), 0.5 + -0.5u + -0.5 * v ^ 2 + 0.5 * (u * v ^ 2)) @@ -295,7 +199,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Quadrilateral, 2}: 9-node biquadratic quadrilateral element -# (Old name: Quad9) +# (Old name: Quad9, 9 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Quadrilateral, 2}}) @@ -304,22 +208,6 @@ function get_reference_element_coordinates(::Lagrange{Quadrilateral, 2}) return (Vec{2, Float64}(tuple(-1.0, -1.0)), Vec{2, Float64}(tuple(1.0, -1.0)), Vec{2, Float64}(tuple(1.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 1.0)), Vec{2, Float64}(tuple(0.0, -1.0)), Vec{2, Float64}(tuple(1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 1.0)), Vec{2, Float64}(tuple(-1.0, 0.0)), Vec{2, Float64}(tuple(0.0, 0.0))) end - @inline function eval_basis!(::Type{Lagrange{Quadrilateral, 2}}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (u * v ^ 2) + -0.5 * (u ^ 2 * v ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (u * v ^ 2) + -0.5 * (u ^ 2 * v ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + u ^ 2 * v ^ 2) - end - @inline function eval_basis!(::Lagrange{Quadrilateral, 2}, ::Type{T}, xi::Vec) where T - (u, v) = xi - @inbounds return (0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (u * v ^ 2) + -0.5 * (u ^ 2 * v ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (u * v ^ 2) + -0.5 * (u ^ 2 * v ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + u ^ 2 * v ^ 2) - end - @inline function eval_dbasis!(::Type{Lagrange{Quadrilateral, 2}}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.5 + 0.5 * (2 * v ^ (2 - 1)) + 0.5 * u ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1)) + -0.5 * v ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.5 * (u * (2 * v ^ (2 - 1))) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.5 + 0.5 * (2 * v ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1)) + 0.5 * v ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.5 * (u * (2 * v ^ (2 - 1))) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)) + (2 * u ^ (2 - 1)) * v ^ 2, -1.0 * (2 * v ^ (2 - 1)) + u ^ 2 * (2 * v ^ (2 - 1)))))) - end - @inline function eval_dbasis!(::Lagrange{Quadrilateral, 2}, xi::Vec) - (u, v) = xi - @inbounds return (Vec(float.(tuple(0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * (u * (2 * v ^ (2 - 1))) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.5 + 0.5 * (2 * v ^ (2 - 1)) + 0.5 * u ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1)) + -0.5 * v ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), -0.5 * (u * (2 * v ^ (2 - 1))) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.5 + 0.5 * (2 * v ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1)) + 0.5 * v ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2), 0.5 * (u * (2 * v ^ (2 - 1))) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)) + (2 * u ^ (2 - 1)) * v ^ 2, -1.0 * (2 * v ^ (2 - 1)) + u ^ 2 * (2 * v ^ (2 - 1)))))) - end @inline function get_basis_functions(::Type{Quadrilateral}, ::Type{Lagrange{Quadrilateral, 2}}, xi::Vec) (u, v) = xi @inbounds return (0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (u * v ^ 2) + -0.5 * (u ^ 2 * v ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (u * v ^ 2) + -0.5 * (u ^ 2 * v ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + u ^ 2 * v ^ 2) @@ -338,228 +226,148 @@ end # ────────────────────────────────────────────────────────────────────────────── -# Lagrange{Tetrahedron, 1}: 4-node linear tetrahedral element -# (Old name: Tet4) +# Lagrange{Tetrahedron{4}, 1}: 4-node linear tetrahedral element +# (Old name: Tet4, 4 nodes) # ────────────────────────────────────────────────────────────────────────────── - function get_reference_element_coordinates(::Type{Lagrange{Tetrahedron, 1}}) + function get_reference_element_coordinates(::Type{Lagrange{Tetrahedron{4}, 1}}) return (Vec{3, Float64}(tuple(0.0, 0.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0))) end - function get_reference_element_coordinates(::Lagrange{Tetrahedron, 1}) + function get_reference_element_coordinates(::Lagrange{Tetrahedron{4}, 1}) return (Vec{3, Float64}(tuple(0.0, 0.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Tetrahedron, 1}}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Type{Tetrahedron{4}}, ::Type{Lagrange{Tetrahedron{4}, 1}}, xi::Vec) (u, v, w) = xi @inbounds return (1 + -1.0u + -1.0v + -1.0w, +u, +v, +w) end - @inline function eval_basis!(::Lagrange{Tetrahedron, 1}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Tetrahedron{4}, ::Lagrange{Tetrahedron{4}, 1}, xi::Vec) (u, v, w) = xi @inbounds return (1 + -1.0u + -1.0v + -1.0w, +u, +v, +w) end - @inline function eval_dbasis!(::Type{Lagrange{Tetrahedron, 1}}, xi::Vec) + @inline function get_basis_derivatives(::Type{Tetrahedron{4}}, ::Type{Lagrange{Tetrahedron{4}, 1}}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-1.0, -1.0, -1.0))), Vec(float.(tuple(1, 0, 0))), Vec(float.(tuple(0, 1, 0))), Vec(float.(tuple(0, 0, 1)))) end - @inline function eval_dbasis!(::Lagrange{Tetrahedron, 1}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-1.0, -1.0, -1.0))), Vec(float.(tuple(1, 0, 0))), Vec(float.(tuple(0, 1, 0))), Vec(float.(tuple(0, 0, 1)))) - end - @inline function get_basis_functions(::Type{Tetrahedron}, ::Type{Lagrange{Tetrahedron, 1}}, xi::Vec) - (u, v, w) = xi - @inbounds return (1 + -1.0u + -1.0v + -1.0w, +u, +v, +w) - end - @inline function get_basis_functions(::Tetrahedron, ::Lagrange{Tetrahedron, 1}, xi::Vec) - (u, v, w) = xi - @inbounds return (1 + -1.0u + -1.0v + -1.0w, +u, +v, +w) - end - @inline function get_basis_derivatives(::Type{Tetrahedron}, ::Type{Lagrange{Tetrahedron, 1}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-1.0, -1.0, -1.0))), Vec(float.(tuple(1, 0, 0))), Vec(float.(tuple(0, 1, 0))), Vec(float.(tuple(0, 0, 1)))) - end - @inline function get_basis_derivatives(::Tetrahedron, ::Lagrange{Tetrahedron, 1}, xi::Vec) + @inline function get_basis_derivatives(::Tetrahedron{4}, ::Lagrange{Tetrahedron{4}, 1}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-1.0, -1.0, -1.0))), Vec(float.(tuple(1, 0, 0))), Vec(float.(tuple(0, 1, 0))), Vec(float.(tuple(0, 0, 1)))) end # ────────────────────────────────────────────────────────────────────────────── -# Lagrange{Tetrahedron, 2}: 10-node quadratic tetrahedral element -# (Old name: Tet10) +# Lagrange{Tetrahedron{10}, 2}: 10-node quadratic tetrahedral element +# (Old name: Tet10, 10 nodes) # ────────────────────────────────────────────────────────────────────────────── - function get_reference_element_coordinates(::Type{Lagrange{Tetrahedron, 2}}) + function get_reference_element_coordinates(::Type{Lagrange{Tetrahedron{10}, 2}}) return (Vec{3, Float64}(tuple(0.0, 0.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.5, 0.0, 0.0)), Vec{3, Float64}(tuple(0.5, 0.5, 0.0)), Vec{3, Float64}(tuple(0.0, 0.5, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 0.5)), Vec{3, Float64}(tuple(0.5, 0.0, 0.5)), Vec{3, Float64}(tuple(0.0, 0.5, 0.5))) end - function get_reference_element_coordinates(::Lagrange{Tetrahedron, 2}) + function get_reference_element_coordinates(::Lagrange{Tetrahedron{10}, 2}) return (Vec{3, Float64}(tuple(0.0, 0.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.5, 0.0, 0.0)), Vec{3, Float64}(tuple(0.5, 0.5, 0.0)), Vec{3, Float64}(tuple(0.0, 0.5, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 0.5)), Vec{3, Float64}(tuple(0.5, 0.0, 0.5)), Vec{3, Float64}(tuple(0.0, 0.5, 0.5))) end - @inline function eval_basis!(::Type{Lagrange{Tetrahedron, 2}}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Type{Tetrahedron{10}}, ::Type{Lagrange{Tetrahedron{10}, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (1 + -3.0u + -3.0v + -3.0w + 2.0 * u ^ 2 + 2.0 * v ^ 2 + 2.0 * w ^ 2 + 4.0 * (u * v) + 4.0 * (u * w) + 4.0 * (v * w), -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, -1.0w + 2.0 * w ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v) + -4.0 * (u * w), +(4.0 * (u * v)), 4.0v + -4.0 * v ^ 2 + -4.0 * (u * v) + -4.0 * (v * w), 4.0w + -4.0 * w ^ 2 + -4.0 * (u * w) + -4.0 * (v * w), +(4.0 * (u * w)), +(4.0 * (v * w))) end - @inline function eval_basis!(::Lagrange{Tetrahedron, 2}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Tetrahedron{10}, ::Lagrange{Tetrahedron{10}, 2}, xi::Vec) (u, v, w) = xi @inbounds return (1 + -3.0u + -3.0v + -3.0w + 2.0 * u ^ 2 + 2.0 * v ^ 2 + 2.0 * w ^ 2 + 4.0 * (u * v) + 4.0 * (u * w) + 4.0 * (v * w), -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, -1.0w + 2.0 * w ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v) + -4.0 * (u * w), +(4.0 * (u * v)), 4.0v + -4.0 * v ^ 2 + -4.0 * (u * v) + -4.0 * (v * w), 4.0w + -4.0 * w ^ 2 + -4.0 * (u * w) + -4.0 * (v * w), +(4.0 * (u * w)), +(4.0 * (v * w))) end - @inline function eval_dbasis!(::Type{Lagrange{Tetrahedron, 2}}, xi::Vec) + @inline function get_basis_derivatives(::Type{Tetrahedron{10}}, ::Type{Lagrange{Tetrahedron{10}, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-3.0 + 2.0 * (2 * u ^ (2 - 1)) + 4.0v + 4.0w, -3.0 + 2.0 * (2 * v ^ (2 - 1)) + 4.0u + 4.0w, -3.0 + 2.0 * (2 * w ^ (2 - 1)) + 4.0u + 4.0v))), Vec(float.(tuple(-1.0 + 2.0 * (2 * u ^ (2 - 1)), 0, 0))), Vec(float.(tuple(0, -1.0 + 2.0 * (2 * v ^ (2 - 1)), 0))), Vec(float.(tuple(0, 0, -1.0 + 2.0 * (2 * w ^ (2 - 1))))), Vec(float.(tuple(4.0 + -4.0 * (2 * u ^ (2 - 1)) + -4.0v + -4.0w, -4.0u, -4.0u))), Vec(float.(tuple(4.0v, 4.0u, 0))), Vec(float.(tuple(-4.0v, 4.0 + -4.0 * (2 * v ^ (2 - 1)) + -4.0u + -4.0w, -4.0v))), Vec(float.(tuple(-4.0w, -4.0w, 4.0 + -4.0 * (2 * w ^ (2 - 1)) + -4.0u + -4.0v))), Vec(float.(tuple(4.0w, 0, 4.0u))), Vec(float.(tuple(0, 4.0w, 4.0v)))) end - @inline function eval_dbasis!(::Lagrange{Tetrahedron, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-3.0 + 2.0 * (2 * u ^ (2 - 1)) + 4.0v + 4.0w, -3.0 + 2.0 * (2 * v ^ (2 - 1)) + 4.0u + 4.0w, -3.0 + 2.0 * (2 * w ^ (2 - 1)) + 4.0u + 4.0v))), Vec(float.(tuple(-1.0 + 2.0 * (2 * u ^ (2 - 1)), 0, 0))), Vec(float.(tuple(0, -1.0 + 2.0 * (2 * v ^ (2 - 1)), 0))), Vec(float.(tuple(0, 0, -1.0 + 2.0 * (2 * w ^ (2 - 1))))), Vec(float.(tuple(4.0 + -4.0 * (2 * u ^ (2 - 1)) + -4.0v + -4.0w, -4.0u, -4.0u))), Vec(float.(tuple(4.0v, 4.0u, 0))), Vec(float.(tuple(-4.0v, 4.0 + -4.0 * (2 * v ^ (2 - 1)) + -4.0u + -4.0w, -4.0v))), Vec(float.(tuple(-4.0w, -4.0w, 4.0 + -4.0 * (2 * w ^ (2 - 1)) + -4.0u + -4.0v))), Vec(float.(tuple(4.0w, 0, 4.0u))), Vec(float.(tuple(0, 4.0w, 4.0v)))) - end - @inline function get_basis_functions(::Type{Tetrahedron}, ::Type{Lagrange{Tetrahedron, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (1 + -3.0u + -3.0v + -3.0w + 2.0 * u ^ 2 + 2.0 * v ^ 2 + 2.0 * w ^ 2 + 4.0 * (u * v) + 4.0 * (u * w) + 4.0 * (v * w), -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, -1.0w + 2.0 * w ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v) + -4.0 * (u * w), +(4.0 * (u * v)), 4.0v + -4.0 * v ^ 2 + -4.0 * (u * v) + -4.0 * (v * w), 4.0w + -4.0 * w ^ 2 + -4.0 * (u * w) + -4.0 * (v * w), +(4.0 * (u * w)), +(4.0 * (v * w))) - end - @inline function get_basis_functions(::Tetrahedron, ::Lagrange{Tetrahedron, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (1 + -3.0u + -3.0v + -3.0w + 2.0 * u ^ 2 + 2.0 * v ^ 2 + 2.0 * w ^ 2 + 4.0 * (u * v) + 4.0 * (u * w) + 4.0 * (v * w), -1.0u + 2.0 * u ^ 2, -1.0v + 2.0 * v ^ 2, -1.0w + 2.0 * w ^ 2, 4.0u + -4.0 * u ^ 2 + -4.0 * (u * v) + -4.0 * (u * w), +(4.0 * (u * v)), 4.0v + -4.0 * v ^ 2 + -4.0 * (u * v) + -4.0 * (v * w), 4.0w + -4.0 * w ^ 2 + -4.0 * (u * w) + -4.0 * (v * w), +(4.0 * (u * w)), +(4.0 * (v * w))) - end - @inline function get_basis_derivatives(::Type{Tetrahedron}, ::Type{Lagrange{Tetrahedron, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-3.0 + 2.0 * (2 * u ^ (2 - 1)) + 4.0v + 4.0w, -3.0 + 2.0 * (2 * v ^ (2 - 1)) + 4.0u + 4.0w, -3.0 + 2.0 * (2 * w ^ (2 - 1)) + 4.0u + 4.0v))), Vec(float.(tuple(-1.0 + 2.0 * (2 * u ^ (2 - 1)), 0, 0))), Vec(float.(tuple(0, -1.0 + 2.0 * (2 * v ^ (2 - 1)), 0))), Vec(float.(tuple(0, 0, -1.0 + 2.0 * (2 * w ^ (2 - 1))))), Vec(float.(tuple(4.0 + -4.0 * (2 * u ^ (2 - 1)) + -4.0v + -4.0w, -4.0u, -4.0u))), Vec(float.(tuple(4.0v, 4.0u, 0))), Vec(float.(tuple(-4.0v, 4.0 + -4.0 * (2 * v ^ (2 - 1)) + -4.0u + -4.0w, -4.0v))), Vec(float.(tuple(-4.0w, -4.0w, 4.0 + -4.0 * (2 * w ^ (2 - 1)) + -4.0u + -4.0v))), Vec(float.(tuple(4.0w, 0, 4.0u))), Vec(float.(tuple(0, 4.0w, 4.0v)))) - end - @inline function get_basis_derivatives(::Tetrahedron, ::Lagrange{Tetrahedron, 2}, xi::Vec) + @inline function get_basis_derivatives(::Tetrahedron{10}, ::Lagrange{Tetrahedron{10}, 2}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-3.0 + 2.0 * (2 * u ^ (2 - 1)) + 4.0v + 4.0w, -3.0 + 2.0 * (2 * v ^ (2 - 1)) + 4.0u + 4.0w, -3.0 + 2.0 * (2 * w ^ (2 - 1)) + 4.0u + 4.0v))), Vec(float.(tuple(-1.0 + 2.0 * (2 * u ^ (2 - 1)), 0, 0))), Vec(float.(tuple(0, -1.0 + 2.0 * (2 * v ^ (2 - 1)), 0))), Vec(float.(tuple(0, 0, -1.0 + 2.0 * (2 * w ^ (2 - 1))))), Vec(float.(tuple(4.0 + -4.0 * (2 * u ^ (2 - 1)) + -4.0v + -4.0w, -4.0u, -4.0u))), Vec(float.(tuple(4.0v, 4.0u, 0))), Vec(float.(tuple(-4.0v, 4.0 + -4.0 * (2 * v ^ (2 - 1)) + -4.0u + -4.0w, -4.0v))), Vec(float.(tuple(-4.0w, -4.0w, 4.0 + -4.0 * (2 * w ^ (2 - 1)) + -4.0u + -4.0v))), Vec(float.(tuple(4.0w, 0, 4.0u))), Vec(float.(tuple(0, 4.0w, 4.0v)))) end # ────────────────────────────────────────────────────────────────────────────── -# Lagrange{Hexahedron, 1}: 8-node trilinear hexahedral element -# (Old name: Hex8) +# Lagrange{Hexahedron{8}, 1}: 8-node trilinear hexahedral element +# (Old name: Hex8, 8 nodes) # ────────────────────────────────────────────────────────────────────────────── - function get_reference_element_coordinates(::Type{Lagrange{Hexahedron, 1}}) + function get_reference_element_coordinates(::Type{Lagrange{Hexahedron{8}, 1}}) return (Vec{3, Float64}(tuple(-1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 1.0))) end - function get_reference_element_coordinates(::Lagrange{Hexahedron, 1}) + function get_reference_element_coordinates(::Lagrange{Hexahedron{8}, 1}) return (Vec{3, Float64}(tuple(-1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Hexahedron, 1}}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Type{Hexahedron{8}}, ::Type{Lagrange{Hexahedron{8}, 1}}, xi::Vec) (u, v, w) = xi @inbounds return (0.125 + -0.125u + -0.125v + -0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + -0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + -0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + -0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + -0.125v + 0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + 0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + 0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + 0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w)) end - @inline function eval_basis!(::Lagrange{Hexahedron, 1}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Hexahedron{8}, ::Lagrange{Hexahedron{8}, 1}, xi::Vec) (u, v, w) = xi @inbounds return (0.125 + -0.125u + -0.125v + -0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + -0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + -0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + -0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + -0.125v + 0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + 0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + 0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + 0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w)) end - @inline function eval_dbasis!(::Type{Lagrange{Hexahedron, 1}}, xi::Vec) + @inline function get_basis_derivatives(::Type{Hexahedron{8}}, ::Type{Lagrange{Hexahedron{8}, 1}}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-0.125 + 0.125v + 0.125w + -0.125 * (v * w), -0.125 + 0.125u + 0.125w + -0.125 * (u * w), -0.125 + 0.125u + 0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + -0.125w + 0.125 * (v * w), -0.125 + -0.125u + 0.125w + 0.125 * (u * w), -0.125 + -0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + -0.125w + -0.125 * (v * w), 0.125 + 0.125u + -0.125w + -0.125 * (u * w), -0.125 + -0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + 0.125w + 0.125 * (v * w), 0.125 + -0.125u + -0.125w + 0.125 * (u * w), -0.125 + 0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + 0.125v + -0.125w + 0.125 * (v * w), -0.125 + 0.125u + -0.125w + 0.125 * (u * w), 0.125 + -0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + 0.125w + -0.125 * (v * w), -0.125 + -0.125u + -0.125w + -0.125 * (u * w), 0.125 + 0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + 0.125w + 0.125 * (v * w), 0.125 + 0.125u + 0.125w + 0.125 * (u * w), 0.125 + 0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + -0.125w + -0.125 * (v * w), 0.125 + -0.125u + 0.125w + -0.125 * (u * w), 0.125 + -0.125u + 0.125v + -0.125 * (u * v))))) end - @inline function eval_dbasis!(::Lagrange{Hexahedron, 1}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.125 + 0.125v + 0.125w + -0.125 * (v * w), -0.125 + 0.125u + 0.125w + -0.125 * (u * w), -0.125 + 0.125u + 0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + -0.125w + 0.125 * (v * w), -0.125 + -0.125u + 0.125w + 0.125 * (u * w), -0.125 + -0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + -0.125w + -0.125 * (v * w), 0.125 + 0.125u + -0.125w + -0.125 * (u * w), -0.125 + -0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + 0.125w + 0.125 * (v * w), 0.125 + -0.125u + -0.125w + 0.125 * (u * w), -0.125 + 0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + 0.125v + -0.125w + 0.125 * (v * w), -0.125 + 0.125u + -0.125w + 0.125 * (u * w), 0.125 + -0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + 0.125w + -0.125 * (v * w), -0.125 + -0.125u + -0.125w + -0.125 * (u * w), 0.125 + 0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + 0.125w + 0.125 * (v * w), 0.125 + 0.125u + 0.125w + 0.125 * (u * w), 0.125 + 0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + -0.125w + -0.125 * (v * w), 0.125 + -0.125u + 0.125w + -0.125 * (u * w), 0.125 + -0.125u + 0.125v + -0.125 * (u * v))))) - end - @inline function get_basis_functions(::Type{Hexahedron}, ::Type{Lagrange{Hexahedron, 1}}, xi::Vec) - (u, v, w) = xi - @inbounds return (0.125 + -0.125u + -0.125v + -0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + -0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + -0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + -0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + -0.125v + 0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + 0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + 0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + 0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w)) - end - @inline function get_basis_functions(::Hexahedron, ::Lagrange{Hexahedron, 1}, xi::Vec) - (u, v, w) = xi - @inbounds return (0.125 + -0.125u + -0.125v + -0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + -0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + -0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + -0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + -0.125v + 0.125w + 0.125 * (u * v) + -0.125 * (u * w) + -0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + 0.125u + -0.125v + 0.125w + -0.125 * (u * v) + 0.125 * (u * w) + -0.125 * (v * w) + -0.125 * (u * v * w), 0.125 + 0.125u + 0.125v + 0.125w + 0.125 * (u * v) + 0.125 * (u * w) + 0.125 * (v * w) + 0.125 * (u * v * w), 0.125 + -0.125u + 0.125v + 0.125w + -0.125 * (u * v) + -0.125 * (u * w) + 0.125 * (v * w) + -0.125 * (u * v * w)) - end - @inline function get_basis_derivatives(::Type{Hexahedron}, ::Type{Lagrange{Hexahedron, 1}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.125 + 0.125v + 0.125w + -0.125 * (v * w), -0.125 + 0.125u + 0.125w + -0.125 * (u * w), -0.125 + 0.125u + 0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + -0.125w + 0.125 * (v * w), -0.125 + -0.125u + 0.125w + 0.125 * (u * w), -0.125 + -0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + -0.125w + -0.125 * (v * w), 0.125 + 0.125u + -0.125w + -0.125 * (u * w), -0.125 + -0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + 0.125w + 0.125 * (v * w), 0.125 + -0.125u + -0.125w + 0.125 * (u * w), -0.125 + 0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + 0.125v + -0.125w + 0.125 * (v * w), -0.125 + 0.125u + -0.125w + 0.125 * (u * w), 0.125 + -0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + 0.125w + -0.125 * (v * w), -0.125 + -0.125u + -0.125w + -0.125 * (u * w), 0.125 + 0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + 0.125w + 0.125 * (v * w), 0.125 + 0.125u + 0.125w + 0.125 * (u * w), 0.125 + 0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + -0.125w + -0.125 * (v * w), 0.125 + -0.125u + 0.125w + -0.125 * (u * w), 0.125 + -0.125u + 0.125v + -0.125 * (u * v))))) - end - @inline function get_basis_derivatives(::Hexahedron, ::Lagrange{Hexahedron, 1}, xi::Vec) + @inline function get_basis_derivatives(::Hexahedron{8}, ::Lagrange{Hexahedron{8}, 1}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-0.125 + 0.125v + 0.125w + -0.125 * (v * w), -0.125 + 0.125u + 0.125w + -0.125 * (u * w), -0.125 + 0.125u + 0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + -0.125w + 0.125 * (v * w), -0.125 + -0.125u + 0.125w + 0.125 * (u * w), -0.125 + -0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + -0.125w + -0.125 * (v * w), 0.125 + 0.125u + -0.125w + -0.125 * (u * w), -0.125 + -0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + 0.125w + 0.125 * (v * w), 0.125 + -0.125u + -0.125w + 0.125 * (u * w), -0.125 + 0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + 0.125v + -0.125w + 0.125 * (v * w), -0.125 + 0.125u + -0.125w + 0.125 * (u * w), 0.125 + -0.125u + -0.125v + 0.125 * (u * v)))), Vec(float.(tuple(0.125 + -0.125v + 0.125w + -0.125 * (v * w), -0.125 + -0.125u + -0.125w + -0.125 * (u * w), 0.125 + 0.125u + -0.125v + -0.125 * (u * v)))), Vec(float.(tuple(0.125 + 0.125v + 0.125w + 0.125 * (v * w), 0.125 + 0.125u + 0.125w + 0.125 * (u * w), 0.125 + 0.125u + 0.125v + 0.125 * (u * v)))), Vec(float.(tuple(-0.125 + -0.125v + -0.125w + -0.125 * (v * w), 0.125 + -0.125u + 0.125w + -0.125 * (u * w), 0.125 + -0.125u + 0.125v + -0.125 * (u * v))))) end # ────────────────────────────────────────────────────────────────────────────── -# Lagrange{Hexahedron, 2}: 20-node serendipity hexahedral element -# (Old name: Hex20) +# Lagrange{Hexahedron{20}, 2}: 20-node serendipity hexahedral element +# (Old name: Hex20, 20 nodes) # ────────────────────────────────────────────────────────────────────────────── - function get_reference_element_coordinates(::Type{Lagrange{Hexahedron, 2}}) + function get_reference_element_coordinates(::Type{Lagrange{Hexahedron{20}, 2}}) return (Vec{3, Float64}(tuple(-1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(0.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, 1.0))) end - function get_reference_element_coordinates(::Lagrange{Hexahedron, 2}) + function get_reference_element_coordinates(::Lagrange{Hexahedron{20}, 2}) return (Vec{3, Float64}(tuple(-1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(0.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Hexahedron, 2}}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Type{Hexahedron{20}}, ::Type{Lagrange{Hexahedron{20}, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (-0.25 + 0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + 0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), 0.25 + -0.25v + -0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + -0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + -0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + -0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + -0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + 0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + -0.25u + -0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + 0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + 0.25u + -0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + -0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + 0.25u + 0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + -0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + -0.25u + 0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + 0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + -0.25v + 0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + 0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + -0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + 0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + 0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + 0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w)) end - @inline function eval_basis!(::Lagrange{Hexahedron, 2}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Hexahedron{20}, ::Lagrange{Hexahedron{20}, 2}, xi::Vec) (u, v, w) = xi @inbounds return (-0.25 + 0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + 0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), 0.25 + -0.25v + -0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + -0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + -0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + -0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + -0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + 0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + -0.25u + -0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + 0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + 0.25u + -0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + -0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + 0.25u + 0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + -0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + -0.25u + 0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + 0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + -0.25v + 0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + 0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + -0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + 0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + 0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + 0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w)) end - @inline function eval_dbasis!(::Type{Lagrange{Hexahedron, 2}}, xi::Vec) + @inline function get_basis_derivatives(::Type{Hexahedron{20}}, ::Type{Lagrange{Hexahedron{20}, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + 0.25w + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), -0.25 + 0.25v + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + -0.25w + -0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + -0.25u + 0.25 * v ^ 2 + 0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + -0.25w + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), -0.25 + -0.25v + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + 0.25w + 0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + 0.25u + 0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 + 0.25v + 0.25 * w ^ 2 + -0.25 * (v * w ^ 2), -0.25 + 0.25u + 0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + -0.25v + -0.25 * w ^ 2 + 0.25 * (v * w ^ 2), -0.25 + -0.25u + 0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + 0.25v + -0.25 * w ^ 2 + -0.25 * (v * w ^ 2), 0.25 + 0.25u + -0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 + -0.25v + 0.25 * w ^ 2 + 0.25 * (v * w ^ 2), 0.25 + -0.25u + -0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + -0.25w + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), 0.25 + -0.25v + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + 0.25w + -0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + 0.25u + -0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + 0.25w + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), 0.25 + 0.25v + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + -0.25w + 0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + -0.25u + -0.25 * v ^ 2 + 0.25 * (u * v ^ 2))))) end - @inline function eval_dbasis!(::Lagrange{Hexahedron, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + 0.25w + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), -0.25 + 0.25v + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + -0.25w + -0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + -0.25u + 0.25 * v ^ 2 + 0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + -0.25w + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), -0.25 + -0.25v + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + 0.25w + 0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + 0.25u + 0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 + 0.25v + 0.25 * w ^ 2 + -0.25 * (v * w ^ 2), -0.25 + 0.25u + 0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + -0.25v + -0.25 * w ^ 2 + 0.25 * (v * w ^ 2), -0.25 + -0.25u + 0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + 0.25v + -0.25 * w ^ 2 + -0.25 * (v * w ^ 2), 0.25 + 0.25u + -0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 + -0.25v + 0.25 * w ^ 2 + 0.25 * (v * w ^ 2), 0.25 + -0.25u + -0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + -0.25w + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), 0.25 + -0.25v + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + 0.25w + -0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + 0.25u + -0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + 0.25w + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), 0.25 + 0.25v + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + -0.25w + 0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + -0.25u + -0.25 * v ^ 2 + 0.25 * (u * v ^ 2))))) - end - @inline function get_basis_functions(::Type{Hexahedron}, ::Type{Lagrange{Hexahedron, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (-0.25 + 0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + 0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), 0.25 + -0.25v + -0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + -0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + -0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + -0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + -0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + 0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + -0.25u + -0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + 0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + 0.25u + -0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + -0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + 0.25u + 0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + -0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + -0.25u + 0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + 0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + -0.25v + 0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + 0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + -0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + 0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + 0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + 0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w)) - end - @inline function get_basis_functions(::Hexahedron, ::Lagrange{Hexahedron, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (-0.25 + 0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + 0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + -0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + -0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + 0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + -0.125u + 0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + -0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), -0.25 + -0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + 0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + 0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2), -0.25 + 0.125u + -0.125v + -0.125w + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (u ^ 2 * v) + 0.125 * (u ^ 2 * w) + -0.125 * (v ^ 2 * u) + 0.125 * (v ^ 2 * w) + -0.125 * (w ^ 2 * u) + 0.125 * (w ^ 2 * v) + -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2), 0.25 + -0.25v + -0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + -0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + -0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + -0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + -0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + 0.25 * (v ^ 2 * u) + 0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + -0.25u + -0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + 0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + 0.25u + -0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + -0.25 * (w ^ 2 * u) + 0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + 0.25u + 0.25v + -0.25 * w ^ 2 + 0.25 * (u * v) + -0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + -0.25 * (u * v * w ^ 2), 0.25 + -0.25u + 0.25v + -0.25 * w ^ 2 + -0.25 * (u * v) + 0.25 * (w ^ 2 * u) + -0.25 * (w ^ 2 * v) + 0.25 * (u * v * w ^ 2), 0.25 + -0.25v + 0.25w + -0.25 * u ^ 2 + -0.25 * (v * w) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * v * w), 0.25 + 0.25u + 0.25w + -0.25 * v ^ 2 + 0.25 * (u * w) + -0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + -0.25 * (u * v ^ 2 * w), 0.25 + 0.25v + 0.25w + -0.25 * u ^ 2 + 0.25 * (v * w) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * v * w), 0.25 + -0.25u + 0.25w + -0.25 * v ^ 2 + -0.25 * (u * w) + 0.25 * (v ^ 2 * u) + -0.25 * (v ^ 2 * w) + 0.25 * (u * v ^ 2 * w)) - end - @inline function get_basis_derivatives(::Type{Hexahedron}, ::Type{Lagrange{Hexahedron, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + 0.25w + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), -0.25 + 0.25v + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + -0.25w + -0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + -0.25u + 0.25 * v ^ 2 + 0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + -0.25w + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), -0.25 + -0.25v + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + 0.25w + 0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + 0.25u + 0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 + 0.25v + 0.25 * w ^ 2 + -0.25 * (v * w ^ 2), -0.25 + 0.25u + 0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + -0.25v + -0.25 * w ^ 2 + 0.25 * (v * w ^ 2), -0.25 + -0.25u + 0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + 0.25v + -0.25 * w ^ 2 + -0.25 * (v * w ^ 2), 0.25 + 0.25u + -0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 + -0.25v + 0.25 * w ^ 2 + 0.25 * (v * w ^ 2), 0.25 + -0.25u + -0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + -0.25w + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), 0.25 + -0.25v + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + 0.25w + -0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + 0.25u + -0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + 0.25w + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), 0.25 + 0.25v + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + -0.25w + 0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + -0.25u + -0.25 * v ^ 2 + 0.25 * (u * v ^ 2))))) - end - @inline function get_basis_derivatives(::Hexahedron, ::Lagrange{Hexahedron, 2}, xi::Vec) + @inline function get_basis_derivatives(::Hexahedron{20}, ::Lagrange{Hexahedron{20}, 2}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + -0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + -0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), 0.125 + 0.125 * (2 * w ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + 0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + -0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + -0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), 0.125 + 0.125 * (2 * v ^ (2 - 1)) + -0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + -0.125 * w ^ 2 + -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + -0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + 0.125 * v ^ 2 + 0.125 * w ^ 2 + 0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + 0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 + 0.125 * (2 * u ^ (2 - 1)) + 0.125 * ((2 * u ^ (2 - 1)) * v) + 0.125 * ((2 * u ^ (2 - 1)) * w) + -0.125 * v ^ 2 + -0.125 * w ^ 2 + -0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2), -0.125 + 0.125 * (2 * v ^ (2 - 1)) + 0.125 * u ^ 2 + -0.125 * ((2 * v ^ (2 - 1)) * u) + 0.125 * ((2 * v ^ (2 - 1)) * w) + 0.125 * w ^ 2 + -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2), -0.125 + 0.125 * (2 * w ^ (2 - 1)) + 0.125 * u ^ 2 + 0.125 * v ^ 2 + -0.125 * ((2 * w ^ (2 - 1)) * u) + 0.125 * ((2 * w ^ (2 - 1)) * v) + -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + 0.25w + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), -0.25 + 0.25v + 0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + -0.25w + -0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + -0.25u + 0.25 * v ^ 2 + 0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + -0.25w + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), -0.25 + -0.25v + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + 0.25w + 0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), -0.25 + 0.25u + 0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 + 0.25v + 0.25 * w ^ 2 + -0.25 * (v * w ^ 2), -0.25 + 0.25u + 0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + -0.25v + -0.25 * w ^ 2 + 0.25 * (v * w ^ 2), -0.25 + -0.25u + 0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 + 0.25v + -0.25 * w ^ 2 + -0.25 * (v * w ^ 2), 0.25 + 0.25u + -0.25 * w ^ 2 + -0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + -0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + -0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 + -0.25v + 0.25 * w ^ 2 + 0.25 * (v * w ^ 2), 0.25 + -0.25u + -0.25 * w ^ 2 + 0.25 * (u * w ^ 2), -0.25 * (2 * w ^ (2 - 1)) + 0.25 * ((2 * w ^ (2 - 1)) * u) + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (u * v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w), -0.25 + -0.25w + 0.25 * u ^ 2 + 0.25 * (u ^ 2 * w), 0.25 + -0.25v + -0.25 * u ^ 2 + 0.25 * (u ^ 2 * v)))), Vec(float.(tuple(0.25 + 0.25w + -0.25 * v ^ 2 + -0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + -0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + 0.25u + -0.25 * v ^ 2 + -0.25 * (u * v ^ 2)))), Vec(float.(tuple(-0.25 * (2 * u ^ (2 - 1)) + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w), 0.25 + 0.25w + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * w), 0.25 + 0.25v + -0.25 * u ^ 2 + -0.25 * (u ^ 2 * v)))), Vec(float.(tuple(-0.25 + -0.25w + 0.25 * v ^ 2 + 0.25 * (v ^ 2 * w), -0.25 * (2 * v ^ (2 - 1)) + 0.25 * ((2 * v ^ (2 - 1)) * u) + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w), 0.25 + -0.25u + -0.25 * v ^ 2 + 0.25 * (u * v ^ 2))))) end # ────────────────────────────────────────────────────────────────────────────── -# Lagrange{Hexahedron, 2}: 27-node triquadratic hexahedral element -# (Old name: Hex27) +# Lagrange{Hexahedron{27}, 2}: 27-node triquadratic hexahedral element +# (Old name: Hex27, 27 nodes) # ────────────────────────────────────────────────────────────────────────────── - function get_reference_element_coordinates(::Type{Lagrange{Hexahedron, 2}}) + function get_reference_element_coordinates(::Type{Lagrange{Hexahedron{27}, 2}}) return (Vec{3, Float64}(tuple(-1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(0.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 0.0))) end - function get_reference_element_coordinates(::Lagrange{Hexahedron, 2}) + function get_reference_element_coordinates(::Lagrange{Hexahedron{27}, 2}) return (Vec{3, Float64}(tuple(-1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 1.0)), Vec{3, Float64}(tuple(0.0, -1.0, -1.0)), Vec{3, Float64}(tuple(1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 1.0, -1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(-1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, -1.0, 1.0)), Vec{3, Float64}(tuple(1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 1.0, 1.0)), Vec{3, Float64}(tuple(-1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 0.0))) end - @inline function eval_basis!(::Type{Lagrange{Hexahedron, 2}}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Type{Hexahedron{27}}, ::Type{Lagrange{Hexahedron{27}, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (-0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + -0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + -0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + -0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + -0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + 0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + 0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + 0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + 0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5w + 0.5 * w ^ 2 + 0.5 * (u ^ 2 * w) + 0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5w + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * w) + -0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + 0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (v ^ 2 * u) + -0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (v ^ 2 * u) + 0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + -1.0 * w ^ 2 + u ^ 2 * v ^ 2 + u ^ 2 * w ^ 2 + v ^ 2 * w ^ 2 + -1.0 * (u ^ 2 * v ^ 2 * w ^ 2)) end - @inline function eval_basis!(::Lagrange{Hexahedron, 2}, ::Type{T}, xi::Vec) where T + @inline function get_basis_functions(::Hexahedron{27}, ::Lagrange{Hexahedron{27}, 2}, xi::Vec) (u, v, w) = xi @inbounds return (-0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + -0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + -0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + -0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + -0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + 0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + 0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + 0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + 0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5w + 0.5 * w ^ 2 + 0.5 * (u ^ 2 * w) + 0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5w + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * w) + -0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + 0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (v ^ 2 * u) + -0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (v ^ 2 * u) + 0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + -1.0 * w ^ 2 + u ^ 2 * v ^ 2 + u ^ 2 * w ^ 2 + v ^ 2 * w ^ 2 + -1.0 * (u ^ 2 * v ^ 2 * w ^ 2)) end - @inline function eval_dbasis!(::Type{Lagrange{Hexahedron, 2}}, xi::Vec) + @inline function get_basis_derivatives(::Type{Hexahedron{27}}, ::Type{Lagrange{Hexahedron{27}, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + -0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + -0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + 0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + 0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 + 0.5 * (2 * w ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 + 0.5 * (2 * w ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 + 0.5 * (2 * v ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1)) + -0.5 * v ^ 2 + -0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 + 0.5 * (2 * v ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1)) + 0.5 * v ^ 2 + 0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)) + (2 * u ^ (2 - 1)) * v ^ 2 + (2 * u ^ (2 - 1)) * w ^ 2 + -1.0 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -1.0 * (2 * v ^ (2 - 1)) + u ^ 2 * (2 * v ^ (2 - 1)) + (2 * v ^ (2 - 1)) * w ^ 2 + -1.0 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -1.0 * (2 * w ^ (2 - 1)) + u ^ 2 * (2 * w ^ (2 - 1)) + v ^ 2 * (2 * w ^ (2 - 1)) + -1.0 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1))))))) end - @inline function eval_dbasis!(::Lagrange{Hexahedron, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + -0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + -0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + 0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + 0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 + 0.5 * (2 * w ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 + 0.5 * (2 * w ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 + 0.5 * (2 * v ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1)) + -0.5 * v ^ 2 + -0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 + 0.5 * (2 * v ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1)) + 0.5 * v ^ 2 + 0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)) + (2 * u ^ (2 - 1)) * v ^ 2 + (2 * u ^ (2 - 1)) * w ^ 2 + -1.0 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -1.0 * (2 * v ^ (2 - 1)) + u ^ 2 * (2 * v ^ (2 - 1)) + (2 * v ^ (2 - 1)) * w ^ 2 + -1.0 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -1.0 * (2 * w ^ (2 - 1)) + u ^ 2 * (2 * w ^ (2 - 1)) + v ^ 2 * (2 * w ^ (2 - 1)) + -1.0 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1))))))) - end - @inline function get_basis_functions(::Type{Hexahedron}, ::Type{Lagrange{Hexahedron, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (-0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + -0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + -0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + -0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + -0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + 0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + 0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + 0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + 0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5w + 0.5 * w ^ 2 + 0.5 * (u ^ 2 * w) + 0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5w + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * w) + -0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + 0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (v ^ 2 * u) + -0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (v ^ 2 * u) + 0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + -1.0 * w ^ 2 + u ^ 2 * v ^ 2 + u ^ 2 * w ^ 2 + v ^ 2 * w ^ 2 + -1.0 * (u ^ 2 * v ^ 2 * w ^ 2)) - end - @inline function get_basis_functions(::Hexahedron, ::Lagrange{Hexahedron, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (-0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + -0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + -0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + -0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + 0.125 * (u * v ^ 2 * w) + 0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + 0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), -0.125 * (u * v * w) + 0.125 * (u ^ 2 * v * w) + -0.125 * (u * v ^ 2 * w) + -0.125 * (u * v * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w) + 0.125 * (u ^ 2 * v * w ^ 2) + -0.125 * (u * v ^ 2 * w ^ 2) + 0.125 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + -0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + -0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + -0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + -0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + 0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + -0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + -0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * v) + 0.25 * (u ^ 2 * v) + 0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * v) + 0.25 * (u ^ 2 * v) + -0.25 * (v ^ 2 * u) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v * w ^ 2) + -0.25 * (u ^ 2 * v * w ^ 2) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (v * w) + 0.25 * (v ^ 2 * w) + -0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + 0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (u * w) + 0.25 * (u ^ 2 * w) + 0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), 0.25 * (v * w) + 0.25 * (v ^ 2 * w) + 0.25 * (w ^ 2 * v) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + -0.25 * (u ^ 2 * v * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.25 * (u * w) + 0.25 * (u ^ 2 * w) + -0.25 * (w ^ 2 * u) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * v ^ 2 * w) + -0.25 * (u ^ 2 * v ^ 2 * w) + 0.25 * (u * v ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5w + 0.5 * w ^ 2 + 0.5 * (u ^ 2 * w) + 0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5w + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * w) + -0.5 * (v ^ 2 * w) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5v + 0.5 * v ^ 2 + 0.5 * (u ^ 2 * v) + 0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + -0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5u + 0.5 * u ^ 2 + -0.5 * (v ^ 2 * u) + -0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 0.5v + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * v) + -0.5 * (w ^ 2 * v) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), -0.5u + 0.5 * u ^ 2 + 0.5 * (v ^ 2 * u) + 0.5 * (w ^ 2 * u) + -0.5 * (u ^ 2 * v ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + -0.5 * (u * v ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * w ^ 2), 1 + -1.0 * u ^ 2 + -1.0 * v ^ 2 + -1.0 * w ^ 2 + u ^ 2 * v ^ 2 + u ^ 2 * w ^ 2 + v ^ 2 * w ^ 2 + -1.0 * (u ^ 2 * v ^ 2 * w ^ 2)) - end - @inline function get_basis_derivatives(::Type{Hexahedron}, ::Type{Lagrange{Hexahedron, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + -0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + -0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + 0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + 0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 + 0.5 * (2 * w ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 + 0.5 * (2 * w ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 + 0.5 * (2 * v ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1)) + -0.5 * v ^ 2 + -0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 + 0.5 * (2 * v ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1)) + 0.5 * v ^ 2 + 0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)) + (2 * u ^ (2 - 1)) * v ^ 2 + (2 * u ^ (2 - 1)) * w ^ 2 + -1.0 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -1.0 * (2 * v ^ (2 - 1)) + u ^ 2 * (2 * v ^ (2 - 1)) + (2 * v ^ (2 - 1)) * w ^ 2 + -1.0 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -1.0 * (2 * w ^ (2 - 1)) + u ^ 2 * (2 * w ^ (2 - 1)) + v ^ 2 * (2 * w ^ (2 - 1)) + -1.0 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1))))))) - end - @inline function get_basis_derivatives(::Hexahedron, ::Lagrange{Hexahedron, 2}, xi::Vec) + @inline function get_basis_derivatives(::Hexahedron{27}, ::Lagrange{Hexahedron{27}, 2}, xi::Vec) (u, v, w) = xi @inbounds return (Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + -0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + -0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + -0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + -0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + -0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + -0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + -0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + -0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + 0.125 * (v ^ 2 * w) + 0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.125 * (u * w) + 0.125 * (u ^ 2 * w) + 0.125 * (u * (2 * v ^ (2 - 1)) * w) + 0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + 0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.125 * (u * v) + 0.125 * (u ^ 2 * v) + 0.125 * (u * v ^ 2) + 0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.125 * (v * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w) + -0.125 * (v ^ 2 * w) + -0.125 * (v * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.125 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.125 * (v ^ 2 * w ^ 2) + 0.125 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.125 * (u * w) + 0.125 * (u ^ 2 * w) + -0.125 * (u * (2 * v ^ (2 - 1)) * w) + -0.125 * (u * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.125 * (u ^ 2 * w ^ 2) + -0.125 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.125 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.125 * (u * v) + 0.125 * (u ^ 2 * v) + -0.125 * (u * v ^ 2) + -0.125 * (u * v * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2) + 0.125 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.125 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.125 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + -0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + -0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + -0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + 0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + -0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + 0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + -0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + -0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + -0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + 0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25v + 0.25 * ((2 * u ^ (2 - 1)) * v) + -0.25 * v ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.25 * (v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * v ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.25 * (u * w ^ 2) + -0.25 * (u ^ 2 * w ^ 2) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25 * (u * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25v + 0.25 * v ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25u + 0.25 * u ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25 * ((2 * u ^ (2 - 1)) * v * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25w + 0.25 * ((2 * v ^ (2 - 1)) * w) + 0.25 * w ^ 2 + 0.25 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.25v + 0.25 * v ^ 2 + 0.25 * ((2 * w ^ (2 - 1)) * v) + 0.25 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v) + -0.25 * (u ^ 2 * v ^ 2) + -0.25 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.25w + 0.25 * ((2 * u ^ (2 - 1)) * w) + -0.25 * w ^ 2 + 0.25 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.25 * (v ^ 2 * w) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.25 * (v ^ 2 * w ^ 2) + -0.25 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.25 * (u * (2 * v ^ (2 - 1)) * w) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.25 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + -0.25 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.25u + 0.25 * u ^ 2 + -0.25 * ((2 * w ^ (2 - 1)) * u) + 0.25 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.25 * (u * v ^ 2) + -0.25 * (u ^ 2 * v ^ 2) + 0.25 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + -0.25 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 + 0.5 * (2 * w ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * w) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * w) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 + 0.5 * (2 * w ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * v ^ 2 + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 + 0.5 * (2 * v ^ (2 - 1)) + 0.5 * u ^ 2 + 0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + -0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0.5 + 0.5 * (2 * u ^ (2 - 1)) + -0.5 * v ^ 2 + -0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + 0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + 0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 * ((2 * u ^ (2 - 1)) * v) + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 + 0.5 * (2 * v ^ (2 - 1)) + -0.5 * u ^ 2 + -0.5 * w ^ 2 + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * ((2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -0.5 * ((2 * w ^ (2 - 1)) * v) + -0.5 * (v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-0.5 + 0.5 * (2 * u ^ (2 - 1)) + 0.5 * v ^ 2 + 0.5 * w ^ 2 + -0.5 * ((2 * u ^ (2 - 1)) * v ^ 2) + -0.5 * ((2 * u ^ (2 - 1)) * w ^ 2) + -0.5 * (v ^ 2 * w ^ 2) + 0.5 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), 0.5 * ((2 * v ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * v ^ (2 - 1))) + -0.5 * (u * (2 * v ^ (2 - 1)) * w ^ 2) + 0.5 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), 0.5 * ((2 * w ^ (2 - 1)) * u) + -0.5 * (u ^ 2 * (2 * w ^ (2 - 1))) + -0.5 * (u * v ^ 2 * (2 * w ^ (2 - 1))) + 0.5 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 * (2 * u ^ (2 - 1)) + (2 * u ^ (2 - 1)) * v ^ 2 + (2 * u ^ (2 - 1)) * w ^ 2 + -1.0 * ((2 * u ^ (2 - 1)) * v ^ 2 * w ^ 2), -1.0 * (2 * v ^ (2 - 1)) + u ^ 2 * (2 * v ^ (2 - 1)) + (2 * v ^ (2 - 1)) * w ^ 2 + -1.0 * (u ^ 2 * (2 * v ^ (2 - 1)) * w ^ 2), -1.0 * (2 * w ^ (2 - 1)) + u ^ 2 * (2 * w ^ (2 - 1)) + v ^ 2 * (2 * w ^ (2 - 1)) + -1.0 * (u ^ 2 * v ^ 2 * (2 * w ^ (2 - 1))))))) end # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Pyramid, 1}: 5-node linear pyramid element -# (Old name: Pyr5) +# (Old name: Pyr5, 5 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Pyramid, 1}}) @@ -568,22 +376,6 @@ function get_reference_element_coordinates(::Lagrange{Pyramid, 1}) return (Vec{3, Float64}(tuple(-1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, -1.0, 0.0)), Vec{3, Float64}(tuple(1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(-1.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Pyramid, 1}}, ::Type{T}, xi::Vec) where T - (u, v, w) = xi - @inbounds return (0.25 + -0.25u + -0.25v + -0.25w + 0.25 * (u * v), 0.25 + 0.25u + -0.25v + -0.25w + -0.25 * (u * v), 0.25 + 0.25u + 0.25v + -0.25w + 0.25 * (u * v), 0.25 + -0.25u + 0.25v + -0.25w + -0.25 * (u * v), +w) - end - @inline function eval_basis!(::Lagrange{Pyramid, 1}, ::Type{T}, xi::Vec) where T - (u, v, w) = xi - @inbounds return (0.25 + -0.25u + -0.25v + -0.25w + 0.25 * (u * v), 0.25 + 0.25u + -0.25v + -0.25w + -0.25 * (u * v), 0.25 + 0.25u + 0.25v + -0.25w + 0.25 * (u * v), 0.25 + -0.25u + 0.25v + -0.25w + -0.25 * (u * v), +w) - end - @inline function eval_dbasis!(::Type{Lagrange{Pyramid, 1}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.25 + 0.25v, -0.25 + 0.25u, -0.25))), Vec(float.(tuple(0.25 + -0.25v, -0.25 + -0.25u, -0.25))), Vec(float.(tuple(0.25 + 0.25v, 0.25 + 0.25u, -0.25))), Vec(float.(tuple(-0.25 + -0.25v, 0.25 + -0.25u, -0.25))), Vec(float.(tuple(0, 0, 1)))) - end - @inline function eval_dbasis!(::Lagrange{Pyramid, 1}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.25 + 0.25v, -0.25 + 0.25u, -0.25))), Vec(float.(tuple(0.25 + -0.25v, -0.25 + -0.25u, -0.25))), Vec(float.(tuple(0.25 + 0.25v, 0.25 + 0.25u, -0.25))), Vec(float.(tuple(-0.25 + -0.25v, 0.25 + -0.25u, -0.25))), Vec(float.(tuple(0, 0, 1)))) - end @inline function get_basis_functions(::Type{Pyramid}, ::Type{Lagrange{Pyramid, 1}}, xi::Vec) (u, v, w) = xi @inbounds return (0.25 + -0.25u + -0.25v + -0.25w + 0.25 * (u * v), 0.25 + 0.25u + -0.25v + -0.25w + -0.25 * (u * v), 0.25 + 0.25u + 0.25v + -0.25w + 0.25 * (u * v), 0.25 + -0.25u + 0.25v + -0.25w + -0.25 * (u * v), +w) @@ -603,7 +395,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Wedge, 1}: 6-node linear wedge element (triangular prism) -# (Old name: Wedge6) +# (Old name: Wedge6, 6 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Wedge, 1}}) @@ -612,22 +404,6 @@ function get_reference_element_coordinates(::Lagrange{Wedge, 1}) return (Vec{3, Float64}(tuple(0.0, 0.0, -1.0)), Vec{3, Float64}(tuple(1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 1.0, -1.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0)), Vec{3, Float64}(tuple(1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 1.0, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Wedge, 1}}, ::Type{T}, xi::Vec) where T - (u, v, w) = xi - @inbounds return (0.5 + -0.5u + -0.5v + -0.5w + 0.5 * (u * w) + 0.5 * (v * w), 0.5u + -0.5 * (u * w), 0.5v + -0.5 * (v * w), 0.5 + -0.5u + -0.5v + 0.5w + -0.5 * (u * w) + -0.5 * (v * w), 0.5u + 0.5 * (u * w), 0.5v + 0.5 * (v * w)) - end - @inline function eval_basis!(::Lagrange{Wedge, 1}, ::Type{T}, xi::Vec) where T - (u, v, w) = xi - @inbounds return (0.5 + -0.5u + -0.5v + -0.5w + 0.5 * (u * w) + 0.5 * (v * w), 0.5u + -0.5 * (u * w), 0.5v + -0.5 * (v * w), 0.5 + -0.5u + -0.5v + 0.5w + -0.5 * (u * w) + -0.5 * (v * w), 0.5u + 0.5 * (u * w), 0.5v + 0.5 * (v * w)) - end - @inline function eval_dbasis!(::Type{Lagrange{Wedge, 1}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.5 + 0.5w, -0.5 + 0.5w, -0.5 + 0.5u + 0.5v))), Vec(float.(tuple(0.5 + -0.5w, 0, -0.5u))), Vec(float.(tuple(0, 0.5 + -0.5w, -0.5v))), Vec(float.(tuple(-0.5 + -0.5w, -0.5 + -0.5w, 0.5 + -0.5u + -0.5v))), Vec(float.(tuple(0.5 + 0.5w, 0, 0.5u))), Vec(float.(tuple(0, 0.5 + 0.5w, 0.5v)))) - end - @inline function eval_dbasis!(::Lagrange{Wedge, 1}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-0.5 + 0.5w, -0.5 + 0.5w, -0.5 + 0.5u + 0.5v))), Vec(float.(tuple(0.5 + -0.5w, 0, -0.5u))), Vec(float.(tuple(0, 0.5 + -0.5w, -0.5v))), Vec(float.(tuple(-0.5 + -0.5w, -0.5 + -0.5w, 0.5 + -0.5u + -0.5v))), Vec(float.(tuple(0.5 + 0.5w, 0, 0.5u))), Vec(float.(tuple(0, 0.5 + 0.5w, 0.5v)))) - end @inline function get_basis_functions(::Type{Wedge}, ::Type{Lagrange{Wedge, 1}}, xi::Vec) (u, v, w) = xi @inbounds return (0.5 + -0.5u + -0.5v + -0.5w + 0.5 * (u * w) + 0.5 * (v * w), 0.5u + -0.5 * (u * w), 0.5v + -0.5 * (v * w), 0.5 + -0.5u + -0.5v + 0.5w + -0.5 * (u * w) + -0.5 * (v * w), 0.5u + 0.5 * (u * w), 0.5v + 0.5 * (v * w)) @@ -647,7 +423,7 @@ # ────────────────────────────────────────────────────────────────────────────── # Lagrange{Wedge, 2}: 15-node quadratic wedge element -# (Old name: Wedge15) +# (Old name: Wedge15, 15 nodes) # ────────────────────────────────────────────────────────────────────────────── function get_reference_element_coordinates(::Type{Lagrange{Wedge, 2}}) @@ -656,22 +432,6 @@ function get_reference_element_coordinates(::Lagrange{Wedge, 2}) return (Vec{3, Float64}(tuple(0.0, 0.0, -1.0)), Vec{3, Float64}(tuple(1.0, 0.0, -1.0)), Vec{3, Float64}(tuple(0.0, 1.0, -1.0)), Vec{3, Float64}(tuple(0.0, 0.0, 1.0)), Vec{3, Float64}(tuple(1.0, 0.0, 1.0)), Vec{3, Float64}(tuple(0.0, 1.0, 1.0)), Vec{3, Float64}(tuple(0.5, 0.0, -1.0)), Vec{3, Float64}(tuple(0.5, 0.5, -1.0)), Vec{3, Float64}(tuple(0.0, 0.5, -1.0)), Vec{3, Float64}(tuple(0.0, 0.0, 0.0)), Vec{3, Float64}(tuple(1.0, 0.0, 0.0)), Vec{3, Float64}(tuple(0.0, 1.0, 0.0)), Vec{3, Float64}(tuple(0.5, 0.0, 1.0)), Vec{3, Float64}(tuple(0.5, 0.5, 1.0)), Vec{3, Float64}(tuple(0.0, 0.5, 1.0))) end - @inline function eval_basis!(::Type{Lagrange{Wedge, 2}}, ::Type{T}, xi::Vec) where T - (u, v, w) = xi - @inbounds return (-1.0u + -1.0v + -0.5w + u ^ 2 + v ^ 2 + 0.5 * w ^ 2 + 2.0 * (u * v) + 1.5 * (u * w) + 1.5 * (v * w) + -1.0 * (u ^ 2 * w) + -1.0 * (v ^ 2 * w) + -2.0 * (u * v * w) + -0.5 * (u * w ^ 2) + -0.5 * (v * w ^ 2), -1.0u + u ^ 2 + 0.5 * (u * w) + -1.0 * (u ^ 2 * w) + 0.5 * (u * w ^ 2), -1.0v + v ^ 2 + 0.5 * (v * w) + -1.0 * (v ^ 2 * w) + 0.5 * (v * w ^ 2), -1.0u + -1.0v + 0.5w + u ^ 2 + v ^ 2 + 0.5 * w ^ 2 + 2.0 * (u * v) + -1.5 * (u * w) + -1.5 * (v * w) + u ^ 2 * w + v ^ 2 * w + 2.0 * (u * v * w) + -0.5 * (u * w ^ 2) + -0.5 * (v * w ^ 2), -1.0u + u ^ 2 + -0.5 * (u * w) + u ^ 2 * w + 0.5 * (u * w ^ 2), -1.0v + v ^ 2 + -0.5 * (v * w) + v ^ 2 * w + 0.5 * (v * w ^ 2), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v) + -2.0 * (u * w) + 2.0 * (u ^ 2 * w) + 2.0 * (u * v * w), 2.0 * (u * v) + -2.0 * (u * v * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v) + -2.0 * (v * w) + 2.0 * (v ^ 2 * w) + 2.0 * (u * v * w), 1 + -1.0u + -1.0v + -1.0 * w ^ 2 + u * w ^ 2 + v * w ^ 2, u + -1.0 * (u * w ^ 2), v + -1.0 * (v * w ^ 2), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v) + 2.0 * (u * w) + -2.0 * (u ^ 2 * w) + -2.0 * (u * v * w), 2.0 * (u * v) + 2.0 * (u * v * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v) + 2.0 * (v * w) + -2.0 * (v ^ 2 * w) + -2.0 * (u * v * w)) - end - @inline function eval_basis!(::Lagrange{Wedge, 2}, ::Type{T}, xi::Vec) where T - (u, v, w) = xi - @inbounds return (-1.0u + -1.0v + -0.5w + u ^ 2 + v ^ 2 + 0.5 * w ^ 2 + 2.0 * (u * v) + 1.5 * (u * w) + 1.5 * (v * w) + -1.0 * (u ^ 2 * w) + -1.0 * (v ^ 2 * w) + -2.0 * (u * v * w) + -0.5 * (u * w ^ 2) + -0.5 * (v * w ^ 2), -1.0u + u ^ 2 + 0.5 * (u * w) + -1.0 * (u ^ 2 * w) + 0.5 * (u * w ^ 2), -1.0v + v ^ 2 + 0.5 * (v * w) + -1.0 * (v ^ 2 * w) + 0.5 * (v * w ^ 2), -1.0u + -1.0v + 0.5w + u ^ 2 + v ^ 2 + 0.5 * w ^ 2 + 2.0 * (u * v) + -1.5 * (u * w) + -1.5 * (v * w) + u ^ 2 * w + v ^ 2 * w + 2.0 * (u * v * w) + -0.5 * (u * w ^ 2) + -0.5 * (v * w ^ 2), -1.0u + u ^ 2 + -0.5 * (u * w) + u ^ 2 * w + 0.5 * (u * w ^ 2), -1.0v + v ^ 2 + -0.5 * (v * w) + v ^ 2 * w + 0.5 * (v * w ^ 2), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v) + -2.0 * (u * w) + 2.0 * (u ^ 2 * w) + 2.0 * (u * v * w), 2.0 * (u * v) + -2.0 * (u * v * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v) + -2.0 * (v * w) + 2.0 * (v ^ 2 * w) + 2.0 * (u * v * w), 1 + -1.0u + -1.0v + -1.0 * w ^ 2 + u * w ^ 2 + v * w ^ 2, u + -1.0 * (u * w ^ 2), v + -1.0 * (v * w ^ 2), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v) + 2.0 * (u * w) + -2.0 * (u ^ 2 * w) + -2.0 * (u * v * w), 2.0 * (u * v) + 2.0 * (u * v * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v) + 2.0 * (v * w) + -2.0 * (v ^ 2 * w) + -2.0 * (u * v * w)) - end - @inline function eval_dbasis!(::Type{Lagrange{Wedge, 2}}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + 2.0v + 1.5w + -1.0 * ((2 * u ^ (2 - 1)) * w) + -2.0 * (v * w) + -0.5 * w ^ 2, -1.0 + 2 * v ^ (2 - 1) + 2.0u + 1.5w + -1.0 * ((2 * v ^ (2 - 1)) * w) + -2.0 * (u * w) + -0.5 * w ^ 2, -0.5 + 0.5 * (2 * w ^ (2 - 1)) + 1.5u + 1.5v + -1.0 * u ^ 2 + -1.0 * v ^ 2 + -2.0 * (u * v) + -0.5 * (u * (2 * w ^ (2 - 1))) + -0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + 0.5w + -1.0 * ((2 * u ^ (2 - 1)) * w) + 0.5 * w ^ 2, 0, 0.5u + -1.0 * u ^ 2 + 0.5 * (u * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0, -1.0 + 2 * v ^ (2 - 1) + 0.5w + -1.0 * ((2 * v ^ (2 - 1)) * w) + 0.5 * w ^ 2, 0.5v + -1.0 * v ^ 2 + 0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + 2.0v + -1.5w + (2 * u ^ (2 - 1)) * w + 2.0 * (v * w) + -0.5 * w ^ 2, -1.0 + 2 * v ^ (2 - 1) + 2.0u + -1.5w + (2 * v ^ (2 - 1)) * w + 2.0 * (u * w) + -0.5 * w ^ 2, 0.5 + 0.5 * (2 * w ^ (2 - 1)) + -1.5u + -1.5v + u ^ 2 + v ^ 2 + 2.0 * (u * v) + -0.5 * (u * (2 * w ^ (2 - 1))) + -0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + -0.5w + (2 * u ^ (2 - 1)) * w + 0.5 * w ^ 2, 0, -0.5u + u ^ 2 + 0.5 * (u * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0, -1.0 + 2 * v ^ (2 - 1) + -0.5w + (2 * v ^ (2 - 1)) * w + 0.5 * w ^ 2, -0.5v + v ^ 2 + 0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(2.0 + -2.0 * (2 * u ^ (2 - 1)) + -2.0v + -2.0w + 2.0 * ((2 * u ^ (2 - 1)) * w) + 2.0 * (v * w), -2.0u + 2.0 * (u * w), -2.0u + 2.0 * u ^ 2 + 2.0 * (u * v)))), Vec(float.(tuple(2.0v + -2.0 * (v * w), 2.0u + -2.0 * (u * w), -2.0 * (u * v)))), Vec(float.(tuple(-2.0v + 2.0 * (v * w), 2.0 + -2.0 * (2 * v ^ (2 - 1)) + -2.0u + -2.0w + 2.0 * ((2 * v ^ (2 - 1)) * w) + 2.0 * (u * w), -2.0v + 2.0 * v ^ 2 + 2.0 * (u * v)))), Vec(float.(tuple(-1.0 + w ^ 2, -1.0 + w ^ 2, -1.0 * (2 * w ^ (2 - 1)) + u * (2 * w ^ (2 - 1)) + v * (2 * w ^ (2 - 1))))), Vec(float.(tuple(1 + -1.0 * w ^ 2, 0, -1.0 * (u * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0, 1 + -1.0 * w ^ 2, -1.0 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(2.0 + -2.0 * (2 * u ^ (2 - 1)) + -2.0v + 2.0w + -2.0 * ((2 * u ^ (2 - 1)) * w) + -2.0 * (v * w), -2.0u + -2.0 * (u * w), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v)))), Vec(float.(tuple(2.0v + 2.0 * (v * w), 2.0u + 2.0 * (u * w), 2.0 * (u * v)))), Vec(float.(tuple(-2.0v + -2.0 * (v * w), 2.0 + -2.0 * (2 * v ^ (2 - 1)) + -2.0u + 2.0w + -2.0 * ((2 * v ^ (2 - 1)) * w) + -2.0 * (u * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v))))) - end - @inline function eval_dbasis!(::Lagrange{Wedge, 2}, xi::Vec) - (u, v, w) = xi - @inbounds return (Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + 2.0v + 1.5w + -1.0 * ((2 * u ^ (2 - 1)) * w) + -2.0 * (v * w) + -0.5 * w ^ 2, -1.0 + 2 * v ^ (2 - 1) + 2.0u + 1.5w + -1.0 * ((2 * v ^ (2 - 1)) * w) + -2.0 * (u * w) + -0.5 * w ^ 2, -0.5 + 0.5 * (2 * w ^ (2 - 1)) + 1.5u + 1.5v + -1.0 * u ^ 2 + -1.0 * v ^ 2 + -2.0 * (u * v) + -0.5 * (u * (2 * w ^ (2 - 1))) + -0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + 0.5w + -1.0 * ((2 * u ^ (2 - 1)) * w) + 0.5 * w ^ 2, 0, 0.5u + -1.0 * u ^ 2 + 0.5 * (u * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0, -1.0 + 2 * v ^ (2 - 1) + 0.5w + -1.0 * ((2 * v ^ (2 - 1)) * w) + 0.5 * w ^ 2, 0.5v + -1.0 * v ^ 2 + 0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + 2.0v + -1.5w + (2 * u ^ (2 - 1)) * w + 2.0 * (v * w) + -0.5 * w ^ 2, -1.0 + 2 * v ^ (2 - 1) + 2.0u + -1.5w + (2 * v ^ (2 - 1)) * w + 2.0 * (u * w) + -0.5 * w ^ 2, 0.5 + 0.5 * (2 * w ^ (2 - 1)) + -1.5u + -1.5v + u ^ 2 + v ^ 2 + 2.0 * (u * v) + -0.5 * (u * (2 * w ^ (2 - 1))) + -0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(-1.0 + 2 * u ^ (2 - 1) + -0.5w + (2 * u ^ (2 - 1)) * w + 0.5 * w ^ 2, 0, -0.5u + u ^ 2 + 0.5 * (u * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0, -1.0 + 2 * v ^ (2 - 1) + -0.5w + (2 * v ^ (2 - 1)) * w + 0.5 * w ^ 2, -0.5v + v ^ 2 + 0.5 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(2.0 + -2.0 * (2 * u ^ (2 - 1)) + -2.0v + -2.0w + 2.0 * ((2 * u ^ (2 - 1)) * w) + 2.0 * (v * w), -2.0u + 2.0 * (u * w), -2.0u + 2.0 * u ^ 2 + 2.0 * (u * v)))), Vec(float.(tuple(2.0v + -2.0 * (v * w), 2.0u + -2.0 * (u * w), -2.0 * (u * v)))), Vec(float.(tuple(-2.0v + 2.0 * (v * w), 2.0 + -2.0 * (2 * v ^ (2 - 1)) + -2.0u + -2.0w + 2.0 * ((2 * v ^ (2 - 1)) * w) + 2.0 * (u * w), -2.0v + 2.0 * v ^ 2 + 2.0 * (u * v)))), Vec(float.(tuple(-1.0 + w ^ 2, -1.0 + w ^ 2, -1.0 * (2 * w ^ (2 - 1)) + u * (2 * w ^ (2 - 1)) + v * (2 * w ^ (2 - 1))))), Vec(float.(tuple(1 + -1.0 * w ^ 2, 0, -1.0 * (u * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(0, 1 + -1.0 * w ^ 2, -1.0 * (v * (2 * w ^ (2 - 1)))))), Vec(float.(tuple(2.0 + -2.0 * (2 * u ^ (2 - 1)) + -2.0v + 2.0w + -2.0 * ((2 * u ^ (2 - 1)) * w) + -2.0 * (v * w), -2.0u + -2.0 * (u * w), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v)))), Vec(float.(tuple(2.0v + 2.0 * (v * w), 2.0u + 2.0 * (u * w), 2.0 * (u * v)))), Vec(float.(tuple(-2.0v + -2.0 * (v * w), 2.0 + -2.0 * (2 * v ^ (2 - 1)) + -2.0u + 2.0w + -2.0 * ((2 * v ^ (2 - 1)) * w) + -2.0 * (u * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v))))) - end @inline function get_basis_functions(::Type{Wedge}, ::Type{Lagrange{Wedge, 2}}, xi::Vec) (u, v, w) = xi @inbounds return (-1.0u + -1.0v + -0.5w + u ^ 2 + v ^ 2 + 0.5 * w ^ 2 + 2.0 * (u * v) + 1.5 * (u * w) + 1.5 * (v * w) + -1.0 * (u ^ 2 * w) + -1.0 * (v ^ 2 * w) + -2.0 * (u * v * w) + -0.5 * (u * w ^ 2) + -0.5 * (v * w ^ 2), -1.0u + u ^ 2 + 0.5 * (u * w) + -1.0 * (u ^ 2 * w) + 0.5 * (u * w ^ 2), -1.0v + v ^ 2 + 0.5 * (v * w) + -1.0 * (v ^ 2 * w) + 0.5 * (v * w ^ 2), -1.0u + -1.0v + 0.5w + u ^ 2 + v ^ 2 + 0.5 * w ^ 2 + 2.0 * (u * v) + -1.5 * (u * w) + -1.5 * (v * w) + u ^ 2 * w + v ^ 2 * w + 2.0 * (u * v * w) + -0.5 * (u * w ^ 2) + -0.5 * (v * w ^ 2), -1.0u + u ^ 2 + -0.5 * (u * w) + u ^ 2 * w + 0.5 * (u * w ^ 2), -1.0v + v ^ 2 + -0.5 * (v * w) + v ^ 2 * w + 0.5 * (v * w ^ 2), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v) + -2.0 * (u * w) + 2.0 * (u ^ 2 * w) + 2.0 * (u * v * w), 2.0 * (u * v) + -2.0 * (u * v * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v) + -2.0 * (v * w) + 2.0 * (v ^ 2 * w) + 2.0 * (u * v * w), 1 + -1.0u + -1.0v + -1.0 * w ^ 2 + u * w ^ 2 + v * w ^ 2, u + -1.0 * (u * w ^ 2), v + -1.0 * (v * w ^ 2), 2.0u + -2.0 * u ^ 2 + -2.0 * (u * v) + 2.0 * (u * w) + -2.0 * (u ^ 2 * w) + -2.0 * (u * v * w), 2.0 * (u * v) + 2.0 * (u * v * w), 2.0v + -2.0 * v ^ 2 + -2.0 * (u * v) + 2.0 * (v * w) + -2.0 * (v ^ 2 * w) + -2.0 * (u * v * w))