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