diff options
| author | shmel1k <[email protected]> | 2022-09-02 12:44:59 +0300 | 
|---|---|---|
| committer | shmel1k <[email protected]> | 2022-09-02 12:44:59 +0300 | 
| commit | 90d450f74722da7859d6f510a869f6c6908fd12f (patch) | |
| tree | 538c718dedc76cdfe37ad6d01ff250dd930d9278 /contrib/libs/clapack/dorg2r.c | |
| parent | 01f64c1ecd0d4ffa9e3a74478335f1745f26cc75 (diff) | |
[] add metering mode to CLI
Diffstat (limited to 'contrib/libs/clapack/dorg2r.c')
| -rw-r--r-- | contrib/libs/clapack/dorg2r.c | 175 | 
1 files changed, 175 insertions, 0 deletions
diff --git a/contrib/libs/clapack/dorg2r.c b/contrib/libs/clapack/dorg2r.c new file mode 100644 index 00000000000..892807c577d --- /dev/null +++ b/contrib/libs/clapack/dorg2r.c @@ -0,0 +1,175 @@ +/* dorg2r.f -- translated by f2c (version 20061008). +   You must link the resulting object file with libf2c: +	on Microsoft Windows system, link with libf2c.lib; +	on Linux or Unix systems, link with .../path/to/libf2c.a -lm +	or, if you install libf2c.a in a standard place, with -lf2c -lm +	-- in that order, at the end of the command line, as in +		cc *.o -lf2c -lm +	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., + +		http://www.netlib.org/f2c/libf2c.zip +*/ + +#include "f2c.h" +#include "blaswrap.h" + +/* Table of constant values */ + +static integer c__1 = 1; + +/* Subroutine */ int dorg2r_(integer *m, integer *n, integer *k, doublereal * +	a, integer *lda, doublereal *tau, doublereal *work, integer *info) +{ +    /* System generated locals */ +    integer a_dim1, a_offset, i__1, i__2; +    doublereal d__1; + +    /* Local variables */ +    integer i__, j, l; +    extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *,  +	    integer *), dlarf_(char *, integer *, integer *, doublereal *,  +	    integer *, doublereal *, doublereal *, integer *, doublereal *), xerbla_(char *, integer *); + + +/*  -- LAPACK routine (version 3.2) -- */ +/*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */ +/*     November 2006 */ + +/*     .. Scalar Arguments .. */ +/*     .. */ +/*     .. Array Arguments .. */ +/*     .. */ + +/*  Purpose */ +/*  ======= */ + +/*  DORG2R generates an m by n real matrix Q with orthonormal columns, */ +/*  which is defined as the first n columns of a product of k elementary */ +/*  reflectors of order m */ + +/*        Q  =  H(1) H(2) . . . H(k) */ + +/*  as returned by DGEQRF. */ + +/*  Arguments */ +/*  ========= */ + +/*  M       (input) INTEGER */ +/*          The number of rows of the matrix Q. M >= 0. */ + +/*  N       (input) INTEGER */ +/*          The number of columns of the matrix Q. M >= N >= 0. */ + +/*  K       (input) INTEGER */ +/*          The number of elementary reflectors whose product defines the */ +/*          matrix Q. N >= K >= 0. */ + +/*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */ +/*          On entry, the i-th column must contain the vector which */ +/*          defines the elementary reflector H(i), for i = 1,2,...,k, as */ +/*          returned by DGEQRF in the first k columns of its array */ +/*          argument A. */ +/*          On exit, the m-by-n matrix Q. */ + +/*  LDA     (input) INTEGER */ +/*          The first dimension of the array A. LDA >= max(1,M). */ + +/*  TAU     (input) DOUBLE PRECISION array, dimension (K) */ +/*          TAU(i) must contain the scalar factor of the elementary */ +/*          reflector H(i), as returned by DGEQRF. */ + +/*  WORK    (workspace) DOUBLE PRECISION array, dimension (N) */ + +/*  INFO    (output) INTEGER */ +/*          = 0: successful exit */ +/*          < 0: if INFO = -i, the i-th argument has an illegal value */ + +/*  ===================================================================== */ + +/*     .. Parameters .. */ +/*     .. */ +/*     .. Local Scalars .. */ +/*     .. */ +/*     .. External Subroutines .. */ +/*     .. */ +/*     .. Intrinsic Functions .. */ +/*     .. */ +/*     .. Executable Statements .. */ + +/*     Test the input arguments */ + +    /* Parameter adjustments */ +    a_dim1 = *lda; +    a_offset = 1 + a_dim1; +    a -= a_offset; +    --tau; +    --work; + +    /* Function Body */ +    *info = 0; +    if (*m < 0) { +	*info = -1; +    } else if (*n < 0 || *n > *m) { +	*info = -2; +    } else if (*k < 0 || *k > *n) { +	*info = -3; +    } else if (*lda < max(1,*m)) { +	*info = -5; +    } +    if (*info != 0) { +	i__1 = -(*info); +	xerbla_("DORG2R", &i__1); +	return 0; +    } + +/*     Quick return if possible */ + +    if (*n <= 0) { +	return 0; +    } + +/*     Initialise columns k+1:n to columns of the unit matrix */ + +    i__1 = *n; +    for (j = *k + 1; j <= i__1; ++j) { +	i__2 = *m; +	for (l = 1; l <= i__2; ++l) { +	    a[l + j * a_dim1] = 0.; +/* L10: */ +	} +	a[j + j * a_dim1] = 1.; +/* L20: */ +    } + +    for (i__ = *k; i__ >= 1; --i__) { + +/*        Apply H(i) to A(i:m,i:n) from the left */ + +	if (i__ < *n) { +	    a[i__ + i__ * a_dim1] = 1.; +	    i__1 = *m - i__ + 1; +	    i__2 = *n - i__; +	    dlarf_("Left", &i__1, &i__2, &a[i__ + i__ * a_dim1], &c__1, &tau[ +		    i__], &a[i__ + (i__ + 1) * a_dim1], lda, &work[1]); +	} +	if (i__ < *m) { +	    i__1 = *m - i__; +	    d__1 = -tau[i__]; +	    dscal_(&i__1, &d__1, &a[i__ + 1 + i__ * a_dim1], &c__1); +	} +	a[i__ + i__ * a_dim1] = 1. - tau[i__]; + +/*        Set A(1:i-1,i) to zero */ + +	i__1 = i__ - 1; +	for (l = 1; l <= i__1; ++l) { +	    a[l + i__ * a_dim1] = 0.; +/* L30: */ +	} +/* L40: */ +    } +    return 0; + +/*     End of DORG2R */ + +} /* dorg2r_ */  | 
