diff options
author | shmel1k <shmel1k@ydb.tech> | 2022-09-02 12:44:59 +0300 |
---|---|---|
committer | shmel1k <shmel1k@ydb.tech> | 2022-09-02 12:44:59 +0300 |
commit | 90d450f74722da7859d6f510a869f6c6908fd12f (patch) | |
tree | 538c718dedc76cdfe37ad6d01ff250dd930d9278 /contrib/libs/clapack/dlamrg.c | |
parent | 01f64c1ecd0d4ffa9e3a74478335f1745f26cc75 (diff) | |
download | ydb-90d450f74722da7859d6f510a869f6c6908fd12f.tar.gz |
[] add metering mode to CLI
Diffstat (limited to 'contrib/libs/clapack/dlamrg.c')
-rw-r--r-- | contrib/libs/clapack/dlamrg.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/contrib/libs/clapack/dlamrg.c b/contrib/libs/clapack/dlamrg.c new file mode 100644 index 0000000000..ce814be803 --- /dev/null +++ b/contrib/libs/clapack/dlamrg.c @@ -0,0 +1,131 @@ +/* dlamrg.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" + +/* Subroutine */ int dlamrg_(integer *n1, integer *n2, doublereal *a, integer + *dtrd1, integer *dtrd2, integer *index) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + integer i__, ind1, ind2, n1sv, n2sv; + + +/* -- LAPACK routine (version 3.2) -- */ +/* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */ +/* November 2006 */ + +/* .. Scalar Arguments .. */ +/* .. */ +/* .. Array Arguments .. */ +/* .. */ + +/* Purpose */ +/* ======= */ + +/* DLAMRG will create a permutation list which will merge the elements */ +/* of A (which is composed of two independently sorted sets) into a */ +/* single set which is sorted in ascending order. */ + +/* Arguments */ +/* ========= */ + +/* N1 (input) INTEGER */ +/* N2 (input) INTEGER */ +/* These arguements contain the respective lengths of the two */ +/* sorted lists to be merged. */ + +/* A (input) DOUBLE PRECISION array, dimension (N1+N2) */ +/* The first N1 elements of A contain a list of numbers which */ +/* are sorted in either ascending or descending order. Likewise */ +/* for the final N2 elements. */ + +/* DTRD1 (input) INTEGER */ +/* DTRD2 (input) INTEGER */ +/* These are the strides to be taken through the array A. */ +/* Allowable strides are 1 and -1. They indicate whether a */ +/* subset of A is sorted in ascending (DTRDx = 1) or descending */ +/* (DTRDx = -1) order. */ + +/* INDEX (output) INTEGER array, dimension (N1+N2) */ +/* On exit this array will contain a permutation such that */ +/* if B( I ) = A( INDEX( I ) ) for I=1,N1+N2, then B will be */ +/* sorted in ascending order. */ + +/* ===================================================================== */ + +/* .. Local Scalars .. */ +/* .. */ +/* .. Executable Statements .. */ + + /* Parameter adjustments */ + --index; + --a; + + /* Function Body */ + n1sv = *n1; + n2sv = *n2; + if (*dtrd1 > 0) { + ind1 = 1; + } else { + ind1 = *n1; + } + if (*dtrd2 > 0) { + ind2 = *n1 + 1; + } else { + ind2 = *n1 + *n2; + } + i__ = 1; +/* while ( (N1SV > 0) & (N2SV > 0) ) */ +L10: + if (n1sv > 0 && n2sv > 0) { + if (a[ind1] <= a[ind2]) { + index[i__] = ind1; + ++i__; + ind1 += *dtrd1; + --n1sv; + } else { + index[i__] = ind2; + ++i__; + ind2 += *dtrd2; + --n2sv; + } + goto L10; + } +/* end while */ + if (n1sv == 0) { + i__1 = n2sv; + for (n1sv = 1; n1sv <= i__1; ++n1sv) { + index[i__] = ind2; + ++i__; + ind2 += *dtrd2; +/* L20: */ + } + } else { +/* N2SV .EQ. 0 */ + i__1 = n1sv; + for (n2sv = 1; n2sv <= i__1; ++n2sv) { + index[i__] = ind1; + ++i__; + ind1 += *dtrd1; +/* L30: */ + } + } + + return 0; + +/* End of DLAMRG */ + +} /* dlamrg_ */ |