MODULE moduleMesh1DCartBoundary USE moduleMesh1DCart TYPE, PUBLIC, EXTENDS(meshEdge1DCart):: meshEdge1DCartRef CONTAINS PROCEDURE, PASS:: fBoundary => reflection END TYPE meshEdge1DCartRef TYPE, PUBLIC, EXTENDS(meshEdge1DCart):: meshEdge1DCartAbs CONTAINS PROCEDURE, PASS:: fBoundary => absorption END TYPE meshEdge1DCartAbs CONTAINS SUBROUTINE reflection(self, part) USE moduleSpecies IMPLICIT NONE CLASS(meshEdge1DCartRef), INTENT(inout):: self CLASS(particle), INTENT(inout):: part part%v(1) = -part%v(1) part%r(1) = 2.D0*self%x - part%r(1) END SUBROUTINE reflection SUBROUTINE absorption(self, part) USE moduleSpecies IMPLICIT NONE CLASS(meshEdge1DCartAbs), INTENT(inout):: self CLASS(particle), INTENT(inout):: part part%n_in = .FALSE. END SUBROUTINE absorption END MODULE moduleMesh1DCartBoundary