Annotation of rpl/lapack/lapack/dlamrg.f, revision 1.1
1.1 ! bertrand 1: SUBROUTINE DLAMRG( N1, N2, A, DTRD1, DTRD2, INDEX )
! 2: *
! 3: * -- LAPACK routine (version 3.2) --
! 4: * -- LAPACK is a software package provided by Univ. of Tennessee, --
! 5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
! 6: * November 2006
! 7: *
! 8: * .. Scalar Arguments ..
! 9: INTEGER DTRD1, DTRD2, N1, N2
! 10: * ..
! 11: * .. Array Arguments ..
! 12: INTEGER INDEX( * )
! 13: DOUBLE PRECISION A( * )
! 14: * ..
! 15: *
! 16: * Purpose
! 17: * =======
! 18: *
! 19: * DLAMRG will create a permutation list which will merge the elements
! 20: * of A (which is composed of two independently sorted sets) into a
! 21: * single set which is sorted in ascending order.
! 22: *
! 23: * Arguments
! 24: * =========
! 25: *
! 26: * N1 (input) INTEGER
! 27: * N2 (input) INTEGER
! 28: * These arguements contain the respective lengths of the two
! 29: * sorted lists to be merged.
! 30: *
! 31: * A (input) DOUBLE PRECISION array, dimension (N1+N2)
! 32: * The first N1 elements of A contain a list of numbers which
! 33: * are sorted in either ascending or descending order. Likewise
! 34: * for the final N2 elements.
! 35: *
! 36: * DTRD1 (input) INTEGER
! 37: * DTRD2 (input) INTEGER
! 38: * These are the strides to be taken through the array A.
! 39: * Allowable strides are 1 and -1. They indicate whether a
! 40: * subset of A is sorted in ascending (DTRDx = 1) or descending
! 41: * (DTRDx = -1) order.
! 42: *
! 43: * INDEX (output) INTEGER array, dimension (N1+N2)
! 44: * On exit this array will contain a permutation such that
! 45: * if B( I ) = A( INDEX( I ) ) for I=1,N1+N2, then B will be
! 46: * sorted in ascending order.
! 47: *
! 48: * =====================================================================
! 49: *
! 50: * .. Local Scalars ..
! 51: INTEGER I, IND1, IND2, N1SV, N2SV
! 52: * ..
! 53: * .. Executable Statements ..
! 54: *
! 55: N1SV = N1
! 56: N2SV = N2
! 57: IF( DTRD1.GT.0 ) THEN
! 58: IND1 = 1
! 59: ELSE
! 60: IND1 = N1
! 61: END IF
! 62: IF( DTRD2.GT.0 ) THEN
! 63: IND2 = 1 + N1
! 64: ELSE
! 65: IND2 = N1 + N2
! 66: END IF
! 67: I = 1
! 68: * while ( (N1SV > 0) & (N2SV > 0) )
! 69: 10 CONTINUE
! 70: IF( N1SV.GT.0 .AND. N2SV.GT.0 ) THEN
! 71: IF( A( IND1 ).LE.A( IND2 ) ) THEN
! 72: INDEX( I ) = IND1
! 73: I = I + 1
! 74: IND1 = IND1 + DTRD1
! 75: N1SV = N1SV - 1
! 76: ELSE
! 77: INDEX( I ) = IND2
! 78: I = I + 1
! 79: IND2 = IND2 + DTRD2
! 80: N2SV = N2SV - 1
! 81: END IF
! 82: GO TO 10
! 83: END IF
! 84: * end while
! 85: IF( N1SV.EQ.0 ) THEN
! 86: DO 20 N1SV = 1, N2SV
! 87: INDEX( I ) = IND2
! 88: I = I + 1
! 89: IND2 = IND2 + DTRD2
! 90: 20 CONTINUE
! 91: ELSE
! 92: * N2SV .EQ. 0
! 93: DO 30 N2SV = 1, N1SV
! 94: INDEX( I ) = IND1
! 95: I = I + 1
! 96: IND1 = IND1 + DTRD1
! 97: 30 CONTINUE
! 98: END IF
! 99: *
! 100: RETURN
! 101: *
! 102: * End of DLAMRG
! 103: *
! 104: END
CVSweb interface <joel.bertrand@systella.fr>