00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #include <stdio.h>
00050 #include "lapacke.h"
00051 #include "lapacke_utils.h"
00052 #include "test_utils.h"
00053
00054 static void init_scalars_dtptrs( char *uplo, char *trans, char *diag,
00055 lapack_int *n, lapack_int *nrhs,
00056 lapack_int *ldb );
00057 static void init_ap( lapack_int size, double *ap );
00058 static void init_b( lapack_int size, double *b );
00059 static int compare_dtptrs( double *b, double *b_i, lapack_int info,
00060 lapack_int info_i, lapack_int ldb, lapack_int nrhs );
00061
00062 int main(void)
00063 {
00064
00065 char uplo, uplo_i;
00066 char trans, trans_i;
00067 char diag, diag_i;
00068 lapack_int n, n_i;
00069 lapack_int nrhs, nrhs_i;
00070 lapack_int ldb, ldb_i;
00071 lapack_int ldb_r;
00072 lapack_int info, info_i;
00073 lapack_int i;
00074 int failed;
00075
00076
00077 double *ap = NULL, *ap_i = NULL;
00078 double *b = NULL, *b_i = NULL;
00079 double *b_save = NULL;
00080 double *ap_r = NULL;
00081 double *b_r = NULL;
00082
00083
00084 init_scalars_dtptrs( &uplo, &trans, &diag, &n, &nrhs, &ldb );
00085 ldb_r = nrhs+2;
00086 uplo_i = uplo;
00087 trans_i = trans;
00088 diag_i = diag;
00089 n_i = n;
00090 nrhs_i = nrhs;
00091 ldb_i = ldb;
00092
00093
00094 ap = (double *)LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(double) );
00095 b = (double *)LAPACKE_malloc( ldb*nrhs * sizeof(double) );
00096
00097
00098 ap_i = (double *)LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(double) );
00099 b_i = (double *)LAPACKE_malloc( ldb*nrhs * sizeof(double) );
00100
00101
00102 b_save = (double *)LAPACKE_malloc( ldb*nrhs * sizeof(double) );
00103
00104
00105 ap_r = (double *)LAPACKE_malloc( n*(n+1)/2 * sizeof(double) );
00106 b_r = (double *)LAPACKE_malloc( n*(nrhs+2) * sizeof(double) );
00107
00108
00109 init_ap( (n*(n+1)/2), ap );
00110 init_b( ldb*nrhs, b );
00111
00112
00113 for( i = 0; i < ldb*nrhs; i++ ) {
00114 b_save[i] = b[i];
00115 }
00116
00117
00118 dtptrs_( &uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, &info );
00119
00120
00121
00122 for( i = 0; i < (n*(n+1)/2); i++ ) {
00123 ap_i[i] = ap[i];
00124 }
00125 for( i = 0; i < ldb*nrhs; i++ ) {
00126 b_i[i] = b_save[i];
00127 }
00128 info_i = LAPACKE_dtptrs_work( LAPACK_COL_MAJOR, uplo_i, trans_i, diag_i,
00129 n_i, nrhs_i, ap_i, b_i, ldb_i );
00130
00131 failed = compare_dtptrs( b, b_i, info, info_i, ldb, nrhs );
00132 if( failed == 0 ) {
00133 printf( "PASSED: column-major middle-level interface to dtptrs\n" );
00134 } else {
00135 printf( "FAILED: column-major middle-level interface to dtptrs\n" );
00136 }
00137
00138
00139
00140 for( i = 0; i < (n*(n+1)/2); i++ ) {
00141 ap_i[i] = ap[i];
00142 }
00143 for( i = 0; i < ldb*nrhs; i++ ) {
00144 b_i[i] = b_save[i];
00145 }
00146 info_i = LAPACKE_dtptrs( LAPACK_COL_MAJOR, uplo_i, trans_i, diag_i, n_i,
00147 nrhs_i, ap_i, b_i, ldb_i );
00148
00149 failed = compare_dtptrs( b, b_i, info, info_i, ldb, nrhs );
00150 if( failed == 0 ) {
00151 printf( "PASSED: column-major high-level interface to dtptrs\n" );
00152 } else {
00153 printf( "FAILED: column-major high-level interface to dtptrs\n" );
00154 }
00155
00156
00157
00158 for( i = 0; i < (n*(n+1)/2); i++ ) {
00159 ap_i[i] = ap[i];
00160 }
00161 for( i = 0; i < ldb*nrhs; i++ ) {
00162 b_i[i] = b_save[i];
00163 }
00164
00165 LAPACKE_dpp_trans( LAPACK_COL_MAJOR, uplo, n, ap_i, ap_r );
00166 LAPACKE_dge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 );
00167 info_i = LAPACKE_dtptrs_work( LAPACK_ROW_MAJOR, uplo_i, trans_i, diag_i,
00168 n_i, nrhs_i, ap_r, b_r, ldb_r );
00169
00170 LAPACKE_dge_trans( LAPACK_ROW_MAJOR, n, nrhs, b_r, nrhs+2, b_i, ldb );
00171
00172 failed = compare_dtptrs( b, b_i, info, info_i, ldb, nrhs );
00173 if( failed == 0 ) {
00174 printf( "PASSED: row-major middle-level interface to dtptrs\n" );
00175 } else {
00176 printf( "FAILED: row-major middle-level interface to dtptrs\n" );
00177 }
00178
00179
00180
00181 for( i = 0; i < (n*(n+1)/2); i++ ) {
00182 ap_i[i] = ap[i];
00183 }
00184 for( i = 0; i < ldb*nrhs; i++ ) {
00185 b_i[i] = b_save[i];
00186 }
00187
00188
00189 LAPACKE_dpp_trans( LAPACK_COL_MAJOR, uplo, n, ap_i, ap_r );
00190 LAPACKE_dge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 );
00191 info_i = LAPACKE_dtptrs( LAPACK_ROW_MAJOR, uplo_i, trans_i, diag_i, n_i,
00192 nrhs_i, ap_r, b_r, ldb_r );
00193
00194 LAPACKE_dge_trans( LAPACK_ROW_MAJOR, n, nrhs, b_r, nrhs+2, b_i, ldb );
00195
00196 failed = compare_dtptrs( b, b_i, info, info_i, ldb, nrhs );
00197 if( failed == 0 ) {
00198 printf( "PASSED: row-major high-level interface to dtptrs\n" );
00199 } else {
00200 printf( "FAILED: row-major high-level interface to dtptrs\n" );
00201 }
00202
00203
00204 if( ap != NULL ) {
00205 LAPACKE_free( ap );
00206 }
00207 if( ap_i != NULL ) {
00208 LAPACKE_free( ap_i );
00209 }
00210 if( ap_r != NULL ) {
00211 LAPACKE_free( ap_r );
00212 }
00213 if( b != NULL ) {
00214 LAPACKE_free( b );
00215 }
00216 if( b_i != NULL ) {
00217 LAPACKE_free( b_i );
00218 }
00219 if( b_r != NULL ) {
00220 LAPACKE_free( b_r );
00221 }
00222 if( b_save != NULL ) {
00223 LAPACKE_free( b_save );
00224 }
00225
00226 return 0;
00227 }
00228
00229
00230 static void init_scalars_dtptrs( char *uplo, char *trans, char *diag,
00231 lapack_int *n, lapack_int *nrhs,
00232 lapack_int *ldb )
00233 {
00234 *uplo = 'L';
00235 *trans = 'N';
00236 *diag = 'N';
00237 *n = 4;
00238 *nrhs = 2;
00239 *ldb = 8;
00240
00241 return;
00242 }
00243
00244
00245 static void init_ap( lapack_int size, double *ap ) {
00246 lapack_int i;
00247 for( i = 0; i < size; i++ ) {
00248 ap[i] = 0;
00249 }
00250 ap[0] = 4.29999999999999980e+000;
00251 ap[1] = -3.96000000000000000e+000;
00252 ap[2] = 4.00000000000000020e-001;
00253 ap[3] = -2.70000000000000020e-001;
00254 ap[4] = -4.87000000000000010e+000;
00255 ap[5] = 3.10000000000000000e-001;
00256 ap[6] = 7.00000000000000070e-002;
00257 ap[7] = -8.01999999999999960e+000;
00258 ap[8] = -5.95000000000000020e+000;
00259 ap[9] = 1.20000000000000000e-001;
00260 }
00261 static void init_b( lapack_int size, double *b ) {
00262 lapack_int i;
00263 for( i = 0; i < size; i++ ) {
00264 b[i] = 0;
00265 }
00266 b[0] = -1.29000000000000000e+001;
00267 b[8] = -2.15000000000000000e+001;
00268 b[1] = 1.67500000000000000e+001;
00269 b[9] = 1.49300000000000000e+001;
00270 b[2] = -1.75500000000000010e+001;
00271 b[10] = 6.33000000000000010e+000;
00272 b[3] = -1.10399999999999990e+001;
00273 b[11] = 8.08999999999999990e+000;
00274 }
00275
00276
00277
00278 static int compare_dtptrs( double *b, double *b_i, lapack_int info,
00279 lapack_int info_i, lapack_int ldb, lapack_int nrhs )
00280 {
00281 lapack_int i;
00282 int failed = 0;
00283 for( i = 0; i < ldb*nrhs; i++ ) {
00284 failed += compare_doubles(b[i],b_i[i]);
00285 }
00286 failed += (info == info_i) ? 0 : 1;
00287 if( info != 0 || info_i != 0 ) {
00288 printf( "info=%d, info_i=%d\n",(int)info,(int)info_i );
00289 }
00290
00291 return failed;
00292 }