Possibility to input initial species distributions (density, velocity
and temperature) via an input file for each species.
New moduleRandom includes function to generate random numbers in
different ways (still uses) the implicit RANDOM_NUMBER().
91 lines
2.1 KiB
Fortran
91 lines
2.1 KiB
Fortran
SUBMODULE (moduleMesh1DCart) moduleMesh1DCartBoundary
|
|
USE moduleMesh1DCart
|
|
|
|
CONTAINS
|
|
SUBROUTINE reflection(edge, part)
|
|
USE moduleSpecies
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdge), INTENT(inout):: edge
|
|
CLASS(particle), INTENT(inout):: part
|
|
|
|
SELECT TYPE(edge)
|
|
TYPE IS(meshEdge1DCart)
|
|
part%v(1) = -part%v(1)
|
|
part%r(1) = 2.D0*edge%x - part%r(1)
|
|
|
|
END SELECT
|
|
|
|
END SUBROUTINE reflection
|
|
|
|
SUBROUTINE absorption(edge, part)
|
|
USE moduleSpecies
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdge), INTENT(inout):: edge
|
|
CLASS(particle), INTENT(inout):: part
|
|
REAL(8):: rEdge(1) !Position of particle in the edge
|
|
REAL(8):: d !Distance from particle to edge
|
|
|
|
SELECT TYPE(edge)
|
|
TYPE IS(meshEdge1DCart)
|
|
rEdge(1) = edge%x
|
|
d = DABS(part%r(1) - rEdge(1))
|
|
|
|
IF (d > 0.D0) THEN
|
|
part%weight = part%weight / d
|
|
part%r(1) = rEdge(1)
|
|
|
|
END IF
|
|
|
|
IF (ASSOCIATED(edge%e1)) THEN
|
|
CALL edge%e1%scatter(part)
|
|
|
|
ELSE
|
|
CALL edge%e2%scatter(part)
|
|
|
|
END IF
|
|
|
|
END SELECT
|
|
|
|
part%n_in = .FALSE.
|
|
|
|
END SUBROUTINE absorption
|
|
|
|
SUBROUTINE transparent(edge, part)
|
|
USE moduleSpecies
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdge), INTENT(inout):: edge
|
|
CLASS(particle), INTENT(inout):: part
|
|
|
|
part%n_in = .FALSE.
|
|
|
|
END SUBROUTINE transparent
|
|
|
|
SUBROUTINE wallTemperature(edge, part)
|
|
USE moduleSpecies
|
|
USE moduleBoundary
|
|
USE moduleRandom
|
|
IMPLICIT NONE
|
|
|
|
CLASS(meshEdge), INTENT(inout):: edge
|
|
CLASS(particle), INTENT(inout):: part
|
|
|
|
!Modifies particle velocity according to wall temperature
|
|
SELECT TYPE(bound => edge%boundary%bTypes(part%sp)%obj)
|
|
TYPE IS(boundaryWallTemperature)
|
|
part%v(1) = part%v(1) + bound%vTh*randomMaxwellian()
|
|
|
|
END SELECT
|
|
|
|
SELECT TYPE(edge)
|
|
TYPE IS(meshEdge1DCart)
|
|
part%v(1) = -part%v(1)
|
|
part%r(1) = 2.D0*edge%x - part%r(1)
|
|
|
|
END SELECT
|
|
|
|
END SUBROUTINE wallTemperature
|
|
|
|
END SUBMODULE moduleMesh1DCartBoundary
|