1118{
1119 int rows =
static_cast<int>(A->
numRows());
1120 int cols =
static_cast<int>(A->
numColumns());
1121 int info;
1122 int min = (rows <= cols) ? rows : cols;
1124
1127
1128 if (min == 0)
1129 {
1130 if (rows > 0)
1131 for (
int i = 0; i < rows; i++)
result->array[i] = i;
1133 }
1134
1135 int* perm =
new int[
min];
1137
1138 zgetrf_(&rows, &cols, copyA.data(), &rows, perm, &info);
1139
1140 if (info < 0)
1141 {
1142 ERROR(
"argument passed to zgetrf had an illegal value");
1144 }
1145 else
1146 {
1148
1149 for (
int i = 0; i < rows; i++)
result->array[i] = i;
1150 for (
int i = 0; i <
min; i++)
1151 {
1152 int thisloc = perm[i] - 1;
1153 int tmp =
result->array[thisloc];
1156 }
1157
1158
1159#if 0
1160
1161 for (
int row=1; row<=
min; row++) {
1162 int targ = row;
1163 for (
int i=1; i<=
min; i++) {
1164 if (i == targ)
1165 targ = perm[i-1];
1166 else if (perm[i-1] == targ)
1167 targ = i;
1168 }
1169 result->array[row-1] = targ-1;
1170 }
1171 for (int i=min; i<rows; i++)
1173#endif
1174 }
1175
1176 delete[] perm;
1178}
void resize(size_t new_nrows, size_t new_ncols)
size_t numColumns() const
std::vector< double > make_lapack_array(const DMatRR &mat)
void fill_lower_and_upper(const std::vector< double > &lapack_numbers, DMatRR &lower, DMatRR &upper)
int zgetrf_(int *rows, int *cols, double *M, int *ld, int *ipiv, int *info)
VALGRIND_MAKE_MEM_DEFINED & result(result)
M2_arrayint M2_makearrayint(int n)
const mpreal min(const mpreal &x, const mpreal &y)