30 int main(
int argc,
char **argv)
32 const unsigned int n = 5;
34 for (
unsigned int i=0;
i<n;
i++) {
35 for (
unsigned int j=0; j<n; j++)
38 for (
unsigned int j=0; j<n; j++)
46 std::vector<double>
c(n), cdx(n*n);
49 blas.
GEMV(
Teuchos::NO_TRANS, n, n, 1.0, &a[0], n, &b[0], 1, 0.0, &
c[0], 1);
50 blas.
GEMM(
Teuchos::NO_TRANS,
Teuchos::NO_TRANS, n, n, n, 1.0, &a[0], n, &bdx[0], n, 0.0, &cdx[0], n);
56 sacado_fad_blas.
GEMV(
Teuchos::NO_TRANS, n, n, 1.0, &
A[0], n, &
B[0], 1, 0.0, &C[0], 1);
61 std::cout.setf(std::ios::scientific);
62 std::cout.precision(p);
64 std::cout <<
"BLAS GEMV calculation:" << std::endl;
65 std::cout <<
"a = " << std::endl;
66 for (
unsigned int i=0;
i<n;
i++) {
67 for (
unsigned int j=0; j<n; j++)
68 std::cout <<
" " << std::setw(w) << a[
i+j*n];
69 std::cout << std::endl;
71 std::cout <<
"b = " << std::endl;
72 for (
unsigned int i=0;
i<n;
i++) {
73 std::cout <<
" " << std::setw(w) << b[
i];
75 std::cout << std::endl;
76 std::cout <<
"bdot = " << std::endl;
77 for (
unsigned int i=0;
i<n;
i++) {
78 for (
unsigned int j=0; j<n; j++)
79 std::cout <<
" " << std::setw(w) << bdx[
i+j*n];
80 std::cout << std::endl;
82 std::cout <<
"c = " << std::endl;
83 for (
unsigned int i=0;
i<n;
i++) {
84 std::cout <<
" " << std::setw(w) <<
c[
i];
86 std::cout << std::endl;
87 std::cout <<
"cdot = " << std::endl;
88 for (
unsigned int i=0;
i<n;
i++) {
89 for (
unsigned int j=0; j<n; j++)
90 std::cout <<
" " << std::setw(w) << cdx[
i+j*n];
91 std::cout << std::endl;
93 std::cout << std::endl << std::endl;
95 std::cout <<
"FAD BLAS GEMV calculation:" << std::endl;
96 std::cout <<
"A.val() (should = a) = " << std::endl;
97 for (
unsigned int i=0;
i<n;
i++) {
98 for (
unsigned int j=0; j<n; j++)
99 std::cout <<
" " << std::setw(w) <<
A[
i+j*n].val();
100 std::cout << std::endl;
102 std::cout <<
"B.val() (should = b) = " << std::endl;
103 for (
unsigned int i=0;
i<n;
i++) {
104 std::cout <<
" " << std::setw(w) <<
B[
i].val();
106 std::cout << std::endl;
107 std::cout <<
"B.dx() (should = bdot) = " << std::endl;
108 double *Bdx =
B.dx();
109 for (
unsigned int i=0;
i<n;
i++) {
110 for (
unsigned int j=0; j<n; j++)
111 std::cout <<
" " << std::setw(w) << Bdx[
i+j*n];
112 std::cout << std::endl;
114 std::cout <<
"C.val() (should = c) = " << std::endl;
115 for (
unsigned int i=0;
i<n;
i++) {
116 std::cout <<
" " << std::setw(w) << C[
i].val();
118 std::cout << std::endl;
119 std::cout <<
"C.dx() (should = cdot) = " << std::endl;
120 double *Cdx = C.dx();
121 for (
unsigned int i=0;
i<n;
i++) {
122 for (
unsigned int j=0; j<n; j++)
123 std::cout <<
" " << std::setw(w) << Cdx[
i+j*n];
124 std::cout << std::endl;
127 double tol = 1.0e-14;
129 for (
unsigned int i=0;
i<n;
i++) {
132 for (
unsigned int j=0; j<n; j++) {
138 std::cout <<
"\nExample passed!" << std::endl;
142 std::cout <<
"\nSomething is wrong, example failed!" << std::endl;
void GEMV(ETransp trans, const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const A_type *A, const OrdinalType &lda, const x_type *x, const OrdinalType &incx, const beta_type beta, ScalarType *y, const OrdinalType &incy) const
Sacado::Fad::DFad< double > FadType
A class for storing a contiguously allocated array of Fad objects. This is a general definition that ...
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c *expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 c
Forward-mode AD class using dynamic memory allocation and expression templates.
void GEMM(ETransp transa, ETransp transb, const int &m, const int &n, const int &k, const double &alpha, const double *A, const int &lda, const double *B, const int &ldb, const double &beta, double *C, const int &ldc) const
expr expr expr fastAccessDx(i)) FAD_UNARYOP_MACRO(exp
void GEMV(ETransp trans, const int &m, const int &n, const double &alpha, const double *A, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy) const