72 generic ::
operator(.eq.) => equal
93 integer,
parameter,
dimension(4, 6) ::
face_nodes = reshape((/1,5,7,3,&
119 integer,
parameter,
dimension(2, 12) ::
edge_nodes = reshape((/1,2,&
136 subroutine hex_init(this, id, p1, p2, p3, p4, p5, p6, p7, p8)
137 class(
hex_t),
intent(inout) :: this
138 integer,
intent(inout) :: id
139 type(
point_t),
target,
intent(in) :: p1, p2, p3, p4, p5, p6, p7, p8
156 class(
hex_t),
intent(in) :: this
157 class(
tuple_t),
intent(inout) :: t
158 integer,
intent(in) :: side
159 integer :: i, j, temp
160 type(
point_t),
pointer :: p1,p2,p3,p4
169 t%x = (/ p1%id(), p2%id(), p3%id(), p4%id() /)
172 if(t%x(j) .lt. t%x(i))
then
185 class(
hex_t),
intent(in) :: this
186 class(
tuple_t),
intent(inout) :: t
187 integer,
intent(in) :: side
188 type(
point_t),
pointer :: p1,p2,p3,p4
197 t%x = (/ p1%id(), p2%id(), p3%id(), p4%id() /)
205 class(
hex_t),
intent(in) :: this
206 class(
tuple_t),
intent(inout) :: t
207 integer,
intent(in) :: side
208 type(
point_t),
pointer :: p1,p2
215 if (p1%id() .lt. p2%id())
then
216 t%x = (/ p1%id(), p2%id() /)
218 t%x = (/ p2%id(), p1%id() /)
227 class(
hex_t),
intent(in) :: this
228 real(kind=
dp) :: d1, d2, d3, d4, res
229 type(
point_t),
pointer :: p1, p2, p3, p4, p5, p6, p7, p8
247 d1 = d1 + (p8%x(i) - p1%x(i))**2
248 d2 = d2 + (p7%x(i) - p2%x(i))**2
249 d3 = d3 + (p5%x(i) - p4%x(i))**2
250 d4 = d4 + (p6%x(i) - p3%x(i))**2
253 res = sqrt(
max(
max(d1, d2),
max(d3, d4)))
259 class(
hex_t),
intent(in) :: this
261 type(
point_t),
pointer :: p1, p2, p3, p4, p5, p6, p7, p8
274 do i = 1, this%gdim()
275 res%x(i) = 0.125 * (p1%x(i) + p2%x(i) + p3%x(i) + p4%x(i) + &
276 p5%x(i) + p6%x(i) + p7%x(i) + p8%x(i))
284 class(
hex_t),
intent(in) :: this
292 if ((this%gdim() .eq. other%gdim()) .and. &
293 (this%npts() .eq. other%npts()))
then
294 do i = 1, this%npts()
295 if (this%pts(i)%p .ne. other%pts(i)%p)
then
Defines a hexahedron element.
type(point_t) function hex_centroid(this)
Compute the centroid of a hexahedron element.
subroutine hex_facet_order(this, t, side)
Return the ordered points for face i as a 4-tuple t.
subroutine hex_edge_id(this, t, side)
Return the edge id for an edge i as a 2-tuple t.
integer, dimension(4, 6), parameter face_nodes
Face node ids.
integer, parameter, public neko_hex_gdim
Geometric dimension.
integer, parameter, public neko_hex_npts
Number of points.
integer, parameter, public neko_hex_nfcs
Number of faces.
integer, parameter, public neko_hex_neds
Number of edges.
real(kind=dp) function hex_diameter(this)
Compute the diameter of a hexahedron element.
pure logical function hex_equal(this, other)
Check if two hex elements are equal.
integer, dimension(2, 12), parameter edge_nodes
Edge node ids.
subroutine hex_init(this, id, p1, p2, p3, p4, p5, p6, p7, p8)
Create a hexahedron element based upon eight points.
subroutine hex_facet_id(this, t, side)
Return the facet id for face i as a 4-tuple t.
integer, parameter, public dp
Base type for an element.
A point in with coordinates .
Base type for an n-tuple.