Merge branch 'issue/particlesStuck' into 'development'

Issue in connectivity between Quad elements

See merge request JorgeGonz/fpakc!39
This commit is contained in:
Jorge Gonzalez 2023-02-09 15:29:34 +00:00
commit f815c8f192
3 changed files with 179 additions and 43 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

@ -524,7 +524,7 @@ MODULE moduleMesh2DCyl
conv = 1.D0 conv = 1.D0
XiO = 0.D0 XiO = 0.D0
DO WHILE(conv > 1.D-2) DO WHILE(conv > 1.D-4)
dPsi = self%dPsi(XiO, 4) dPsi = self%dPsi(XiO, 4)
pDer = self%partialDer(4, dPsi) pDer = self%partialDer(4, dPsi)
detJ = self%detJac(pDer) detJ = self%detJac(pDer)
@ -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

View file

@ -639,8 +639,8 @@ MODULE moduleMesh
CLASS(meshCell), INTENT(inout):: self CLASS(meshCell), INTENT(inout):: self
CLASS(particle), INTENT(inout), TARGET:: part CLASS(particle), INTENT(inout), TARGET:: part
CLASS(meshCell), OPTIONAL, INTENT(in):: oldCell CLASS(meshCell), OPTIONAL, INTENT(in):: oldCell
REAL(8):: Xi(1:3) REAL(8):: Xi(1:3) = 0.D0
CLASS(meshElement), POINTER:: neighbourElement CLASS(meshElement), POINTER:: neighbourElement => NULL()
INTEGER:: sp INTEGER:: sp
Xi = self%phy2log(part%r) Xi = self%phy2log(part%r)