QSORT Problem

QSORT Problem

UBROUTINE call_qsort

I'm having some problems with the QSORT subroutine. I have some code along the lines of the given below. The user-defined ordering function is called "compare".

    SUBROUTINE call_qsort
        USE IFPORT
        IMPLICIT NONE
        INTEGER :: nlett
        CHARACTER (3), ALLOCATABLE :: templett(:)
  INTEGER (kind=2), EXTERNAL :: compare
        ! ..
        ! .. External Functions ..
        nlett = 10
        ALLOCATE(templett(nlett))
        templett = ...
  CALL qsort(templett,nlett,3,compare)
  …
  …
END SUBROUTINE call_qsort 

FUNCTION compare(a,b)
    IMPLICIT NONE
    INTEGER (kind=2) :: compare
    CHARACTER (3) :: a, b
    INTRINSIC LGT
    ! ..
    IF (LGT(a,b)) THEN
        compare = 5
    ELSE IF (LGT(b,a)) THEN
        compare = -5
    ELSE
        compare = 0
    END IF
END FUNCTION compare

When I run the code I get the error 

Fort: (18): Dummy character variable ‘B’ has length 3 which is greater than actual variable length 1

Does anyone have an idea of what is going wrong - have I missed something obvious?!

2 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Your compare routine is being called with a single character passed for the second argument. Offhand I don't see why that would happen but my guess is that it relates to code you omitted. Ordinarily I'd recommend using CHARACTER(*) in the dummy argument declaration of B, but you should try to figure out why it is getting only one character.

Steve - Intel Developer Support

Leave a Comment

Please sign in to add a comment. Not a member? Join today