Implementation of 3D cartesian coordinates completed. Last commit before
testing.
This commit is contained in:
parent
682afaac0c
commit
7e5b78f72f
4 changed files with 223 additions and 2 deletions
|
|
@ -9,10 +9,10 @@ MODULE moduleMesh3DCartRead
|
|||
|
||||
END TYPE
|
||||
|
||||
INTERFACE connect
|
||||
INTERFACE connected
|
||||
MODULE PROCEDURE connectedVolVol, connectedVolEdge
|
||||
|
||||
END INTERFACE connect
|
||||
END INTERFACE connected
|
||||
|
||||
CONTAINS
|
||||
!Init mesh
|
||||
|
|
@ -388,6 +388,7 @@ MODULE moduleMesh3DCartRead
|
|||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
!Check surface 4
|
||||
IF (.NOT. ASSOCIATED(elemA%e3)) THEN
|
||||
IF ((elemA%n1%n == elemB%n1%n .AND. &
|
||||
|
|
@ -454,6 +455,134 @@ MODULE moduleMesh3DCartRead
|
|||
CLASS(meshVol3DCartTetra), INTENT(inout), TARGET:: elemA
|
||||
CLASS(meshEdge3DCartTria), INTENT(inout), TARGET:: elemB
|
||||
|
||||
!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
|
||||
|
||||
elemA%e1 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n) .OR. &
|
||||
(elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n)) THEN
|
||||
|
||||
elemA%e1 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
!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
|
||||
|
||||
elemA%e2 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n) .OR. &
|
||||
(elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n)) THEN
|
||||
|
||||
elemA%e2 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
!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
|
||||
|
||||
elemA%e3 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n2%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n) .OR. &
|
||||
(elemA%n2%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n2%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n)) THEN
|
||||
|
||||
elemA%e3 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
!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
|
||||
|
||||
elemA%e4 => elemB
|
||||
elemB%e1 => elemA
|
||||
|
||||
ELSEIF ((elemA%n1%n == elemB%n3%n .AND. &
|
||||
elemA%n3%n == elemB%n2%n .AND. &
|
||||
elemA%n4%n == elemB%n1%n) .OR. &
|
||||
(elemA%n1%n == elemB%n1%n .AND. &
|
||||
elemA%n3%n == elemB%n3%n .AND. &
|
||||
elemA%n4%n == elemB%n2%n) .OR. &
|
||||
(elemA%n1%n == elemB%n2%n .AND. &
|
||||
elemA%n3%n == elemB%n1%n .AND. &
|
||||
elemA%n4%n == elemB%n3%n)) THEN
|
||||
|
||||
elemA%e4 => elemB
|
||||
elemB%e2 => elemA
|
||||
|
||||
END IF
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE connectedTetraEdge
|
||||
|
||||
SUBROUTINE constructGlobalK(K, elem)
|
||||
|
|
@ -465,6 +594,30 @@ MODULE moduleMesh3DCartRead
|
|||
INTEGER:: nNodes, i, j
|
||||
INTEGER, ALLOCATABLE:: n(:)
|
||||
|
||||
SELECT TYPE(elem)
|
||||
TYPE IS(meshVol3DCartTetra)
|
||||
nNodes = 4
|
||||
ALLOCATE(localK(1:nNodes,1:nNodes))
|
||||
localK = elem%elemK()
|
||||
ALLOCATE(n(1:nNodes))
|
||||
n = (/ elem%n1%n, elem%n2%n, &
|
||||
elem%n3%n, elem%n4%n /)
|
||||
|
||||
CLASS DEFAULT
|
||||
nNodes = 0
|
||||
ALLOCATE(localK(1:1, 1:1))
|
||||
localK = 0.D0
|
||||
ALLOCATE(n(1:1))
|
||||
n = 0
|
||||
|
||||
END SELECT
|
||||
|
||||
DO i = 1, nNodes
|
||||
DO j = 1, nNodes
|
||||
K(n(i), n(j)) = K(n(i), n(j)) + localK(i, j)
|
||||
END DO
|
||||
END DO
|
||||
|
||||
END SUBROUTINE constructGlobalK
|
||||
|
||||
END MODULE moduleMesh3DCartRead
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue