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_cpbtrs( char *uplo, lapack_int *n, lapack_int *kd,
00055 lapack_int *nrhs, lapack_int *ldab,
00056 lapack_int *ldb );
00057 static void init_ab( lapack_int size, lapack_complex_float *ab );
00058 static void init_b( lapack_int size, lapack_complex_float *b );
00059 static int compare_cpbtrs( lapack_complex_float *b, lapack_complex_float *b_i,
00060 lapack_int info, lapack_int info_i, lapack_int ldb,
00061 lapack_int nrhs );
00062
00063 int main(void)
00064 {
00065
00066 char uplo, uplo_i;
00067 lapack_int n, n_i;
00068 lapack_int kd, kd_i;
00069 lapack_int nrhs, nrhs_i;
00070 lapack_int ldab, ldab_i;
00071 lapack_int ldab_r;
00072 lapack_int ldb, ldb_i;
00073 lapack_int ldb_r;
00074 lapack_int info, info_i;
00075 lapack_int i;
00076 int failed;
00077
00078
00079 lapack_complex_float *ab = NULL, *ab_i = NULL;
00080 lapack_complex_float *b = NULL, *b_i = NULL;
00081 lapack_complex_float *b_save = NULL;
00082 lapack_complex_float *ab_r = NULL;
00083 lapack_complex_float *b_r = NULL;
00084
00085
00086 init_scalars_cpbtrs( &uplo, &n, &kd, &nrhs, &ldab, &ldb );
00087 ldab_r = n+2;
00088 ldb_r = nrhs+2;
00089 uplo_i = uplo;
00090 n_i = n;
00091 kd_i = kd;
00092 nrhs_i = nrhs;
00093 ldab_i = ldab;
00094 ldb_i = ldb;
00095
00096
00097 ab = (lapack_complex_float *)
00098 LAPACKE_malloc( ldab*n * sizeof(lapack_complex_float) );
00099 b = (lapack_complex_float *)
00100 LAPACKE_malloc( ldb*nrhs * sizeof(lapack_complex_float) );
00101
00102
00103 ab_i = (lapack_complex_float *)
00104 LAPACKE_malloc( ldab*n * sizeof(lapack_complex_float) );
00105 b_i = (lapack_complex_float *)
00106 LAPACKE_malloc( ldb*nrhs * sizeof(lapack_complex_float) );
00107
00108
00109 b_save = (lapack_complex_float *)
00110 LAPACKE_malloc( ldb*nrhs * sizeof(lapack_complex_float) );
00111
00112
00113 ab_r = (lapack_complex_float *)
00114 LAPACKE_malloc( (kd+1)*(n+2) * sizeof(lapack_complex_float) );
00115 b_r = (lapack_complex_float *)
00116 LAPACKE_malloc( n*(nrhs+2) * sizeof(lapack_complex_float) );
00117
00118
00119 init_ab( ldab*n, ab );
00120 init_b( ldb*nrhs, b );
00121
00122
00123 for( i = 0; i < ldb*nrhs; i++ ) {
00124 b_save[i] = b[i];
00125 }
00126
00127
00128 cpbtrs_( &uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info );
00129
00130
00131
00132 for( i = 0; i < ldab*n; i++ ) {
00133 ab_i[i] = ab[i];
00134 }
00135 for( i = 0; i < ldb*nrhs; i++ ) {
00136 b_i[i] = b_save[i];
00137 }
00138 info_i = LAPACKE_cpbtrs_work( LAPACK_COL_MAJOR, uplo_i, n_i, kd_i, nrhs_i,
00139 ab_i, ldab_i, b_i, ldb_i );
00140
00141 failed = compare_cpbtrs( b, b_i, info, info_i, ldb, nrhs );
00142 if( failed == 0 ) {
00143 printf( "PASSED: column-major middle-level interface to cpbtrs\n" );
00144 } else {
00145 printf( "FAILED: column-major middle-level interface to cpbtrs\n" );
00146 }
00147
00148
00149
00150 for( i = 0; i < ldab*n; i++ ) {
00151 ab_i[i] = ab[i];
00152 }
00153 for( i = 0; i < ldb*nrhs; i++ ) {
00154 b_i[i] = b_save[i];
00155 }
00156 info_i = LAPACKE_cpbtrs( LAPACK_COL_MAJOR, uplo_i, n_i, kd_i, nrhs_i, ab_i,
00157 ldab_i, b_i, ldb_i );
00158
00159 failed = compare_cpbtrs( b, b_i, info, info_i, ldb, nrhs );
00160 if( failed == 0 ) {
00161 printf( "PASSED: column-major high-level interface to cpbtrs\n" );
00162 } else {
00163 printf( "FAILED: column-major high-level interface to cpbtrs\n" );
00164 }
00165
00166
00167
00168 for( i = 0; i < ldab*n; i++ ) {
00169 ab_i[i] = ab[i];
00170 }
00171 for( i = 0; i < ldb*nrhs; i++ ) {
00172 b_i[i] = b_save[i];
00173 }
00174
00175 LAPACKE_cge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 );
00176 LAPACKE_cge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 );
00177 info_i = LAPACKE_cpbtrs_work( LAPACK_ROW_MAJOR, uplo_i, n_i, kd_i, nrhs_i,
00178 ab_r, ldab_r, b_r, ldb_r );
00179
00180 LAPACKE_cge_trans( LAPACK_ROW_MAJOR, n, nrhs, b_r, nrhs+2, b_i, ldb );
00181
00182 failed = compare_cpbtrs( b, b_i, info, info_i, ldb, nrhs );
00183 if( failed == 0 ) {
00184 printf( "PASSED: row-major middle-level interface to cpbtrs\n" );
00185 } else {
00186 printf( "FAILED: row-major middle-level interface to cpbtrs\n" );
00187 }
00188
00189
00190
00191 for( i = 0; i < ldab*n; i++ ) {
00192 ab_i[i] = ab[i];
00193 }
00194 for( i = 0; i < ldb*nrhs; i++ ) {
00195 b_i[i] = b_save[i];
00196 }
00197
00198
00199 LAPACKE_cge_trans( LAPACK_COL_MAJOR, kd+1, n, ab_i, ldab, ab_r, n+2 );
00200 LAPACKE_cge_trans( LAPACK_COL_MAJOR, n, nrhs, b_i, ldb, b_r, nrhs+2 );
00201 info_i = LAPACKE_cpbtrs( LAPACK_ROW_MAJOR, uplo_i, n_i, kd_i, nrhs_i, ab_r,
00202 ldab_r, b_r, ldb_r );
00203
00204 LAPACKE_cge_trans( LAPACK_ROW_MAJOR, n, nrhs, b_r, nrhs+2, b_i, ldb );
00205
00206 failed = compare_cpbtrs( b, b_i, info, info_i, ldb, nrhs );
00207 if( failed == 0 ) {
00208 printf( "PASSED: row-major high-level interface to cpbtrs\n" );
00209 } else {
00210 printf( "FAILED: row-major high-level interface to cpbtrs\n" );
00211 }
00212
00213
00214 if( ab != NULL ) {
00215 LAPACKE_free( ab );
00216 }
00217 if( ab_i != NULL ) {
00218 LAPACKE_free( ab_i );
00219 }
00220 if( ab_r != NULL ) {
00221 LAPACKE_free( ab_r );
00222 }
00223 if( b != NULL ) {
00224 LAPACKE_free( b );
00225 }
00226 if( b_i != NULL ) {
00227 LAPACKE_free( b_i );
00228 }
00229 if( b_r != NULL ) {
00230 LAPACKE_free( b_r );
00231 }
00232 if( b_save != NULL ) {
00233 LAPACKE_free( b_save );
00234 }
00235
00236 return 0;
00237 }
00238
00239
00240 static void init_scalars_cpbtrs( char *uplo, lapack_int *n, lapack_int *kd,
00241 lapack_int *nrhs, lapack_int *ldab,
00242 lapack_int *ldb )
00243 {
00244 *uplo = 'L';
00245 *n = 4;
00246 *kd = 1;
00247 *nrhs = 2;
00248 *ldab = 9;
00249 *ldb = 8;
00250
00251 return;
00252 }
00253
00254
00255 static void init_ab( lapack_int size, lapack_complex_float *ab ) {
00256 lapack_int i;
00257 for( i = 0; i < size; i++ ) {
00258 ab[i] = lapack_make_complex_float( 0.0f, 0.0f );
00259 }
00260 ab[0] = lapack_make_complex_float( 3.064310789e+000, 0.000000000e+000 );
00261 ab[9] = lapack_make_complex_float( 1.116714001e+000, 0.000000000e+000 );
00262 ab[18] = lapack_make_complex_float( 1.606635571e+000, 0.000000000e+000 );
00263 ab[27] = lapack_make_complex_float( 4.289152622e-001, 0.000000000e+000 );
00264 ab[1] = lapack_make_complex_float( 3.524446785e-001, 5.645641685e-001 );
00265 ab[10] = lapack_make_complex_float( -3.581937775e-002, -2.596904933e-001 );
00266 ab[19] = lapack_make_complex_float( -2.053981870e-001, -1.394217849e+000 );
00267 ab[28] = lapack_make_complex_float( 0.000000000e+000, 0.000000000e+000 );
00268 }
00269 static void init_b( lapack_int size, lapack_complex_float *b ) {
00270 lapack_int i;
00271 for( i = 0; i < size; i++ ) {
00272 b[i] = lapack_make_complex_float( 0.0f, 0.0f );
00273 }
00274 b[0] = lapack_make_complex_float( -1.242000008e+001, 6.841999817e+001 );
00275 b[8] = lapack_make_complex_float( 5.429999924e+001, -5.656000137e+001 );
00276 b[1] = lapack_make_complex_float( -9.930000305e+000, 8.799999952e-001 );
00277 b[9] = lapack_make_complex_float( 1.831999969e+001, 4.760000229e+000 );
00278 b[2] = lapack_make_complex_float( -2.729999924e+001, -9.999999776e-003 );
00279 b[10] = lapack_make_complex_float( -4.400000095e+000, 9.970000267e+000 );
00280 b[3] = lapack_make_complex_float( 5.309999943e+000, 2.362999916e+001 );
00281 b[11] = lapack_make_complex_float( 9.430000305e+000, 1.409999967e+000 );
00282 }
00283
00284
00285
00286 static int compare_cpbtrs( lapack_complex_float *b, lapack_complex_float *b_i,
00287 lapack_int info, lapack_int info_i, lapack_int ldb,
00288 lapack_int nrhs )
00289 {
00290 lapack_int i;
00291 int failed = 0;
00292 for( i = 0; i < ldb*nrhs; i++ ) {
00293 failed += compare_complex_floats(b[i],b_i[i]);
00294 }
00295 failed += (info == info_i) ? 0 : 1;
00296 if( info != 0 || info_i != 0 ) {
00297 printf( "info=%d, info_i=%d\n",(int)info,(int)info_i );
00298 }
00299
00300 return failed;
00301 }