80 lines
2 KiB
Fortran
80 lines
2 KiB
Fortran
!moduleMeshCylBoundary: Edge elements for Cylindrical mesh.
|
|
MODULE moduleMeshCylBoundary
|
|
USE moduleMeshCyl
|
|
|
|
TYPE, PUBLIC, EXTENDS(meshEdgeCyl):: meshEdgeCylRef
|
|
CONTAINS
|
|
PROCEDURE, PASS:: fBoundary => reflection
|
|
|
|
END TYPE meshEdgeCylRef
|
|
|
|
TYPE, PUBLIC, EXTENDS(meshEdgeCyl):: meshEdgeCylAbs
|
|
CONTAINS
|
|
PROCEDURE, PASS:: fBoundary => absorption
|
|
|
|
END TYPE meshEdgeCylAbs
|
|
|
|
TYPE, PUBLIC, EXTENDS(meshEdgeCyl):: meshEdgeCylAxis
|
|
CONTAINS
|
|
PROCEDURE, PASS:: fBoundary => symmetryAxis
|
|
|
|
END TYPE meshEdgeCylAxis
|
|
|
|
CONTAINS
|
|
SUBROUTINE reflection(self, part)
|
|
USE moduleSpecies
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdgeCylRef), INTENT(inout):: self
|
|
CLASS(particle), INTENT(inout):: part
|
|
REAL(8):: edgeNorm, cosT, sinT, rp(1:2), rpp(1:2), vpp(1:2)
|
|
|
|
edgeNorm = DSQRT((self%r(2)-self%r(1))**2 + (self%z(2)-self%z(1))**2)
|
|
cosT = (self%z(2)-self%z(1))/edgeNorm
|
|
sinT = DSQRT(1-cosT**2)
|
|
|
|
rp(1) = part%r(1) - self%z(1);
|
|
rp(2) = part%r(2) - self%r(1);
|
|
|
|
rpp(1) = cosT*rp(1) - sinT*rp(2)
|
|
rpp(2) = sinT*rp(1) + cosT*rp(2)
|
|
rpp(2) = -rpp(2)
|
|
|
|
vpp(1) = cosT*part%v(1) - sinT*part%v(2)
|
|
vpp(2) = sinT*part%v(1) + cosT*part%v(2)
|
|
vpp(2) = -vpp(2)
|
|
|
|
part%r(1) = cosT*rpp(1) + sinT*rpp(2) + self%z(1);
|
|
part%r(2) = -sinT*rpp(1) + cosT*rpp(2) + self%r(1);
|
|
part%v(1) = cosT*vpp(1) + sinT*vpp(2)
|
|
part%v(2) = -sinT*vpp(1) + cosT*vpp(2)
|
|
|
|
part%n_in = .TRUE.
|
|
|
|
END SUBROUTINE reflection
|
|
|
|
!Absoption in a surface
|
|
SUBROUTINE absorption(self, part)
|
|
USE moduleSpecies
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdgeCylAbs), INTENT(inout):: self
|
|
CLASS(particle), INTENT(inout):: part
|
|
|
|
|
|
!TODO: Add scatter to mesh nodes
|
|
part%n_in = .FALSE.
|
|
|
|
END SUBROUTINE absorption
|
|
|
|
SUBROUTINE symmetryAxis(self, part)
|
|
USE moduleSpecies
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdgeCylAxis), INTENT(inout):: self
|
|
CLASS(particle), INTENT(inout):: part
|
|
|
|
END SUBROUTINE symmetryAxis
|
|
|
|
|
|
END MODULE moduleMeshCylBoundary
|