*> \brief \b DLAPMR rearranges rows of a matrix as specified by a permutation vector. * * =========== DOCUMENTATION =========== * * Online html documentation available at * http://www.netlib.org/lapack/explore-html/ * *> \htmlonly *> Download DLAPMR + dependencies *> *> [TGZ] *> *> [ZIP] *> *> [TXT] *> \endhtmlonly * * Definition: * =========== * * SUBROUTINE DLAPMR( FORWRD, M, N, X, LDX, K ) * * .. Scalar Arguments .. * LOGICAL FORWRD * INTEGER LDX, M, N * .. * .. Array Arguments .. * INTEGER K( * ) * DOUBLE PRECISION X( LDX, * ) * .. * * *> \par Purpose: * ============= *> *> \verbatim *> *> DLAPMR rearranges the rows of the M by N matrix X as specified *> by the permutation K(1),K(2),...,K(M) of the integers 1,...,M. *> If FORWRD = .TRUE., forward permutation: *> *> X(K(I),*) is moved X(I,*) for I = 1,2,...,M. *> *> If FORWRD = .FALSE., backward permutation: *> *> X(I,*) is moved to X(K(I),*) for I = 1,2,...,M. *> \endverbatim * * Arguments: * ========== * *> \param[in] FORWRD *> \verbatim *> FORWRD is LOGICAL *> = .TRUE., forward permutation *> = .FALSE., backward permutation *> \endverbatim *> *> \param[in] M *> \verbatim *> M is INTEGER *> The number of rows of the matrix X. M >= 0. *> \endverbatim *> *> \param[in] N *> \verbatim *> N is INTEGER *> The number of columns of the matrix X. N >= 0. *> \endverbatim *> *> \param[in,out] X *> \verbatim *> X is DOUBLE PRECISION array, dimension (LDX,N) *> On entry, the M by N matrix X. *> On exit, X contains the permuted matrix X. *> \endverbatim *> *> \param[in] LDX *> \verbatim *> LDX is INTEGER *> The leading dimension of the array X, LDX >= MAX(1,M). *> \endverbatim *> *> \param[in,out] K *> \verbatim *> K is INTEGER array, dimension (M) *> On entry, K contains the permutation vector. K is used as *> internal workspace, but reset to its original value on *> output. *> \endverbatim * * Authors: * ======== * *> \author Univ. of Tennessee *> \author Univ. of California Berkeley *> \author Univ. of Colorado Denver *> \author NAG Ltd. * *> \ingroup doubleOTHERauxiliary * * ===================================================================== SUBROUTINE DLAPMR( FORWRD, M, N, X, LDX, K ) * * -- LAPACK auxiliary routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * .. Scalar Arguments .. LOGICAL FORWRD INTEGER LDX, M, N * .. * .. Array Arguments .. INTEGER K( * ) DOUBLE PRECISION X( LDX, * ) * .. * * ===================================================================== * * .. Local Scalars .. INTEGER I, IN, J, JJ DOUBLE PRECISION TEMP * .. * .. Executable Statements .. * IF( M.LE.1 ) $ RETURN * DO 10 I = 1, M K( I ) = -K( I ) 10 CONTINUE * IF( FORWRD ) THEN * * Forward permutation * DO 50 I = 1, M * IF( K( I ).GT.0 ) $ GO TO 40 * J = I K( J ) = -K( J ) IN = K( J ) * 20 CONTINUE IF( K( IN ).GT.0 ) $ GO TO 40 * DO 30 JJ = 1, N TEMP = X( J, JJ ) X( J, JJ ) = X( IN, JJ ) X( IN, JJ ) = TEMP 30 CONTINUE * K( IN ) = -K( IN ) J = IN IN = K( IN ) GO TO 20 * 40 CONTINUE * 50 CONTINUE * ELSE * * Backward permutation * DO 90 I = 1, M * IF( K( I ).GT.0 ) $ GO TO 80 * K( I ) = -K( I ) J = K( I ) 60 CONTINUE IF( J.EQ.I ) $ GO TO 80 * DO 70 JJ = 1, N TEMP = X( I, JJ ) X( I, JJ ) = X( J, JJ ) X( J, JJ ) = TEMP 70 CONTINUE * K( J ) = -K( J ) J = K( J ) GO TO 60 * 80 CONTINUE * 90 CONTINUE * END IF * RETURN * * End of ZLAPMT * END