48 #ifdef HAVE_EPETRA_TEUCHOS
56 #ifdef HAVE_EPETRA_TEUCHOS
59 std::ostream &out = *fancyOut;
61 std::ostream &out = std::cout;
68 double *residual =
new double[NumVectors];
93 double **App, **Bpp, **Cpp;
99 App =
new double *[NumVectors];
100 Bpp =
new double *[NumVectors];
101 Cpp =
new double *[NumVectors];
102 for (i=0; i<NumVectors; i++) App[i] =
new double[
A.MyLength()+i];
103 for (i=0; i<NumVectors; i++) Bpp[i] =
new double[
B.MyLength()+i];
104 for (i=0; i<NumVectors; i++) Cpp[i] =
new double[
C.MyLength()+i];
110 for (
int strided = 0; strided<2; strided++){
114 char transa =
'N';
if (i>1) transa =
'T';
115 char transb =
'N';
if (i%2!=0) transb =
'T';
116 double alpha = (double) i+1;
117 double beta = (double) (i/2);
123 Ap = &
A; Bp = &
B; Cp = &
C;
127 A.ExtractCopy(App[0]); Ap = &A1;
128 B.ExtractCopy(Bpp[0]); Bp = &
B1;
129 C.ExtractCopy(Cpp[0]); Cp = &C1;
132 localierr = Cp->
Multiply(transa, transb, alpha, *Ap, *Bp, beta);
134 ierr += Cp->
Update(-1.0, C_GEMM, 1.0);
135 ierr += Cp->
Norm2(residual);
137 if (verbose && ierr==0)
139 out <<
"XXXXX Replicated Local Vector GEMM tests";
141 out <<
" (Strided Multivectors)" << endl;
143 out <<
" (Non-Strided Multivectors)" << endl;
144 out <<
" alpha = " << alpha <<
", beta = " << beta <<
", transa = "<<transa
145 <<
", transb = " << transb;
147 if (ierr==0 &&
BadResidual(verbose,residual))
return(-1);
152 for (i=0; i<NumVectors; i++)
181 ierr +=
C.Multiply(transa, transb, alpha,
A,
B, beta);
182 ierr +=
C.Update(-1.0, C_GEMM, 1.0);
183 ierr +=
C.Norm2(residual);
185 if (verbose && ierr==0)
187 out <<
"XXXXX Generalized 2D dot product via GEMM call " << endl;
188 out <<
" alpha = " << alpha <<
", beta = " << beta <<
", transa = "<<transa
189 <<
", transb = " << transb;
210 char transb =
'N';
if (i>0) transb =
'T';
215 ierr +=
C.Multiply(transa, transb, alpha,
A,
B, beta);
216 ierr +=
C.Update(-1.0, C_GEMM, 1.0);
217 ierr +=
C.Norm2(residual);
221 out <<
"XXXXX Generalized 2D vector update via GEMM call " << endl;
222 out <<
" alpha = " << alpha <<
", beta = " << beta <<
", transa = "<<transa
223 <<
", transb = " << transb;
238 double *residual =
new double[NumVectors];
240 #ifdef HAVE_EPETRA_TEUCHOS
243 std::ostream &out = *fancyOut;
245 std::ostream &out = std::cout;
263 double *dotvec_AB =
new double[NumVectors];
264 double *norm1_A =
new double[NumVectors];
265 double *norm2_sqrtA =
new double[NumVectors];
266 double *norminf_A =
new double[NumVectors];
267 double *normw_A =
new double[NumVectors];
268 double *minval_A =
new double[NumVectors];
269 double *maxval_A =
new double[NumVectors];
270 double *meanval_A =
new double[NumVectors];
272 A.SetTracebackMode(1);
280 C_plusB, dotvec_AB, norm1_A, norm2_sqrtA, norminf_A,
281 normw_A, Weights, minval_A, maxval_A, meanval_A);
286 #ifdef HAVE_EPETRA_ARRAY_BOUNDS_CHECK
288 if (verbose) out <<
"XXXXX Testing operator[A.MyLength()] bounds check ";
293 catch (
const int& err_code ) {
294 if (verbose) out <<
"\t Checked OK" << endl;
298 if (verbose) out <<
"XXXXX Testing operator[-1] bounds check ";
303 catch (
const int& err_code ) {
304 if (verbose) out <<
"\t Checked OK" << endl;
309 if (verbose) out <<
"XXXXX Testing alpha * A ";
316 if (err) ierr += err;
322 if (verbose) out <<
"XXXXX Testing C = alpha * A + B ";
329 if (err) ierr += err;
335 if (verbose) out <<
"XXXXX Testing C += B ";
342 if (err) ierr += err;
348 if (verbose) out <<
"XXXXX Testing A.dotProd(B) ";
350 double *dotvec = residual;
352 BLAS.
AXPY(NumVectors,-1.0,dotvec_AB,dotvec);
354 if (err) ierr += err;
360 if (verbose) out <<
"XXXXX Testing norm1_A ";
362 double *norm1 = residual;
364 BLAS.
AXPY(NumVectors,-1.0,norm1_A,norm1);
366 if (err) ierr += err;
372 if (verbose) out <<
"XXXXX Testing norm2_sqrtA ";
374 double *norm2 = residual;
376 BLAS.
AXPY(NumVectors,-1.0,norm2_sqrtA,norm2);
378 if (err) ierr += err;
384 if (verbose) out <<
"XXXXX Testing norminf_A ";
386 double *norminf = residual;
388 BLAS.
AXPY(NumVectors,-1.0,norminf_A,norminf);
390 if (err) ierr += err;
396 if (verbose) out <<
"XXXXX Testing normw_A ";
398 double *normw = residual;
400 BLAS.
AXPY(NumVectors,-1.0,normw_A,normw);
402 if (err) ierr += err;
408 if (verbose) out <<
"XXXXX Testing minval_A ";
410 double *minval = residual;
412 BLAS.
AXPY(NumVectors,-1.0,minval_A,minval);
414 if (err) ierr += err;
420 if (verbose) out <<
"XXXXX Testing maxval_A ";
422 double *maxval = residual;
424 BLAS.
AXPY(NumVectors,-1.0,maxval_A,maxval);
426 if (err) ierr += err;
432 if (verbose) out <<
"XXXXX Testing meanval_A ";
434 double *meanval = residual;
436 BLAS.
AXPY(NumVectors,-1.0,meanval_A,meanval);
438 if (err) ierr += err;
444 if (verbose) out <<
"XXXXX Testing abs_A ";
451 if (err) ierr += err;
460 delete [] norm2_sqrtA;
474 #ifdef HAVE_EPETRA_TEUCHOS
477 std::ostream &out = *fancyOut;
479 std::ostream &out = std::cout;
482 double threshold = 5.0E-6;
486 if (verbose) out << endl <<
" Residual = " <<
Residual[0];
489 if (ierr==0) out <<
"\t Checked OK" << endl;