Fixed an issue with reflection of particles in all geometries and also
assigning the normal vector in 2D and 3D. 3D Cartesian geometry is working properly, although it needs testing. Still issue with ionization boundary.
This commit is contained in:
parent
3b01099aba
commit
db6b0a2c03
15 changed files with 349 additions and 265 deletions
|
|
@ -7,6 +7,9 @@ MODULE moduleMesh1DRad
|
|||
USE moduleMeshBoundary
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(8), PARAMETER:: corSeg(1:3) = (/ -DSQRT(3.D0/5.D0), 0.D0, DSQRT(3.D0/5.D0) /)
|
||||
REAL(8), PARAMETER:: wSeg(1:3) = (/ 5.D0/9.D0 , 8.D0/9.D0, 5.D0/9.D0 /)
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshNode):: meshNode1DRad
|
||||
!Element coordinates
|
||||
REAL(8):: r = 0.D0
|
||||
|
|
@ -174,11 +177,11 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END FUNCTION getNodes1DRad
|
||||
|
||||
PURE FUNCTION intersection1DRad(self, r0, v0) RESULT(r)
|
||||
PURE FUNCTION intersection1DRad(self, r0) RESULT(r)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRad), INTENT(in):: self
|
||||
REAL(8), DIMENSION(1:3), INTENT(in):: r0, v0
|
||||
REAL(8), DIMENSION(1:3), INTENT(in):: r0
|
||||
REAL(8), DIMENSION(1:3):: r
|
||||
|
||||
r = (/ self%r, 0.D0, 0.D0 /)
|
||||
|
|
@ -317,19 +320,26 @@ MODULE moduleMesh1DRad
|
|||
REAL(8):: ke(1:2,1:2)
|
||||
REAL(8):: Xii(1:3)
|
||||
REAL(8):: dPsi(1:1, 1:2)
|
||||
REAL(8):: invJ
|
||||
REAL(8):: invJ(1), detJ
|
||||
REAL(8):: r, fPsi(1:2)
|
||||
INTEGER:: l
|
||||
|
||||
ke = 0.D0
|
||||
Xii = 0.D0
|
||||
dPsi = self%dPsi(Xii)
|
||||
invJ = self%invJac(Xii, dPsi)
|
||||
fPsi = self%fPsi(Xii)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
ke(1,:) = (/ dPsi(1,1)*dPsi(1,1), dPsi(1,1)*dPsi(1,2) /)
|
||||
ke(2,:) = (/ dPsi(1,2)*dPsi(1,1), dPsi(1,2)*dPsi(1,2) /)
|
||||
ke = 2.D0*ke*invJ
|
||||
ke = ke*r*PI2
|
||||
DO l = 1, 3
|
||||
xii(1) = corSeg(l)
|
||||
dPsi = self%dPsi(Xii)
|
||||
detJ = self%detJac(Xii, dPsi)
|
||||
invJ = self%invJac(Xii, dPsi)
|
||||
fPsi = self%fPsi(Xii)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
ke = ke + MATMUL(RESHAPE(MATMUL(invJ,dPsi), (/ 2, 1/)), &
|
||||
RESHAPE(MATMUL(invJ,dPsi), (/ 1, 2/)))* &
|
||||
r*wSeg(l)/detJ
|
||||
|
||||
END DO
|
||||
|
||||
ke = ke*PI2
|
||||
|
||||
END FUNCTION elemKRad
|
||||
|
||||
|
|
@ -341,17 +351,23 @@ MODULE moduleMesh1DRad
|
|||
REAL(8), INTENT(in):: source(1:)
|
||||
REAL(8), ALLOCATABLE:: localF(:)
|
||||
REAL(8):: fPsi(1:2)
|
||||
REAL(8):: r
|
||||
REAL(8):: detJ
|
||||
REAL(8):: detJ, f, r
|
||||
REAL(8):: Xii(1:3)
|
||||
INTEGER:: l
|
||||
|
||||
Xii = 0.D0
|
||||
fPsi = self%fPsi(Xii)
|
||||
detJ = self%detJac(Xii)
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
ALLOCATE(localF(1:2))
|
||||
localF = 2.D0*DOT_PRODUCT(fPsi, source)*detJ
|
||||
localF = localF*r*PI2
|
||||
localF = 0.D0
|
||||
Xii = 0.D0
|
||||
|
||||
DO l = 1, 3
|
||||
xii(1) = corSeg(l)
|
||||
detJ = self%detJac(Xii)
|
||||
fPsi = self%fPsi(Xii)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
f = DOT_PRODUCT(fPsi, source)
|
||||
localF = localF + f*fPsi*r*wSeg(l)*detJ
|
||||
|
||||
END DO
|
||||
|
||||
END FUNCTION elemFRad
|
||||
|
||||
|
|
@ -377,7 +393,7 @@ MODULE moduleMesh1DRad
|
|||
END FUNCTION insideRad
|
||||
|
||||
SUBROUTINE scatterRad(self, part)
|
||||
USE moduleOutput
|
||||
USE moduleMath
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue