52 int main(
int argc,
char **argv)
54 const unsigned int n = 5;
56 for (
unsigned int i=0; i<
n; i++) {
57 for (
unsigned int j=0; j<
n; j++)
60 for (
unsigned int j=0; j<
n; j++)
68 std::vector<double>
c(
n), cdx(
n*
n);
71 blas.
GEMV(
Teuchos::NO_TRANS,
n,
n, 1.0, &
a[0],
n, &b[0], 1, 0.0, &
c[0], 1);
72 blas.
GEMM(
Teuchos::NO_TRANS,
Teuchos::NO_TRANS,
n,
n,
n, 1.0, &
a[0],
n, &bdx[0],
n, 0.0, &cdx[0],
n);
78 sacado_fad_blas.
GEMV(
Teuchos::NO_TRANS,
n,
n, 1.0, &
A[0],
n, &
B[0], 1, 0.0, &
C[0], 1);
83 std::cout.setf(std::ios::scientific);
84 std::cout.precision(p);
86 std::cout <<
"BLAS GEMV calculation:" << std::endl;
87 std::cout <<
"a = " << 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) <<
a[i+j*
n];
91 std::cout << std::endl;
93 std::cout <<
"b = " << std::endl;
94 for (
unsigned int i=0; i<
n; i++) {
95 std::cout <<
" " << std::setw(w) << b[i];
97 std::cout << std::endl;
98 std::cout <<
"bdot = " << std::endl;
99 for (
unsigned int i=0; i<
n; i++) {
100 for (
unsigned int j=0; j<
n; j++)
101 std::cout <<
" " << std::setw(w) << bdx[i+j*
n];
102 std::cout << std::endl;
104 std::cout <<
"c = " << std::endl;
105 for (
unsigned int i=0; i<
n; i++) {
106 std::cout <<
" " << std::setw(w) <<
c[i];
108 std::cout << std::endl;
109 std::cout <<
"cdot = " << std::endl;
110 for (
unsigned int i=0; i<
n; i++) {
111 for (
unsigned int j=0; j<
n; j++)
112 std::cout <<
" " << std::setw(w) << cdx[i+j*
n];
113 std::cout << std::endl;
115 std::cout << std::endl << std::endl;
117 std::cout <<
"FAD BLAS GEMV calculation:" << std::endl;
118 std::cout <<
"A.val() (should = a) = " << std::endl;
119 for (
unsigned int i=0; i<
n; i++) {
120 for (
unsigned int j=0; j<
n; j++)
121 std::cout <<
" " << std::setw(w) <<
A[i+j*
n].val();
122 std::cout << std::endl;
124 std::cout <<
"B.val() (should = b) = " << std::endl;
125 for (
unsigned int i=0; i<
n; i++) {
126 std::cout <<
" " << std::setw(w) <<
B[i].val();
128 std::cout << std::endl;
129 std::cout <<
"B.dx() (should = bdot) = " << std::endl;
130 double *Bdx =
B.dx();
131 for (
unsigned int i=0; i<
n; i++) {
132 for (
unsigned int j=0; j<
n; j++)
133 std::cout <<
" " << std::setw(w) << Bdx[i+j*
n];
134 std::cout << std::endl;
136 std::cout <<
"C.val() (should = c) = " << std::endl;
137 for (
unsigned int i=0; i<
n; i++) {
138 std::cout <<
" " << std::setw(w) <<
C[i].val();
140 std::cout << std::endl;
141 std::cout <<
"C.dx() (should = cdot) = " << std::endl;
142 double *Cdx =
C.dx();
143 for (
unsigned int i=0; i<
n; i++) {
144 for (
unsigned int j=0; j<
n; j++)
145 std::cout <<
" " << std::setw(w) << Cdx[i+j*
n];
146 std::cout << std::endl;
149 double tol = 1.0e-14;
151 for (
unsigned int i=0; i<
n; i++) {
154 for (
unsigned int j=0; j<
n; j++) {
160 std::cout <<
"\nExample passed!" << std::endl;
164 std::cout <<
"\nSomething is wrong, example failed!" << std::endl;
int main(int argc, char **argv)
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
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
A class for storing a contiguously allocated array of Fad objects. This is a general definition that ...
expr expr expr fastAccessDx(i)) FAD_UNARYOP_MACRO(exp
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 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.
Sacado::Fad::DVFad< double > FadType
KOKKOS_INLINE_FUNCTION Expr< FAbsOp< Expr< T > > > fabs(const Expr< T > &expr)