# Copyright (C) 2021-2025 Université Gustave Eiffel.
# This file is part of the EasyFEA project.
# EasyFEA is distributed under the terms of the GNU General Public License v3, see LICENSE.txt and CREDITS.md for more information.
"""Hexa element module."""
import numpy as np
from .._group_elems import _GroupElem
from ...utilities import _types
[docs]
class HEXA8(_GroupElem):
# v
# 3----------2
# |\ ^ |\
# | \ | | \
# | \ | | \
# | 7------+---6
# | | +-- |-- | -> u
# 0---+---\--1 |
# \ | \ \ |
# \ | \ \ |
# \| w \|
# 4----------5
def __init__(
self,
gmshId: int,
connect: _types.IntArray,
coordGlob: _types.FloatArray,
nodes: _types.IntArray,
):
super().__init__(gmshId, connect, coordGlob, nodes)
@property
def origin(self) -> list[int]:
return [-1, -1, -1]
@property
def triangles(self) -> list[int]:
return super().triangles
@property
def surfaces(self) -> _types.IntArray:
return np.array(
[
[0, 1, 2, 3],
[0, 4, 5, 1],
[0, 3, 7, 4],
[6, 7, 3, 2],
[6, 2, 1, 5],
[6, 5, 4, 7],
],
dtype=int,
)
@property
def faces(self) -> _types.IntArray:
return self.surfaces
[docs]
def Get_Local_Coords(self) -> _types.FloatArray:
list_x = [-1, 1, 1, -1, -1, 1, 1, -1]
list_y = [-1, -1, 1, 1, -1, -1, 1, 1]
list_z = [-1, -1, -1, -1, 1, 1, 1, 1]
local_coords = np.array([list_x, list_y, list_z]).T
return local_coords
@property
def segments(self) -> _types.IntArray:
return np.array(
[
[0, 1],
[1, 2],
[2, 3],
[0, 3],
[0, 4],
[1, 5],
[2, 6],
[3, 7],
[4, 5],
[5, 6],
[6, 7],
[4, 7],
],
dtype=int,
)
[docs]
def _N(self) -> _types.FloatArray:
N1 = lambda r, s, t: -(r - 1) * (s - 1) * (t - 1) / 8
N2 = lambda r, s, t: (r + 1) * (s - 1) * (t - 1) / 8
N3 = lambda r, s, t: -(r + 1) * (s + 1) * (t - 1) / 8
N4 = lambda r, s, t: (r - 1) * (s + 1) * (t - 1) / 8
N5 = lambda r, s, t: (r - 1) * (s - 1) * (t + 1) / 8
N6 = lambda r, s, t: -(r + 1) * (s - 1) * (t + 1) / 8
N7 = lambda r, s, t: (r + 1) * (s + 1) * (t + 1) / 8
N8 = lambda r, s, t: -(r - 1) * (s + 1) * (t + 1) / 8
N = np.array([N1, N2, N3, N4, N5, N6, N7, N8]).reshape(-1, 1)
return N
[docs]
def _dN(self) -> _types.FloatArray:
dN1 = [
lambda r, s, t: -(s - 1) * (t - 1) / 8,
lambda r, s, t: -(r - 1) * (t - 1) / 8,
lambda r, s, t: -(r - 1) * (s - 1) / 8,
]
dN2 = [
lambda r, s, t: (s - 1) * (t - 1) / 8,
lambda r, s, t: (r + 1) * (t - 1) / 8,
lambda r, s, t: (r + 1) * (s - 1) / 8,
]
dN3 = [
lambda r, s, t: -(s + 1) * (t - 1) / 8,
lambda r, s, t: -(r + 1) * (t - 1) / 8,
lambda r, s, t: -(r + 1) * (s + 1) / 8,
]
dN4 = [
lambda r, s, t: (s + 1) * (t - 1) / 8,
lambda r, s, t: (r - 1) * (t - 1) / 8,
lambda r, s, t: (r - 1) * (s + 1) / 8,
]
dN5 = [
lambda r, s, t: (s - 1) * (t + 1) / 8,
lambda r, s, t: (r - 1) * (t + 1) / 8,
lambda r, s, t: (r - 1) * (s - 1) / 8,
]
dN6 = [
lambda r, s, t: -(s - 1) * (t + 1) / 8,
lambda r, s, t: -(r + 1) * (t + 1) / 8,
lambda r, s, t: -(r + 1) * (s - 1) / 8,
]
dN7 = [
lambda r, s, t: (s + 1) * (t + 1) / 8,
lambda r, s, t: (r + 1) * (t + 1) / 8,
lambda r, s, t: (r + 1) * (s + 1) / 8,
]
dN8 = [
lambda r, s, t: -(s + 1) * (t + 1) / 8,
lambda r, s, t: -(r - 1) * (t + 1) / 8,
lambda r, s, t: -(r - 1) * (s + 1) / 8,
]
dN = np.array([dN1, dN2, dN3, dN4, dN5, dN6, dN7, dN8])
return dN
[docs]
def _ddN(self) -> _types.FloatArray:
return super()._ddN()
[docs]
def _dddN(self) -> _types.FloatArray:
return super()._dddN()
[docs]
def _ddddN(self) -> _types.FloatArray:
return super()._ddddN()
[docs]
class HEXA20(_GroupElem):
# v
# 3----13----2
# |\ ^ |\
# | 15 | | 14
# 9 \ | 11 \
# | 7----19+---6
# | | +-- |-- | -> u
# 0---+-8-\--1 |
# \ 17 \ \ 18
# 10 | \ 12|
# \| w \|
# 4----16----5
def __init__(
self,
gmshId: int,
connect: _types.IntArray,
coordGlob: _types.FloatArray,
nodes: _types.IntArray,
):
super().__init__(gmshId, connect, coordGlob, nodes)
@property
def origin(self) -> list[int]:
return [-1, -1, -1]
@property
def triangles(self) -> list[int]:
return super().triangles
@property
def surfaces(self) -> _types.IntArray:
return np.array(
[
[0, 8, 1, 11, 2, 13, 3, 9], # 20
[0, 10, 4, 16, 5, 12, 1, 8], # 21
[0, 9, 3, 15, 7, 17, 4, 10], # 22
[6, 14, 2, 11, 1, 12, 5, 18], # 23
[6, 19, 7, 15, 3, 13, 2, 14], # 24
[6, 18, 5, 16, 4, 17, 7, 19], # 25
],
dtype=int,
)
@property
def faces(self) -> _types.IntArray:
return np.array(
[
[0, 1, 2, 3, 8, 11, 13, 9], # 20
[0, 4, 5, 1, 10, 16, 12, 8], # 21
[0, 3, 7, 4, 9, 15, 17, 10], # 22
[6, 2, 1, 5, 14, 11, 12, 18], # 23
[6, 7, 3, 2, 19, 15, 13, 14], # 24
[6, 5, 4, 7, 18, 16, 17, 19], # 25
],
dtype=int,
)
[docs]
def Get_Local_Coords(self):
# fmt: off
list_x = [
-1,1,1,-1,
-1,1,1,-1,
0,-1,-1,1,
1,0,1,-1,
0,-1,1,0
]
list_y = [
-1,-1,1,1,
-1,-1,1,1,
-1,0,-1,0,
-1,1,1,1,
-1,0,0,1
]
list_z = [
-1,-1,-1,-1,
1,1,1,1,
-1,-1,0,-1,
0,-1,0,0,
1,1,1,1
]
# fmt: on
local_coords = np.array([list_x, list_y, list_z]).T
return local_coords
@property
def segments(self) -> _types.IntArray:
return np.array(
[
[0, 8, 1],
[0, 9, 3],
[4, 10, 0],
[1, 11, 2],
[1, 12, 5],
[3, 13, 2],
[2, 14, 6],
[7, 15, 3],
[5, 16, 4],
[4, 17, 7],
[5, 18, 6],
[6, 19, 7],
]
)
[docs]
def _N(self) -> _types.FloatArray:
N1 = lambda r, s, t: (r - 1) * (s - 1) * (t - 1) * (r + s + t + 2) / 8
N2 = lambda r, s, t: (r + 1) * (s - 1) * (t - 1) * (r - s - t - 2) / 8
N3 = lambda r, s, t: -(r + 1) * (s + 1) * (t - 1) * (r + s - t - 2) / 8
N4 = lambda r, s, t: -(r - 1) * (s + 1) * (t - 1) * (r - s + t + 2) / 8
N5 = lambda r, s, t: -(r - 1) * (s - 1) * (t + 1) * (r + s - t + 2) / 8
N6 = lambda r, s, t: -(r + 1) * (s - 1) * (t + 1) * (r - s + t - 2) / 8
N7 = lambda r, s, t: (r + 1) * (s + 1) * (t + 1) * (r + s + t - 2) / 8
N8 = lambda r, s, t: (r - 1) * (s + 1) * (t + 1) * (r - s - t + 2) / 8
N9 = lambda r, s, t: -(r - 1) * (r + 1) * (s - 1) * (t - 1) / 4
N10 = lambda r, s, t: -(r - 1) * (s - 1) * (s + 1) * (t - 1) / 4
N11 = lambda r, s, t: -(r - 1) * (s - 1) * (t - 1) * (t + 1) / 4
N12 = lambda r, s, t: (r + 1) * (s - 1) * (s + 1) * (t - 1) / 4
N13 = lambda r, s, t: (r + 1) * (s - 1) * (t - 1) * (t + 1) / 4
N14 = lambda r, s, t: (r - 1) * (r + 1) * (s + 1) * (t - 1) / 4
N15 = lambda r, s, t: -(r + 1) * (s + 1) * (t - 1) * (t + 1) / 4
N16 = lambda r, s, t: (r - 1) * (s + 1) * (t - 1) * (t + 1) / 4
N17 = lambda r, s, t: (r - 1) * (r + 1) * (s - 1) * (t + 1) / 4
N18 = lambda r, s, t: (r - 1) * (s - 1) * (s + 1) * (t + 1) / 4
N19 = lambda r, s, t: -(r + 1) * (s - 1) * (s + 1) * (t + 1) / 4
N20 = lambda r, s, t: -(r - 1) * (r + 1) * (s + 1) * (t + 1) / 4
N = np.array(
[
N1,
N2,
N3,
N4,
N5,
N6,
N7,
N8,
N9,
N10,
N11,
N12,
N13,
N14,
N15,
N16,
N17,
N18,
N19,
N20,
]
).reshape(-1, 1)
return N
[docs]
def _dN(self) -> _types.FloatArray:
dN1 = [
lambda r, s, t: r * s * t / 4
- r * s / 4
- r * t / 4
+ r / 4
+ s**2 * t / 8
- s**2 / 8
+ s * t**2 / 8
- s * t / 8
- t**2 / 8
+ 1 / 8,
lambda r, s, t: r**2 * t / 8
- r**2 / 8
+ r * s * t / 4
- r * s / 4
+ r * t**2 / 8
- r * t / 8
- s * t / 4
+ s / 4
- t**2 / 8
+ 1 / 8,
lambda r, s, t: r**2 * s / 8
- r**2 / 8
+ r * s**2 / 8
+ r * s * t / 4
- r * s / 8
- r * t / 4
- s**2 / 8
- s * t / 4
+ t / 4
+ 1 / 8,
]
dN2 = [
lambda r, s, t: r * s * t / 4
- r * s / 4
- r * t / 4
+ r / 4
- s**2 * t / 8
+ s**2 / 8
- s * t**2 / 8
+ s * t / 8
+ t**2 / 8
- 1 / 8,
lambda r, s, t: r**2 * t / 8
- r**2 / 8
- r * s * t / 4
+ r * s / 4
- r * t**2 / 8
+ r * t / 8
- s * t / 4
+ s / 4
- t**2 / 8
+ 1 / 8,
lambda r, s, t: r**2 * s / 8
- r**2 / 8
- r * s**2 / 8
- r * s * t / 4
+ r * s / 8
+ r * t / 4
- s**2 / 8
- s * t / 4
+ t / 4
+ 1 / 8,
]
dN3 = [
lambda r, s, t: -r * s * t / 4
+ r * s / 4
- r * t / 4
+ r / 4
- s**2 * t / 8
+ s**2 / 8
+ s * t**2 / 8
- s * t / 8
+ t**2 / 8
- 1 / 8,
lambda r, s, t: -(r**2) * t / 8
+ r**2 / 8
- r * s * t / 4
+ r * s / 4
+ r * t**2 / 8
- r * t / 8
- s * t / 4
+ s / 4
+ t**2 / 8
- 1 / 8,
lambda r, s, t: -(r**2) * s / 8
- r**2 / 8
- r * s**2 / 8
+ r * s * t / 4
- r * s / 8
+ r * t / 4
- s**2 / 8
+ s * t / 4
+ t / 4
+ 1 / 8,
]
dN4 = [
lambda r, s, t: -r * s * t / 4
+ r * s / 4
- r * t / 4
+ r / 4
+ s**2 * t / 8
- s**2 / 8
- s * t**2 / 8
+ s * t / 8
- t**2 / 8
+ 1 / 8,
lambda r, s, t: -(r**2) * t / 8
+ r**2 / 8
+ r * s * t / 4
- r * s / 4
- r * t**2 / 8
+ r * t / 8
- s * t / 4
+ s / 4
+ t**2 / 8
- 1 / 8,
lambda r, s, t: -(r**2) * s / 8
- r**2 / 8
+ r * s**2 / 8
- r * s * t / 4
+ r * s / 8
- r * t / 4
- s**2 / 8
+ s * t / 4
+ t / 4
+ 1 / 8,
]
dN5 = [
lambda r, s, t: -r * s * t / 4
- r * s / 4
+ r * t / 4
+ r / 4
- s**2 * t / 8
- s**2 / 8
+ s * t**2 / 8
+ s * t / 8
- t**2 / 8
+ 1 / 8,
lambda r, s, t: -(r**2) * t / 8
- r**2 / 8
- r * s * t / 4
- r * s / 4
+ r * t**2 / 8
+ r * t / 8
+ s * t / 4
+ s / 4
- t**2 / 8
+ 1 / 8,
lambda r, s, t: -(r**2) * s / 8
+ r**2 / 8
- r * s**2 / 8
+ r * s * t / 4
+ r * s / 8
- r * t / 4
+ s**2 / 8
- s * t / 4
+ t / 4
- 1 / 8,
]
dN6 = [
lambda r, s, t: -r * s * t / 4
- r * s / 4
+ r * t / 4
+ r / 4
+ s**2 * t / 8
+ s**2 / 8
- s * t**2 / 8
- s * t / 8
+ t**2 / 8
- 1 / 8,
lambda r, s, t: -(r**2) * t / 8
- r**2 / 8
+ r * s * t / 4
+ r * s / 4
- r * t**2 / 8
- r * t / 8
+ s * t / 4
+ s / 4
- t**2 / 8
+ 1 / 8,
lambda r, s, t: -(r**2) * s / 8
+ r**2 / 8
+ r * s**2 / 8
- r * s * t / 4
- r * s / 8
+ r * t / 4
+ s**2 / 8
- s * t / 4
+ t / 4
- 1 / 8,
]
dN7 = [
lambda r, s, t: r * s * t / 4
+ r * s / 4
+ r * t / 4
+ r / 4
+ s**2 * t / 8
+ s**2 / 8
+ s * t**2 / 8
+ s * t / 8
+ t**2 / 8
- 1 / 8,
lambda r, s, t: r**2 * t / 8
+ r**2 / 8
+ r * s * t / 4
+ r * s / 4
+ r * t**2 / 8
+ r * t / 8
+ s * t / 4
+ s / 4
+ t**2 / 8
- 1 / 8,
lambda r, s, t: r**2 * s / 8
+ r**2 / 8
+ r * s**2 / 8
+ r * s * t / 4
+ r * s / 8
+ r * t / 4
+ s**2 / 8
+ s * t / 4
+ t / 4
- 1 / 8,
]
dN8 = [
lambda r, s, t: r * s * t / 4
+ r * s / 4
+ r * t / 4
+ r / 4
- s**2 * t / 8
- s**2 / 8
- s * t**2 / 8
- s * t / 8
- t**2 / 8
+ 1 / 8,
lambda r, s, t: r**2 * t / 8
+ r**2 / 8
- r * s * t / 4
- r * s / 4
- r * t**2 / 8
- r * t / 8
+ s * t / 4
+ s / 4
+ t**2 / 8
- 1 / 8,
lambda r, s, t: r**2 * s / 8
+ r**2 / 8
- r * s**2 / 8
- r * s * t / 4
- r * s / 8
- r * t / 4
+ s**2 / 8
+ s * t / 4
+ t / 4
- 1 / 8,
]
dN9 = [
lambda r, s, t: -r * s * t / 2 + r * s / 2 + r * t / 2 - r / 2,
lambda r, s, t: -(r**2) * t / 4 + r**2 / 4 + t / 4 - 1 / 4,
lambda r, s, t: -(r**2) * s / 4 + r**2 / 4 + s / 4 - 1 / 4,
]
dN10 = [
lambda r, s, t: -(s**2) * t / 4 + s**2 / 4 + t / 4 - 1 / 4,
lambda r, s, t: -r * s * t / 2 + r * s / 2 + s * t / 2 - s / 2,
lambda r, s, t: -r * s**2 / 4 + r / 4 + s**2 / 4 - 1 / 4,
]
dN11 = [
lambda r, s, t: -s * t**2 / 4 + s / 4 + t**2 / 4 - 1 / 4,
lambda r, s, t: -r * t**2 / 4 + r / 4 + t**2 / 4 - 1 / 4,
lambda r, s, t: -r * s * t / 2 + r * t / 2 + s * t / 2 - t / 2,
]
dN12 = [
lambda r, s, t: s**2 * t / 4 - s**2 / 4 - t / 4 + 1 / 4,
lambda r, s, t: r * s * t / 2 - r * s / 2 + s * t / 2 - s / 2,
lambda r, s, t: r * s**2 / 4 - r / 4 + s**2 / 4 - 1 / 4,
]
dN13 = [
lambda r, s, t: s * t**2 / 4 - s / 4 - t**2 / 4 + 1 / 4,
lambda r, s, t: r * t**2 / 4 - r / 4 + t**2 / 4 - 1 / 4,
lambda r, s, t: r * s * t / 2 - r * t / 2 + s * t / 2 - t / 2,
]
dN14 = [
lambda r, s, t: r * s * t / 2 - r * s / 2 + r * t / 2 - r / 2,
lambda r, s, t: r**2 * t / 4 - r**2 / 4 - t / 4 + 1 / 4,
lambda r, s, t: r**2 * s / 4 + r**2 / 4 - s / 4 - 1 / 4,
]
dN15 = [
lambda r, s, t: -s * t**2 / 4 + s / 4 - t**2 / 4 + 1 / 4,
lambda r, s, t: -r * t**2 / 4 + r / 4 - t**2 / 4 + 1 / 4,
lambda r, s, t: -r * s * t / 2 - r * t / 2 - s * t / 2 - t / 2,
]
dN16 = [
lambda r, s, t: s * t**2 / 4 - s / 4 + t**2 / 4 - 1 / 4,
lambda r, s, t: r * t**2 / 4 - r / 4 - t**2 / 4 + 1 / 4,
lambda r, s, t: r * s * t / 2 + r * t / 2 - s * t / 2 - t / 2,
]
dN17 = [
lambda r, s, t: r * s * t / 2 + r * s / 2 - r * t / 2 - r / 2,
lambda r, s, t: r**2 * t / 4 + r**2 / 4 - t / 4 - 1 / 4,
lambda r, s, t: r**2 * s / 4 - r**2 / 4 - s / 4 + 1 / 4,
]
dN18 = [
lambda r, s, t: s**2 * t / 4 + s**2 / 4 - t / 4 - 1 / 4,
lambda r, s, t: r * s * t / 2 + r * s / 2 - s * t / 2 - s / 2,
lambda r, s, t: r * s**2 / 4 - r / 4 - s**2 / 4 + 1 / 4,
]
dN19 = [
lambda r, s, t: -(s**2) * t / 4 - s**2 / 4 + t / 4 + 1 / 4,
lambda r, s, t: -r * s * t / 2 - r * s / 2 - s * t / 2 - s / 2,
lambda r, s, t: -r * s**2 / 4 + r / 4 - s**2 / 4 + 1 / 4,
]
dN20 = [
lambda r, s, t: -r * s * t / 2 - r * s / 2 - r * t / 2 - r / 2,
lambda r, s, t: -(r**2) * t / 4 - r**2 / 4 + t / 4 + 1 / 4,
lambda r, s, t: -(r**2) * s / 4 - r**2 / 4 + s / 4 + 1 / 4,
]
dN = np.array(
[
dN1,
dN2,
dN3,
dN4,
dN5,
dN6,
dN7,
dN8,
dN9,
dN10,
dN11,
dN12,
dN13,
dN14,
dN15,
dN16,
dN17,
dN18,
dN19,
dN20,
]
)
return dN
[docs]
def _ddN(self) -> _types.FloatArray:
ddN1 = [
lambda r, s, t: (s - 1) * (t - 1) / 4,
lambda r, s, t: (r - 1) * (t - 1) / 4,
lambda r, s, t: (r - 1) * (s - 1) / 4,
]
ddN2 = [
lambda r, s, t: (s - 1) * (t - 1) / 4,
lambda r, s, t: -(r + 1) * (t - 1) / 4,
lambda r, s, t: -(r + 1) * (s - 1) / 4,
]
ddN3 = [
lambda r, s, t: -(s + 1) * (t - 1) / 4,
lambda r, s, t: -(r + 1) * (t - 1) / 4,
lambda r, s, t: (r + 1) * (s + 1) / 4,
]
ddN4 = [
lambda r, s, t: -(s + 1) * (t - 1) / 4,
lambda r, s, t: (r - 1) * (t - 1) / 4,
lambda r, s, t: -(r - 1) * (s + 1) / 4,
]
ddN5 = [
lambda r, s, t: -(s - 1) * (t + 1) / 4,
lambda r, s, t: -(r - 1) * (t + 1) / 4,
lambda r, s, t: (r - 1) * (s - 1) / 4,
]
ddN6 = [
lambda r, s, t: -(s - 1) * (t + 1) / 4,
lambda r, s, t: (r + 1) * (t + 1) / 4,
lambda r, s, t: -(r + 1) * (s - 1) / 4,
]
ddN7 = [
lambda r, s, t: (s + 1) * (t + 1) / 4,
lambda r, s, t: (r + 1) * (t + 1) / 4,
lambda r, s, t: (r + 1) * (s + 1) / 4,
]
ddN8 = [
lambda r, s, t: (s + 1) * (t + 1) / 4,
lambda r, s, t: -(r - 1) * (t + 1) / 4,
lambda r, s, t: -(r - 1) * (s + 1) / 4,
]
ddN9 = [
lambda r, s, t: -(s - 1) * (t - 1) / 2,
lambda r, s, t: 0,
lambda r, s, t: 0,
]
ddN10 = [
lambda r, s, t: 0,
lambda r, s, t: -(r - 1) * (t - 1) / 2,
lambda r, s, t: 0,
]
ddN11 = [
lambda r, s, t: 0,
lambda r, s, t: 0,
lambda r, s, t: -(r - 1) * (s - 1) / 2,
]
ddN12 = [
lambda r, s, t: 0,
lambda r, s, t: (r + 1) * (t - 1) / 2,
lambda r, s, t: 0,
]
ddN13 = [
lambda r, s, t: 0,
lambda r, s, t: 0,
lambda r, s, t: (r + 1) * (s - 1) / 2,
]
ddN14 = [
lambda r, s, t: (s + 1) * (t - 1) / 2,
lambda r, s, t: 0,
lambda r, s, t: 0,
]
ddN15 = [
lambda r, s, t: 0,
lambda r, s, t: 0,
lambda r, s, t: -(r + 1) * (s + 1) / 2,
]
ddN16 = [
lambda r, s, t: 0,
lambda r, s, t: 0,
lambda r, s, t: (r - 1) * (s + 1) / 2,
]
ddN17 = [
lambda r, s, t: (s - 1) * (t + 1) / 2,
lambda r, s, t: 0,
lambda r, s, t: 0,
]
ddN18 = [
lambda r, s, t: 0,
lambda r, s, t: (r - 1) * (t + 1) / 2,
lambda r, s, t: 0,
]
ddN19 = [
lambda r, s, t: 0,
lambda r, s, t: -(r + 1) * (t + 1) / 2,
lambda r, s, t: 0,
]
ddN20 = [
lambda r, s, t: -(s + 1) * (t + 1) / 2,
lambda r, s, t: 0,
lambda r, s, t: 0,
]
ddN = np.array(
[
ddN1,
ddN2,
ddN3,
ddN4,
ddN5,
ddN6,
ddN7,
ddN8,
ddN9,
ddN10,
ddN11,
ddN12,
ddN13,
ddN14,
ddN15,
ddN16,
ddN17,
ddN18,
ddN19,
ddN20,
]
)
return ddN
[docs]
def _dddN(self) -> _types.FloatArray:
return super()._dddN()
[docs]
def _ddddN(self) -> _types.FloatArray:
return super()._ddddN()
[docs]
class HEXA27(_GroupElem):
#
# 3----13----2
# |\ |\
# |15 24 | 14
# 9 \ 20 11 \
# | 7----19+---6
# |22 | 26 | 23|
# 0---+-8----1 |
# \ 17 25 \ 18
# 10 | 21 12|
# \| \|
# 4----16----5
def __init__(
self,
gmshId: int,
connect: _types.IntArray,
coordGlob: _types.FloatArray,
nodes: _types.IntArray,
):
super().__init__(gmshId, connect, coordGlob, nodes)
@property
def origin(self) -> list[int]:
return [-1, -1, -1]
@property
def triangles(self) -> list[int]:
return super().triangles
@property
def surfaces(self) -> _types.IntArray:
return np.array(
[
[0, 8, 1, 11, 2, 13, 3, 9], # 20
[0, 10, 4, 16, 5, 12, 1, 8], # 21
[0, 9, 3, 15, 7, 17, 4, 10], # 22
[6, 14, 2, 11, 1, 12, 5, 18], # 23
[6, 19, 7, 15, 3, 13, 2, 14], # 24
[6, 18, 5, 16, 4, 17, 7, 19], # 25
],
dtype=int,
)
@property
def faces(self) -> _types.IntArray:
return np.array(
[
[0, 1, 2, 3, 8, 11, 13, 9, 20],
[0, 4, 5, 1, 10, 16, 12, 8, 21],
[0, 3, 7, 4, 9, 15, 17, 10, 22],
[6, 2, 1, 5, 14, 11, 12, 18, 23],
[6, 7, 3, 2, 19, 15, 13, 14, 24],
[6, 5, 4, 7, 18, 16, 17, 19, 25],
],
dtype=int,
)
[docs]
def Get_Local_Coords(self):
# fmt: off
list_x = [
-1,1,1,-1,
-1,1,1,-1,
0,-1,-1,1,
1,0,1,-1,
0,-1,1,0,
0,0,-1,1,
0,0,0
]
list_y = [
-1,-1,1,1,
-1,-1,1,1,
-1,0,-1,0,
-1,1,1,1,
-1,0,0,1,
0,-1,0,0,
1,0,0
]
list_z = [
-1,-1,-1,-1,
1,1,1,1,
-1,-1,0,-1,
0,-1,0,0,
1,1,1,1,
-1,0,0,0,
0,1,0
]
# fmt: on
local_coords = np.array([list_x, list_y, list_z]).T
return local_coords
@property
def segments(self) -> _types.IntArray:
return np.array(
[
[0, 8, 1],
[0, 9, 3],
[4, 10, 0],
[1, 11, 2],
[1, 12, 5],
[3, 13, 2],
[2, 14, 6],
[7, 15, 3],
[5, 16, 4],
[4, 17, 7],
[5, 18, 6],
[6, 19, 7],
],
dtype=int,
)
[docs]
def _N(self) -> _types.FloatArray:
N1 = lambda r, s, t: r * s * t * (r - 1) * (s - 1) * (t - 1) / 8
N2 = lambda r, s, t: r * s * t * (r + 1) * (s - 1) * (t - 1) / 8
N3 = lambda r, s, t: r * s * t * (r + 1) * (s + 1) * (t - 1) / 8
N4 = lambda r, s, t: r * s * t * (r - 1) * (s + 1) * (t - 1) / 8
N5 = lambda r, s, t: r * s * t * (r - 1) * (s - 1) * (t + 1) / 8
N6 = lambda r, s, t: r * s * t * (r + 1) * (s - 1) * (t + 1) / 8
N7 = lambda r, s, t: r * s * t * (r + 1) * (s + 1) * (t + 1) / 8
N8 = lambda r, s, t: r * s * t * (r - 1) * (s + 1) * (t + 1) / 8
N9 = lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s - 1) * (t - 1) / 4
N10 = lambda r, s, t: -r * t * (r - 1) * (s - 1) * (s + 1) * (t - 1) / 4
N11 = lambda r, s, t: -r * s * (r - 1) * (s - 1) * (t - 1) * (t + 1) / 4
N12 = lambda r, s, t: -r * t * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 4
N13 = lambda r, s, t: -r * s * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 4
N14 = lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s + 1) * (t - 1) / 4
N15 = lambda r, s, t: -r * s * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 4
N16 = lambda r, s, t: -r * s * (r - 1) * (s + 1) * (t - 1) * (t + 1) / 4
N17 = lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s - 1) * (t + 1) / 4
N18 = lambda r, s, t: -r * t * (r - 1) * (s - 1) * (s + 1) * (t + 1) / 4
N19 = lambda r, s, t: -r * t * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 4
N20 = lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s + 1) * (t + 1) / 4
N21 = lambda r, s, t: t * (r - 1) * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 2
N22 = lambda r, s, t: s * (r - 1) * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 2
N23 = lambda r, s, t: r * (r - 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1) / 2
N24 = lambda r, s, t: r * (r + 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1) / 2
N25 = lambda r, s, t: s * (r - 1) * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 2
N26 = lambda r, s, t: t * (r - 1) * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 2
N27 = lambda r, s, t: -(r - 1) * (r + 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1)
N = np.array(
[
N1,
N2,
N3,
N4,
N5,
N6,
N7,
N8,
N9,
N10,
N11,
N12,
N13,
N14,
N15,
N16,
N17,
N18,
N19,
N20,
N21,
N22,
N23,
N24,
N25,
N26,
N27,
]
).reshape(-1, 1)
return N
[docs]
def _dN(self) -> _types.FloatArray:
dN1 = [
lambda r, s, t: r * s * t * (s - 1) * (t - 1) / 8
+ s * t * (r - 1) * (s - 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (t - 1) / 8
+ r * t * (r - 1) * (s - 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (s - 1) / 8
+ r * s * (r - 1) * (s - 1) * (t - 1) / 8,
]
dN2 = [
lambda r, s, t: r * s * t * (s - 1) * (t - 1) / 8
+ s * t * (r + 1) * (s - 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (t - 1) / 8
+ r * t * (r + 1) * (s - 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (s - 1) / 8
+ r * s * (r + 1) * (s - 1) * (t - 1) / 8,
]
dN3 = [
lambda r, s, t: r * s * t * (s + 1) * (t - 1) / 8
+ s * t * (r + 1) * (s + 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (t - 1) / 8
+ r * t * (r + 1) * (s + 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (s + 1) / 8
+ r * s * (r + 1) * (s + 1) * (t - 1) / 8,
]
dN4 = [
lambda r, s, t: r * s * t * (s + 1) * (t - 1) / 8
+ s * t * (r - 1) * (s + 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (t - 1) / 8
+ r * t * (r - 1) * (s + 1) * (t - 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (s + 1) / 8
+ r * s * (r - 1) * (s + 1) * (t - 1) / 8,
]
dN5 = [
lambda r, s, t: r * s * t * (s - 1) * (t + 1) / 8
+ s * t * (r - 1) * (s - 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (t + 1) / 8
+ r * t * (r - 1) * (s - 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (s - 1) / 8
+ r * s * (r - 1) * (s - 1) * (t + 1) / 8,
]
dN6 = [
lambda r, s, t: r * s * t * (s - 1) * (t + 1) / 8
+ s * t * (r + 1) * (s - 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (t + 1) / 8
+ r * t * (r + 1) * (s - 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (s - 1) / 8
+ r * s * (r + 1) * (s - 1) * (t + 1) / 8,
]
dN7 = [
lambda r, s, t: r * s * t * (s + 1) * (t + 1) / 8
+ s * t * (r + 1) * (s + 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (t + 1) / 8
+ r * t * (r + 1) * (s + 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r + 1) * (s + 1) / 8
+ r * s * (r + 1) * (s + 1) * (t + 1) / 8,
]
dN8 = [
lambda r, s, t: r * s * t * (s + 1) * (t + 1) / 8
+ s * t * (r - 1) * (s + 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (t + 1) / 8
+ r * t * (r - 1) * (s + 1) * (t + 1) / 8,
lambda r, s, t: r * s * t * (r - 1) * (s + 1) / 8
+ r * s * (r - 1) * (s + 1) * (t + 1) / 8,
]
dN9 = [
lambda r, s, t: -s * t * (r - 1) * (s - 1) * (t - 1) / 4
- s * t * (r + 1) * (s - 1) * (t - 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (t - 1) / 4
- t * (r - 1) * (r + 1) * (s - 1) * (t - 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s - 1) / 4
- s * (r - 1) * (r + 1) * (s - 1) * (t - 1) / 4,
]
dN10 = [
lambda r, s, t: -r * t * (s - 1) * (s + 1) * (t - 1) / 4
- t * (r - 1) * (s - 1) * (s + 1) * (t - 1) / 4,
lambda r, s, t: -r * t * (r - 1) * (s - 1) * (t - 1) / 4
- r * t * (r - 1) * (s + 1) * (t - 1) / 4,
lambda r, s, t: -r * t * (r - 1) * (s - 1) * (s + 1) / 4
- r * (r - 1) * (s - 1) * (s + 1) * (t - 1) / 4,
]
dN11 = [
lambda r, s, t: -r * s * (s - 1) * (t - 1) * (t + 1) / 4
- s * (r - 1) * (s - 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r - 1) * (t - 1) * (t + 1) / 4
- r * (r - 1) * (s - 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r - 1) * (s - 1) * (t - 1) / 4
- r * s * (r - 1) * (s - 1) * (t + 1) / 4,
]
dN12 = [
lambda r, s, t: -r * t * (s - 1) * (s + 1) * (t - 1) / 4
- t * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 4,
lambda r, s, t: -r * t * (r + 1) * (s - 1) * (t - 1) / 4
- r * t * (r + 1) * (s + 1) * (t - 1) / 4,
lambda r, s, t: -r * t * (r + 1) * (s - 1) * (s + 1) / 4
- r * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 4,
]
dN13 = [
lambda r, s, t: -r * s * (s - 1) * (t - 1) * (t + 1) / 4
- s * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r + 1) * (t - 1) * (t + 1) / 4
- r * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r + 1) * (s - 1) * (t - 1) / 4
- r * s * (r + 1) * (s - 1) * (t + 1) / 4,
]
dN14 = [
lambda r, s, t: -s * t * (r - 1) * (s + 1) * (t - 1) / 4
- s * t * (r + 1) * (s + 1) * (t - 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (t - 1) / 4
- t * (r - 1) * (r + 1) * (s + 1) * (t - 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s + 1) / 4
- s * (r - 1) * (r + 1) * (s + 1) * (t - 1) / 4,
]
dN15 = [
lambda r, s, t: -r * s * (s + 1) * (t - 1) * (t + 1) / 4
- s * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r + 1) * (t - 1) * (t + 1) / 4
- r * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r + 1) * (s + 1) * (t - 1) / 4
- r * s * (r + 1) * (s + 1) * (t + 1) / 4,
]
dN16 = [
lambda r, s, t: -r * s * (s + 1) * (t - 1) * (t + 1) / 4
- s * (r - 1) * (s + 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r - 1) * (t - 1) * (t + 1) / 4
- r * (r - 1) * (s + 1) * (t - 1) * (t + 1) / 4,
lambda r, s, t: -r * s * (r - 1) * (s + 1) * (t - 1) / 4
- r * s * (r - 1) * (s + 1) * (t + 1) / 4,
]
dN17 = [
lambda r, s, t: -s * t * (r - 1) * (s - 1) * (t + 1) / 4
- s * t * (r + 1) * (s - 1) * (t + 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (t + 1) / 4
- t * (r - 1) * (r + 1) * (s - 1) * (t + 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s - 1) / 4
- s * (r - 1) * (r + 1) * (s - 1) * (t + 1) / 4,
]
dN18 = [
lambda r, s, t: -r * t * (s - 1) * (s + 1) * (t + 1) / 4
- t * (r - 1) * (s - 1) * (s + 1) * (t + 1) / 4,
lambda r, s, t: -r * t * (r - 1) * (s - 1) * (t + 1) / 4
- r * t * (r - 1) * (s + 1) * (t + 1) / 4,
lambda r, s, t: -r * t * (r - 1) * (s - 1) * (s + 1) / 4
- r * (r - 1) * (s - 1) * (s + 1) * (t + 1) / 4,
]
dN19 = [
lambda r, s, t: -r * t * (s - 1) * (s + 1) * (t + 1) / 4
- t * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 4,
lambda r, s, t: -r * t * (r + 1) * (s - 1) * (t + 1) / 4
- r * t * (r + 1) * (s + 1) * (t + 1) / 4,
lambda r, s, t: -r * t * (r + 1) * (s - 1) * (s + 1) / 4
- r * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 4,
]
dN20 = [
lambda r, s, t: -s * t * (r - 1) * (s + 1) * (t + 1) / 4
- s * t * (r + 1) * (s + 1) * (t + 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (t + 1) / 4
- t * (r - 1) * (r + 1) * (s + 1) * (t + 1) / 4,
lambda r, s, t: -s * t * (r - 1) * (r + 1) * (s + 1) / 4
- s * (r - 1) * (r + 1) * (s + 1) * (t + 1) / 4,
]
dN21 = [
lambda r, s, t: t * (r - 1) * (s - 1) * (s + 1) * (t - 1) / 2
+ t * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 2,
lambda r, s, t: t * (r - 1) * (r + 1) * (s - 1) * (t - 1) / 2
+ t * (r - 1) * (r + 1) * (s + 1) * (t - 1) / 2,
lambda r, s, t: t * (r - 1) * (r + 1) * (s - 1) * (s + 1) / 2
+ (r - 1) * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 2,
]
dN22 = [
lambda r, s, t: s * (r - 1) * (s - 1) * (t - 1) * (t + 1) / 2
+ s * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: s * (r - 1) * (r + 1) * (t - 1) * (t + 1) / 2
+ (r - 1) * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: s * (r - 1) * (r + 1) * (s - 1) * (t - 1) / 2
+ s * (r - 1) * (r + 1) * (s - 1) * (t + 1) / 2,
]
dN23 = [
lambda r, s, t: r * (s - 1) * (s + 1) * (t - 1) * (t + 1) / 2
+ (r - 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: r * (r - 1) * (s - 1) * (t - 1) * (t + 1) / 2
+ r * (r - 1) * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: r * (r - 1) * (s - 1) * (s + 1) * (t - 1) / 2
+ r * (r - 1) * (s - 1) * (s + 1) * (t + 1) / 2,
]
dN24 = [
lambda r, s, t: r * (s - 1) * (s + 1) * (t - 1) * (t + 1) / 2
+ (r + 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: r * (r + 1) * (s - 1) * (t - 1) * (t + 1) / 2
+ r * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: r * (r + 1) * (s - 1) * (s + 1) * (t - 1) / 2
+ r * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 2,
]
dN25 = [
lambda r, s, t: s * (r - 1) * (s + 1) * (t - 1) * (t + 1) / 2
+ s * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: s * (r - 1) * (r + 1) * (t - 1) * (t + 1) / 2
+ (r - 1) * (r + 1) * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: s * (r - 1) * (r + 1) * (s + 1) * (t - 1) / 2
+ s * (r - 1) * (r + 1) * (s + 1) * (t + 1) / 2,
]
dN26 = [
lambda r, s, t: t * (r - 1) * (s - 1) * (s + 1) * (t + 1) / 2
+ t * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 2,
lambda r, s, t: t * (r - 1) * (r + 1) * (s - 1) * (t + 1) / 2
+ t * (r - 1) * (r + 1) * (s + 1) * (t + 1) / 2,
lambda r, s, t: t * (r - 1) * (r + 1) * (s - 1) * (s + 1) / 2
+ (r - 1) * (r + 1) * (s - 1) * (s + 1) * (t + 1) / 2,
]
dN27 = [
lambda r, s, t: -(r - 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1)
- (r + 1) * (s - 1) * (s + 1) * (t - 1) * (t + 1),
lambda r, s, t: -(r - 1) * (r + 1) * (s - 1) * (t - 1) * (t + 1)
- (r - 1) * (r + 1) * (s + 1) * (t - 1) * (t + 1),
lambda r, s, t: -(r - 1) * (r + 1) * (s - 1) * (s + 1) * (t - 1)
- (r - 1) * (r + 1) * (s - 1) * (s + 1) * (t + 1),
]
dN = np.array(
[
dN1,
dN2,
dN3,
dN4,
dN5,
dN6,
dN7,
dN8,
dN9,
dN10,
dN11,
dN12,
dN13,
dN14,
dN15,
dN16,
dN17,
dN18,
dN19,
dN20,
dN21,
dN22,
dN23,
dN24,
dN25,
dN26,
dN27,
]
)
return dN
[docs]
def _ddN(self) -> _types.FloatArray:
ddN1 = [
lambda r, s, t: s * t * (s - 1) * (t - 1) / 4,
lambda r, s, t: r * t * (r - 1) * (t - 1) / 4,
lambda r, s, t: r * s * (r - 1) * (s - 1) / 4,
]
ddN2 = [
lambda r, s, t: s * t * (s - 1) * (t - 1) / 4,
lambda r, s, t: r * t * (r + 1) * (t - 1) / 4,
lambda r, s, t: r * s * (r + 1) * (s - 1) / 4,
]
ddN3 = [
lambda r, s, t: s * t * (s + 1) * (t - 1) / 4,
lambda r, s, t: r * t * (r + 1) * (t - 1) / 4,
lambda r, s, t: r * s * (r + 1) * (s + 1) / 4,
]
ddN4 = [
lambda r, s, t: s * t * (s + 1) * (t - 1) / 4,
lambda r, s, t: r * t * (r - 1) * (t - 1) / 4,
lambda r, s, t: r * s * (r - 1) * (s + 1) / 4,
]
ddN5 = [
lambda r, s, t: s * t * (s - 1) * (t + 1) / 4,
lambda r, s, t: r * t * (r - 1) * (t + 1) / 4,
lambda r, s, t: r * s * (r - 1) * (s - 1) / 4,
]
ddN6 = [
lambda r, s, t: s * t * (s - 1) * (t + 1) / 4,
lambda r, s, t: r * t * (r + 1) * (t + 1) / 4,
lambda r, s, t: r * s * (r + 1) * (s - 1) / 4,
]
ddN7 = [
lambda r, s, t: s * t * (s + 1) * (t + 1) / 4,
lambda r, s, t: r * t * (r + 1) * (t + 1) / 4,
lambda r, s, t: r * s * (r + 1) * (s + 1) / 4,
]
ddN8 = [
lambda r, s, t: s * t * (s + 1) * (t + 1) / 4,
lambda r, s, t: r * t * (r - 1) * (t + 1) / 4,
lambda r, s, t: r * s * (r - 1) * (s + 1) / 4,
]
ddN9 = [
lambda r, s, t: -s * t * (s - 1) * (t - 1) / 2,
lambda r, s, t: -t * (r - 1) * (r + 1) * (t - 1) / 2,
lambda r, s, t: -s * (r - 1) * (r + 1) * (s - 1) / 2,
]
ddN10 = [
lambda r, s, t: -t * (s - 1) * (s + 1) * (t - 1) / 2,
lambda r, s, t: -r * t * (r - 1) * (t - 1) / 2,
lambda r, s, t: -r * (r - 1) * (s - 1) * (s + 1) / 2,
]
ddN11 = [
lambda r, s, t: -s * (s - 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * (r - 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * s * (r - 1) * (s - 1) / 2,
]
ddN12 = [
lambda r, s, t: -t * (s - 1) * (s + 1) * (t - 1) / 2,
lambda r, s, t: -r * t * (r + 1) * (t - 1) / 2,
lambda r, s, t: -r * (r + 1) * (s - 1) * (s + 1) / 2,
]
ddN13 = [
lambda r, s, t: -s * (s - 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * (r + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * s * (r + 1) * (s - 1) / 2,
]
ddN14 = [
lambda r, s, t: -s * t * (s + 1) * (t - 1) / 2,
lambda r, s, t: -t * (r - 1) * (r + 1) * (t - 1) / 2,
lambda r, s, t: -s * (r - 1) * (r + 1) * (s + 1) / 2,
]
ddN15 = [
lambda r, s, t: -s * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * (r + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * s * (r + 1) * (s + 1) / 2,
]
ddN16 = [
lambda r, s, t: -s * (s + 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * (r - 1) * (t - 1) * (t + 1) / 2,
lambda r, s, t: -r * s * (r - 1) * (s + 1) / 2,
]
ddN17 = [
lambda r, s, t: -s * t * (s - 1) * (t + 1) / 2,
lambda r, s, t: -t * (r - 1) * (r + 1) * (t + 1) / 2,
lambda r, s, t: -s * (r - 1) * (r + 1) * (s - 1) / 2,
]
ddN18 = [
lambda r, s, t: -t * (s - 1) * (s + 1) * (t + 1) / 2,
lambda r, s, t: -r * t * (r - 1) * (t + 1) / 2,
lambda r, s, t: -r * (r - 1) * (s - 1) * (s + 1) / 2,
]
ddN19 = [
lambda r, s, t: -t * (s - 1) * (s + 1) * (t + 1) / 2,
lambda r, s, t: -r * t * (r + 1) * (t + 1) / 2,
lambda r, s, t: -r * (r + 1) * (s - 1) * (s + 1) / 2,
]
ddN20 = [
lambda r, s, t: -s * t * (s + 1) * (t + 1) / 2,
lambda r, s, t: -t * (r - 1) * (r + 1) * (t + 1) / 2,
lambda r, s, t: -s * (r - 1) * (r + 1) * (s + 1) / 2,
]
ddN21 = [
lambda r, s, t: t * (s - 1) * (s + 1) * (t - 1),
lambda r, s, t: t * (r - 1) * (r + 1) * (t - 1),
lambda r, s, t: (r - 1) * (r + 1) * (s - 1) * (s + 1),
]
ddN22 = [
lambda r, s, t: s * (s - 1) * (t - 1) * (t + 1),
lambda r, s, t: (r - 1) * (r + 1) * (t - 1) * (t + 1),
lambda r, s, t: s * (r - 1) * (r + 1) * (s - 1),
]
ddN23 = [
lambda r, s, t: (s - 1) * (s + 1) * (t - 1) * (t + 1),
lambda r, s, t: r * (r - 1) * (t - 1) * (t + 1),
lambda r, s, t: r * (r - 1) * (s - 1) * (s + 1),
]
ddN24 = [
lambda r, s, t: (s - 1) * (s + 1) * (t - 1) * (t + 1),
lambda r, s, t: r * (r + 1) * (t - 1) * (t + 1),
lambda r, s, t: r * (r + 1) * (s - 1) * (s + 1),
]
ddN25 = [
lambda r, s, t: s * (s + 1) * (t - 1) * (t + 1),
lambda r, s, t: (r - 1) * (r + 1) * (t - 1) * (t + 1),
lambda r, s, t: s * (r - 1) * (r + 1) * (s + 1),
]
ddN26 = [
lambda r, s, t: t * (s - 1) * (s + 1) * (t + 1),
lambda r, s, t: t * (r - 1) * (r + 1) * (t + 1),
lambda r, s, t: (r - 1) * (r + 1) * (s - 1) * (s + 1),
]
ddN27 = [
lambda r, s, t: -2 * (s - 1) * (s + 1) * (t - 1) * (t + 1),
lambda r, s, t: -2 * (r - 1) * (r + 1) * (t - 1) * (t + 1),
lambda r, s, t: -2 * (r - 1) * (r + 1) * (s - 1) * (s + 1),
]
ddN = np.array(
[
ddN1,
ddN2,
ddN3,
ddN4,
ddN5,
ddN6,
ddN7,
ddN8,
ddN9,
ddN10,
ddN11,
ddN12,
ddN13,
ddN14,
ddN15,
ddN16,
ddN17,
ddN18,
ddN19,
ddN20,
ddN21,
ddN22,
ddN23,
ddN24,
ddN25,
ddN26,
ddN27,
]
)
return ddN
[docs]
def _dddN(self) -> _types.FloatArray:
return super()._dddN()
[docs]
def _ddddN(self) -> _types.FloatArray:
return super()._ddddN()