LAPACK  3.10.0
LAPACK: Linear Algebra PACKage
clapmt.f
Go to the documentation of this file.
1 *> \brief \b CLAPMT 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 CLAPMT + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clapmt.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clapmt.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmt.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * SUBROUTINE CLAPMT( 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 * COMPLEX X( LDX, * )
30 * ..
31 *
32 *
33 *> \par Purpose:
34 * =============
35 *>
36 *> \verbatim
37 *>
38 *> CLAPMT 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 COMPLEX 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 complexOTHERauxiliary
101 *
102 * =====================================================================
103  SUBROUTINE clapmt( 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  COMPLEX X( LDX, * )
116 * ..
117 *
118 * =====================================================================
119 *
120 * .. Local Scalars ..
121  INTEGER I, II, J, IN
122  COMPLEX 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 60 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  60 CONTINUE
164 *
165  ELSE
166 *
167 * Backward permutation
168 *
169  DO 110 i = 1, n
170 *
171  IF( k( i ).GT.0 )
172  $ GO TO 100
173 *
174  k( i ) = -k( i )
175  j = k( i )
176  80 CONTINUE
177  IF( j.EQ.i )
178  $ GO TO 100
179 *
180  DO 90 ii = 1, m
181  temp = x( ii, i )
182  x( ii, i ) = x( ii, j )
183  x( ii, j ) = temp
184  90 CONTINUE
185 *
186  k( j ) = -k( j )
187  j = k( j )
188  GO TO 80
189 *
190  100 CONTINUE
191 
192  110 CONTINUE
193 *
194  END IF
195 *
196  RETURN
197 *
198 * End of CLAPMT
199 *
200  END
subroutine clapmt(FORWRD, M, N, X, LDX, K)
CLAPMT performs a forward or backward permutation of the columns of a matrix.
Definition: clapmt.f:104