Fixing some issues in 3D Cartesian coordinates. Included 3D pusher.
Still there are issues linking a volume to an edge.
This commit is contained in:
parent
1e66110014
commit
c236c5e0e2
8 changed files with 123 additions and 148 deletions
|
|
@ -207,6 +207,28 @@ MODULE moduleMesh3DCartRead
|
|||
|
||||
END SUBROUTINE connectedVolEdge
|
||||
|
||||
PURE FUNCTION coincidentNodes(nodesA, nodesB) RESULT(coincident)
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER, DIMENSION(1:3), INTENT(in):: nodesA, nodesB
|
||||
LOGICAL:: coincident
|
||||
INTEGER:: i
|
||||
|
||||
coincident = .FALSE.
|
||||
DO i = 1, 3
|
||||
IF (ANY(nodesA(i) == nodesB)) THEN
|
||||
coincident = .TRUE.
|
||||
|
||||
ELSE
|
||||
coincident = .FALSE.
|
||||
EXIT
|
||||
|
||||
END IF
|
||||
|
||||
END DO
|
||||
|
||||
END FUNCTION coincidentNodes
|
||||
|
||||
SUBROUTINE connectedTetraTetra(elemA, elemB)
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
@ -217,54 +239,26 @@ MODULE moduleMesh3DCartRead
|
|||
|
||||
!Check surface 1
|
||||
IF (.NOT. ASSOCIATED(elemA%e1)) THEN
|
||||
IF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n)) THEN
|
||||
IF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n3%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n3%n/))) THEN
|
||||
|
||||
elemA%e1 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n3%n/), &
|
||||
(/elemB%n2%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e1 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n3%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e1 => elemB
|
||||
elemB%e3 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n3%n/), &
|
||||
(/elemB%n1%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e1 => elemB
|
||||
elemB%e4 => elemA
|
||||
|
|
@ -275,54 +269,26 @@ MODULE moduleMesh3DCartRead
|
|||
|
||||
!Check surface 2
|
||||
IF (.NOT. ASSOCIATED(elemA%e2)) THEN
|
||||
IF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
IF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n3%n/))) THEN
|
||||
|
||||
elemA%e2 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n4%n/), &
|
||||
(/elemB%n2%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e2 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e2 => elemB
|
||||
elemB%e3 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n2%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e2 => elemB
|
||||
elemB%e4 => elemA
|
||||
|
|
@ -333,54 +299,26 @@ MODULE moduleMesh3DCartRead
|
|||
|
||||
!Check surface 3
|
||||
IF (.NOT. ASSOCIATED(elemA%e3)) THEN
|
||||
IF ((elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
IF (coincidentNodes((/elemA%n2%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n3%n/))) THEN
|
||||
|
||||
elemA%e3 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n2%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n2%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e3 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
ELSEIF ((elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n2%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e3 => elemB
|
||||
elemB%e3 => elemA
|
||||
|
||||
ELSEIF ((elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n2%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n2%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e3 => elemB
|
||||
elemB%e4 => elemA
|
||||
|
|
@ -391,54 +329,26 @@ MODULE moduleMesh3DCartRead
|
|||
|
||||
!Check surface 4
|
||||
IF (.NOT. ASSOCIATED(elemA%e3)) THEN
|
||||
IF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
IF (coincidentNodes((/elemA%n1%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n3%n/))) THEN
|
||||
|
||||
elemA%e4 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n2%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e4 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n2%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e4 => elemB
|
||||
elemB%e3 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n4%n) .OR. &
|
||||
(elemA%n1%n == elemB%n4%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n) .OR. &
|
||||
(elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n4%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n)) THEN
|
||||
ELSEIF (coincidentNodes((/elemA%n1%n, elemA%n3%n, elemA%n4%n/), &
|
||||
(/elemB%n1%n, elemB%n3%n, elemB%n4%n/))) THEN
|
||||
|
||||
elemA%e4 => elemB
|
||||
elemB%e4 => elemA
|
||||
|
|
@ -483,8 +393,12 @@ MODULE moduleMesh3DCartRead
|
|||
elemA%e1 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
!Revers the normal to point inside the domain
|
||||
elemB%normal = -elemB%normal
|
||||
|
||||
END IF
|
||||
|
||||
|
||||
END IF
|
||||
|
||||
!Check surface 2
|
||||
|
|
@ -515,6 +429,9 @@ MODULE moduleMesh3DCartRead
|
|||
elemA%e2 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
!Revers the normal to point inside the domain
|
||||
elemB%normal = -elemB%normal
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
|
@ -547,6 +464,9 @@ MODULE moduleMesh3DCartRead
|
|||
elemA%e3 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
!Revers the normal to point inside the domain
|
||||
elemB%normal = -elemB%normal
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue