~ubuntu-branches/ubuntu/vivid/atlas/vivid

« back to all changes in this revision

Viewing changes to interfaces/lapack/F77/src/zlarft.f

  • Committer: Package Import Robot
  • Author(s): Sébastien Villemot, Sylvestre Ledru, Sébastien Villemot
  • Date: 2013-06-11 15:58:16 UTC
  • mfrom: (1.1.4) (25 sid)
  • mto: This revision was merged to the branch mainline in revision 26.
  • Revision ID: package-import@ubuntu.com-20130611155816-8xeeiziu1iml040c
Tags: 3.10.1-1
[ Sylvestre Ledru ]
* New upstream release (Closes: #609287)

[ Sébastien Villemot ]
* Provide architectural defaults (i.e. precomputed timings) for all
  release archs (except armel and mips for the time being, due to slow
  porterboxes). This will make the package build much faster and should
  eliminate transient build failures due to excessive variance in the
  timings.
* Move symlinks for lib{cblas,f77blas,atlas,lapack_atlas} out of the
  libblas.so.3 alternative and make them always present, so that
  software relying on these libs do not break when another alternative
  is selected for BLAS
* ATLAS now has improved ARM support with native asm constructs. This required
  the following tunes:
  + armel-is-v4t.diff: new patch, prevents FTBFS on armel; otherwise,
    ATLAS uses asm constructs too recent for the platform (armel is only v4t)
  + debian/rules: on armhf, define the ATL_ARM_HARDFP flag; otherwise the asm
    constructs use the soft-float ABI for passing floating points
  + on armhf, ensure that -mfloat-abi=softfp and -mcpu=vfpv3 flags are never
    used; this is implemented via a patch (armhf.diff) and by the use of fixed
    archdefs
* The generic package is now built without multi-threading, because otherwise
  the package fails to build on some single-processor machines (this required
  the introduction of a patch: fix-non-threaded-build.diff). As a side effect,
  the build of the custom package gracefully handles non-threaded
  builds. (Closes: #602524)
* Add libblas.a as slave in the libblas.so alternative (Closes: #701921)
* Add symlinks for lib{f77blas,atlas}.a in /usr/lib (Closes: #666203)
* Modify shlibs file of libatlas3-base, such that packages using
  libblas/liblapack depend on any BLAS/LAPACK alternative, while packages
  depending on ATLAS-specific libraries (e.g. libatlas.so) depend specifically
  on libatlas3-base.
* corei1.diff: remove patch, applied upstream
* Use my @debian.org email address
* Remove obsolete DM-Upload-Allowed flag
* Switch VCS to git
* Remove Conflicts/Replaces against pre-squeeze packages
* libatlas-base-dev now provides libblas.so, as libblas-dev
* No longer use -Wa,--noexecstack in CFLAGS, it makes the package FTBFS
* Do not use POWER3 arch for powerpcspe port (Closes: #701068)
* Bump to debhelper compat level 9
* README.Debian: mention that devscripts is needed to compile the custom
  package (Closes: #697431)
* Bump Standards-Version to 3.9.4. As a consequence, add Built-Using
  fields because the package embeds stuff from liblapack-pic

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      SUBROUTINE ZLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT )
 
2
      IMPLICIT NONE
 
3
*
 
4
*  -- LAPACK auxiliary routine (version 3.2) --
 
5
*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 
6
*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 
7
*     November 2006
 
8
*
 
9
*     .. Scalar Arguments ..
 
10
      CHARACTER          DIRECT, STOREV
 
11
      INTEGER            K, LDT, LDV, N
 
12
*     ..
 
13
*     .. Array Arguments ..
 
14
      COMPLEX*16   T( LDT, * ), TAU( * ), V( LDV, * )
 
15
*     ..
 
16
*
 
17
*  Purpose
 
18
*  =======
 
19
*
 
20
*  ZLARFT forms the triangular factor T of a COMPLEX*16 block reflector H
 
21
*  of order n, which is defined as a product of k elementary reflectors.
 
22
*
 
23
*  If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular;
 
24
*
 
25
*  If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular.
 
26
*
 
27
*  If STOREV = 'C', the vector which defines the elementary reflector
 
28
*  H(i) is stored in the i-th column of the array V, and
 
29
*
 
30
*     H  =  I - V * T * V**H
 
31
*
 
32
*  If STOREV = 'R', the vector which defines the elementary reflector
 
33
*  H(i) is stored in the i-th row of the array V, and
 
34
*
 
35
*     H  =  I - V**H * T * V
 
36
*
 
37
*  Arguments
 
38
*  =========
 
39
*
 
40
*  DIRECT  (input) CHARACTER*1
 
41
*          Specifies the order in which the elementary reflectors are
 
42
*          multiplied to form the block reflector:
 
43
*          = 'F': H = H(1) H(2) . . . H(k) (Forward)
 
44
*          = 'B': H = H(k) . . . H(2) H(1) (Backward)
 
45
*
 
46
*  STOREV  (input) CHARACTER*1
 
47
*          Specifies how the vectors which define the elementary
 
48
*          reflectors are stored (see also Further Details):
 
49
*          = 'C': columnwise
 
50
*          = 'R': rowwise
 
51
*
 
52
*  N       (input) INTEGER
 
53
*          The order of the block reflector H. N >= 0.
 
54
*
 
55
*  K       (input) INTEGER
 
56
*          The order of the triangular factor T (= the number of
 
57
*          elementary reflectors). K >= 1.
 
58
*
 
59
*  V       (input/output) COMPLEX*16 array, dimension
 
60
*                               (LDV,K) if STOREV = 'C'
 
61
*                               (LDV,N) if STOREV = 'R'
 
62
*          The matrix V. See further details.
 
63
*
 
64
*  LDV     (input) INTEGER
 
65
*          The leading dimension of the array V.
 
66
*          If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K.
 
67
*
 
68
*  TAU     (input) COMPLEX*16 array, dimension (K)
 
69
*          TAU(i) must contain the scalar factor of the elementary
 
70
*          reflector H(i).
 
71
*
 
72
*  T       (output) COMPLEX*16 array, dimension (LDT,K)
 
73
*          The k by k triangular factor T of the block reflector.
 
74
*          If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is
 
75
*          lower triangular. The rest of the array is not used.
 
76
*
 
77
*  LDT     (input) INTEGER
 
78
*          The leading dimension of the array T. LDT >= K.
 
79
*
 
80
*  Further Details
 
81
*  ===============
 
82
*
 
83
*  The shape of the matrix V and the storage of the vectors which define
 
84
*  the H(i) is best illustrated by the following example with n = 5 and
 
85
*  k = 3. The elements equal to 1 are not stored; the corresponding
 
86
*  array elements are modified but restored on exit. The rest of the
 
87
*  array is not used.
 
88
*
 
89
*  DIRECT = 'F' and STOREV = 'C':         DIRECT = 'F' and STOREV = 'R':
 
90
*
 
91
*               V = (  1       )                 V = (  1 v1 v1 v1 v1 )
 
92
*                   ( v1  1    )                     (     1 v2 v2 v2 )
 
93
*                   ( v1 v2  1 )                     (        1 v3 v3 )
 
94
*                   ( v1 v2 v3 )
 
95
*                   ( v1 v2 v3 )
 
96
*
 
97
*  DIRECT = 'B' and STOREV = 'C':         DIRECT = 'B' and STOREV = 'R':
 
98
*
 
99
*               V = ( v1 v2 v3 )                 V = ( v1 v1  1       )
 
100
*                   ( v1 v2 v3 )                     ( v2 v2 v2  1    )
 
101
*                   (  1 v2 v3 )                     ( v3 v3 v3 v3  1 )
 
102
*                   (     1 v3 )
 
103
*                   (        1 )
 
104
*
 
105
*  =====================================================================
 
106
*
 
107
*     .. Parameters ..
 
108
      INTEGER ATLASROWMAJOR, ATLASCOLMAJOR
 
109
      PARAMETER (ATLASROWMAJOR=101, ATLASCOLMAJOR=102)
 
110
      INTEGER ATLASNOTRANS, ATLASTRANS, ATLASCONJTRANS
 
111
      PARAMETER (ATLASNOTRANS=111, ATLASTRANS=112, ATLASCONJTRANS=113)
 
112
      INTEGER ATLASUPPER, ATLASLOWER
 
113
      PARAMETER (ATLASUPPER=121, ATLASLOWER=122)
 
114
      INTEGER ATLASNONUNIT, ATLASUNIT
 
115
      PARAMETER (ATLASNONUNIT=131, ATLASUNIT=132)
 
116
      INTEGER ATLASLEFT, ATLASRIGHT
 
117
      PARAMETER (ATLASLEFT=141, ATLASRIGHT=142)
 
118
*     .. Local variables ..
 
119
      INTEGER ISIDE, ITRANS, IDIRECT, ISTORE
 
120
*     ..
 
121
*     .. Executable Statements ..
 
122
*
 
123
*     Quick return if possible
 
124
*
 
125
      IF (N .LE.0) RETURN
 
126
      IF (DIRECT.EQ.'F' .OR. DIRECT.EQ.'f') THEN
 
127
         IDIRECT = 1
 
128
      ELSE
 
129
         IDIRECT = 2
 
130
      ENDIF
 
131
      IF (STOREV.EQ.'R' .OR. STOREV.EQ.'r') THEN
 
132
         ISTORE = 1
 
133
      ELSE
 
134
         ISTORE = 2
 
135
      ENDIF
 
136
*
 
137
      CALL ATL_F77WRAP_ZLARFT(IDIRECT, ISTORE, N, K, V, LDV,
 
138
     $                        TAU, T, LDT)
 
139
*
 
140
*
 
141
      RETURN
 
142
*
 
143
*     End of ZLARFT
 
144
*
 
145
      END