63int main(
int argc,
char **argv)
69 double pi = std::atan(1.0)*4.0;
77 const int num_deriv = 2;
78 Kokkos::View<double**,Kokkos::LayoutLeft,Kokkos::HostSpace> v(
"v", 2, num_deriv );
81 Kokkos::deep_copy( v, 0.0 );
95 ViewFadType afad( &v(0,0), &
a, num_deriv, v.stride_1() );
96 ViewFadType bfad( &v(1,0), &b, num_deriv, v.stride_1() );
101 double r = func<double>(
a, b,
c);
108 rfad = func<FadType>(afad, bfad, cfad);
111 double r_ad = rfad.val();
112 double drda_ad = rfad.dx(0);
113 double drdb_ad = rfad.dx(1);
118 std::cout.setf(std::ios::scientific);
119 std::cout.precision(
p);
120 std::cout <<
" r = " << r <<
" (original) == " << std::setw(w) << r_ad
121 <<
" (AD) Error = " << std::setw(w) << r - r_ad << std::endl
122 <<
"dr/da = " << std::setw(w) << drda <<
" (analytic) == "
123 << std::setw(w) << drda_ad <<
" (AD) Error = " << std::setw(w)
124 << drda - drda_ad << std::endl
125 <<
"dr/db = " << std::setw(w) << drdb <<
" (analytic) == "
126 << std::setw(w) << drdb_ad <<
" (AD) Error = " << std::setw(w)
127 << drdb - drdb_ad << std::endl;
129 double tol = 1.0e-14;
130 if (std::fabs(r - r_ad) <
tol &&
131 std::fabs(drda - drda_ad) <
tol &&
132 std::fabs(drdb - drdb_ad) <
tol) {
133 std::cout <<
"\nExample passed!" << std::endl;
137 std::cout <<
"\nSomething is wrong, example failed!" << std::endl;