Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F92096005
dorgbr.f
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Nov 17, 07:52
Size
9 KB
Mime Type
text/html
Expires
Tue, Nov 19, 07:52 (2 d)
Engine
blob
Format
Raw Data
Handle
22360890
Attached To
rLAMMPS lammps
dorgbr.f
View Options
*>
\
brief
\
b
DORGBR
*
*
===========
DOCUMENTATION
===========
*
*
Online
html
documentation
available
at
*
http
:
//
www
.
netlib
.
org
/
lapack
/
explore
-
html
/
*
*>
\
htmlonly
*>
Download
DORGBR
+
dependencies
*>
<
a
href
=
"http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgbr.f"
>
*>
[
TGZ
]
</
a
>
*>
<
a
href
=
"http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgbr.f"
>
*>
[
ZIP
]
</
a
>
*>
<
a
href
=
"http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f"
>
*>
[
TXT
]
</
a
>
*>
\
endhtmlonly
*
*
Definition
:
*
===========
*
*
SUBROUTINE
DORGBR
(
VECT
,
M
,
N
,
K
,
A
,
LDA
,
TAU
,
WORK
,
LWORK
,
INFO
)
*
*
..
Scalar
Arguments
..
*
CHARACTER
VECT
*
INTEGER
INFO
,
K
,
LDA
,
LWORK
,
M
,
N
*
..
*
..
Array
Arguments
..
*
DOUBLE PRECISION
A
(
LDA
,
*
),
TAU
(
*
),
WORK
(
*
)
*
..
*
*
*>
\
par
Purpose
:
*
=============
*>
*>
\
verbatim
*>
*>
DORGBR
generates
one
of
the
real
orthogonal
matrices
Q
or
P
**
T
*>
determined
by
DGEBRD
when
reducing
a
real
matrix
A
to
bidiagonal
*>
form
:
A
=
Q
*
B
*
P
**
T
.
Q
and
P
**
T
are
defined
as
products
of
*>
elementary
reflectors
H
(
i
)
or
G
(
i
)
respectively
.
*>
*>
If
VECT
=
'Q'
,
A
is
assumed
to
have
been
an
M
-
by
-
K
matrix
,
and
Q
*>
is
of
order
M
:
*>
if
m
>=
k
,
Q
=
H
(
1
)
H
(
2
)
.
.
.
H
(
k
)
and
DORGBR
returns
the
first
n
*>
columns
of
Q
,
where
m
>=
n
>=
k
;
*>
if
m
<
k
,
Q
=
H
(
1
)
H
(
2
)
.
.
.
H
(
m
-
1
)
and
DORGBR
returns
Q
as
an
*>
M
-
by
-
M
matrix
.
*>
*>
If
VECT
=
'P'
,
A
is
assumed
to
have
been
a
K
-
by
-
N
matrix
,
and
P
**
T
*>
is
of
order
N
:
*>
if
k
<
n
,
P
**
T
=
G
(
k
)
.
.
.
G
(
2
)
G
(
1
)
and
DORGBR
returns
the
first
m
*>
rows
of
P
**
T
,
where
n
>=
m
>=
k
;
*>
if
k
>=
n
,
P
**
T
=
G
(
n
-
1
)
.
.
.
G
(
2
)
G
(
1
)
and
DORGBR
returns
P
**
T
as
*>
an
N
-
by
-
N
matrix
.
*>
\
endverbatim
*
*
Arguments
:
*
==========
*
*>
\
param
[
in
]
VECT
*>
\
verbatim
*>
VECT
is
CHARACTER
*
1
*>
Specifies
whether
the
matrix
Q
or
the
matrix
P
**
T
is
*>
required
,
as
defined
in
the
transformation
applied
by
DGEBRD
:
*>
=
'Q'
:
generate
Q
;
*>
=
'P'
:
generate
P
**
T
.
*>
\
endverbatim
*>
*>
\
param
[
in
]
M
*>
\
verbatim
*>
M
is
INTEGER
*>
The
number
of
rows
of
the
matrix
Q
or
P
**
T
to
be
returned
.
*>
M
>=
0.
*>
\
endverbatim
*>
*>
\
param
[
in
]
N
*>
\
verbatim
*>
N
is
INTEGER
*>
The
number
of
columns
of
the
matrix
Q
or
P
**
T
to
be
returned
.
*>
N
>=
0.
*>
If
VECT
=
'Q'
,
M
>=
N
>=
min
(
M
,
K
);
*>
if
VECT
=
'P'
,
N
>=
M
>=
min
(
N
,
K
)
.
*>
\
endverbatim
*>
*>
\
param
[
in
]
K
*>
\
verbatim
*>
K
is
INTEGER
*>
If
VECT
=
'Q'
,
the
number
of
columns
in
the
original
M
-
by
-
K
*>
matrix
reduced
by
DGEBRD
.
*>
If
VECT
=
'P'
,
the
number
of
rows
in
the
original
K
-
by
-
N
*>
matrix
reduced
by
DGEBRD
.
*>
K
>=
0.
*>
\
endverbatim
*>
*>
\
param
[
in
,
out
]
A
*>
\
verbatim
*>
A
is
DOUBLE PRECISION
array
,
dimension
(
LDA
,
N
)
*>
On
entry
,
the
vectors
which
define
the
elementary
reflectors
,
*>
as
returned
by
DGEBRD
.
*>
On
exit
,
the
M
-
by
-
N
matrix
Q
or
P
**
T
.
*>
\
endverbatim
*>
*>
\
param
[
in
]
LDA
*>
\
verbatim
*>
LDA
is
INTEGER
*>
The
leading
dimension
of
the
array
A
.
LDA
>=
max
(
1
,
M
)
.
*>
\
endverbatim
*>
*>
\
param
[
in
]
TAU
*>
\
verbatim
*>
TAU
is
DOUBLE PRECISION
array
,
dimension
*>
(
min
(
M
,
K
))
if
VECT
=
'Q'
*>
(
min
(
N
,
K
))
if
VECT
=
'P'
*>
TAU
(
i
)
must
contain
the
scalar
factor
of
the
elementary
*>
reflector
H
(
i
)
or
G
(
i
),
which
determines
Q
or
P
**
T
,
as
*>
returned
by
DGEBRD
in
its
array
argument
TAUQ
or
TAUP
.
*>
\
endverbatim
*>
*>
\
param
[
out
]
WORK
*>
\
verbatim
*>
WORK
is
DOUBLE PRECISION
array
,
dimension
(
MAX
(
1
,
LWORK
))
*>
On
exit
,
if
INFO
=
0
,
WORK
(
1
)
returns
the
optimal
LWORK
.
*>
\
endverbatim
*>
*>
\
param
[
in
]
LWORK
*>
\
verbatim
*>
LWORK
is
INTEGER
*>
The
dimension
of
the
array
WORK
.
LWORK
>=
max
(
1
,
min
(
M
,
N
))
.
*>
For
optimum
performance
LWORK
>=
min
(
M
,
N
)
*
NB
,
where
NB
*>
is
the
optimal
blocksize
.
*>
*>
If
LWORK
=
-
1
,
then
a
workspace
query
is
assumed
;
the
routine
*>
only
calculates
the
optimal
size
of
the
WORK
array
,
returns
*>
this
value
as
the
first
entry
of
the
WORK
array
,
and
no
error
*>
message
related
to
LWORK
is
issued
by
XERBLA
.
*>
\
endverbatim
*>
*>
\
param
[
out
]
INFO
*>
\
verbatim
*>
INFO
is
INTEGER
*>
=
0
:
successful
exit
*>
<
0
:
if
INFO
=
-
i
,
the
i
-
th
argument
had
an
illegal
value
*>
\
endverbatim
*
*
Authors
:
*
========
*
*>
\
author
Univ
.
of
Tennessee
*>
\
author
Univ
.
of
California
Berkeley
*>
\
author
Univ
.
of
Colorado
Denver
*>
\
author
NAG
Ltd
.
*
*>
\
date
April
2012
*
*>
\
ingroup
doubleGBcomputational
*
*
=====================================================================
SUBROUTINE
DORGBR
(
VECT
,
M
,
N
,
K
,
A
,
LDA
,
TAU
,
WORK
,
LWORK
,
INFO
)
*
*
--
LAPACK
computational
routine
(
version
3.4.1
)
--
*
--
LAPACK
is
a
software
package
provided
by
Univ
.
of
Tennessee
,
--
*
--
Univ
.
of
California
Berkeley
,
Univ
.
of
Colorado
Denver
and
NAG
Ltd
..
--
*
April
2012
*
*
..
Scalar
Arguments
..
CHARACTER
VECT
INTEGER
INFO
,
K
,
LDA
,
LWORK
,
M
,
N
*
..
*
..
Array
Arguments
..
DOUBLE PRECISION
A
(
LDA
,
*
),
TAU
(
*
),
WORK
(
*
)
*
..
*
*
=====================================================================
*
*
..
Parameters
..
DOUBLE PRECISION
ZERO
,
ONE
PARAMETER
(
ZERO
=
0.0
D
+
0
,
ONE
=
1.0
D
+
0
)
*
..
*
..
Local
Scalars
..
LOGICAL
LQUERY
,
WANTQ
INTEGER
I
,
IINFO
,
J
,
LWKOPT
,
MN
*
..
*
..
External
Functions
..
LOGICAL
LSAME
INTEGER
ILAENV
EXTERNAL
LSAME
,
ILAENV
*
..
*
..
External
Subroutines
..
EXTERNAL
DORGLQ
,
DORGQR
,
XERBLA
*
..
*
..
Intrinsic
Functions
..
INTRINSIC
MAX
,
MIN
*
..
*
..
Executable
Statements
..
*
*
Test
the
input
arguments
*
INFO
=
0
WANTQ
=
LSAME
(
VECT
,
'Q'
)
MN
=
MIN
(
M
,
N
)
LQUERY
=
(
LWORK
.EQ.
-
1
)
IF
(
.NOT.
WANTQ
.AND.
.NOT.
LSAME
(
VECT
,
'P'
)
)
THEN
INFO
=
-
1
ELSE IF
(
M
.LT.
0
)
THEN
INFO
=
-
2
ELSE IF
(
N
.LT.
0
.OR.
(
WANTQ
.AND.
(
N
.GT.
M
.OR.
N
.LT.
MIN
(
M
,
$
K
)
)
)
.OR.
(
.NOT.
WANTQ
.AND.
(
M
.GT.
N
.OR.
M
.LT.
$
MIN
(
N
,
K
)
)
)
)
THEN
INFO
=
-
3
ELSE IF
(
K
.LT.
0
)
THEN
INFO
=
-
4
ELSE IF
(
LDA
.LT.
MAX
(
1
,
M
)
)
THEN
INFO
=
-
6
ELSE IF
(
LWORK
.LT.
MAX
(
1
,
MN
)
.AND.
.NOT.
LQUERY
)
THEN
INFO
=
-
9
END IF
*
IF
(
INFO
.EQ.
0
)
THEN
WORK
(
1
)
=
1
IF
(
WANTQ
)
THEN
IF
(
M
.GE.
K
)
THEN
CALL
DORGQR
(
M
,
N
,
K
,
A
,
LDA
,
TAU
,
WORK
,
-
1
,
IINFO
)
ELSE
IF
(
M
.GT.
1
)
THEN
CALL
DORGQR
(
M
-
1
,
M
-
1
,
M
-
1
,
A
(
2
,
2
),
LDA
,
TAU
,
WORK
,
$
-
1
,
IINFO
)
END IF
END IF
ELSE
IF
(
K
.LT.
N
)
THEN
CALL
DORGLQ
(
M
,
N
,
K
,
A
,
LDA
,
TAU
,
WORK
,
-
1
,
IINFO
)
ELSE
IF
(
N
.GT.
1
)
THEN
CALL
DORGLQ
(
N
-
1
,
N
-
1
,
N
-
1
,
A
(
2
,
2
),
LDA
,
TAU
,
WORK
,
$
-
1
,
IINFO
)
END IF
END IF
END IF
LWKOPT
=
WORK
(
1
)
LWKOPT
=
MAX
(
LWKOPT
,
MN
)
END IF
*
IF
(
INFO
.NE.
0
)
THEN
CALL
XERBLA
(
'DORGBR'
,
-
INFO
)
RETURN
ELSE IF
(
LQUERY
)
THEN
WORK
(
1
)
=
LWKOPT
RETURN
END IF
*
*
Quick
return if
possible
*
IF
(
M
.EQ.
0
.OR.
N
.EQ.
0
)
THEN
WORK
(
1
)
=
1
RETURN
END IF
*
IF
(
WANTQ
)
THEN
*
*
Form
Q
,
determined
by
a
call
to
DGEBRD
to
reduce
an
m
-
by
-
k
*
matrix
*
IF
(
M
.GE.
K
)
THEN
*
*
If
m
>=
k
,
assume
m
>=
n
>=
k
*
CALL
DORGQR
(
M
,
N
,
K
,
A
,
LDA
,
TAU
,
WORK
,
LWORK
,
IINFO
)
*
ELSE
*
*
If
m
<
k
,
assume
m
=
n
*
*
Shift
the
vectors
which
define
the
elementary
reflectors
one
*
column
to
the
right
,
and
set
the
first
row
and
column
of
Q
*
to
those
of
the
unit
matrix
*
DO
20
J
=
M
,
2
,
-
1
A
(
1
,
J
)
=
ZERO
DO
10
I
=
J
+
1
,
M
A
(
I
,
J
)
=
A
(
I
,
J
-
1
)
10
CONTINUE
20
CONTINUE
A
(
1
,
1
)
=
ONE
DO
30
I
=
2
,
M
A
(
I
,
1
)
=
ZERO
30
CONTINUE
IF
(
M
.GT.
1
)
THEN
*
*
Form
Q
(
2
:
m
,
2
:
m
)
*
CALL
DORGQR
(
M
-
1
,
M
-
1
,
M
-
1
,
A
(
2
,
2
),
LDA
,
TAU
,
WORK
,
$
LWORK
,
IINFO
)
END IF
END IF
ELSE
*
*
Form
P
**
T
,
determined
by
a
call
to
DGEBRD
to
reduce
a
k
-
by
-
n
*
matrix
*
IF
(
K
.LT.
N
)
THEN
*
*
If
k
<
n
,
assume
k
<=
m
<=
n
*
CALL
DORGLQ
(
M
,
N
,
K
,
A
,
LDA
,
TAU
,
WORK
,
LWORK
,
IINFO
)
*
ELSE
*
*
If
k
>=
n
,
assume
m
=
n
*
*
Shift
the
vectors
which
define
the
elementary
reflectors
one
*
row
downward
,
and
set
the
first
row
and
column
of
P
**
T
to
*
those
of
the
unit
matrix
*
A
(
1
,
1
)
=
ONE
DO
40
I
=
2
,
N
A
(
I
,
1
)
=
ZERO
40
CONTINUE
DO
60
J
=
2
,
N
DO
50
I
=
J
-
1
,
2
,
-
1
A
(
I
,
J
)
=
A
(
I
-
1
,
J
)
50
CONTINUE
A
(
1
,
J
)
=
ZERO
60
CONTINUE
IF
(
N
.GT.
1
)
THEN
*
*
Form
P
**
T
(
2
:
n
,
2
:
n
)
*
CALL
DORGLQ
(
N
-
1
,
N
-
1
,
N
-
1
,
A
(
2
,
2
),
LDA
,
TAU
,
WORK
,
$
LWORK
,
IINFO
)
END IF
END IF
END IF
WORK
(
1
)
=
LWKOPT
RETURN
*
*
End
of
DORGBR
*
END
Event Timeline
Log In to Comment