Issue in connectivity between Quad elements

For unstructured meshes, the quad elements where not being propertly
connected as not all possibilities were tested. This should be fixed
now.
This commit is contained in:
Jorge Gonzalez 2023-02-09 12:15:18 +01:00
commit f86641110c
2 changed files with 176 additions and 40 deletions

View file

@ -1012,38 +1012,106 @@ MODULE moduleMesh2DCart
CLASS(meshCell2DCartQuad), INTENT(inout), TARGET:: elemB CLASS(meshCell2DCartQuad), INTENT(inout), TARGET:: elemB
!Check direction 1 !Check direction 1
IF (.NOT. ASSOCIATED(elemA%e1) .AND. & IF (.NOT. ASSOCIATED(elemA%e1)) THEN
elemA%n1%n == elemB%n4%n .AND. & IF (elemA%n1%n == elemB%n4%n .AND. &
elemA%n2%n == elemB%n3%n) THEN elemA%n2%n == elemB%n3%n) THEN
elemA%e1 => elemB elemA%e1 => elemB
elemB%e3 => elemA elemB%e3 => elemA
ELSEIF (elemA%n1%n == elemB%n3%n .AND. &
elemA%n2%n == elemB%n2%n) THEN
elemA%e1 => elemB
elemB%e2 => elemA
ELSEIF (elemA%n1%n == elemB%n2%n .AND. &
elemA%n2%n == elemB%n1%n) THEN
elemA%e1 => elemB
elemB%e1 => elemA
ELSEIF (elemA%n1%n == elemB%n1%n .AND. &
elemA%n2%n == elemB%n4%n) THEN
elemA%e1 => elemB
elemB%e4 => elemA
END IF
END IF END IF
!Check direction 2 !Check direction 2
IF (.NOT. ASSOCIATED(elemA%e2) .AND. & IF (.NOT. ASSOCIATED(elemA%e2)) THEN
elemA%n2%n == elemB%n1%n .AND. & IF (elemA%n2%n == elemB%n1%n .AND. &
elemA%n3%n == elemB%n4%n) THEN elemA%n3%n == elemB%n4%n) THEN
elemA%e2 => elemB elemA%e2 => elemB
elemB%e4 => elemA elemB%e4 => elemA
ELSEIF (elemA%n2%n == elemB%n4%n .AND. &
elemA%n3%n == elemB%n3%n) THEN
elemA%e2 => elemB
elemB%e3 => elemA
ELSEIF (elemA%n2%n == elemB%n3%n .AND. &
elemA%n3%n == elemB%n2%n) THEN
elemA%e2 => elemB
elemB%e2 => elemA
ELSEIF (elemA%n2%n == elemB%n2%n .AND. &
elemA%n3%n == elemB%n1%n) THEN
elemA%e2 => elemB
elemB%e1 => elemA
END IF
END IF END IF
!Check direction 3 !Check direction 3
IF (.NOT. ASSOCIATED(elemA%e3) .AND. & IF (.NOT. ASSOCIATED(elemA%e3)) THEN
elemA%n3%n == elemB%n2%n .AND. & IF (elemA%n3%n == elemB%n2%n .AND. &
elemA%n4%n == elemB%n1%n) THEN elemA%n4%n == elemB%n1%n) THEN
elemA%e3 => elemB elemA%e3 => elemB
elemB%e1 => elemA elemB%e1 => elemA
ELSEIF (elemA%n3%n == elemB%n1%n .AND. &
elemA%n4%n == elemB%n4%n) THEN
elemA%e3 => elemB
elemB%e4 => elemA
ELSEIF (elemA%n3%n == elemB%n4%n .AND. &
elemA%n4%n == elemB%n3%n) THEN
elemA%e3 => elemB
elemB%e3 => elemA
ELSEIF (elemA%n3%n == elemB%n3%n .AND. &
elemA%n4%n == elemB%n2%n) THEN
elemA%e3 => elemB
elemB%e2 => elemA
END IF
END IF END IF
!Check direction 4 !Check direction 4
IF (.NOT. ASSOCIATED(elemA%e4) .AND. & IF (.NOT. ASSOCIATED(elemA%e4)) THEN
elemA%n4%n == elemB%n3%n .AND. & IF (elemA%n4%n == elemB%n3%n .AND. &
elemA%n1%n == elemB%n2%n) THEN elemA%n1%n == elemB%n2%n) THEN
elemA%e4 => elemB elemA%e4 => elemB
elemB%e2 => elemA elemB%e2 => elemA
ELSEIF (elemA%n4%n == elemB%n2%n .AND. &
elemA%n1%n == elemB%n1%n) THEN
elemA%e4 => elemB
elemB%e1 => elemA
ELSEIF (elemA%n4%n == elemB%n1%n .AND. &
elemA%n1%n == elemB%n4%n) THEN
elemA%e4 => elemB
elemB%e4 => elemA
ELSEIF (elemA%n4%n == elemB%n4%n .AND. &
elemA%n1%n == elemB%n3%n) THEN
elemA%e4 => elemB
elemB%e3 => elemA
END IF
END IF END IF

View file

@ -1050,38 +1050,106 @@ MODULE moduleMesh2DCyl
CLASS(meshCell2DCylQuad), INTENT(inout), TARGET:: elemB CLASS(meshCell2DCylQuad), INTENT(inout), TARGET:: elemB
!Check direction 1 !Check direction 1
IF (.NOT. ASSOCIATED(elemA%e1) .AND. & IF (.NOT. ASSOCIATED(elemA%e1)) THEN
elemA%n1%n == elemB%n4%n .AND. & IF (elemA%n1%n == elemB%n4%n .AND. &
elemA%n2%n == elemB%n3%n) THEN elemA%n2%n == elemB%n3%n) THEN
elemA%e1 => elemB elemA%e1 => elemB
elemB%e3 => elemA elemB%e3 => elemA
ELSEIF (elemA%n1%n == elemB%n3%n .AND. &
elemA%n2%n == elemB%n2%n) THEN
elemA%e1 => elemB
elemB%e2 => elemA
ELSEIF (elemA%n1%n == elemB%n2%n .AND. &
elemA%n2%n == elemB%n1%n) THEN
elemA%e1 => elemB
elemB%e1 => elemA
ELSEIF (elemA%n1%n == elemB%n1%n .AND. &
elemA%n2%n == elemB%n4%n) THEN
elemA%e1 => elemB
elemB%e4 => elemA
END IF
END IF END IF
!Check direction 2 !Check direction 2
IF (.NOT. ASSOCIATED(elemA%e2) .AND. & IF (.NOT. ASSOCIATED(elemA%e2)) THEN
elemA%n2%n == elemB%n1%n .AND. & IF (elemA%n2%n == elemB%n1%n .AND. &
elemA%n3%n == elemB%n4%n) THEN elemA%n3%n == elemB%n4%n) THEN
elemA%e2 => elemB elemA%e2 => elemB
elemB%e4 => elemA elemB%e4 => elemA
ELSEIF (elemA%n2%n == elemB%n4%n .AND. &
elemA%n3%n == elemB%n3%n) THEN
elemA%e2 => elemB
elemB%e3 => elemA
ELSEIF (elemA%n2%n == elemB%n3%n .AND. &
elemA%n3%n == elemB%n2%n) THEN
elemA%e2 => elemB
elemB%e2 => elemA
ELSEIF (elemA%n2%n == elemB%n2%n .AND. &
elemA%n3%n == elemB%n1%n) THEN
elemA%e2 => elemB
elemB%e1 => elemA
END IF
END IF END IF
!Check direction 3 !Check direction 3
IF (.NOT. ASSOCIATED(elemA%e3) .AND. & IF (.NOT. ASSOCIATED(elemA%e3)) THEN
elemA%n3%n == elemB%n2%n .AND. & IF (elemA%n3%n == elemB%n2%n .AND. &
elemA%n4%n == elemB%n1%n) THEN elemA%n4%n == elemB%n1%n) THEN
elemA%e3 => elemB elemA%e3 => elemB
elemB%e1 => elemA elemB%e1 => elemA
ELSEIF (elemA%n3%n == elemB%n1%n .AND. &
elemA%n4%n == elemB%n4%n) THEN
elemA%e3 => elemB
elemB%e4 => elemA
ELSEIF (elemA%n3%n == elemB%n4%n .AND. &
elemA%n4%n == elemB%n3%n) THEN
elemA%e3 => elemB
elemB%e3 => elemA
ELSEIF (elemA%n3%n == elemB%n3%n .AND. &
elemA%n4%n == elemB%n2%n) THEN
elemA%e3 => elemB
elemB%e2 => elemA
END IF
END IF END IF
!Check direction 4 !Check direction 4
IF (.NOT. ASSOCIATED(elemA%e4) .AND. & IF (.NOT. ASSOCIATED(elemA%e4)) THEN
elemA%n4%n == elemB%n3%n .AND. & IF (elemA%n4%n == elemB%n3%n .AND. &
elemA%n1%n == elemB%n2%n) THEN elemA%n1%n == elemB%n2%n) THEN
elemA%e4 => elemB elemA%e4 => elemB
elemB%e2 => elemA elemB%e2 => elemA
ELSEIF (elemA%n4%n == elemB%n2%n .AND. &
elemA%n1%n == elemB%n1%n) THEN
elemA%e4 => elemB
elemB%e1 => elemA
ELSEIF (elemA%n4%n == elemB%n1%n .AND. &
elemA%n1%n == elemB%n4%n) THEN
elemA%e4 => elemB
elemB%e4 => elemA
ELSEIF (elemA%n4%n == elemB%n4%n .AND. &
elemA%n1%n == elemB%n3%n) THEN
elemA%e4 => elemB
elemB%e3 => elemA
END IF
END IF END IF