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,39 +1012,107 @@ 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
END IF ELSEIF (elemA%n1%n == elemB%n3%n .AND. &
elemA%n2%n == elemB%n2%n) THEN
elemA%e1 => elemB
elemB%e2 => elemA
!Check direction 2 ELSEIF (elemA%n1%n == elemB%n2%n .AND. &
IF (.NOT. ASSOCIATED(elemA%e2) .AND. & elemA%n2%n == elemB%n1%n) THEN
elemA%n2%n == elemB%n1%n .AND. & elemA%e1 => elemB
elemA%n3%n == elemB%n4%n) THEN elemB%e1 => elemA
elemA%e2 => elemB
ELSEIF (elemA%n1%n == elemB%n1%n .AND. &
elemA%n2%n == elemB%n4%n) THEN
elemA%e1 => elemB
elemB%e4 => elemA elemB%e4 => elemA
END IF END IF
!Check direction 3 END IF
IF (.NOT. ASSOCIATED(elemA%e3) .AND. &
elemA%n3%n == elemB%n2%n .AND. & !Check direction 2
elemA%n4%n == elemB%n1%n) THEN IF (.NOT. ASSOCIATED(elemA%e2)) THEN
elemA%e3 => elemB IF (elemA%n2%n == elemB%n1%n .AND. &
elemA%n3%n == elemB%n4%n) THEN
elemA%e2 => elemB
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 elemB%e1 => elemA
END IF END IF
END IF
!Check direction 3
IF (.NOT. ASSOCIATED(elemA%e3)) THEN
IF (elemA%n3%n == elemB%n2%n .AND. &
elemA%n4%n == elemB%n1%n) THEN
elemA%e3 => elemB
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
!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
END SUBROUTINE connectQuadQuad END SUBROUTINE connectQuadQuad

View file

@ -1050,39 +1050,107 @@ 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
END IF ELSEIF (elemA%n1%n == elemB%n3%n .AND. &
elemA%n2%n == elemB%n2%n) THEN
elemA%e1 => elemB
elemB%e2 => elemA
!Check direction 2 ELSEIF (elemA%n1%n == elemB%n2%n .AND. &
IF (.NOT. ASSOCIATED(elemA%e2) .AND. & elemA%n2%n == elemB%n1%n) THEN
elemA%n2%n == elemB%n1%n .AND. & elemA%e1 => elemB
elemA%n3%n == elemB%n4%n) THEN elemB%e1 => elemA
elemA%e2 => elemB
ELSEIF (elemA%n1%n == elemB%n1%n .AND. &
elemA%n2%n == elemB%n4%n) THEN
elemA%e1 => elemB
elemB%e4 => elemA elemB%e4 => elemA
END IF END IF
!Check direction 3 END IF
IF (.NOT. ASSOCIATED(elemA%e3) .AND. &
elemA%n3%n == elemB%n2%n .AND. & !Check direction 2
elemA%n4%n == elemB%n1%n) THEN IF (.NOT. ASSOCIATED(elemA%e2)) THEN
elemA%e3 => elemB IF (elemA%n2%n == elemB%n1%n .AND. &
elemA%n3%n == elemB%n4%n) THEN
elemA%e2 => elemB
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 elemB%e1 => elemA
END IF END IF
END IF
!Check direction 3
IF (.NOT. ASSOCIATED(elemA%e3)) THEN
IF (elemA%n3%n == elemB%n2%n .AND. &
elemA%n4%n == elemB%n1%n) THEN
elemA%e3 => elemB
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
!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
END SUBROUTINE connectQuadQuad END SUBROUTINE connectQuadQuad