MODULE moduleBoundary TYPE, PUBLIC:: boundaryGeneric INTEGER:: id = 0 CHARACTER(:), ALLOCATABLE:: name INTEGER:: physicalSurface = 0 CHARACTER(:), ALLOCATABLE:: boundaryType END TYPE boundaryGeneric TYPE:: boundaryCont CLASS(boundaryGeneric), ALLOCATABLE:: obj END TYPE boundaryCont INTEGER:: nBoundary = 0 TYPE(boundaryCont), ALLOCATABLE:: boundary(:) CONTAINS FUNCTION getBoundaryId(physicalSurface) RESULT(id) IMPLICIT NONE INTEGER:: physicalSurface INTEGER:: id INTEGER:: i id = 0 DO i = 1, nBoundary IF (physicalSurface == boundary(i)%obj%physicalSurface) id = boundary(i)%obj%id END DO END FUNCTION getBoundaryId END MODULE moduleBoundary