! XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx
! Function similar to STRLEN but meant for INTEGERs
!
! USAGE: VARIABLE = INTLEN(NUMBER)
! XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx
INTEGER FUNCTION INTLEN(I)
INTEGER, INTENT(IN) :: I
INTEGER :: TEMP, LCTL
D = 0
TEMP = I
FLOOP: DO LCTL=1,10,1
TEMP = TEMP / 10
D = D + 1
IF (TEMP .EQ. 0) THEN
EXIT
END IF
END DO FLOOP
INTLEN = D
END FUNCTION INTLEN
! XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX
! Extracts a value stored in a matrix so that it could be used with
! 0 rank variables (non-matrixes)
!
! USAGE: VARIABLE = EX(MATRIX, INDEX)
! XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX
INTEGER FUNCTION EX(I, IND)
INTEGER, DIMENSION(:), INTENT(IN) :: I
INTEGER, DIMENSION(1:SIZE(I)) :: D
CALL INIT(D,1)
EX = DOT_PRODUCT(I(IND:IND),D(IND:IND))
END FUNCTION EX
! XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx
! Helper subroutine
! XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXx
SUBROUTINE INIT (AR1, VAL)
INTEGER, INTENT(IN) :: VAL
INTEGER, INTENT(INOUT), DIMENSION(:) :: AR1
INTEGER :: LCTL
FLOOP: DO LCTL=1,SIZE(AR1), 1
AR1(LCTL:LCTL) = VAL
END DO FLOOP
END SUBROUTINE INIT
END PROGRAM MERGEA