This is mostly a long term maintenance improvement.
Many coding styles require elimination of trailing whitespace, and
many editors and source code management configurations automatically
gobble up whitespace. When these tools gobble up whitespace, it
complicates reviewing the meaningful code changes.
By removing whitespace on one patch, it makes future
code reviews much easier.
=SCRIPT====================================================================
if which tempfile &>/dev/null; then
TEMPMAKER=tempfile
elif which mktemp &>/dev/null; then
TEMPMAKER=mktemp
else
echo "Cannot find tempfile program." 2>&1
exit 1
fi
MYTEMP=$($TEMPMAKER)
trap 'rm -f $MYTEMP' SIGINT SIGTERM
stripit() {
echo "stripping $1"
sed 's/[ \t]*$//' "$1" > $MYTEMP
cp $MYTEMP "$1"
}
if [ $# -gt 0 ]; then
while [ "$1" != "" ]; do
stripit $1
shift
done
else
while read -t 2; do
stripit $REPLY
done
fi
rm $MYTEMP
=================================================
98 lines
3.3 KiB
C
98 lines
3.3 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include "lapacke.h"
|
|
|
|
/* Auxiliary routines prototypes */
|
|
extern void print_matrix( char* desc, lapack_int m, lapack_int n, double* a, lapack_int lda );
|
|
extern void print_int_vector( char* desc, lapack_int n, lapack_int* a );
|
|
|
|
/* Parameters */
|
|
#define N 5
|
|
#define NRHS 3
|
|
#define LDA N
|
|
#define LDB NRHS
|
|
|
|
/* Main program */
|
|
int main() {
|
|
/* Locals */
|
|
lapack_int n = N, nrhs = NRHS, lda = LDA, ldb = LDB, info;
|
|
/* Local arrays */
|
|
lapack_int ipiv[N];
|
|
double a[LDA*N] = {
|
|
6.80, -6.05, -0.45, 8.32, -9.67,
|
|
-2.11, -3.30, 2.58, 2.71, -5.14,
|
|
5.66, 5.36, -2.70, 4.35, -7.26,
|
|
5.97, -4.44, 0.27, -7.17, 6.08,
|
|
8.23, 1.08, 9.04, 2.14, -6.87
|
|
};
|
|
double b[LDB*N] = {
|
|
4.02, -1.56, 9.81,
|
|
6.19, 4.00, -4.09,
|
|
-8.22, -8.67, -4.57,
|
|
-7.57, 1.75, -8.61,
|
|
-3.03, 2.86, 8.99
|
|
};
|
|
|
|
double aNorm;
|
|
double rcond;
|
|
char ONE_NORM = '1';
|
|
lapack_int NROWS = n;
|
|
lapack_int NCOLS = n;
|
|
lapack_int LEADING_DIMENSION_A = n;
|
|
|
|
/* Print Entry Matrix */
|
|
print_matrix( "Entry Matrix A", n, n, a, lda );
|
|
/* Print Right Rand Side */
|
|
print_matrix( "Right Rand Side", n, nrhs, b, ldb );
|
|
printf( "\n" );
|
|
/* Executable statements */
|
|
printf( "LAPACKE_dgecon Example Program Results\n" );
|
|
aNorm = LAPACKE_dlange(LAPACK_ROW_MAJOR, ONE_NORM, NROWS, NCOLS, a, LEADING_DIMENSION_A);
|
|
info = LAPACKE_dgetrf(LAPACK_ROW_MAJOR, NROWS, NCOLS, a, LEADING_DIMENSION_A, ipiv);
|
|
info = LAPACKE_dgecon(LAPACK_ROW_MAJOR, ONE_NORM, n, a, LEADING_DIMENSION_A, aNorm, &rcond); // aNorm should be 35.019999999999996
|
|
double work[4*N];
|
|
int iwork[N];
|
|
//info = LAPACKE_dgecon_work(LAPACK_ROW_MAJOR, ONE_NORM, n, a, LEADING_DIMENSION_A, aNorm, &rcond, work, iwork); // aNorm should be 35.019999999999996
|
|
//dgecon_( &ONE_NORM, &n, a, &LEADING_DIMENSION_A, &aNorm, &rcond, work, iwork, &info );
|
|
/* Check for the exact singularity */
|
|
if (info == 0)
|
|
{
|
|
printf("LAPACKE_dgecon completed SUCCESSFULLY...\n");
|
|
}
|
|
else if ( info < 0 )
|
|
{
|
|
printf( "Element %d of A had an illegal value\n", -info );
|
|
exit( 1 );
|
|
}
|
|
else
|
|
{
|
|
printf( "Unrecognized value of INFO = %d\n", info );
|
|
exit( 1 );
|
|
}
|
|
|
|
/* Print solution */
|
|
printf("LAPACKE_dlange / One-norm of A = %lf\n", aNorm);
|
|
printf("LAPACKE_dgecon / RCOND of A = %f\n", rcond);
|
|
exit( 0 );
|
|
} /* End of LAPACKE_dgesv Example */
|
|
|
|
/* Auxiliary routine: printing a matrix */
|
|
void print_matrix( char* desc, lapack_int m, lapack_int n, double* a, lapack_int lda ) {
|
|
lapack_int i, j;
|
|
printf( "\n %s\n", desc );
|
|
for( i = 0; i < m; i++ ) {
|
|
for( j = 0; j < n; j++ ) printf( " %6.2f", a[i*lda+j] );
|
|
printf( "\n" );
|
|
}
|
|
}
|
|
|
|
/* Auxiliary routine: printing a vector of integers */
|
|
void print_int_vector( char* desc, lapack_int n, lapack_int* a ) {
|
|
lapack_int j;
|
|
printf( "\n %s\n", desc );
|
|
for( j = 0; j < n; j++ ) printf( " %6i", a[j] );
|
|
printf( "\n" );
|
|
}
|
|
|
|
|