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_ztptri( char *uplo, char *diag, lapack_int *n );
00055 static void init_ap( lapack_int size, lapack_complex_double *ap );
00056 static int compare_ztptri( lapack_complex_double *ap,
00057 lapack_complex_double *ap_i, lapack_int info,
00058 lapack_int info_i, lapack_int n );
00059
00060 int main(void)
00061 {
00062
00063 char uplo, uplo_i;
00064 char diag, diag_i;
00065 lapack_int n, n_i;
00066 lapack_int info, info_i;
00067 lapack_int i;
00068 int failed;
00069
00070
00071 lapack_complex_double *ap = NULL, *ap_i = NULL;
00072 lapack_complex_double *ap_save = NULL;
00073 lapack_complex_double *ap_r = NULL;
00074
00075
00076 init_scalars_ztptri( &uplo, &diag, &n );
00077 uplo_i = uplo;
00078 diag_i = diag;
00079 n_i = n;
00080
00081
00082 ap = (lapack_complex_double *)
00083 LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(lapack_complex_double) );
00084
00085
00086 ap_i = (lapack_complex_double *)
00087 LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(lapack_complex_double) );
00088
00089
00090 ap_save = (lapack_complex_double *)
00091 LAPACKE_malloc( ((n*(n+1)/2)) * sizeof(lapack_complex_double) );
00092
00093
00094 ap_r = (lapack_complex_double *)
00095 LAPACKE_malloc( n*(n+1)/2 * sizeof(lapack_complex_double) );
00096
00097
00098 init_ap( (n*(n+1)/2), ap );
00099
00100
00101 for( i = 0; i < (n*(n+1)/2); i++ ) {
00102 ap_save[i] = ap[i];
00103 }
00104
00105
00106 ztptri_( &uplo, &diag, &n, ap, &info );
00107
00108
00109
00110 for( i = 0; i < (n*(n+1)/2); i++ ) {
00111 ap_i[i] = ap_save[i];
00112 }
00113 info_i = LAPACKE_ztptri_work( LAPACK_COL_MAJOR, uplo_i, diag_i, n_i, ap_i );
00114
00115 failed = compare_ztptri( ap, ap_i, info, info_i, n );
00116 if( failed == 0 ) {
00117 printf( "PASSED: column-major middle-level interface to ztptri\n" );
00118 } else {
00119 printf( "FAILED: column-major middle-level interface to ztptri\n" );
00120 }
00121
00122
00123
00124 for( i = 0; i < (n*(n+1)/2); i++ ) {
00125 ap_i[i] = ap_save[i];
00126 }
00127 info_i = LAPACKE_ztptri( LAPACK_COL_MAJOR, uplo_i, diag_i, n_i, ap_i );
00128
00129 failed = compare_ztptri( ap, ap_i, info, info_i, n );
00130 if( failed == 0 ) {
00131 printf( "PASSED: column-major high-level interface to ztptri\n" );
00132 } else {
00133 printf( "FAILED: column-major high-level interface to ztptri\n" );
00134 }
00135
00136
00137
00138 for( i = 0; i < (n*(n+1)/2); i++ ) {
00139 ap_i[i] = ap_save[i];
00140 }
00141
00142 LAPACKE_zpp_trans( LAPACK_COL_MAJOR, uplo, n, ap_i, ap_r );
00143 info_i = LAPACKE_ztptri_work( LAPACK_ROW_MAJOR, uplo_i, diag_i, n_i, ap_r );
00144
00145 LAPACKE_zpp_trans( LAPACK_ROW_MAJOR, uplo, n, ap_r, ap_i );
00146
00147 failed = compare_ztptri( ap, ap_i, info, info_i, n );
00148 if( failed == 0 ) {
00149 printf( "PASSED: row-major middle-level interface to ztptri\n" );
00150 } else {
00151 printf( "FAILED: row-major middle-level interface to ztptri\n" );
00152 }
00153
00154
00155
00156 for( i = 0; i < (n*(n+1)/2); i++ ) {
00157 ap_i[i] = ap_save[i];
00158 }
00159
00160
00161 LAPACKE_zpp_trans( LAPACK_COL_MAJOR, uplo, n, ap_i, ap_r );
00162 info_i = LAPACKE_ztptri( LAPACK_ROW_MAJOR, uplo_i, diag_i, n_i, ap_r );
00163
00164 LAPACKE_zpp_trans( LAPACK_ROW_MAJOR, uplo, n, ap_r, ap_i );
00165
00166 failed = compare_ztptri( ap, ap_i, info, info_i, n );
00167 if( failed == 0 ) {
00168 printf( "PASSED: row-major high-level interface to ztptri\n" );
00169 } else {
00170 printf( "FAILED: row-major high-level interface to ztptri\n" );
00171 }
00172
00173
00174 if( ap != NULL ) {
00175 LAPACKE_free( ap );
00176 }
00177 if( ap_i != NULL ) {
00178 LAPACKE_free( ap_i );
00179 }
00180 if( ap_r != NULL ) {
00181 LAPACKE_free( ap_r );
00182 }
00183 if( ap_save != NULL ) {
00184 LAPACKE_free( ap_save );
00185 }
00186
00187 return 0;
00188 }
00189
00190
00191 static void init_scalars_ztptri( char *uplo, char *diag, lapack_int *n )
00192 {
00193 *uplo = 'L';
00194 *diag = 'N';
00195 *n = 4;
00196
00197 return;
00198 }
00199
00200
00201 static void init_ap( lapack_int size, lapack_complex_double *ap ) {
00202 lapack_int i;
00203 for( i = 0; i < size; i++ ) {
00204 ap[i] = lapack_make_complex_double( 0.0, 0.0 );
00205 }
00206 ap[0] = lapack_make_complex_double( 4.78000000000000020e+000,
00207 4.55999999999999960e+000 );
00208 ap[1] = lapack_make_complex_double( 2.00000000000000000e+000,
00209 -2.99999999999999990e-001 );
00210 ap[2] = lapack_make_complex_double( 2.89000000000000010e+000,
00211 -1.34000000000000010e+000 );
00212 ap[3] = lapack_make_complex_double( -1.88999999999999990e+000,
00213 1.14999999999999990e+000 );
00214 ap[4] = lapack_make_complex_double( -4.11000000000000030e+000,
00215 1.25000000000000000e+000 );
00216 ap[5] = lapack_make_complex_double( 2.35999999999999990e+000,
00217 -4.25000000000000000e+000 );
00218 ap[6] = lapack_make_complex_double( 4.00000000000000010e-002,
00219 -3.68999999999999990e+000 );
00220 ap[7] = lapack_make_complex_double( 4.15000000000000040e+000,
00221 8.00000000000000040e-001 );
00222 ap[8] = lapack_make_complex_double( -2.00000000000000000e-002,
00223 4.60000000000000020e-001 );
00224 ap[9] = lapack_make_complex_double( 3.30000000000000020e-001,
00225 -2.60000000000000010e-001 );
00226 }
00227
00228
00229
00230 static int compare_ztptri( lapack_complex_double *ap,
00231 lapack_complex_double *ap_i, lapack_int info,
00232 lapack_int info_i, lapack_int n )
00233 {
00234 lapack_int i;
00235 int failed = 0;
00236 for( i = 0; i < (n*(n+1)/2); i++ ) {
00237 failed += compare_complex_doubles(ap[i],ap_i[i]);
00238 }
00239 failed += (info == info_i) ? 0 : 1;
00240 if( info != 0 || info_i != 0 ) {
00241 printf( "info=%d, info_i=%d\n",(int)info,(int)info_i );
00242 }
00243
00244 return failed;
00245 }