1*> \brief \b DLAPMT performs a forward or backward permutation of the columns of a matrix. 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8*> \htmlonly 9*> Download DLAPMT + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlapmt.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlapmt.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmt.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* SUBROUTINE DLAPMT( FORWRD, M, N, X, LDX, K ) 22* 23* .. Scalar Arguments .. 24* LOGICAL FORWRD 25* INTEGER LDX, M, N 26* .. 27* .. Array Arguments .. 28* INTEGER K( * ) 29* DOUBLE PRECISION X( LDX, * ) 30* .. 31* 32* 33*> \par Purpose: 34* ============= 35*> 36*> \verbatim 37*> 38*> DLAPMT rearranges the columns of the M by N matrix X as specified 39*> by the permutation K(1),K(2),...,K(N) of the integers 1,...,N. 40*> If FORWRD = .TRUE., forward permutation: 41*> 42*> X(*,K(J)) is moved X(*,J) for J = 1,2,...,N. 43*> 44*> If FORWRD = .FALSE., backward permutation: 45*> 46*> X(*,J) is moved to X(*,K(J)) for J = 1,2,...,N. 47*> \endverbatim 48* 49* Arguments: 50* ========== 51* 52*> \param[in] FORWRD 53*> \verbatim 54*> FORWRD is LOGICAL 55*> = .TRUE., forward permutation 56*> = .FALSE., backward permutation 57*> \endverbatim 58*> 59*> \param[in] M 60*> \verbatim 61*> M is INTEGER 62*> The number of rows of the matrix X. M >= 0. 63*> \endverbatim 64*> 65*> \param[in] N 66*> \verbatim 67*> N is INTEGER 68*> The number of columns of the matrix X. N >= 0. 69*> \endverbatim 70*> 71*> \param[in,out] X 72*> \verbatim 73*> X is DOUBLE PRECISION array, dimension (LDX,N) 74*> On entry, the M by N matrix X. 75*> On exit, X contains the permuted matrix X. 76*> \endverbatim 77*> 78*> \param[in] LDX 79*> \verbatim 80*> LDX is INTEGER 81*> The leading dimension of the array X, LDX >= MAX(1,M). 82*> \endverbatim 83*> 84*> \param[in,out] K 85*> \verbatim 86*> K is INTEGER array, dimension (N) 87*> On entry, K contains the permutation vector. K is used as 88*> internal workspace, but reset to its original value on 89*> output. 90*> \endverbatim 91* 92* Authors: 93* ======== 94* 95*> \author Univ. of Tennessee 96*> \author Univ. of California Berkeley 97*> \author Univ. of Colorado Denver 98*> \author NAG Ltd. 99* 100*> \ingroup doubleOTHERauxiliary 101* 102* ===================================================================== 103 SUBROUTINE DLAPMT( FORWRD, M, N, X, LDX, K ) 104* 105* -- LAPACK auxiliary routine -- 106* -- LAPACK is a software package provided by Univ. of Tennessee, -- 107* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 108* 109* .. Scalar Arguments .. 110 LOGICAL FORWRD 111 INTEGER LDX, M, N 112* .. 113* .. Array Arguments .. 114 INTEGER K( * ) 115 DOUBLE PRECISION X( LDX, * ) 116* .. 117* 118* ===================================================================== 119* 120* .. Local Scalars .. 121 INTEGER I, II, IN, J 122 DOUBLE PRECISION TEMP 123* .. 124* .. Executable Statements .. 125* 126 IF( N.LE.1 ) 127 $ RETURN 128* 129 DO 10 I = 1, N 130 K( I ) = -K( I ) 131 10 CONTINUE 132* 133 IF( FORWRD ) THEN 134* 135* Forward permutation 136* 137 DO 50 I = 1, N 138* 139 IF( K( I ).GT.0 ) 140 $ GO TO 40 141* 142 J = I 143 K( J ) = -K( J ) 144 IN = K( J ) 145* 146 20 CONTINUE 147 IF( K( IN ).GT.0 ) 148 $ GO TO 40 149* 150 DO 30 II = 1, M 151 TEMP = X( II, J ) 152 X( II, J ) = X( II, IN ) 153 X( II, IN ) = TEMP 154 30 CONTINUE 155* 156 K( IN ) = -K( IN ) 157 J = IN 158 IN = K( IN ) 159 GO TO 20 160* 161 40 CONTINUE 162* 163 50 CONTINUE 164* 165 ELSE 166* 167* Backward permutation 168* 169 DO 90 I = 1, N 170* 171 IF( K( I ).GT.0 ) 172 $ GO TO 80 173* 174 K( I ) = -K( I ) 175 J = K( I ) 176 60 CONTINUE 177 IF( J.EQ.I ) 178 $ GO TO 80 179* 180 DO 70 II = 1, M 181 TEMP = X( II, I ) 182 X( II, I ) = X( II, J ) 183 X( II, J ) = TEMP 184 70 CONTINUE 185* 186 K( J ) = -K( J ) 187 J = K( J ) 188 GO TO 60 189* 190 80 CONTINUE 191* 192 90 CONTINUE 193* 194 END IF 195* 196 RETURN 197* 198* End of DLAPMT 199* 200 END 201