MODULE moduleMesh1DBoundary USE moduleMesh1D TYPE, PUBLIC, EXTENDS(meshEdge1D):: meshEdge1DRef CONTAINS PROCEDURE, PASS:: fBoundary => reflection END TYPE meshEdge1DRef TYPE, PUBLIC, EXTENDS(meshEdge1D):: meshEdge1DAbs CONTAINS PROCEDURE, PASS:: fBoundary => absorption END TYPE meshEdge1DAbs CONTAINS SUBROUTINE reflection(self, part) USE moduleSpecies IMPLICIT NONE CLASS(meshEdge1DRef), 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(meshEdge1DAbs), INTENT(inout):: self CLASS(particle), INTENT(inout):: part part%n_in = .FALSE. END SUBROUTINE absorption END MODULE moduleMesh1DBoundary